meta-edc 1.1.8__py3-none-any.whl → 1.1.12__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.

Potentially problematic release.


This version of meta-edc might be problematic. Click here for more details.

Files changed (475) hide show
  1. meta_ae/action_items.py +2 -1
  2. meta_ae/admin/__init__.py +11 -0
  3. meta_ae/admin/ae_susar_admin.py +1 -1
  4. meta_ae/admin/death_report_admin.py +1 -1
  5. meta_ae/admin/modeladmin_mixins.py +10 -12
  6. meta_ae/baker_recipes.py +3 -3
  7. meta_ae/forms/__init__.py +13 -0
  8. meta_ae/forms/modelform_mixins.py +2 -2
  9. meta_ae/migrations/0001_initial.py +27 -27
  10. meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
  11. meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
  12. meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
  13. meta_ae/model_mixins/__init__.py +2 -0
  14. meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
  15. meta_ae/model_mixins/death_report_model_mixin.py +3 -3
  16. meta_ae/models/__init__.py +13 -0
  17. meta_ae/models/hospitalization.py +3 -3
  18. meta_ae/pdf_reports/__init__.py +2 -0
  19. meta_analytics/.DS_Store +0 -0
  20. meta_analytics/dataframes/__init__.py +24 -0
  21. meta_analytics/dataframes/get_eos_df.py +1 -2
  22. meta_analytics/dataframes/get_glucose_df.py +6 -7
  23. meta_analytics/dataframes/get_glucose_fbg_df.py +2 -3
  24. meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +1 -2
  25. meta_analytics/dataframes/get_last_imp_visits_df.py +5 -6
  26. meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
  27. meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +13 -20
  28. meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +9 -10
  29. meta_analytics/dataframes/screening/__init__.py +2 -0
  30. meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
  31. meta_analytics/dataframes/screening/get_screening_df.py +6 -10
  32. meta_analytics/dataframes/utils.py +3 -8
  33. meta_analytics/get_tables.py +1 -2
  34. meta_analytics/tables/__init__.py +2 -0
  35. meta_consent/action_items.py +2 -1
  36. meta_consent/admin/__init__.py +6 -0
  37. meta_consent/admin/actions/__init__.py +2 -0
  38. meta_consent/admin/actions/create_missing_prescriptions.py +1 -1
  39. meta_consent/admin/list_filters.py +2 -2
  40. meta_consent/admin/modeladmin_mixins.py +3 -4
  41. meta_consent/admin/subject_consent_v1_ext_admin.py +2 -2
  42. meta_consent/baker_recipes.py +7 -8
  43. meta_consent/form_validators/__init__.py +2 -0
  44. meta_consent/forms/__init__.py +7 -0
  45. meta_consent/forms/subject_consent_v1_ext_form.py +2 -3
  46. meta_consent/forms/subject_reconsent_form.py +4 -4
  47. meta_consent/management/commands/create_missing_prescriptions.py +4 -2
  48. meta_consent/migrations/0001_initial.py +9 -9
  49. meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
  50. meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +5 -14
  51. meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
  52. meta_consent/models/__init__.py +9 -0
  53. meta_consent/models/model_mixins.py +1 -2
  54. meta_consent/models/signals.py +9 -10
  55. meta_consent/models/subject_consent.py +1 -1
  56. meta_consent/models/subject_reconsent.py +3 -3
  57. meta_dashboard/patterns.py +1 -1
  58. meta_dashboard/templatetags/meta_dashboard_extras.py +1 -1
  59. meta_dashboard/view_utils/__init__.py +7 -0
  60. meta_dashboard/view_utils/subject_screening_button.py +9 -16
  61. meta_dashboard/views/__init__.py +8 -0
  62. meta_dashboard/views/ae/__init__.py +2 -0
  63. meta_dashboard/views/ae/ae_listboard_view.py +1 -1
  64. meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
  65. meta_dashboard/views/screening/__init__.py +2 -0
  66. meta_dashboard/views/subject/__init__.py +2 -0
  67. meta_dashboard/views/subject/dashboard/__init__.py +2 -0
  68. meta_dashboard/views/subject/dashboard/dashboard_view.py +1 -1
  69. meta_dashboard/views/subject/listboard/__init__.py +2 -0
  70. meta_edc/__init__.py +5 -9
  71. meta_edc/celery.py +1 -1
  72. meta_edc/celery_live.py +1 -1
  73. meta_edc/celery_uat.py +1 -1
  74. meta_edc/management/commands/update_forms_reference.py +10 -12
  75. meta_edc/settings/debug.py +5 -4
  76. meta_edc/settings/defaults.py +18 -3
  77. meta_edc/settings/live.py +3 -1
  78. meta_edc/settings/logging.py +9 -4
  79. meta_edc/settings/minimal.py +4 -5
  80. meta_edc/settings/uat.py +3 -1
  81. meta_edc/views/__init__.py +2 -0
  82. meta_edc-1.1.12.dist-info/METADATA +174 -0
  83. {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/RECORD +413 -526
  84. meta_edc-1.1.12.dist-info/WHEEL +4 -0
  85. meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
  86. meta_pharmacy/admin/__init__.py +5 -0
  87. meta_pharmacy/admin/substitutions_admin.py +2 -2
  88. meta_pharmacy/forms/__init__.py +2 -0
  89. meta_pharmacy/forms/substitutions_form.py +6 -4
  90. meta_pharmacy/labels/__init__.py +4 -2
  91. meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +1 -2
  92. meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
  93. meta_pharmacy/labels/label_data.py +1 -2
  94. meta_pharmacy/labels/print_sheets.py +4 -6
  95. meta_pharmacy/migrations/0002_initial.py +7 -20
  96. meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
  97. meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
  98. meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
  99. meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
  100. meta_pharmacy/models/__init__.py +7 -0
  101. meta_pharmacy/models/label_data.py +4 -5
  102. meta_pharmacy/models/substitutions.py +3 -3
  103. meta_pharmacy/prepare_meta_pharmacy.py +1 -1
  104. meta_pharmacy/utils/__init__.py +2 -0
  105. meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
  106. meta_prn/admin/__init__.py +16 -0
  107. meta_prn/admin/dm_referral_admin.py +2 -1
  108. meta_prn/admin/end_of_study_admin.py +6 -7
  109. meta_prn/admin/loss_to_followup_admin.py +3 -2
  110. meta_prn/admin/off_study_medication_admin.py +5 -6
  111. meta_prn/admin/offschedule_admin.py +5 -6
  112. meta_prn/admin/offschedule_dm_referral_admin.py +6 -6
  113. meta_prn/admin/offschedule_postnatal_admin.py +7 -7
  114. meta_prn/admin/offschedule_pregnancy_admin.py +8 -7
  115. meta_prn/admin/onschedule_admin.py +7 -8
  116. meta_prn/admin/onschedule_dm_referral_admin.py +6 -7
  117. meta_prn/admin/pregnancy_notification_admin.py +5 -6
  118. meta_prn/admin/protocol_incident_admin.py +1 -1
  119. meta_prn/admin/subject_transfer_admin.py +1 -1
  120. meta_prn/baker_recipes.py +4 -4
  121. meta_prn/form_validators/__init__.py +5 -0
  122. meta_prn/form_validators/end_of_study.py +2 -2
  123. meta_prn/forms/__init__.py +13 -0
  124. meta_prn/migrations/0001_initial.py +25 -25
  125. meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
  126. meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
  127. meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
  128. meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
  129. meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
  130. meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
  131. meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
  132. meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
  133. meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
  134. meta_prn/models/__init__.py +20 -0
  135. meta_prn/models/offschedule.py +4 -4
  136. meta_prn/models/protocol_incident.py +1 -1
  137. meta_prn/models/subject_transfer.py +8 -0
  138. meta_rando/migrations/0001_initial.py +5 -5
  139. meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
  140. meta_reports/__init__.py +2 -0
  141. meta_reports/admin/__init__.py +16 -0
  142. meta_reports/admin/dbviews/__init__.py +13 -0
  143. meta_reports/admin/dbviews/glucose_summary_admin.py +6 -6
  144. meta_reports/admin/dbviews/imp_substitutions_admin.py +12 -11
  145. meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
  146. meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
  147. meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +6 -6
  148. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
  149. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
  150. meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
  151. meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +8 -8
  152. meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
  153. meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
  154. meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
  155. meta_reports/admin/endpoints_admin.py +1 -1
  156. meta_reports/admin/last_imp_refill_admin.py +9 -9
  157. meta_reports/admin/list_filters.py +2 -2
  158. meta_reports/admin/modeladmin_mixins.py +9 -16
  159. meta_reports/death_report.py +1 -1
  160. meta_reports/forms/__init__.py +2 -0
  161. meta_reports/forms/missing_ogtt_note_form.py +2 -3
  162. meta_reports/management/commands/generate_endpoints.py +5 -4
  163. meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
  164. meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
  165. meta_reports/models/__init__.py +17 -0
  166. meta_reports/models/dbviews/__init__.py +14 -0
  167. meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
  168. meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +4 -5
  169. meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
  170. meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
  171. meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
  172. meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +1 -1
  173. meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
  174. meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
  175. meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
  176. meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
  177. meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +18 -0
  178. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
  179. meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
  180. meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
  181. meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
  182. meta_reports/models/endpoints.py +4 -4
  183. meta_reports/models/last_imp_refill.py +2 -3
  184. meta_reports/pdf_report.py +2 -2
  185. meta_reports/tasks.py +1 -1
  186. meta_screening/admin/__init__.py +8 -0
  187. meta_screening/admin/fieldsets.py +13 -14
  188. meta_screening/admin/list_filters.py +6 -4
  189. meta_screening/admin/screening_part_one_admin.py +1 -2
  190. meta_screening/admin/screening_part_three_admin.py +2 -3
  191. meta_screening/admin/screening_part_two_admin.py +7 -10
  192. meta_screening/admin/subject_refusal_admin.py +5 -3
  193. meta_screening/admin/subject_screening_admin.py +4 -4
  194. meta_screening/baker_recipes.py +9 -9
  195. meta_screening/eligibility/__init__.py +9 -0
  196. meta_screening/eligibility/eligibility.py +7 -7
  197. meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
  198. meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +8 -8
  199. meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +13 -14
  200. meta_screening/form_validators/__init__.py +8 -0
  201. meta_screening/forms/__init__.py +20 -0
  202. meta_screening/forms/field_lists.py +16 -17
  203. meta_screening/forms/screening_part_one_form.py +2 -2
  204. meta_screening/forms/screening_part_three_form.py +5 -3
  205. meta_screening/forms/screening_part_two_form.py +1 -5
  206. meta_screening/forms/subject_refusal_form.py +0 -4
  207. meta_screening/forms/subject_screening_form.py +0 -4
  208. meta_screening/migrations/0001_initial.py +15 -15
  209. meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
  210. meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
  211. meta_screening/model_mixins/__init__.py +8 -0
  212. meta_screening/model_mixins/eligibility_model_mixin.py +5 -3
  213. meta_screening/model_mixins/part_one_fields_model_mixin.py +5 -9
  214. meta_screening/model_mixins/part_three_fields_model_mixin.py +5 -6
  215. meta_screening/model_mixins/part_two_fields_model_mixin.py +18 -16
  216. meta_screening/models/__init__.py +9 -0
  217. meta_screening/models/icp_referral.py +5 -5
  218. meta_screening/models/signals.py +10 -11
  219. meta_screening/models/subject_refusal.py +1 -1
  220. meta_screening/models/subject_screening.py +1 -3
  221. meta_subject/action_items.py +13 -15
  222. meta_subject/admin/__init__.py +39 -0
  223. meta_subject/admin/birth_outcome_admin.py +4 -8
  224. meta_subject/admin/blood_results/__init__.py +9 -0
  225. meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
  226. meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
  227. meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
  228. meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
  229. meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
  230. meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
  231. meta_subject/admin/complications_glycemia_admin.py +1 -1
  232. meta_subject/admin/delivery_admin.py +7 -10
  233. meta_subject/admin/diabetes/__init__.py +2 -0
  234. meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
  235. meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
  236. meta_subject/admin/egfr_drop_notification_admin.py +1 -1
  237. meta_subject/admin/followup_examination_admin.py +10 -9
  238. meta_subject/admin/followup_vitals_admin.py +4 -5
  239. meta_subject/admin/glucose_admin.py +2 -4
  240. meta_subject/admin/glucose_fbg_admin.py +1 -3
  241. meta_subject/admin/health_economics/__init__.py +2 -0
  242. meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
  243. meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
  244. meta_subject/admin/hepatitis_test_admin.py +1 -1
  245. meta_subject/admin/list_filters.py +1 -1
  246. meta_subject/admin/mnsi_admin.py +7 -5
  247. meta_subject/admin/other_arv_regimens_admin.py +3 -3
  248. meta_subject/admin/patient_history_admin.py +4 -4
  249. meta_subject/admin/physical_exam_admin.py +1 -1
  250. meta_subject/admin/pregnancy_update_admin.py +1 -1
  251. meta_subject/admin/study_medication_admin.py +8 -15
  252. meta_subject/admin/subject_requisition_admin.py +1 -1
  253. meta_subject/admin/subject_visit_admin.py +1 -1
  254. meta_subject/admin/subject_visit_missed_admin.py +1 -1
  255. meta_subject/admin/urine_dipstick_test_admin.py +1 -1
  256. meta_subject/admin/urine_pregnancy_admin.py +1 -1
  257. meta_subject/baker_recipes.py +15 -15
  258. meta_subject/form_validators/__init__.py +11 -0
  259. meta_subject/form_validators/delivery_form_validator.py +2 -3
  260. meta_subject/form_validators/dm_endpoint_form_validator.py +1 -1
  261. meta_subject/form_validators/dm_followup_form_validator.py +7 -6
  262. meta_subject/form_validators/glucose_form_validator.py +3 -5
  263. meta_subject/forms/__init__.py +41 -0
  264. meta_subject/forms/blood_results/__init__.py +9 -0
  265. meta_subject/forms/blood_results/blood_results_rft_form.py +1 -2
  266. meta_subject/forms/diabetes/__init__.py +2 -0
  267. meta_subject/forms/diabetes/dm_followup_form.py +2 -2
  268. meta_subject/forms/followup_vitals_form.py +3 -8
  269. meta_subject/forms/health_economics/__init__.py +2 -0
  270. meta_subject/forms/next_appointment_form.py +2 -3
  271. meta_subject/forms/slider_widget.py +1 -1
  272. meta_subject/forms/study_medication_form.py +11 -8
  273. meta_subject/management/commands/create_missing_refills.py +3 -3
  274. meta_subject/management/commands/create_missing_rx.py +1 -1
  275. meta_subject/management/commands/missed.py +20 -23
  276. meta_subject/metadata_rules/__init__.py +2 -0
  277. meta_subject/metadata_rules/predicates.py +25 -32
  278. meta_subject/migrations/0001_initial.py +61 -61
  279. meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
  280. meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
  281. meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
  282. meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
  283. meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
  284. meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
  285. meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
  286. meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
  287. meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
  288. meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
  289. meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
  290. meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
  291. meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
  292. meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
  293. meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
  294. meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
  295. meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
  296. meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
  297. meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
  298. meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
  299. meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
  300. meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
  301. meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
  302. meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
  303. meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
  304. meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
  305. meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
  306. meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
  307. meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
  308. meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
  309. meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
  310. meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
  311. meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
  312. meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +5 -6
  313. meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +5 -14
  314. meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
  315. meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +9297 -0
  316. meta_subject/model_mixins/__init__.py +8 -0
  317. meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
  318. meta_subject/model_mixins/vitals_fields_model_mixin.py +1 -1
  319. meta_subject/models/__init__.py +48 -0
  320. meta_subject/models/birth_outcomes.py +3 -3
  321. meta_subject/models/blood_results/__init__.py +11 -0
  322. meta_subject/models/delivery.py +3 -3
  323. meta_subject/models/diabetes/__init__.py +2 -0
  324. meta_subject/models/diabetes/dm_endpoint.py +4 -4
  325. meta_subject/models/diabetes/dm_followup.py +3 -4
  326. meta_subject/models/diet_and_lifestyle.py +2 -2
  327. meta_subject/models/followup_examination.py +11 -11
  328. meta_subject/models/glucose.py +4 -4
  329. meta_subject/models/glucose_fbg.py +2 -3
  330. meta_subject/models/health_economics/__init__.py +2 -0
  331. meta_subject/models/health_economics/health_economics.py +7 -7
  332. meta_subject/models/health_economics/health_economics_update.py +2 -1
  333. meta_subject/models/hepatitis_test.py +2 -2
  334. meta_subject/models/other_arv_regimens_detail.py +1 -1
  335. meta_subject/models/patient_history.py +5 -6
  336. meta_subject/models/physical_exam.py +2 -2
  337. meta_subject/models/pregnancy_update.py +1 -1
  338. meta_subject/models/signals.py +14 -12
  339. meta_subject/models/subject_visit.py +1 -1
  340. meta_subject/models/urine_dipstick_test.py +1 -1
  341. meta_subject/models/urine_pregnancy.py +1 -1
  342. meta_visit_schedule/visit_schedules/__init__.py +2 -0
  343. meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
  344. meta_visit_schedule/visit_schedules/phase_three/schedule.py +2 -2
  345. meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
  346. meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +1 -2
  347. meta_ae/tests/holidays.csv +0 -15
  348. meta_ae/tests/tests/test_actions.py +0 -126
  349. meta_ae/tests/urls.py +0 -10
  350. meta_analytics/dataframes/glucose_endpoints/utils.py +0 -0
  351. meta_analytics/notebooks/anu.ipynb +0 -95
  352. meta_analytics/notebooks/appointment_planning.ipynb +0 -329
  353. meta_analytics/notebooks/arvs.ipynb +0 -103
  354. meta_analytics/notebooks/cleaning/__init__.py +0 -0
  355. meta_analytics/notebooks/cleaning/consent_v1_ext.ipynb +0 -227
  356. meta_analytics/notebooks/cleaning/offschedule_eos.ipynb +0 -353
  357. meta_analytics/notebooks/dsmc/renal_dysfunction.ipynb +0 -435
  358. meta_analytics/notebooks/endpoints/meta_endpoints_by_date.ipynb +0 -656
  359. meta_analytics/notebooks/followup_examination.ipynb +0 -141
  360. meta_analytics/notebooks/hba1c.ipynb +0 -136
  361. meta_analytics/notebooks/hiv_regimens.ipynb +0 -429
  362. meta_analytics/notebooks/incidence.ipynb +0 -232
  363. meta_analytics/notebooks/liver.ipynb +0 -389
  364. meta_analytics/notebooks/magreth.ipynb +0 -645
  365. meta_analytics/notebooks/monitoring_report.ipynb +0 -1834
  366. meta_analytics/notebooks/pharmacy.ipynb +0 -1061
  367. meta_analytics/notebooks/pharmacy_stock_202410.ipynb +0 -306
  368. meta_analytics/notebooks/qa.ipynb +0 -273
  369. meta_analytics/notebooks/steering.ipynb +0 -61
  370. meta_analytics/notebooks/undiagnosed/meta3_screening_consort_chart.ipynb +0 -1176
  371. meta_analytics/notebooks/undiagnosed/meta3_screening_undiagnosed.ipynb +0 -519
  372. meta_analytics/notebooks/undiagnosed/meta_screening_table2.ipynb +0 -964
  373. meta_analytics/notebooks/undiagnosed/screen_undiagnosed_or.ipynb +0 -296
  374. meta_analytics/notebooks/undiagnosed/screening.ipynb +0 -273
  375. meta_analytics/notebooks/undiagnosed/screening2.ipynb +0 -958
  376. meta_analytics/notebooks/undiagnosed/screening_undiagnosed_20241002.ipynb +0 -958
  377. meta_analytics/notebooks/ven.ipynb +0 -191
  378. meta_analytics/notebooks/vitals.ipynb +0 -263
  379. meta_analytics/tests/__init__.py +0 -0
  380. meta_analytics/tests/test_endpoints_by_date.py +0 -94
  381. meta_consent/tests/__init__.py +0 -0
  382. meta_consent/tests/holidays.csv +0 -15
  383. meta_consent/tests/tests/__init__.py +0 -0
  384. meta_consent/tests/tests/test_form_validators.py +0 -110
  385. meta_consent/tests/tests/test_subject_consent.py +0 -10
  386. meta_consent/tests/urls.py +0 -17
  387. meta_dashboard/tests/__init__.py +0 -0
  388. meta_dashboard/tests/admin.py +0 -22
  389. meta_dashboard/tests/holidays.csv +0 -15
  390. meta_dashboard/tests/tests/__init__.py +0 -0
  391. meta_dashboard/tests/urls.py +0 -55
  392. meta_edc/tests/__init__.py +0 -0
  393. meta_edc/tests/tests/__init__.py +0 -0
  394. meta_edc/tests/tests/test_endpoints.py +0 -555
  395. meta_edc-1.1.8.dist-info/METADATA +0 -767
  396. meta_edc-1.1.8.dist-info/WHEEL +0 -5
  397. meta_edc-1.1.8.dist-info/licenses/AUTHORS.rst +0 -8
  398. meta_edc-1.1.8.dist-info/top_level.txt +0 -20
  399. meta_labs/tests/__init__.py +0 -0
  400. meta_labs/tests/test_labs.py +0 -27
  401. meta_labs/tests/test_reportables.py +0 -70
  402. meta_labs/tests/urls.py +0 -4
  403. meta_lists/tests/__init__.py +0 -0
  404. meta_lists/tests/test_lists.py +0 -8
  405. meta_pharmacy/notebooks/pharmacy.ipynb +0 -41
  406. meta_prn/tests/__init__.py +0 -0
  407. meta_prn/tests/tests/__init__.py +0 -0
  408. meta_prn/tests/tests/test_actions.py +0 -97
  409. meta_prn/tests/tests/test_dm_referral.py +0 -203
  410. meta_prn/tests/tests/test_eos_events.py +0 -134
  411. meta_prn/tests/tests/test_manager_order.py +0 -14
  412. meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
  413. meta_prn/tests/urls.py +0 -10
  414. meta_rando/tests/__init__.py +0 -0
  415. meta_rando/tests/tests/__init__.py +0 -0
  416. meta_rando/tests/tests/test_randomizers.py +0 -57
  417. meta_reports/tests/__init__.py +0 -0
  418. meta_reports/tests/test_reports.py +0 -35
  419. meta_reports/tests/test_sql_gen.py +0 -5
  420. meta_reports/tests/urls.py +0 -4
  421. meta_screening/offline_models.py +0 -3
  422. meta_screening/tests/__init__.py +0 -0
  423. meta_screening/tests/holidays.csv +0 -15
  424. meta_screening/tests/meta_test_case_mixin.py +0 -234
  425. meta_screening/tests/options.py +0 -127
  426. meta_screening/tests/tests/__init__.py +0 -0
  427. meta_screening/tests/tests/test_forms.py +0 -404
  428. meta_screening/tests/tests/test_screening_part_one.py +0 -108
  429. meta_screening/tests/tests/test_screening_part_three.py +0 -433
  430. meta_screening/tests/tests/test_screening_part_two.py +0 -84
  431. meta_sites/tests/__init__.py +0 -0
  432. meta_sites/tests/test_sites.py +0 -12
  433. meta_sites/tests/urls.py +0 -4
  434. meta_stats/__init__.py +0 -0
  435. meta_stats/incidence.py +0 -16
  436. meta_stats/models.py +0 -0
  437. meta_stats/tests/__init__.py +0 -0
  438. meta_stats/tests/tests/__init__.py +0 -0
  439. meta_stats/tests/tests/test_incidence.py +0 -10
  440. meta_subject/tests/__init__.py +0 -0
  441. meta_subject/tests/holidays.csv +0 -15
  442. meta_subject/tests/tests/__init__.py +0 -0
  443. meta_subject/tests/tests/test_egfr.py +0 -234
  444. meta_subject/tests/tests/test_fixes.py +0 -64
  445. meta_subject/tests/tests/test_followup.py +0 -52
  446. meta_subject/tests/tests/test_manager_order.py +0 -11
  447. meta_subject/tests/tests/test_medication_adherence.py +0 -79
  448. meta_subject/tests/tests/test_metadata_rules.py +0 -135
  449. meta_subject/tests/tests/test_mnsi.py +0 -341
  450. meta_subject/tests/tests/test_next_appointment.py +0 -231
  451. meta_subject/tests/tests/test_patient_history_form.py +0 -74
  452. meta_subject/tests/tests/test_physical_exam.py +0 -84
  453. meta_subject/tests/tests/test_sf12.py +0 -161
  454. meta_subject/tests/tests/test_study_medication.py +0 -229
  455. meta_subject/tests/urls.py +0 -24
  456. meta_visit_schedule/tests/__init__.py +0 -0
  457. meta_visit_schedule/tests/tests/__init__.py +0 -0
  458. meta_visit_schedule/tests/tests/test_schedule.py +0 -181
  459. meta_visit_schedule/tests/urls.py +0 -4
  460. tests/__init__.py +0 -0
  461. tests/etc/randomization_list.csv +0 -241
  462. tests/etc/randomization_list_phase_three.csv +0 -241
  463. tests/etc/user-aes-local.key +0 -0
  464. tests/etc/user-aes-restricted.key +0 -1
  465. tests/etc/user-rsa-local-private.pem +0 -27
  466. tests/etc/user-rsa-local-public.pem +0 -9
  467. tests/etc/user-rsa-restricted-private.pem +0 -27
  468. tests/etc/user-rsa-restricted-public.pem +0 -9
  469. tests/etc/user-salt-local.key +0 -0
  470. tests/etc/user-salt-restricted.key +0 -0
  471. tests/holidays.csv +0 -15
  472. tests/test_settings.py +0 -185
  473. {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/licenses/LICENSE +0 -0
  474. /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
  475. /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
@@ -35,3 +35,44 @@ from .subject_visit_form import SubjectVisitForm
35
35
  from .subject_visit_missed_form import SubjectVisitMissedForm
36
36
  from .urine_dipstick_test_form import UrineDipstickTestForm
37
37
  from .urine_pregnancy_form import UrinePregnancyForm
38
+
39
+ __all__ = [
40
+ "BirthOutcomesForm",
41
+ "BloodResultsFbcForm",
42
+ "BloodResultsHba1cForm",
43
+ "BloodResultsInsForm",
44
+ "BloodResultsInsForm",
45
+ "BloodResultsLftForm",
46
+ "BloodResultsLipidsForm",
47
+ "BloodResultsRftForm",
48
+ "ComplicationsGlycemiaForm",
49
+ "ConcomitantMedicationForm",
50
+ "DeliveryForm",
51
+ "DmEndpointForm",
52
+ "DmFollowupForm",
53
+ "EgfrDropNotificationForm",
54
+ "Eq5d3lForm",
55
+ "FollowupExaminationForm",
56
+ "FollowupVitalsForm",
57
+ "GlucoseFbgForm",
58
+ "GlucoseForm",
59
+ "HealthEconomicsSimpleForm",
60
+ "HealthEconomicsUpdateForm",
61
+ "HepatitisTestForm",
62
+ "MalariaTestForm",
63
+ "MedicationAdherenceForm",
64
+ "MnsiForm",
65
+ "NextAppointmentForm",
66
+ "OtherArvRegimensDetailForm",
67
+ "OtherArvRegimensForm",
68
+ "PatientHistoryForm",
69
+ "PhysicalExamForm",
70
+ "PregnancyUpdateForm",
71
+ "Sf12Form",
72
+ "StudyMedicationForm",
73
+ "SubjectRequisitionForm",
74
+ "SubjectVisitForm",
75
+ "SubjectVisitMissedForm",
76
+ "UrineDipstickTestForm",
77
+ "UrinePregnancyForm",
78
+ ]
@@ -4,3 +4,12 @@ from .blood_results_ins_form import BloodResultsInsForm
4
4
  from .blood_results_lft_form import BloodResultsLftForm
5
5
  from .blood_results_lipids_form import BloodResultsLipidsForm
6
6
  from .blood_results_rft_form import BloodResultsRftForm
7
+
8
+ __all__ = [
9
+ "BloodResultsFbcForm",
10
+ "BloodResultsHba1cForm",
11
+ "BloodResultsInsForm",
12
+ "BloodResultsLftForm",
13
+ "BloodResultsLipidsForm",
14
+ "BloodResultsRftForm",
15
+ ]
@@ -30,7 +30,6 @@ class BloodResultsRftFormValidator(
30
30
  if self.cleaned_data.get("creatinine_value") and self.cleaned_data.get(
31
31
  "creatinine_units"
32
32
  ):
33
-
34
33
  if is_baseline(self.related_visit):
35
34
  baseline_egfr_value = None
36
35
  else:
@@ -83,7 +82,7 @@ class BloodResultsRftForm(ActionItemCrfFormMixin, CrfModelFormMixin, forms.Model
83
82
  class Meta(ActionItemCrfFormMixin.Meta):
84
83
  model = BloodResultsRft
85
84
  fields = "__all__"
86
- help_texts = {
85
+ help_texts = { # noqa: RUF012
87
86
  "action_identifier": "(read-only)",
88
87
  "egfr_value": mark_safe( # nosec B308
89
88
  "Calculated using 2009 CKD-EPI Creatinine. "
@@ -1,2 +1,4 @@
1
1
  from .dm_endpoint_form import DmEndpointForm
2
2
  from .dm_followup_form import DmFollowupForm
3
+
4
+ __all__ = ["DmEndpointForm", "DmFollowupForm"]
@@ -17,8 +17,8 @@ class DmFollowupForm(CrfModelFormMixin, ActionItemCrfFormMixin, forms.ModelForm)
17
17
  class Meta:
18
18
  model = DmFollowup
19
19
  fields = "__all__"
20
- help_text = {"action_identifier": "(read-only)"}
21
- widgets = {
20
+ help_text = {"action_identifier": "(read-only)"} # noqa: RUF012
21
+ widgets = { # noqa: RUF012
22
22
  "action_identifier": forms.TextInput(
23
23
  attrs={"required": False, "readonly": "readonly"}
24
24
  ),
@@ -9,7 +9,6 @@ from ..models import FollowupVitals
9
9
 
10
10
  class FollowupVitalsFormValidator(CrfFormValidator):
11
11
  def clean(self):
12
-
13
12
  self.required_if(
14
13
  YES, field="waist_circumference_measured", field_required="waist_circumference"
15
14
  )
@@ -17,13 +16,9 @@ class FollowupVitalsFormValidator(CrfFormValidator):
17
16
  visit_code = (
18
17
  f"{self.related_visit.visit_code}.{self.related_visit.visit_code_sequence}"
19
18
  )
20
- require_waist_circumference_comment = (
21
- True
22
- if (
23
- visit_code in [f"{MONTH36}.0", f"{MONTH48}.0"]
24
- or self.cleaned_data.get("waist_circumference_measured") == YES
25
- )
26
- else False
19
+ require_waist_circumference_comment = bool(
20
+ visit_code in [f"{MONTH36}.0", f"{MONTH48}.0"]
21
+ or self.cleaned_data.get("waist_circumference_measured") == YES
27
22
  )
28
23
 
29
24
  if (
@@ -1,2 +1,4 @@
1
1
  from .health_economics_simple_form import HealthEconomicsSimpleForm
2
2
  from .health_economics_update_form import HealthEconomicsUpdateForm
3
+
4
+ __all__ = ["HealthEconomicsSimpleForm", "HealthEconomicsUpdateForm"]
@@ -18,17 +18,16 @@ class NextAppointmentCrfFormValidator(
18
18
 
19
19
 
20
20
  class NextAppointmentForm(CrfModelFormMixin, forms.ModelForm):
21
-
22
21
  form_validator_cls = NextAppointmentCrfFormValidator
23
22
 
24
23
  class Meta:
25
24
  model = NextAppointment
26
25
  fields = "__all__"
27
- labels = {
26
+ labels = { # noqa: RUF012
28
27
  "appt_date": "Next scheduled appointment date",
29
28
  "visitschedule": "Next scheduled appointment",
30
29
  }
31
- help_texts = {
30
+ help_texts = { # noqa: RUF012
32
31
  "appt_date": (
33
32
  "Default recommended. If changed, should be within "
34
33
  "the window period of the next appointment"
@@ -22,4 +22,4 @@ class SliderWidget(Input):
22
22
  return context
23
23
 
24
24
  class Media:
25
- css = {"all": ("meta_subject/slider.css",)}
25
+ css = {"all": ("meta_subject/slider.css",)} # noqa: RUF012
@@ -28,14 +28,17 @@ class StudyMedicationFormValidator(BaseStudyMedicationFormValidator):
28
28
  except AttributeError:
29
29
  self.raise_validation_error("Subject visit is required", INVALID_ERROR)
30
30
  else:
31
- if subject_visit.visit_code == DAY1 and subject_visit.visit_code_sequence == 0:
32
- if (
31
+ if (
32
+ subject_visit.visit_code == DAY1
33
+ and subject_visit.visit_code_sequence == 0
34
+ and (
33
35
  self.cleaned_data.get("dosage_guideline")
34
36
  and self.cleaned_data.get("dosage_guideline").dose != 1000
35
- ):
36
- raise forms.ValidationError(
37
- {"dosage_guideline": "Invalid. Expected 1000mg/day at baseline"}
38
- )
37
+ )
38
+ ):
39
+ raise forms.ValidationError(
40
+ {"dosage_guideline": "Invalid. Expected 1000mg/day at baseline"}
41
+ )
39
42
 
40
43
  def validate_stock_codes_are_dispensed(self):
41
44
  if self.cleaned_data.get("stock_codes"):
@@ -59,7 +62,7 @@ class StudyMedicationFormValidator(BaseStudyMedicationFormValidator):
59
62
  self.subject_identifier
60
63
  ),
61
64
  )
62
- except ObjectDoesNotExist:
65
+ except ObjectDoesNotExist as e:
63
66
  raise forms.ValidationError(
64
67
  {
65
68
  "stock_codes": (
@@ -68,7 +71,7 @@ class StudyMedicationFormValidator(BaseStudyMedicationFormValidator):
68
71
  "Please check the bottle or check with your pharmacist."
69
72
  )
70
73
  }
71
- )
74
+ ) from e
72
75
 
73
76
 
74
77
  class StudyMedicationForm(CrfModelFormMixin, forms.ModelForm):
@@ -39,14 +39,14 @@ def create_missing_rx_refills():
39
39
  print_messages(messages)
40
40
 
41
41
 
42
- def save_or_raise(obj, messages: list[str] = None):
42
+ def save_or_raise(obj, messages: list[str] | None = None):
43
43
  try:
44
44
  obj.save()
45
45
  except NextStudyMedicationError as e:
46
46
  messages.append(f"NextStudyMedicationError: {e}")
47
47
  except ObjectDoesNotExist as e:
48
48
  messages.append(
49
- f"ObjectDoesNotExist: {obj.subject_identifier}, {obj.related_visit}, {str(e)}"
49
+ f"ObjectDoesNotExist: {obj.subject_identifier}, {obj.related_visit}, {e!s}"
50
50
  )
51
51
  except StudyMedicationError as e:
52
52
  messages.append(f"StudyMedicationError: {e}")
@@ -65,5 +65,5 @@ def print_messages(messages: list[str]):
65
65
 
66
66
 
67
67
  class Command(BaseCommand):
68
- def handle(self, *args, **options):
68
+ def handle(self, *args, **options): # noqa: ARG002
69
69
  create_missing_rx_refills()
@@ -39,5 +39,5 @@ def create_missing_rx():
39
39
 
40
40
 
41
41
  class Command(BaseCommand):
42
- def handle(self, *args, **options):
42
+ def handle(self, *args, **options): # noqa: ARG002
43
43
  create_missing_rx()
@@ -46,21 +46,21 @@ def get_missed_visit_codes(subject_identifier: str) -> list[str]:
46
46
  """Return visit codes from SubjectVisitMissed
47
47
  reports for this subject.
48
48
  """
49
- codes = []
50
- for missed_obj in SubjectVisitMissed.objects.filter(
51
- subject_visit__subject_identifier=subject_identifier
52
- ).order_by("report_datetime"):
53
- codes.append(missed_obj.subject_visit.visit_code)
54
- return codes
49
+ return [
50
+ missed_obj.subject_visit.visit_code
51
+ for missed_obj in SubjectVisitMissed.objects.filter(
52
+ subject_visit__subject_identifier=subject_identifier
53
+ ).order_by("report_datetime")
54
+ ]
55
55
 
56
56
 
57
57
  def get_missed_visit_codes_from_subject_visit(subject_identifier: str) -> list[str]:
58
- codes = []
59
- for missed_obj in SubjectVisit.objects.filter(
60
- subject_identifier=subject_identifier, reason=MISSED_VISIT
61
- ).order_by("report_datetime"):
62
- codes.append(missed_obj.visit_code)
63
- return codes
58
+ return [
59
+ missed_obj.visit_code
60
+ for missed_obj in SubjectVisit.objects.filter(
61
+ subject_identifier=subject_identifier, reason=MISSED_VISIT
62
+ ).order_by("report_datetime")
63
+ ]
64
64
 
65
65
 
66
66
  def run():
@@ -70,9 +70,8 @@ def run():
70
70
  RegisteredSubject.objects.all().order_by("subject_identifier"), total=total
71
71
  ):
72
72
  missed_visit_codes = get_missed_visit_codes(obj.subject_identifier)
73
- if len(missed_visit_codes) > 2:
74
- if is_sublist(missed_visit_codes, visit_codes):
75
- result.update({obj.subject_identifier: missed_visit_codes})
73
+ if len(missed_visit_codes) > 2 and is_sublist(missed_visit_codes, visit_codes):
74
+ result.update({obj.subject_identifier: missed_visit_codes})
76
75
  return result
77
76
 
78
77
 
@@ -83,9 +82,8 @@ def run2():
83
82
  RegisteredSubject.objects.all().order_by("subject_identifier"), total=total
84
83
  ):
85
84
  missed_visit_codes = get_missed_visit_codes_from_subject_visit(obj.subject_identifier)
86
- if len(missed_visit_codes) > 2:
87
- if is_sublist(missed_visit_codes, visit_codes):
88
- result.update({obj.subject_identifier: missed_visit_codes})
85
+ if len(missed_visit_codes) > 2 and is_sublist(missed_visit_codes, visit_codes):
86
+ result.update({obj.subject_identifier: missed_visit_codes})
89
87
  return result
90
88
 
91
89
 
@@ -102,9 +100,8 @@ def new_appointments():
102
100
  timepoint_datetime__lte=get_utcnow(),
103
101
  ).order_by("timepoint_datetime"):
104
102
  codes.append(appointment.visit_code)
105
- if len(codes) >= 2:
106
- if is_sublist(codes, visit_codes):
107
- result.update({obj.subject_identifier: codes})
103
+ if len(codes) >= 2 and is_sublist(codes, visit_codes):
104
+ result.update({obj.subject_identifier: codes})
108
105
  return result
109
106
 
110
107
 
@@ -133,7 +130,7 @@ def new_appointments_within(months: int):
133
130
  class Result:
134
131
  """Used with run3."""
135
132
 
136
- def __init__(
133
+ def __init__( # noqa: PLR0913
137
134
  self,
138
135
  subject_identifier: str,
139
136
  sid: str,
@@ -166,7 +163,7 @@ class Result:
166
163
  self.visit_codes = codes
167
164
 
168
165
  def __str__(self):
169
- return self.subject_identifier, self.visit_codes
166
+ return f"{self.subject_identifier} {self.visit_codes}"
170
167
 
171
168
  def formatted(self) -> str:
172
169
  """Copy/paste output into text file"""
@@ -1 +1,3 @@
1
1
  from .metadata_rules import HealthEconomicsRuleGroup
2
+
3
+ __all__ = ["HealthEconomicsRuleGroup"]
@@ -71,26 +71,21 @@ class Predicates(PersistantSingletonMixin):
71
71
  app_label = "meta_subject"
72
72
 
73
73
  @staticmethod
74
- def next_appt_required(visit, **kwargs):
75
- if visit.appointment.next and visit.appointment.next.appt_status == NEW_APPT:
76
- return True
77
- return False
74
+ def next_appt_required(visit, **kwargs): # noqa: ARG004
75
+ return visit.appointment.next and visit.appointment.next.appt_status == NEW_APPT
78
76
 
79
77
  @staticmethod
80
- def glucose_required(visit, **kwargs):
81
- if visit.visit_code in [MONTH12, MONTH24, MONTH36, MONTH48]:
82
- return True
83
- return False
78
+ def glucose_required(visit, **kwargs): # noqa: ARG004
79
+ return visit.visit_code in [MONTH12, MONTH24, MONTH36, MONTH48]
84
80
 
85
81
  @staticmethod
86
- def glucose_fbg_required(visit, **kwargs):
87
- if visit.report_datetime >= datetime(2024, 3, 4, tzinfo=ZoneInfo("UTC")):
88
- if visit.visit_code in [MONTH6, MONTH18, MONTH30, MONTH42]:
89
- return True
90
- return False
82
+ def glucose_fbg_required(visit, **kwargs): # noqa: ARG004
83
+ return visit.report_datetime >= datetime(
84
+ 2024, 3, 4, tzinfo=ZoneInfo("UTC")
85
+ ) and visit.visit_code in [MONTH6, MONTH18, MONTH30, MONTH42]
91
86
 
92
87
  @staticmethod
93
- def pregnancy_notification_exists(visit, **kwargs):
88
+ def pregnancy_notification_exists(visit, **kwargs): # noqa: ARG004
94
89
  model_cls = django_apps.get_model("meta_prn.pregnancynotification")
95
90
  try:
96
91
  model_cls.objects.get(subject_identifier=visit.subject_identifier, delivered=False)
@@ -101,7 +96,7 @@ class Predicates(PersistantSingletonMixin):
101
96
  return required
102
97
 
103
98
  @staticmethod
104
- def hba1c_crf_required(visit, **kwargs) -> bool:
99
+ def hba1c_crf_required(visit, **kwargs) -> bool: # noqa: ARG004
105
100
  """Require at baseline visit if not recorded on the
106
101
  screening form.
107
102
  """
@@ -117,7 +112,7 @@ class Predicates(PersistantSingletonMixin):
117
112
  return required
118
113
 
119
114
  @staticmethod
120
- def hba1c_requisition_required(visit, **kwargs) -> bool:
115
+ def hba1c_requisition_required(visit, **kwargs) -> bool: # noqa: ARG004
121
116
  """Require at baseline visit if not recorded on the
122
117
  screening form.
123
118
  """
@@ -133,7 +128,7 @@ class Predicates(PersistantSingletonMixin):
133
128
  return required
134
129
 
135
130
  @staticmethod
136
- def insulin_crf_required(visit, **kwargs) -> bool:
131
+ def insulin_crf_required(visit, **kwargs) -> bool: # noqa: ARG004
137
132
  """Require at baseline visit"""
138
133
  required = False
139
134
  if (
@@ -150,7 +145,7 @@ class Predicates(PersistantSingletonMixin):
150
145
  return required
151
146
 
152
147
  @staticmethod
153
- def insulin_requisition_required(visit, **kwargs) -> bool:
148
+ def insulin_requisition_required(visit, **kwargs) -> bool: # noqa: ARG004
154
149
  """Require at baseline visit"""
155
150
  required = False
156
151
  if (
@@ -166,7 +161,7 @@ class Predicates(PersistantSingletonMixin):
166
161
  required = True
167
162
  return required
168
163
 
169
- def health_economics_required(self, visit, **kwargs) -> bool:
164
+ def health_economics_required(self, visit, **kwargs) -> bool: # noqa: ARG002
170
165
  """Returns true if HE was not completed at week 2"""
171
166
 
172
167
  required = False
@@ -190,7 +185,7 @@ class Predicates(PersistantSingletonMixin):
190
185
  required = True
191
186
  return required
192
187
 
193
- def health_economics_update_required(self, visit, **kwargs) -> bool:
188
+ def health_economics_update_required(self, visit, **kwargs) -> bool: # noqa: ARG002
194
189
  """Returns true if `healtheconomicsupdate` was not completed at
195
190
  month 3 or ever.
196
191
 
@@ -212,7 +207,7 @@ class Predicates(PersistantSingletonMixin):
212
207
  required = True
213
208
  return required
214
209
 
215
- def mnsi_required(self, visit, **kwargs) -> bool:
210
+ def mnsi_required(self, visit, **kwargs) -> bool: # noqa: ARG002
216
211
  """Returns True if:
217
212
  - MNSI assessment not performed in the 1, 3 or 6M visits
218
213
  - MNSI assessment not performed in the 36, 39, 42, 45M visits
@@ -223,9 +218,7 @@ class Predicates(PersistantSingletonMixin):
223
218
 
224
219
  if self.offschedule_today(visit):
225
220
  return True
226
- elif visit.visit_code_sequence != 0:
227
- required = False
228
- elif visit.visit_code not in [
221
+ if visit.visit_code_sequence != 0 or visit.visit_code not in [
229
222
  MONTH1,
230
223
  MONTH3,
231
224
  MONTH6,
@@ -258,21 +251,21 @@ class Predicates(PersistantSingletonMixin):
258
251
  break
259
252
  return required
260
253
 
261
- def sf12_required(self, visit, **kwargs):
254
+ def sf12_required(self, visit, **kwargs): # noqa: ARG002
262
255
  model = f"{self.app_label}.sf12"
263
- if self.offschedule_today(visit):
264
- return True
265
- elif visit.visit_code_sequence == 0 and visit.visit_code in [MONTH36, MONTH48]:
256
+ if self.offschedule_today(visit) or (
257
+ visit.visit_code_sequence == 0 and visit.visit_code in [MONTH36, MONTH48]
258
+ ):
266
259
  return True
267
260
  return self.persistant_singleton_required(
268
261
  visit, model=model, exclude_visit_codes=[DAY1]
269
262
  )
270
263
 
271
- def eq5d3l_required(self, visit, **kwargs):
264
+ def eq5d3l_required(self, visit, **kwargs): # noqa: ARG002
272
265
  model = f"{self.app_label}.eq5d3l"
273
- if self.offschedule_today(visit):
274
- return True
275
- elif visit.visit_code_sequence == 0 and visit.visit_code in [MONTH36, MONTH48]:
266
+ if self.offschedule_today(visit) or (
267
+ visit.visit_code_sequence == 0 and visit.visit_code in [MONTH36, MONTH48]
268
+ ):
276
269
  return True
277
270
  return self.persistant_singleton_required(
278
271
  visit, model=model, exclude_visit_codes=[DAY1]