meta-edc 0.3.39__py3-none-any.whl → 1.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. meta_ae/action_items.py +38 -27
  2. meta_ae/admin/__init__.py +11 -0
  3. meta_ae/admin/ae_initial_admin.py +5 -2
  4. meta_ae/admin/ae_susar_admin.py +1 -1
  5. meta_ae/admin/death_report_admin.py +1 -1
  6. meta_ae/admin/modeladmin_mixins.py +14 -15
  7. meta_ae/baker_recipes.py +4 -6
  8. meta_ae/choices.py +1 -1
  9. meta_ae/forms/__init__.py +13 -0
  10. meta_ae/forms/death_report_form.py +1 -1
  11. meta_ae/forms/modelform_mixins.py +2 -2
  12. meta_ae/list_data.py +1 -1
  13. meta_ae/migrations/0001_initial.py +27 -27
  14. meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
  15. meta_ae/migrations/0017_auto_20221130_2257.py +1 -1
  16. meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
  17. meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
  18. meta_ae/model_mixins/__init__.py +2 -0
  19. meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
  20. meta_ae/model_mixins/death_report_model_mixin.py +3 -3
  21. meta_ae/models/__init__.py +13 -0
  22. meta_ae/models/hospitalization.py +3 -3
  23. meta_ae/pdf_reports/__init__.py +2 -0
  24. meta_ae/templatetags/meta_ae_extras.py +4 -6
  25. meta_analytics/.DS_Store +0 -0
  26. meta_analytics/README.rst +1 -2
  27. meta_analytics/dataframes/__init__.py +27 -0
  28. meta_analytics/dataframes/constants.py +5 -2
  29. meta_analytics/dataframes/get_eos_df.py +16 -4
  30. meta_analytics/dataframes/get_glucose_df.py +166 -0
  31. meta_analytics/dataframes/get_glucose_fbg_df.py +26 -0
  32. meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +21 -0
  33. meta_analytics/dataframes/get_last_imp_visits_df.py +12 -10
  34. meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
  35. meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +125 -124
  36. meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +111 -235
  37. meta_analytics/dataframes/screening/__init__.py +2 -0
  38. meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
  39. meta_analytics/dataframes/screening/get_screening_df.py +9 -15
  40. meta_analytics/dataframes/utils.py +21 -12
  41. meta_analytics/get_tables.py +1 -2
  42. meta_analytics/tables/__init__.py +2 -0
  43. meta_analytics/tables/enrolled/glucose.py +2 -1
  44. meta_analytics/utils.py +81 -0
  45. meta_auth/auths.py +1 -1
  46. meta_consent/action_items.py +22 -3
  47. meta_consent/admin/__init__.py +7 -0
  48. meta_consent/admin/actions/__init__.py +2 -0
  49. meta_consent/admin/actions/create_missing_prescriptions.py +2 -2
  50. meta_consent/admin/list_filters.py +22 -0
  51. meta_consent/admin/modeladmin_mixins.py +4 -5
  52. meta_consent/admin/subject_consent_v1_ext_admin.py +93 -0
  53. meta_consent/baker_recipes.py +7 -7
  54. meta_consent/consents.py +15 -2
  55. meta_consent/constants.py +1 -0
  56. meta_consent/form_validators/__init__.py +2 -0
  57. meta_consent/forms/__init__.py +8 -0
  58. meta_consent/forms/subject_consent_v1_ext_form.py +47 -0
  59. meta_consent/forms/subject_reconsent_form.py +4 -4
  60. meta_consent/management/commands/create_missing_prescriptions.py +5 -3
  61. meta_consent/migrations/0001_initial.py +9 -9
  62. meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
  63. meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +535 -0
  64. meta_consent/migrations/0027_auto_20250111_0344.py +30 -0
  65. meta_consent/migrations/0028_historicalsubjectconsentv1ext_assessment_score_and_more.py +162 -0
  66. meta_consent/migrations/0029_alter_historicalsubjectconsentv1ext_agrees_to_extension_and_more.py +33 -0
  67. meta_consent/migrations/0030_auto_20250120_2114.py +40 -0
  68. meta_consent/migrations/0031_alter_historicalsubjectconsent_guardian_name_and_more.py +124 -0
  69. meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
  70. meta_consent/migrations/0033_historicalsubjectconsentspfq_subjectconsentspfq.py +615 -0
  71. meta_consent/migrations/0034_remove_subjectconsentspfq_site_and_more.py +23 -0
  72. meta_consent/migrations/0035_alter_historicalsubjectconsent_consent_definition_name_and_more.py +43 -0
  73. meta_consent/models/__init__.py +10 -0
  74. meta_consent/models/model_mixins.py +1 -2
  75. meta_consent/models/signals.py +25 -11
  76. meta_consent/models/subject_consent.py +2 -2
  77. meta_consent/models/subject_consent_v1.py +0 -1
  78. meta_consent/models/subject_consent_v1_ext.py +34 -0
  79. meta_consent/models/subject_reconsent.py +4 -4
  80. meta_dashboard/navbars.py +2 -6
  81. meta_dashboard/patterns.py +1 -1
  82. meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/eligibility_button.html +1 -1
  83. meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/screening_button.html +1 -1
  84. meta_dashboard/templates/meta_dashboard/subject/dashboard/sidebar.html +24 -0
  85. meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/top_bar.html +1 -1
  86. meta_dashboard/templates/meta_dashboard/subject/dashboard.html +14 -0
  87. meta_dashboard/templatetags/meta_dashboard_extras.py +9 -14
  88. meta_dashboard/urls.py +5 -5
  89. meta_dashboard/view_utils/__init__.py +13 -0
  90. meta_dashboard/view_utils/subject_screening_button.py +13 -20
  91. meta_dashboard/views/__init__.py +8 -0
  92. meta_dashboard/views/ae/__init__.py +2 -0
  93. meta_dashboard/views/ae/ae_listboard_view.py +1 -1
  94. meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
  95. meta_dashboard/views/screening/__init__.py +2 -0
  96. meta_dashboard/views/screening/listboard_view.py +2 -3
  97. meta_dashboard/views/subject/__init__.py +2 -0
  98. meta_dashboard/views/subject/dashboard/__init__.py +2 -0
  99. meta_dashboard/views/subject/dashboard/dashboard_view.py +19 -8
  100. meta_dashboard/views/subject/listboard/__init__.py +2 -0
  101. meta_dashboard/views/subject/listboard/listboard_view.py +2 -3
  102. meta_edc/__init__.py +5 -9
  103. meta_edc/admin.py +3 -4
  104. meta_edc/celery.py +2 -2
  105. meta_edc/celery_live.py +19 -0
  106. meta_edc/celery_uat.py +25 -0
  107. meta_edc/management/commands/update_forms_reference.py +16 -14
  108. meta_edc/meta_version.py +2 -2
  109. meta_edc/navbars.py +7 -5
  110. meta_edc/settings/debug.py +13 -4
  111. meta_edc/settings/defaults.py +55 -18
  112. meta_edc/settings/live.py +4 -1
  113. meta_edc/settings/logging.py +9 -4
  114. meta_edc/settings/minimal.py +4 -5
  115. meta_edc/settings/uat.py +3 -1
  116. meta_edc/templates/meta_edc/{bootstrap3/base.html → base.html} +1 -1
  117. meta_edc/templates/meta_edc/{bootstrap3/home.html → home.html} +2 -2
  118. meta_edc/urls.py +3 -1
  119. meta_edc/utils.py +3 -1
  120. meta_edc/views/__init__.py +2 -0
  121. meta_edc/views/home_view.py +1 -2
  122. meta_edc-1.4.0.dist-info/METADATA +174 -0
  123. {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info}/RECORD +578 -586
  124. meta_edc-1.4.0.dist-info/WHEEL +4 -0
  125. meta_labs/list_data.py +2 -2
  126. meta_labs/reportables.py +80 -11
  127. meta_lists/list_data.py +13 -4
  128. meta_lists/migrations/0008_auto_20200528_1517.py +2 -2
  129. meta_lists/migrations/0019_auto_20250128_0143.py +48 -0
  130. meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
  131. meta_pharmacy/admin/__init__.py +5 -0
  132. meta_pharmacy/admin/rx_admin.py +1 -0
  133. meta_pharmacy/admin/substitutions_admin.py +3 -3
  134. meta_pharmacy/constants.py +1 -1
  135. meta_pharmacy/forms/__init__.py +2 -0
  136. meta_pharmacy/forms/rx_form.py +0 -1
  137. meta_pharmacy/forms/substitutions_form.py +6 -4
  138. meta_pharmacy/labels/__init__.py +5 -2
  139. meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +4 -1
  140. meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
  141. meta_pharmacy/labels/label_data.py +1 -2
  142. meta_pharmacy/labels/print_sheets.py +4 -6
  143. meta_pharmacy/management/commands/update_initial_pharmacy_data.py +4 -3
  144. meta_pharmacy/migrations/0002_initial.py +7 -20
  145. meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
  146. meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
  147. meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
  148. meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
  149. meta_pharmacy/models/__init__.py +7 -0
  150. meta_pharmacy/models/label_data.py +4 -5
  151. meta_pharmacy/models/rx_label.py +0 -1
  152. meta_pharmacy/models/substitutions.py +4 -4
  153. meta_pharmacy/prepare_meta_pharmacy.py +1 -1
  154. meta_pharmacy/utils/__init__.py +2 -0
  155. meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
  156. meta_prn/action_items.py +44 -45
  157. meta_prn/admin/__init__.py +16 -0
  158. meta_prn/admin/dm_referral_admin.py +2 -1
  159. meta_prn/admin/end_of_study_admin.py +26 -15
  160. meta_prn/admin/loss_to_followup_admin.py +3 -2
  161. meta_prn/admin/off_study_medication_admin.py +5 -6
  162. meta_prn/admin/offschedule_admin.py +12 -11
  163. meta_prn/admin/offschedule_dm_referral_admin.py +11 -10
  164. meta_prn/admin/offschedule_postnatal_admin.py +15 -7
  165. meta_prn/admin/offschedule_pregnancy_admin.py +18 -9
  166. meta_prn/admin/onschedule_admin.py +7 -8
  167. meta_prn/admin/onschedule_dm_referral_admin.py +11 -12
  168. meta_prn/admin/pregnancy_notification_admin.py +5 -6
  169. meta_prn/admin/protocol_incident_admin.py +1 -1
  170. meta_prn/admin/subject_transfer_admin.py +1 -1
  171. meta_prn/baker_recipes.py +10 -10
  172. meta_prn/choices.py +11 -7
  173. meta_prn/constants.py +1 -0
  174. meta_prn/form_validators/__init__.py +5 -0
  175. meta_prn/form_validators/end_of_study.py +65 -20
  176. meta_prn/form_validators/protocol_incident.py +1 -1
  177. meta_prn/forms/__init__.py +13 -0
  178. meta_prn/forms/dm_referral_form.py +2 -8
  179. meta_prn/forms/end_of_study_form.py +1 -1
  180. meta_prn/forms/loss_to_followup_form.py +1 -1
  181. meta_prn/forms/off_study_medication_form.py +2 -2
  182. meta_prn/forms/offschedule_form.py +25 -0
  183. meta_prn/forms/pregnancy_notification_form.py +15 -17
  184. meta_prn/list_data.py +3 -3
  185. meta_prn/migrations/0001_initial.py +25 -25
  186. meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
  187. meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
  188. meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
  189. meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
  190. meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
  191. meta_prn/migrations/0034_auto_20220630_1110.py +1 -1
  192. meta_prn/migrations/0035_auto_20220630_1140.py +1 -1
  193. meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
  194. meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
  195. meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
  196. meta_prn/migrations/0060_alter_onschedule_managers_and_more.py +55 -0
  197. meta_prn/migrations/0061_auto_20250115_2025.py +56 -0
  198. meta_prn/migrations/0062_alter_endofstudy_offstudy_reason_and_more.py +72 -0
  199. meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py +37 -0
  200. meta_prn/migrations/0064_auto_20250602_2143.py +18 -0
  201. meta_prn/migrations/0065_alter_historicaloffstudymedication_subject_identifier_and_more.py +23 -0
  202. meta_prn/migrations/0066_alter_historicallosstofollowup_subject_identifier_and_more.py +23 -0
  203. meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
  204. meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
  205. meta_prn/migrations/0069_alter_historicaloffstudymedication_singleton_field_and_more.py +37 -0
  206. meta_prn/models/__init__.py +20 -0
  207. meta_prn/models/dm_referral.py +2 -2
  208. meta_prn/models/end_of_study.py +28 -23
  209. meta_prn/models/loss_to_followup.py +8 -10
  210. meta_prn/models/off_study_medication.py +7 -4
  211. meta_prn/models/offschedule.py +4 -4
  212. meta_prn/models/pregnancy_notification.py +3 -5
  213. meta_prn/models/protocol_incident.py +5 -2
  214. meta_prn/models/signals.py +16 -14
  215. meta_prn/models/subject_transfer.py +7 -0
  216. meta_prn/templates/meta_prn/eos/additional_instructions.html +3 -0
  217. meta_prn/templates/meta_prn/offschedule/additional_instructions.html +2 -0
  218. meta_rando/migrations/0001_initial.py +5 -5
  219. meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
  220. meta_rando/migrations/0007_spfqlist.py +197 -0
  221. meta_rando/migrations/0008_delete_spfqlist.py +16 -0
  222. meta_rando/models/__init__.py +1 -0
  223. meta_rando/{models.py → models/randomization_list.py} +3 -3
  224. meta_rando/randomizers.py +2 -2
  225. meta_reports/__init__.py +2 -0
  226. meta_reports/admin/__init__.py +16 -0
  227. meta_reports/admin/dbviews/__init__.py +13 -0
  228. meta_reports/admin/dbviews/glucose_summary_admin.py +7 -7
  229. meta_reports/admin/dbviews/imp_substitutions_admin.py +14 -13
  230. meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
  231. meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
  232. meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +7 -7
  233. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
  234. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
  235. meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
  236. meta_reports/admin/dbviews/on_study_missing_values_admin/unmanaged_model_admin.py +0 -1
  237. meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +9 -9
  238. meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
  239. meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
  240. meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
  241. meta_reports/admin/endpoints_admin.py +1 -1
  242. meta_reports/admin/endpoints_all_admin.py +0 -1
  243. meta_reports/admin/last_imp_refill_admin.py +33 -36
  244. meta_reports/admin/list_filters.py +3 -3
  245. meta_reports/admin/modeladmin_mixins.py +10 -17
  246. meta_reports/death_report.py +2 -2
  247. meta_reports/forms/__init__.py +2 -0
  248. meta_reports/forms/missing_ogtt_note_form.py +3 -4
  249. meta_reports/management/commands/generate_endpoints.py +5 -4
  250. meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
  251. meta_reports/migrations/0054_auto_20250422_2003.py +81 -0
  252. meta_reports/migrations/0055_alter_glucosesummary_table.py +17 -0
  253. meta_reports/migrations/0056_auto_20250422_2214.py +54 -0
  254. meta_reports/migrations/0057_auto_20250422_2224.py +54 -0
  255. meta_reports/migrations/0058_auto_20250422_2232.py +54 -0
  256. meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
  257. meta_reports/migrations/0060_auto_20250926_0242.py +366 -0
  258. meta_reports/migrations/0061_auto_20251004_0043.py +21 -0
  259. meta_reports/migrations/0062_auto_20251004_0106.py +21 -0
  260. meta_reports/models/__init__.py +17 -0
  261. meta_reports/models/dbviews/__init__.py +14 -0
  262. meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
  263. meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +15 -3
  264. meta_reports/models/dbviews/glucose_summary/view_definition.py +8 -5
  265. meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
  266. meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +1 -2
  267. meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
  268. meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
  269. meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +2 -2
  270. meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
  271. meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
  272. meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
  273. meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py +0 -1
  274. meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
  275. meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +19 -1
  276. meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +0 -1
  277. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
  278. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +0 -1
  279. meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
  280. meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +0 -1
  281. meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
  282. meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +0 -1
  283. meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
  284. meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +0 -1
  285. meta_reports/models/endpoints.py +8 -4
  286. meta_reports/models/last_imp_refill.py +2 -3
  287. meta_reports/pdf_report.py +2 -2
  288. meta_reports/tasks.py +4 -3
  289. meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -1
  290. meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +1 -1
  291. meta_reports/templates/meta_reports/endpoints_change_list_note.html +1 -1
  292. meta_reports/templates/meta_reports/last_imp_refill/changelist_note.html +13 -0
  293. meta_screening/admin/__init__.py +8 -0
  294. meta_screening/admin/fieldsets.py +13 -15
  295. meta_screening/admin/list_filters.py +7 -5
  296. meta_screening/admin/screening_part_one_admin.py +1 -3
  297. meta_screening/admin/screening_part_three_admin.py +2 -3
  298. meta_screening/admin/screening_part_two_admin.py +7 -10
  299. meta_screening/admin/subject_refusal_admin.py +5 -3
  300. meta_screening/admin/subject_screening_admin.py +21 -10
  301. meta_screening/baker_recipes.py +18 -10
  302. meta_screening/calculators.py +1 -1
  303. meta_screening/choices.py +1 -1
  304. meta_screening/constants.py +1 -1
  305. meta_screening/eligibility/__init__.py +9 -0
  306. meta_screening/eligibility/eligibility.py +21 -14
  307. meta_screening/eligibility/eligibility_part_one.py +1 -1
  308. meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
  309. meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +68 -49
  310. meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +14 -15
  311. meta_screening/eligibility/eligibility_part_two.py +1 -1
  312. meta_screening/form_validators/__init__.py +8 -0
  313. meta_screening/form_validators/screening_part_one.py +1 -1
  314. meta_screening/form_validators/screening_part_three.py +6 -2
  315. meta_screening/form_validators/screening_part_two.py +1 -1
  316. meta_screening/form_validators/subject_refusal.py +1 -1
  317. meta_screening/forms/__init__.py +20 -0
  318. meta_screening/forms/field_lists.py +16 -18
  319. meta_screening/forms/screening_part_one_form.py +2 -2
  320. meta_screening/forms/screening_part_three_form.py +5 -3
  321. meta_screening/forms/screening_part_two_form.py +1 -5
  322. meta_screening/forms/subject_refusal_form.py +0 -4
  323. meta_screening/forms/subject_screening_form.py +0 -4
  324. meta_screening/migrations/0001_initial.py +15 -15
  325. meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
  326. meta_screening/migrations/0012_auto_20191107_0427.py +1 -1
  327. meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
  328. meta_screening/model_mixins/__init__.py +8 -0
  329. meta_screening/model_mixins/calculated_model_mixin.py +2 -2
  330. meta_screening/model_mixins/creatinine_fields_model_mixin.py +1 -1
  331. meta_screening/model_mixins/eligibility_model_mixin.py +6 -4
  332. meta_screening/model_mixins/part_one_fields_model_mixin.py +16 -19
  333. meta_screening/model_mixins/part_three_fields_model_mixin.py +6 -7
  334. meta_screening/model_mixins/part_two_fields_model_mixin.py +19 -17
  335. meta_screening/models/__init__.py +9 -0
  336. meta_screening/models/icp_referral.py +5 -5
  337. meta_screening/models/proxy_models.py +1 -1
  338. meta_screening/models/signals.py +10 -11
  339. meta_screening/models/subject_refusal.py +1 -1
  340. meta_screening/models/subject_screening.py +2 -4
  341. meta_subject/action_items.py +18 -14
  342. meta_subject/admin/__init__.py +42 -0
  343. meta_subject/admin/birth_outcome_admin.py +7 -9
  344. meta_subject/admin/blood_results/__init__.py +9 -0
  345. meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
  346. meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
  347. meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
  348. meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
  349. meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
  350. meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
  351. meta_subject/admin/complications_glycemia_admin.py +1 -1
  352. meta_subject/admin/delivery_admin.py +8 -11
  353. meta_subject/admin/diabetes/__init__.py +2 -0
  354. meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
  355. meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
  356. meta_subject/admin/egfr_drop_notification_admin.py +1 -1
  357. meta_subject/admin/fields.py +5 -5
  358. meta_subject/admin/fieldsets.py +5 -5
  359. meta_subject/admin/followup_examination_admin.py +11 -9
  360. meta_subject/admin/followup_vitals_admin.py +31 -6
  361. meta_subject/admin/glucose_admin.py +4 -8
  362. meta_subject/admin/glucose_fbg_admin.py +18 -11
  363. meta_subject/admin/health_economics/__init__.py +2 -0
  364. meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
  365. meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
  366. meta_subject/admin/hepatitis_test_admin.py +1 -1
  367. meta_subject/admin/hiv_exit_review_admin.py +55 -0
  368. meta_subject/admin/list_filters.py +5 -5
  369. meta_subject/admin/mnsi_admin.py +7 -5
  370. meta_subject/admin/next_appointment_admin.py +19 -0
  371. meta_subject/admin/other_arv_regimens_admin.py +3 -3
  372. meta_subject/admin/patient_history_admin.py +4 -4
  373. meta_subject/admin/physical_exam_admin.py +1 -1
  374. meta_subject/admin/pregnancy_update_admin.py +1 -1
  375. meta_subject/admin/study_medication_admin.py +8 -15
  376. meta_subject/admin/subject_requisition_admin.py +2 -2
  377. meta_subject/admin/subject_visit_admin.py +1 -1
  378. meta_subject/admin/subject_visit_missed_admin.py +1 -1
  379. meta_subject/admin/urine_dipstick_test_admin.py +1 -1
  380. meta_subject/admin/urine_pregnancy_admin.py +1 -1
  381. meta_subject/baker_recipes.py +15 -15
  382. meta_subject/choices.py +4 -3
  383. meta_subject/form_validators/__init__.py +15 -0
  384. meta_subject/form_validators/delivery_form_validator.py +3 -3
  385. meta_subject/form_validators/dm_endpoint_form_validator.py +3 -1
  386. meta_subject/form_validators/dm_followup_form_validator.py +8 -7
  387. meta_subject/form_validators/egfr_drop_notification_form_validator.py +1 -1
  388. meta_subject/form_validators/followup_examination_form_validator.py +1 -1
  389. meta_subject/form_validators/glucose_fbg_form_validator.py +76 -0
  390. meta_subject/form_validators/glucose_form_validator.py +10 -67
  391. meta_subject/form_validators/hiv_exit_review_form_validator.py +18 -0
  392. meta_subject/form_validators/mixins.py +95 -0
  393. meta_subject/forms/__init__.py +44 -0
  394. meta_subject/forms/blood_results/__init__.py +9 -0
  395. meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -1
  396. meta_subject/forms/blood_results/blood_results_rft_form.py +60 -4
  397. meta_subject/forms/delivery_form.py +2 -0
  398. meta_subject/forms/diabetes/__init__.py +2 -0
  399. meta_subject/forms/diabetes/dm_followup_form.py +2 -2
  400. meta_subject/forms/followup_vitals_form.py +27 -1
  401. meta_subject/forms/glucose_fbg_form.py +1 -46
  402. meta_subject/forms/health_economics/__init__.py +2 -0
  403. meta_subject/forms/hepatitis_test_form.py +1 -1
  404. meta_subject/forms/hiv_exit_review_form.py +13 -0
  405. meta_subject/forms/mixins.py +1 -1
  406. meta_subject/forms/next_appointment_form.py +36 -0
  407. meta_subject/forms/other_arv_regimens_form.py +1 -1
  408. meta_subject/forms/patient_history_form.py +1 -1
  409. meta_subject/forms/physical_exam_form.py +1 -1
  410. meta_subject/forms/pregnancy_update_form.py +1 -1
  411. meta_subject/forms/slider_widget.py +1 -1
  412. meta_subject/forms/study_medication_form.py +18 -12
  413. meta_subject/forms/subject_requisition_form.py +1 -1
  414. meta_subject/forms/subject_visit_missed_form.py +1 -1
  415. meta_subject/forms/urine_dipstick_test_form.py +1 -1
  416. meta_subject/forms/urine_pregnancy_form.py +1 -1
  417. meta_subject/management/commands/create_missing_refills.py +3 -3
  418. meta_subject/management/commands/create_missing_rx.py +2 -2
  419. meta_subject/management/commands/missed.py +20 -23
  420. meta_subject/metadata_rules/__init__.py +2 -0
  421. meta_subject/metadata_rules/metadata_rules.py +14 -0
  422. meta_subject/metadata_rules/predicates.py +44 -25
  423. meta_subject/migrations/0001_initial.py +61 -61
  424. meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
  425. meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
  426. meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
  427. meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
  428. meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
  429. meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
  430. meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
  431. meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
  432. meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
  433. meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
  434. meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
  435. meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
  436. meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
  437. meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
  438. meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
  439. meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
  440. meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
  441. meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
  442. meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
  443. meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
  444. meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
  445. meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
  446. meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
  447. meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
  448. meta_subject/migrations/0107_auto_20220415_0043.py +1 -1
  449. meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
  450. meta_subject/migrations/0128_auto_20220720_0055.py +1 -1
  451. meta_subject/migrations/0131_auto_20220722_0411.py +1 -1
  452. meta_subject/migrations/0135_auto_20220722_2212.py +2 -1
  453. meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
  454. meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
  455. meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
  456. meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
  457. meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
  458. meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
  459. meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
  460. meta_subject/migrations/0199_auto_20240516_0247.py +1 -1
  461. meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
  462. meta_subject/migrations/0212_auto_20240827_2222.py +1 -1
  463. meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +553 -0
  464. meta_subject/migrations/0217_alter_historicalnextappointment_appt_datetime_and_more.py +42 -0
  465. meta_subject/migrations/0218_alter_historicalnextappointment_appt_date_and_more.py +53 -0
  466. meta_subject/migrations/0219_remove_historicalnextappointment_allow_create_interim_and_more.py +92 -0
  467. meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +825 -0
  468. meta_subject/migrations/0221_auto_20250402_1913.py +42 -0
  469. meta_subject/migrations/0222_alter_historicalstudymedication_stock_codes_and_more.py +46 -0
  470. meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py +83 -0
  471. meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py +153 -0
  472. meta_subject/migrations/0225_followupvitals_waist_circumference_and_more.py +46 -0
  473. meta_subject/migrations/0226_followupvitals_waist_circumference_comment_and_more.py +97 -0
  474. meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
  475. meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +2518 -0
  476. meta_subject/migrations/0229_alter_glucosefbg_consent_model_and_more.py +1918 -0
  477. meta_subject/migrations/0230_alter_historicaldelivery_action_identifier_and_more.py +1733 -0
  478. meta_subject/migrations/0231_alter_historicalmedicationadherence_consent_model_and_more.py +2054 -0
  479. meta_subject/migrations/0232_alter_patienthistory_concomitant_conditions_and_more.py +1170 -0
  480. meta_subject/migrations/0233_historicalspfq_spfq.py +1066 -0
  481. meta_subject/migrations/0234_remove_spfq_site_remove_spfq_subject_visit_and_more.py +27 -0
  482. meta_subject/migrations/0235_glucosefbg_endpoint_today_and_more.py +606 -0
  483. meta_subject/migrations/0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more.py +58 -0
  484. meta_subject/migrations/0237_historicalhivexitreview_singleton_field_and_more.py +68 -0
  485. meta_subject/migrations/0238_historicalhivexitreview_available_and_more.py +88 -0
  486. meta_subject/model_mixins/__init__.py +10 -0
  487. meta_subject/model_mixins/arv_history_model_mixin.py +3 -44
  488. meta_subject/model_mixins/arv_review_model_mixin.py +53 -0
  489. meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
  490. meta_subject/model_mixins/vitals_fields_model_mixin.py +33 -0
  491. meta_subject/models/__init__.py +52 -0
  492. meta_subject/models/birth_outcomes.py +3 -3
  493. meta_subject/models/blood_results/__init__.py +11 -0
  494. meta_subject/models/blood_results/blood_results_glu.py +29 -0
  495. meta_subject/models/blood_results/blood_results_hba1c.py +0 -1
  496. meta_subject/models/blood_results/blood_results_ins.py +0 -1
  497. meta_subject/models/blood_results/blood_results_lft.py +0 -1
  498. meta_subject/models/delivery.py +4 -6
  499. meta_subject/models/diabetes/__init__.py +2 -0
  500. meta_subject/models/diabetes/dm_endpoint.py +5 -5
  501. meta_subject/models/diabetes/dm_followup.py +7 -8
  502. meta_subject/models/diet_and_lifestyle.py +2 -2
  503. meta_subject/models/followup_examination.py +12 -14
  504. meta_subject/models/glucose.py +5 -5
  505. meta_subject/models/glucose_fbg.py +17 -4
  506. meta_subject/models/health_economics/__init__.py +2 -0
  507. meta_subject/models/health_economics/health_economics.py +8 -8
  508. meta_subject/models/health_economics/health_economics_simple.py +2 -2
  509. meta_subject/models/health_economics/health_economics_update.py +3 -2
  510. meta_subject/models/hepatitis_test.py +2 -2
  511. meta_subject/models/hiv_exit_review.py +44 -0
  512. meta_subject/models/next_appointment.py +15 -0
  513. meta_subject/models/other_arv_regimens_detail.py +1 -1
  514. meta_subject/models/patient_history.py +6 -7
  515. meta_subject/models/physical_exam.py +2 -2
  516. meta_subject/models/pregnancy_update.py +1 -1
  517. meta_subject/models/signals.py +15 -13
  518. meta_subject/models/subject_visit.py +2 -2
  519. meta_subject/models/todo.txt +1 -1
  520. meta_subject/models/urine_dipstick_test.py +2 -2
  521. meta_subject/models/urine_pregnancy.py +1 -1
  522. meta_subject/static/meta_subject/slider.css +1 -1
  523. meta_subject/templates/meta_subject/endpoint_review_instructions.html +1 -1
  524. meta_subject/templates/meta_subject/widgets/slider.html +0 -1
  525. meta_visit_schedule/visit_schedules/__init__.py +2 -0
  526. meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
  527. meta_visit_schedule/visit_schedules/phase_three/crfs.py +34 -1
  528. meta_visit_schedule/visit_schedules/phase_three/schedule.py +4 -4
  529. meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
  530. meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +2 -3
  531. meta_ae/tests/holidays.csv +0 -15
  532. meta_ae/tests/tests/test_actions.py +0 -127
  533. meta_ae/tests/urls.py +0 -10
  534. meta_analytics/dataframes/enrolled/__init__.py +0 -1
  535. meta_analytics/dataframes/enrolled/get_glucose_df.py +0 -122
  536. meta_analytics/tests/__init__.py +0 -0
  537. meta_analytics/tests/test_endpoints_by_date.py +0 -94
  538. meta_consent/tests/__init__.py +0 -0
  539. meta_consent/tests/holidays.csv +0 -15
  540. meta_consent/tests/tests/__init__.py +0 -0
  541. meta_consent/tests/tests/test_form_validators.py +0 -110
  542. meta_consent/tests/tests/test_subject_consent.py +0 -10
  543. meta_consent/tests/urls.py +0 -17
  544. meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard.html +0 -11
  545. meta_dashboard/tests/__init__.py +0 -0
  546. meta_dashboard/tests/admin.py +0 -22
  547. meta_dashboard/tests/holidays.csv +0 -15
  548. meta_dashboard/tests/tests/__init__.py +0 -0
  549. meta_dashboard/tests/urls.py +0 -55
  550. meta_edc/tests/__init__.py +0 -0
  551. meta_edc/tests/tests/__init__.py +0 -0
  552. meta_edc/tests/tests/test_endpoints.py +0 -554
  553. meta_edc-0.3.39.dist-info/AUTHORS +0 -0
  554. meta_edc-0.3.39.dist-info/METADATA +0 -766
  555. meta_edc-0.3.39.dist-info/WHEEL +0 -5
  556. meta_edc-0.3.39.dist-info/top_level.txt +0 -20
  557. meta_labs/tests/__init__.py +0 -0
  558. meta_labs/tests/test_labs.py +0 -27
  559. meta_labs/tests/test_reportables.py +0 -16
  560. meta_labs/tests/urls.py +0 -4
  561. meta_lists/tests/__init__.py +0 -0
  562. meta_lists/tests/test_lists.py +0 -8
  563. meta_pharmacy/admin/actions.py +0 -38
  564. meta_prn/tests/__init__.py +0 -0
  565. meta_prn/tests/tests/__init__.py +0 -0
  566. meta_prn/tests/tests/test_actions.py +0 -97
  567. meta_prn/tests/tests/test_dm_referral.py +0 -206
  568. meta_prn/tests/tests/test_manager_order.py +0 -14
  569. meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
  570. meta_prn/tests/urls.py +0 -10
  571. meta_rando/tests/__init__.py +0 -0
  572. meta_rando/tests/tests/__init__.py +0 -0
  573. meta_rando/tests/tests/test_randomizers.py +0 -57
  574. meta_reports/tests/__init__.py +0 -0
  575. meta_reports/tests/test_reports.py +0 -35
  576. meta_reports/tests/test_sql_gen.py +0 -5
  577. meta_reports/tests/urls.py +0 -4
  578. meta_screening/offline_models.py +0 -3
  579. meta_screening/tests/__init__.py +0 -0
  580. meta_screening/tests/holidays.csv +0 -15
  581. meta_screening/tests/meta_test_case_mixin.py +0 -216
  582. meta_screening/tests/options.py +0 -127
  583. meta_screening/tests/tests/__init__.py +0 -0
  584. meta_screening/tests/tests/test_forms.py +0 -397
  585. meta_screening/tests/tests/test_screening_part_one.py +0 -108
  586. meta_screening/tests/tests/test_screening_part_three.py +0 -436
  587. meta_screening/tests/tests/test_screening_part_two.py +0 -84
  588. meta_sites/tests/__init__.py +0 -0
  589. meta_sites/tests/test_sites.py +0 -12
  590. meta_sites/tests/urls.py +0 -4
  591. meta_stats/__init__.py +0 -0
  592. meta_stats/incidence.py +0 -16
  593. meta_stats/models.py +0 -0
  594. meta_stats/tests/__init__.py +0 -0
  595. meta_stats/tests/tests/__init__.py +0 -0
  596. meta_stats/tests/tests/test_incidence.py +0 -10
  597. meta_subject/tests/__init__.py +0 -0
  598. meta_subject/tests/holidays.csv +0 -15
  599. meta_subject/tests/tests/__init__.py +0 -0
  600. meta_subject/tests/tests/test_egfr.py +0 -234
  601. meta_subject/tests/tests/test_fixes.py +0 -64
  602. meta_subject/tests/tests/test_followup.py +0 -52
  603. meta_subject/tests/tests/test_manager_order.py +0 -11
  604. meta_subject/tests/tests/test_medication_adherence.py +0 -75
  605. meta_subject/tests/tests/test_metadata_rules.py +0 -135
  606. meta_subject/tests/tests/test_mnsi.py +0 -317
  607. meta_subject/tests/tests/test_patient_history_form.py +0 -74
  608. meta_subject/tests/tests/test_physical_exam.py +0 -84
  609. meta_subject/tests/tests/test_sf12.py +0 -173
  610. meta_subject/tests/tests/test_study_medication.py +0 -230
  611. meta_subject/tests/urls.py +0 -24
  612. meta_visit_schedule/tests/__init__.py +0 -0
  613. meta_visit_schedule/tests/tests/__init__.py +0 -0
  614. meta_visit_schedule/tests/tests/test_schedule.py +0 -181
  615. meta_visit_schedule/tests/urls.py +0 -4
  616. tests/__init__.py +0 -0
  617. tests/etc/randomization_list.csv +0 -241
  618. tests/etc/randomization_list_phase_three.csv +0 -241
  619. tests/etc/user-aes-local.key +0 -0
  620. tests/etc/user-aes-restricted.key +0 -1
  621. tests/etc/user-rsa-local-private.pem +0 -27
  622. tests/etc/user-rsa-local-public.pem +0 -9
  623. tests/etc/user-rsa-restricted-private.pem +0 -27
  624. tests/etc/user-rsa-restricted-public.pem +0 -9
  625. tests/etc/user-salt-local.key +0 -0
  626. tests/etc/user-salt-restricted.key +0 -0
  627. tests/holidays.csv +0 -15
  628. tests/test_settings.py +0 -186
  629. /meta_ae/templates/meta_ae/{bootstrap3/ae_initial_description.html → aeinitial_description.html} +0 -0
  630. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/add_consent_button.html +0 -0
  631. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/dashboard_button.html +0 -0
  632. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/refusal_button.html +0 -0
  633. /meta_dashboard/templates/meta_dashboard/{bootstrap3/screening → screening}/listboard.html +0 -0
  634. /meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/listboard.html +0 -0
  635. {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info/licenses}/LICENSE +0 -0
  636. /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
  637. /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
@@ -1,5 +1,3 @@
1
- from typing import Tuple
2
-
3
1
  from django.contrib import admin
4
2
  from django.core.exceptions import ObjectDoesNotExist
5
3
  from django.template.loader import render_to_string
@@ -47,11 +45,11 @@ class BirthOutcomesAdmin(
47
45
  "birth_outcome",
48
46
  )
49
47
 
50
- radio_fields = {
48
+ radio_fields = { # noqa: RUF012
51
49
  "birth_outcome": admin.VERTICAL,
52
50
  }
53
51
 
54
- def get_list_filter(self, request) -> Tuple[str, ...]:
52
+ def get_list_filter(self, request) -> tuple[str, ...]:
55
53
  fields = super().get_list_filter(request)
56
54
  custom_fields = (
57
55
  "birth_order",
@@ -59,7 +57,7 @@ class BirthOutcomesAdmin(
59
57
  )
60
58
  return custom_fields + fields
61
59
 
62
- def get_search_fields(self, request) -> Tuple[str, ...]:
60
+ def get_search_fields(self, request) -> tuple[str, ...]:
63
61
  fields = super().get_search_fields(request)
64
62
  custom_fields = (
65
63
  "delivery__subject_visit__subject_identifier",
@@ -68,11 +66,11 @@ class BirthOutcomesAdmin(
68
66
  return tuple(set(fields + custom_fields))
69
67
 
70
68
  @admin.display
71
- def delivery_report(self, obj=None, label=None):
69
+ def delivery_report(self, obj=None, label=None): # noqa: ARG002
72
70
  url = reverse("meta_subject_admin:meta_subject_delivery_changelist")
73
71
  url = f"{url}?q={obj.subject_identifier}"
74
72
  context = dict(title="Delivery", url=url, label="Delivery")
75
- return render_to_string("dashboard_button.html", context=context)
73
+ return render_to_string("edc_subject_dashboard/dashboard_button.html", context=context)
76
74
 
77
75
  def get_subject_dashboard_url_kwargs(self, obj):
78
76
  return dict(subject_identifier=obj.subject_identifier)
@@ -93,6 +91,6 @@ class BirthOutcomesAdmin(
93
91
  url = super().view_on_site(obj)
94
92
  else:
95
93
  raise NoReverseMatch(
96
- f"{e}. See subject_dashboard_url_name for {repr(self)}."
97
- )
94
+ f"{e}. See subject_dashboard_url_name for {self!r}."
95
+ ) from e
98
96
  return url
@@ -4,3 +4,12 @@ from .blood_results_ins_admin import BloodResultsInsAdmin
4
4
  from .blood_results_lft_admin import BloodResultsLftAdmin
5
5
  from .blood_results_lipids_admin import BloodResultsLipidsAdmin
6
6
  from .blood_results_rft_admin import BloodResultsRftAdmin
7
+
8
+ __all__ = [
9
+ "BloodResultsFbcAdmin",
10
+ "BloodResultsHba1cAdmin",
11
+ "BloodResultsInsAdmin",
12
+ "BloodResultsLftAdmin",
13
+ "BloodResultsLipidsAdmin",
14
+ "BloodResultsRftAdmin",
15
+ ]
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_action_item import action_fieldset_tuple
2
+ from edc_action_item.fieldsets import action_fieldset_tuple
3
3
  from edc_lab_results.admin import BloodResultsModelAdminMixin
4
4
  from edc_lab_results.fieldsets import BloodResultFieldset
5
5
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_action_item import action_fieldset_tuple
2
+ from edc_action_item.fieldsets import action_fieldset_tuple
3
3
  from edc_lab_panel.panels import hba1c_panel
4
4
  from edc_lab_results.admin import BloodResultsModelAdminMixin
5
5
  from edc_lab_results.fieldsets import BloodResultFieldset
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_action_item import action_fieldset_tuple
2
+ from edc_action_item.fieldsets import action_fieldset_tuple
3
3
  from edc_lab_results.admin import BloodResultsModelAdminMixin
4
4
  from edc_lab_results.fieldsets import BloodResultFieldset
5
5
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_action_item import action_fieldset_tuple
2
+ from edc_action_item.fieldsets import action_fieldset_tuple
3
3
  from edc_lab_results.admin import BloodResultsModelAdminMixin
4
4
  from edc_lab_results.fieldsets import BloodResultFieldset
5
5
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_action_item import action_fieldset_tuple
2
+ from edc_action_item.fieldsets import action_fieldset_tuple
3
3
  from edc_lab_results.admin import BloodResultsModelAdminMixin
4
4
  from edc_lab_results.fieldsets import BloodResultFieldset
5
5
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -1,8 +1,6 @@
1
- from typing import Tuple
2
-
3
1
  from django.contrib import admin, messages
4
2
  from django.core.exceptions import MultipleObjectsReturned
5
- from edc_action_item import action_fieldset_tuple
3
+ from edc_action_item.fieldsets import action_fieldset_tuple
6
4
  from edc_egfr.egfr import Egfr
7
5
  from edc_lab_results.admin import BloodResultsModelAdminMixin
8
6
  from edc_lab_results.fieldsets import (
@@ -28,7 +26,7 @@ class BloodResultsRftAdmin(
28
26
  BloodResultsModelAdminMixin, CrfModelAdminMixin, SimpleHistoryAdmin
29
27
  ):
30
28
  form = BloodResultsRftForm
31
- actions = ["create_or_update_egfr_notification", "recalculate_egfr"]
29
+ actions = ("create_or_update_egfr_notification", "recalculate_egfr")
32
30
  fieldsets = (
33
31
  *BloodResultFieldset(
34
32
  BloodResultsRft.lab_panel,
@@ -42,7 +40,7 @@ class BloodResultsRftAdmin(
42
40
  ).fieldsets,
43
41
  )
44
42
 
45
- def get_readonly_fields(self, request, obj=None) -> Tuple[str, ...]:
43
+ def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]: # noqa: ARG002
46
44
  readonly_fields = super().get_readonly_fields(request)
47
45
  custom_fields = (
48
46
  "egfr_value",
@@ -98,7 +98,7 @@ class ComplicationsGlycemiaAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
98
98
  audit_fieldset_tuple,
99
99
  )
100
100
 
101
- radio_fields = {
101
+ radio_fields = { # noqa: RUF012
102
102
  "at_reflex": admin.VERTICAL,
103
103
  "cataracts": admin.VERTICAL,
104
104
  "dns_burning": admin.VERTICAL,
@@ -2,11 +2,8 @@ from django.contrib import admin
2
2
  from django.template.loader import render_to_string
3
3
  from django.urls import reverse
4
4
  from django_audit_fields.admin import audit_fieldset_tuple
5
- from edc_action_item import (
6
- ActionItemModelAdminMixin,
7
- action_fields,
8
- action_fieldset_tuple,
9
- )
5
+ from edc_action_item.fieldsets import action_fields, action_fieldset_tuple
6
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
10
7
  from edc_crf.fieldset import crf_status_fieldset
11
8
  from edc_form_label import FormLabelModelAdminMixin
12
9
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -22,11 +19,11 @@ class BirthOutcomesInlineAdmin(TabularInlineMixin, admin.TabularInline):
22
19
  model = BirthOutcomes
23
20
  form = BirthOutcomesForm
24
21
  extra = 1
25
- fields = [
22
+ fields = (
26
23
  "birth_order",
27
24
  "birth_outcome",
28
25
  "birth_weight",
29
- ]
26
+ )
30
27
 
31
28
 
32
29
  @admin.register(Delivery, site=meta_subject_admin)
@@ -38,7 +35,7 @@ class DeliveryAdmin(
38
35
  ):
39
36
  form = DeliveryForm
40
37
 
41
- inlines = [BirthOutcomesInlineAdmin]
38
+ inlines = (BirthOutcomesInlineAdmin,)
42
39
 
43
40
  fieldsets = (
44
41
  (None, {"fields": ("subject_visit", "report_datetime")}),
@@ -94,7 +91,7 @@ class DeliveryAdmin(
94
91
  "maternal_outcome",
95
92
  )
96
93
 
97
- radio_fields = {
94
+ radio_fields = { # noqa: RUF012
98
95
  "info_available": admin.VERTICAL,
99
96
  "info_source": admin.VERTICAL,
100
97
  "informant_relation": admin.VERTICAL,
@@ -112,8 +109,8 @@ class DeliveryAdmin(
112
109
  )
113
110
 
114
111
  @admin.display
115
- def birth_outcomes(self, obj=None, label=None):
112
+ def birth_outcomes(self, obj=None, label=None): # noqa: ARG002
116
113
  url = reverse("meta_subject_admin:meta_subject_birthoutcomes_changelist")
117
114
  url = f"{url}?q={obj.subject_identifier}"
118
115
  context = dict(title="Outcomes", url=url, label="Outcomes")
119
- return render_to_string("dashboard_button.html", context=context)
116
+ return render_to_string("edc_subject_dashboard/dashboard_button.html", context=context)
@@ -1,2 +1,4 @@
1
1
  from .dm_endpoint_admin import DmEndpointAdmin
2
2
  from .dm_followup_admin import DmFollowupAdmin
3
+
4
+ __all__ = ["DmEndpointAdmin", "DmFollowupAdmin"]
@@ -30,6 +30,6 @@ class DmEndpointAdmin(
30
30
  audit_fieldset_tuple,
31
31
  )
32
32
 
33
- list_filter = ["endpoint_reached"]
33
+ list_filter = ("endpoint_reached",)
34
34
 
35
- radio_fields = {"endpoint_reached": admin.VERTICAL}
35
+ radio_fields = {"endpoint_reached": admin.VERTICAL} # noqa: RUF012
@@ -1,6 +1,7 @@
1
1
  from django.contrib import admin
2
2
  from django_audit_fields.admin import audit_fieldset_tuple
3
- from edc_action_item import ActionItemModelAdminMixin, action_fieldset_tuple
3
+ from edc_action_item.fieldsets import action_fieldset_tuple
4
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
4
5
  from edc_adherence.model_admin_mixin import get_visual_score_fieldset_tuple
5
6
  from edc_crf.fieldset import crf_status_fieldset
6
7
  from edc_form_label.form_label_modeladmin_mixin import FormLabelModelAdminMixin
@@ -86,7 +87,7 @@ class DmFollowupAdmin(
86
87
  "missed_referral_reasons",
87
88
  )
88
89
 
89
- radio_fields = {
90
+ radio_fields = { # noqa: RUF012
90
91
  "attended": admin.VERTICAL,
91
92
  "investigations_performed": admin.VERTICAL,
92
93
  "on_dm_medications": admin.VERTICAL,
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_action_item import ActionItemModelAdminMixin
2
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
3
3
  from edc_egfr.admin import EgfrDropNotificationAdminMixin
4
4
  from edc_model_admin.history import SimpleHistoryAdmin
5
5
 
@@ -1,12 +1,12 @@
1
- def get_blood_pressure_fields():
2
- return [
1
+ def get_blood_pressure_fields() -> tuple[str, ...]:
2
+ return (
3
3
  "sys_blood_pressure_one",
4
4
  "dia_blood_pressure_one",
5
5
  "sys_blood_pressure_two",
6
6
  "dia_blood_pressure_two",
7
7
  "severe_htn",
8
- ]
8
+ )
9
9
 
10
10
 
11
- def get_respiratory_o2_fields():
12
- return ["respiratory_rate"]
11
+ def get_respiratory_o2_fields() -> tuple[str, ...]:
12
+ return ("respiratory_rate",)
@@ -1,5 +1,5 @@
1
1
  def get_htn_fieldset(part=None):
2
- fields = [
2
+ fields = (
3
3
  "htn_diagnosis",
4
4
  "on_htn_treatment",
5
5
  "htn_treatment",
@@ -9,11 +9,11 @@ def get_htn_fieldset(part=None):
9
9
  "dyslipidaemia_rx",
10
10
  "concomitant_conditions",
11
11
  "concomitant_medications",
12
- ]
12
+ )
13
13
 
14
14
  return (
15
15
  f"Part {part}: Hypertension",
16
- {"fields": tuple(fields)},
16
+ {"fields": fields},
17
17
  )
18
18
 
19
19
 
@@ -22,7 +22,7 @@ def get_hiv_fieldset(part=None):
22
22
  if part:
23
23
  title = f"Part {part}: {title}"
24
24
  # TODO: previous_arv_regimen_start_date is PHASE 3 only
25
- fields = [
25
+ fields = (
26
26
  "hiv_diagnosis_date",
27
27
  "arv_initiation_date",
28
28
  "viral_load",
@@ -39,7 +39,7 @@ def get_hiv_fieldset(part=None):
39
39
  "on_oi_prophylaxis",
40
40
  "oi_prophylaxis",
41
41
  "other_oi_prophylaxis",
42
- ]
42
+ )
43
43
  return (
44
44
  title,
45
45
  {"fields": fields},
@@ -1,7 +1,8 @@
1
+ from clinicedc_constants import NONE, YES
1
2
  from django.contrib import admin
2
3
  from django_audit_fields.admin import audit_fieldset_tuple
3
- from edc_action_item import ActionItemModelAdminMixin, action_fieldset_tuple
4
- from edc_constants.constants import NONE, YES
4
+ from edc_action_item.fieldsets import action_fieldset_tuple
5
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
5
6
  from edc_crf.fieldset import crf_status_fieldset
6
7
  from edc_form_label.form_label_modeladmin_mixin import FormLabelModelAdminMixin
7
8
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -16,17 +17,18 @@ class GradedEventFilter(admin.SimpleListFilter):
16
17
  title = "Graded events"
17
18
  parameter_name = "grade"
18
19
 
19
- def lookups(self, request, model_admin):
20
+ def lookups(self, request, model_admin): # noqa: ARG002
20
21
  return (
21
22
  ("g3", "Grade 3"),
22
23
  ("g4", "Grade 4"),
23
24
  )
24
25
 
25
- def queryset(self, request, queryset):
26
+ def queryset(self, request, queryset): # noqa: ARG002
26
27
  if self.value() == "g3":
27
28
  return queryset.exclude(symptoms_g3__name=NONE)
28
29
  if self.value() == "g4":
29
30
  return queryset.exclude(symptoms_g4__name=NONE)
31
+ return queryset
30
32
 
31
33
 
32
34
  @admin.register(FollowupExamination, site=meta_subject_admin)
@@ -38,11 +40,11 @@ class FollowupExaminationAdmin(
38
40
  ):
39
41
  form = FollowupExaminationForm
40
42
 
41
- autocomplete_fields = ["art_new_regimen"]
43
+ autocomplete_fields = ("art_new_regimen",)
42
44
 
43
- additional_instructions = [
44
- "If participant is pregnant, complete the action linked CRF `Pregnancy notification`."
45
- ]
45
+ additional_instructions = (
46
+ "If participant is pregnant, complete the action linked CRF `Pregnancy notification`.",
47
+ )
46
48
 
47
49
  fieldsets = (
48
50
  (None, {"fields": ("subject_visit", "report_datetime")}),
@@ -127,7 +129,7 @@ class FollowupExaminationAdmin(
127
129
 
128
130
  # readonly_fields = action_fields
129
131
 
130
- radio_fields = {
132
+ radio_fields = { # noqa: RUF012
131
133
  "abdominal_tenderness": admin.VERTICAL,
132
134
  "admitted_hospital": admin.VERTICAL,
133
135
  "any_other_problems": admin.VERTICAL,
@@ -15,34 +15,59 @@ from .modeladmin import CrfModelAdminMixin
15
15
  class FollowupVitalsAdmin(CrfModelAdminMixin, FormLabelModelAdminMixin, SimpleHistoryAdmin):
16
16
  form = FollowupVitalsForm
17
17
 
18
- additional_instructions = [
18
+ additional_instructions = (
19
19
  "If participant is pregnant, complete the action linked CRF `Pregnancy notification`."
20
- ]
20
+ )
21
21
 
22
22
  fieldsets = (
23
23
  (None, {"fields": ("subject_visit", "report_datetime")}),
24
24
  (
25
- "Vitals",
25
+ "Weight",
26
+ {
27
+ "fields": ("weight",),
28
+ },
29
+ ),
30
+ (
31
+ "Waist circumference",
32
+ {
33
+ "description": (
34
+ "REQUIRED at 36 and 48 months. If not measured "
35
+ "at 36 and 48 months, provide the reason."
36
+ ),
37
+ "fields": (
38
+ "waist_circumference_measured",
39
+ "waist_circumference",
40
+ "waist_circumference_comment",
41
+ ),
42
+ },
43
+ ),
44
+ (
45
+ "BP and heart rate",
26
46
  {
27
47
  "description": (
28
48
  "To be completed by the research nurse. <BR>"
29
49
  "Refer to SOP for blood pressure measurement procedure."
30
50
  ),
31
51
  "fields": (
32
- "weight",
33
52
  *get_blood_pressure_fields(),
34
53
  "heart_rate",
35
54
  *get_respiratory_o2_fields(),
36
- "temperature",
37
55
  ),
38
56
  },
39
57
  ),
58
+ (
59
+ "Temperature",
60
+ {
61
+ "fields": ("temperature",),
62
+ },
63
+ ),
40
64
  crf_status_fieldset,
41
65
  audit_fieldset_tuple,
42
66
  )
43
67
 
44
68
  filter_horizontal = ()
45
69
 
46
- radio_fields = {
70
+ radio_fields = { # noqa: RUF012
71
+ "waist_circumference_measured": admin.VERTICAL,
47
72
  "severe_htn": admin.VERTICAL,
48
73
  }
@@ -1,7 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Type
4
-
5
3
  from django.contrib import admin
6
4
  from django.contrib.admin import SimpleListFilter
7
5
  from django.template.loader import render_to_string
@@ -72,7 +70,7 @@ class GlucoseAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
72
70
  audit_fieldset_tuple,
73
71
  )
74
72
 
75
- radio_fields = {
73
+ radio_fields = { # noqa: RUF012
76
74
  "fasting": admin.VERTICAL,
77
75
  "fbg_units": admin.VERTICAL,
78
76
  "fbg_performed": admin.VERTICAL,
@@ -86,13 +84,11 @@ class GlucoseAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
86
84
  list_display = list(list_display)
87
85
  list_display.insert(3, "ogtt_value")
88
86
  list_display.insert(3, "fbg_value")
89
- list_display = tuple(list_display)
90
- return list_display
87
+ return tuple(list_display)
91
88
 
92
- def get_list_filter(self, request) -> tuple[str | Type[SimpleListFilter], ...]:
89
+ def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
93
90
  list_filter = super().get_list_filter(request)
94
91
  list_filter = list(list_filter)
95
92
  list_filter.insert(2, OgttListFilter)
96
93
  list_filter.insert(2, FbgListFilter)
97
- list_filter = tuple(list_filter)
98
- return list_filter
94
+ return tuple(list_filter)
@@ -1,9 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Type
4
-
5
3
  from django.contrib import admin
6
4
  from django.contrib.admin import SimpleListFilter
5
+ from django.template.loader import render_to_string
7
6
  from django_audit_fields import audit_fieldset_tuple
8
7
  from edc_crf.fieldset import crf_status_fieldset
9
8
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -19,7 +18,7 @@ from .modeladmin import CrfModelAdminMixin
19
18
  class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
20
19
  form = GlucoseFbgForm
21
20
 
22
- fieldsets = [
21
+ fieldsets = (
23
22
  (None, {"fields": ("subject_visit", "report_datetime")}),
24
23
  (
25
24
  "Fasting",
@@ -42,11 +41,21 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
42
41
  )
43
42
  },
44
43
  ),
44
+ (
45
+ "Endpoint review",
46
+ {
47
+ "description": render_to_string(
48
+ "meta_subject/endpoint_review_instructions.html", context={}
49
+ ),
50
+ "fields": ("endpoint_today",),
51
+ },
52
+ ),
45
53
  (
46
54
  "Confirmation appointment",
47
55
  {
48
56
  "description": (
49
- "If blood glucose value is >= 7.0 mmol/L, schedule an "
57
+ "If patient has not reached the endpoint and the blood glucose "
58
+ "value is >= 7.0 mmol/L, schedule an "
50
59
  "appointment within 1 week to confirm"
51
60
  ),
52
61
  "fields": ("repeat_fbg_date",),
@@ -54,9 +63,9 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
54
63
  ),
55
64
  crf_status_fieldset,
56
65
  audit_fieldset_tuple,
57
- ]
66
+ )
58
67
 
59
- radio_fields = {
68
+ radio_fields = { # noqa: RUF012
60
69
  "fasting": admin.VERTICAL,
61
70
  "fbg_units": admin.VERTICAL,
62
71
  "fbg_performed": admin.VERTICAL,
@@ -71,12 +80,10 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
71
80
  list_display = list(list_display)
72
81
  # list_display.insert(3, "ogtt")
73
82
  list_display.insert(3, "fbg")
74
- list_display = tuple(list_display)
75
- return list_display
83
+ return tuple(list_display)
76
84
 
77
- def get_list_filter(self, request) -> tuple[str | Type[SimpleListFilter], ...]:
85
+ def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
78
86
  list_filter = super().get_list_filter(request)
79
87
  list_filter = list(list_filter)
80
88
  list_filter.insert(2, GlucoseListFilter)
81
- list_filter = tuple(list_filter)
82
- return list_filter
89
+ return tuple(list_filter)
@@ -1,2 +1,4 @@
1
1
  from .health_economics_simple_admin import HealthEconomicsSimpleAdmin
2
2
  from .health_economics_update_admin import HealthEconomicsUpdateAdmin
3
+
4
+ __all__ = ["HealthEconomicsSimpleAdmin", "HealthEconomicsUpdateAdmin"]
@@ -31,4 +31,4 @@ class HealthEconomicsSimpleAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
31
31
  audit_fieldset_tuple,
32
32
  )
33
33
 
34
- radio_fields = {**education_radio_fields}
34
+ radio_fields = {**education_radio_fields} # noqa: RUF012
@@ -92,7 +92,7 @@ class HealthEconomicsUpdateAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
92
92
  audit_fieldset_tuple,
93
93
  )
94
94
 
95
- radio_fields = {
95
+ radio_fields = { # noqa: RUF012
96
96
  "hoh": admin.VERTICAL,
97
97
  "relationship_to_hoh": admin.VERTICAL,
98
98
  "avg_income": admin.VERTICAL,
@@ -47,7 +47,7 @@ class HepatitisTestAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
47
47
  audit_fieldset_tuple,
48
48
  )
49
49
 
50
- radio_fields = {
50
+ radio_fields = { # noqa: RUF012
51
51
  "hbsag_performed": admin.VERTICAL,
52
52
  "hbsag": admin.VERTICAL,
53
53
  "hcv_performed": admin.VERTICAL,
@@ -0,0 +1,55 @@
1
+ from __future__ import annotations
2
+
3
+ from django.contrib import admin
4
+ from django_audit_fields import audit_fieldset_tuple
5
+ from edc_crf.fieldset import crf_status_fieldset
6
+ from edc_model_admin.history import SimpleHistoryAdmin
7
+
8
+ from ..admin_site import meta_subject_admin
9
+ from ..forms import HivExitReviewForm
10
+ from ..models import HivExitReview
11
+ from .modeladmin import CrfModelAdminMixin
12
+
13
+
14
+ @admin.register(HivExitReview, site=meta_subject_admin)
15
+ class HivExitReviewAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
16
+ autocomplete_fields = ("current_arv_regimen",)
17
+
18
+ form = HivExitReviewForm
19
+
20
+ fieldsets = (
21
+ (
22
+ None,
23
+ {
24
+ "fields": (
25
+ "subject_visit",
26
+ "report_datetime",
27
+ "available",
28
+ "not_available_reason",
29
+ )
30
+ },
31
+ ),
32
+ (
33
+ "HIV and ARVs",
34
+ {
35
+ "fields": (
36
+ "viral_load",
37
+ "viral_load_date",
38
+ "cd4",
39
+ "cd4_date",
40
+ "current_arv_regimen",
41
+ "other_current_arv_regimen",
42
+ "current_arv_regimen_start_date",
43
+ )
44
+ },
45
+ ),
46
+ ("Comment", {"fields": ("comment",)}),
47
+ crf_status_fieldset,
48
+ audit_fieldset_tuple,
49
+ )
50
+
51
+ list_filter = ("available",)
52
+
53
+ radio_fields = { # noqa: RUF012
54
+ "available": admin.VERTICAL,
55
+ }
@@ -1,6 +1,6 @@
1
+ from clinicedc_constants import HIGH, NORMAL
1
2
  from django.contrib.admin import SimpleListFilter
2
3
  from django.db.models import Q
3
- from edc_constants.constants import HIGH, NORMAL
4
4
  from edc_model_admin.list_filters import FutureDateListFilter, PastDateListFilter
5
5
 
6
6
  from meta_subject.models import Glucose, GlucoseFbg
@@ -13,14 +13,14 @@ class GlucoseListFilter(SimpleListFilter):
13
13
  parameter_name = "glucose_value"
14
14
  model_cls = GlucoseFbg
15
15
 
16
- def lookups(self, request, model_admin):
16
+ def lookups(self, request, model_admin): # noqa: ARG002
17
17
  return (
18
18
  (NORMAL, "Normal"),
19
19
  (HIGH, "High"),
20
20
  (VERY_HIGH, "Very high"),
21
21
  )
22
22
 
23
- def queryset(self, request, queryset):
23
+ def queryset(self, request, queryset): # noqa: ARG002
24
24
  qs = None
25
25
  if self.value():
26
26
  if self.value() == NORMAL:
@@ -46,13 +46,13 @@ class OgttListFilter(SimpleListFilter):
46
46
  parameter_name = "ogtt_value"
47
47
  model_cls = Glucose
48
48
 
49
- def lookups(self, request, model_admin):
49
+ def lookups(self, request, model_admin): # noqa: ARG002
50
50
  return (
51
51
  (NORMAL, "Normal"),
52
52
  (HIGH, "High"),
53
53
  )
54
54
 
55
- def queryset(self, request, queryset):
55
+ def queryset(self, request, queryset): # noqa: ARG002
56
56
  qs = None
57
57
  if self.value():
58
58
  if self.value() == NORMAL: