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,7 +35,7 @@ class NextApptDateListFilter(PastDateListFilter):
35
35
  field_name = "next_appt_date"
36
36
 
37
37
 
38
- def update_report(modeladmin, request, queryset):
38
+ def update_report(modeladmin, request, queryset): # noqa: ARG001
39
39
  now = get_utcnow()
40
40
  modeladmin.model.objects.all().delete()
41
41
  df = get_last_imp_visits_df()
@@ -68,7 +68,7 @@ def update_report(modeladmin, request, queryset):
68
68
  for _, row in df.iterrows()
69
69
  ]
70
70
  created = len(modeladmin.model.objects.bulk_create(data))
71
- messages.success(request, "{} records were successfully created.".format(created))
71
+ messages.success(request, f"{created} records were successfully created.")
72
72
 
73
73
 
74
74
  @admin.register(LastImpRefill, site=meta_reports_admin)
@@ -83,13 +83,13 @@ class LastImpRefillAdmin(
83
83
 
84
84
  change_list_title = "List of most recent IMP refills per subject"
85
85
 
86
- change_list_note = mark_safe(
86
+ change_list_note = mark_safe( # noqa: S308
87
87
  render_to_string("meta_reports/last_imp_refill/changelist_note.html")
88
88
  ) # nosec B308, B703
89
89
 
90
- actions = [update_report, export_to_csv]
90
+ actions = (update_report, export_to_csv)
91
91
 
92
- list_display = [
92
+ list_display = (
93
93
  "dashboard",
94
94
  "subject_identifier",
95
95
  "imp_visit_code",
@@ -99,17 +99,17 @@ class LastImpRefillAdmin(
99
99
  "next_appt_date",
100
100
  "days_until",
101
101
  "created",
102
- ]
102
+ )
103
103
 
104
- list_filter = [
104
+ list_filter = (
105
105
  ("imp_visit_date", DateRangeFilterBuilder()),
106
106
  ("next_appt_date", DateRangeFilterBuilder()),
107
107
  "imp_visit_code",
108
108
  "next_visit_code",
109
109
  SiteListFilter,
110
- ]
110
+ )
111
111
 
112
- search_fields = ["subject_identifier"]
112
+ search_fields = ("subject_identifier",)
113
113
 
114
114
  def get_queryset(self, request) -> QuerySet:
115
115
  qs = super().get_queryset(request)
@@ -8,13 +8,13 @@ class EndpointListFilter(SimpleListFilter):
8
8
  title = "Endpoint"
9
9
  parameter_name = "endpoint"
10
10
 
11
- def lookups(self, request, model_admin):
11
+ def lookups(self, request, model_admin): # noqa: ARG002
12
12
  return (
13
13
  (YES, YES),
14
14
  (NO, NO),
15
15
  )
16
16
 
17
- def queryset(self, request, queryset):
17
+ def queryset(self, request, queryset): # noqa: ARG002
18
18
  if self.value() == YES:
19
19
  return queryset.filter(
20
20
  subject_identifier__in=Endpoints.objects.values_list(
@@ -1,5 +1,3 @@
1
- from typing import Type
2
-
3
1
  from django.conf import settings
4
2
  from django.contrib import admin
5
3
  from django.contrib.admin import SimpleListFilter
@@ -35,10 +33,10 @@ class EndpointsModelAdminMixin(
35
33
  TemplatesModelAdminMixin,
36
34
  ):
37
35
  queryset_filter: dict | None = None
38
- actions = [update_endpoints_table_action]
36
+ actions = (update_endpoints_table_action,)
39
37
  qa_report_list_display_insert_pos = 3
40
- ordering = ["-fbg_date"]
41
- list_display = [
38
+ ordering = ("-fbg_date",)
39
+ list_display = (
42
40
  "dashboard",
43
41
  "subject",
44
42
  "visit",
@@ -50,15 +48,15 @@ class EndpointsModelAdminMixin(
50
48
  "last_updated",
51
49
  "offstudy_date",
52
50
  "offstudy_reason",
53
- ]
51
+ )
54
52
 
55
- list_filter = [
53
+ list_filter = (
56
54
  "endpoint_label",
57
55
  ScheduleStatusListFilter,
58
56
  SiteListFilter,
59
- ]
57
+ )
60
58
 
61
- search_fields = ["subject_identifier"]
59
+ search_fields = ("subject_identifier",)
62
60
 
63
61
  def get_queryset(self, request) -> QuerySet:
64
62
  qs = super().get_queryset(request)
@@ -66,10 +64,9 @@ class EndpointsModelAdminMixin(
66
64
  qs = qs.filter(**self.queryset_filter)
67
65
  return qs
68
66
 
69
- def get_list_filter(self, request) -> tuple[str | Type[SimpleListFilter], ...]:
67
+ def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
70
68
  list_filter = super().get_list_filter(request)
71
- list_filter = list_filter + (SiteListFilter,)
72
- return list_filter
69
+ return *list_filter, SiteListFilter
73
70
 
74
71
  @admin.display(description="subject", ordering="subject_identifier")
75
72
  def subject(self, obj=None):
@@ -79,10 +76,6 @@ class EndpointsModelAdminMixin(
79
76
  def visit(self, obj=None):
80
77
  return obj.visit_code
81
78
 
82
- # @admin.display(description="FBG DATE", ordering="fbg_date")
83
- # def fbg_date(self, obj=None):
84
- # return obj.fbg_datetime.date() if obj.fbg_datetime else None
85
-
86
79
  @admin.display(description="FAST", ordering="fasting")
87
80
  def fast(self, obj=None):
88
81
  return obj.fasting
@@ -24,7 +24,7 @@ class DeathPdfReport(MetaCrfPdfReport):
24
24
  super().__init__(**kwargs)
25
25
  self.death_report = death_report
26
26
 
27
- def get_report_story(self, **kwargs):
27
+ def get_report_story(self, **kwargs): # noqa: ARG002
28
28
  story = []
29
29
 
30
30
  self.draw_demographics(story)
@@ -1 +1,3 @@
1
1
  from .missing_ogtt_note_form import MissingOgttNoteForm
2
+
3
+ __all__ = ["MissingOgttNoteForm"]
@@ -8,7 +8,6 @@ from ..models import MissingOgttNote
8
8
 
9
9
 
10
10
  class MissingOgttNoteFormValidator(OgttFormValidatorMixin, FormValidator):
11
-
12
11
  def clean(self):
13
12
  self.applicable_if(YES, field="result_status", field_applicable="fasting")
14
13
  self.required_if(YES, NO, field="fasting", field_required="ogtt_base_datetime")
@@ -26,8 +25,8 @@ class MissingOgttNoteForm(FormValidatorMixin, forms.ModelForm):
26
25
  class Meta:
27
26
  model = MissingOgttNote
28
27
  fields = "__all__"
29
- help_text = {"subject_identifier": "(read-only)", "name": "(read-only)"}
30
- widgets = {
28
+ help_text = {"subject_identifier": "(read-only)", "name": "(read-only)"} # noqa: RUF012
29
+ widgets = { # noqa: RUF012
31
30
  "report_model": forms.TextInput(attrs={"readonly": "readonly"}),
32
31
  "subject_identifier": forms.TextInput(attrs={"readonly": "readonly"}),
33
32
  }
@@ -1,13 +1,14 @@
1
+ import sys
2
+
1
3
  from django.core.management import BaseCommand
2
4
 
3
5
  from meta_analytics.dataframes import GlucoseEndpointsByDate
4
6
 
5
7
 
6
8
  class Command(BaseCommand):
7
-
8
- def handle(self, *args, **options):
9
- print("Generating endpoints...")
9
+ def handle(self, *args, **options): # noqa: ARG002
10
+ sys.stdout.write("Generating endpoints...\n")
10
11
  cls = GlucoseEndpointsByDate()
11
12
  cls.run()
12
13
  cls.to_model()
13
- print("Generating endpoints... done.")
14
+ sys.stdout.write("Generating endpoints... done.\n")
@@ -6,7 +6,7 @@ import django.db.models.manager
6
6
  import django_audit_fields.fields.hostname_modification_field
7
7
  import django_audit_fields.fields.userfield
8
8
  import django_audit_fields.fields.uuid_auto_field
9
- import django_audit_fields.models.audit_model_mixin
9
+ import django.utils.timezone
10
10
  import django_revision.revision_field
11
11
  import edc_model.validators.date
12
12
  import edc_sites.managers
@@ -18,7 +18,6 @@ from django.db import migrations, models
18
18
 
19
19
 
20
20
  class Migration(migrations.Migration):
21
-
22
21
  dependencies = [
23
22
  ("meta_reports", "0034_auto_20240823_1642"),
24
23
  ("sites", "0002_alter_domain_unique"),
@@ -42,15 +41,11 @@ class Migration(migrations.Migration):
42
41
  ),
43
42
  (
44
43
  "created",
45
- models.DateTimeField(
46
- blank=True, default=django_audit_fields.models.audit_model_mixin.utcnow
47
- ),
44
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
48
45
  ),
49
46
  (
50
47
  "modified",
51
- models.DateTimeField(
52
- blank=True, default=django_audit_fields.models.audit_model_mixin.utcnow
53
- ),
48
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
54
49
  ),
55
50
  (
56
51
  "user_created",
@@ -262,15 +257,11 @@ class Migration(migrations.Migration):
262
257
  ),
263
258
  (
264
259
  "created",
265
- models.DateTimeField(
266
- blank=True, default=django_audit_fields.models.audit_model_mixin.utcnow
267
- ),
260
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
268
261
  ),
269
262
  (
270
263
  "modified",
271
- models.DateTimeField(
272
- blank=True, default=django_audit_fields.models.audit_model_mixin.utcnow
273
- ),
264
+ models.DateTimeField(blank=True, default=django.utils.timezone.now),
274
265
  ),
275
266
  (
276
267
  "user_created",
@@ -0,0 +1,161 @@
1
+ # Generated by Django 5.2.6 on 2025-09-24 05:45
2
+
3
+ import django.utils.timezone
4
+ import django_revision.revision_field
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ("meta_reports", "0058_auto_20250422_2232"),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.AlterField(
16
+ model_name="endpoints",
17
+ name="created",
18
+ field=models.DateTimeField(default=django.utils.timezone.now),
19
+ ),
20
+ migrations.AlterField(
21
+ model_name="endpoints",
22
+ name="endpoint_label",
23
+ field=models.CharField(default="", max_length=250),
24
+ ),
25
+ migrations.AlterField(
26
+ model_name="endpoints",
27
+ name="fasting",
28
+ field=models.CharField(default="", max_length=10),
29
+ ),
30
+ migrations.AlterField(
31
+ model_name="endpoints",
32
+ name="offstudy_reason",
33
+ field=models.CharField(default="", max_length=250),
34
+ ),
35
+ migrations.AlterField(
36
+ model_name="historicalmissingogttnote",
37
+ name="device_created",
38
+ field=models.CharField(
39
+ blank=True, default="", max_length=10, verbose_name="Device created"
40
+ ),
41
+ ),
42
+ migrations.AlterField(
43
+ model_name="historicalmissingogttnote",
44
+ name="device_modified",
45
+ field=models.CharField(
46
+ blank=True, default="", max_length=10, verbose_name="Device modified"
47
+ ),
48
+ ),
49
+ migrations.AlterField(
50
+ model_name="historicalmissingogttnote",
51
+ name="locale_created",
52
+ field=models.CharField(
53
+ blank=True,
54
+ default="",
55
+ help_text="Auto-updated by Modeladmin",
56
+ max_length=10,
57
+ verbose_name="Locale created",
58
+ ),
59
+ ),
60
+ migrations.AlterField(
61
+ model_name="historicalmissingogttnote",
62
+ name="locale_modified",
63
+ field=models.CharField(
64
+ blank=True,
65
+ default="",
66
+ help_text="Auto-updated by Modeladmin",
67
+ max_length=10,
68
+ verbose_name="Locale modified",
69
+ ),
70
+ ),
71
+ migrations.AlterField(
72
+ model_name="historicalmissingogttnote",
73
+ name="note",
74
+ field=models.TextField(blank=True, default=""),
75
+ ),
76
+ migrations.AlterField(
77
+ model_name="historicalmissingogttnote",
78
+ name="report_datetime",
79
+ field=models.DateTimeField(default=django.utils.timezone.now),
80
+ ),
81
+ migrations.AlterField(
82
+ model_name="historicalmissingogttnote",
83
+ name="revision",
84
+ field=django_revision.revision_field.RevisionField(
85
+ blank=True,
86
+ default="",
87
+ editable=False,
88
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
89
+ max_length=75,
90
+ verbose_name="Revision",
91
+ ),
92
+ ),
93
+ migrations.AlterField(
94
+ model_name="lastimprefill",
95
+ name="created",
96
+ field=models.DateTimeField(default=django.utils.timezone.now),
97
+ ),
98
+ migrations.AlterField(
99
+ model_name="lastimprefill",
100
+ name="visit_code",
101
+ field=models.CharField(default="", max_length=15),
102
+ ),
103
+ migrations.AlterField(
104
+ model_name="missingogttnote",
105
+ name="device_created",
106
+ field=models.CharField(
107
+ blank=True, default="", max_length=10, verbose_name="Device created"
108
+ ),
109
+ ),
110
+ migrations.AlterField(
111
+ model_name="missingogttnote",
112
+ name="device_modified",
113
+ field=models.CharField(
114
+ blank=True, default="", max_length=10, verbose_name="Device modified"
115
+ ),
116
+ ),
117
+ migrations.AlterField(
118
+ model_name="missingogttnote",
119
+ name="locale_created",
120
+ field=models.CharField(
121
+ blank=True,
122
+ default="",
123
+ help_text="Auto-updated by Modeladmin",
124
+ max_length=10,
125
+ verbose_name="Locale created",
126
+ ),
127
+ ),
128
+ migrations.AlterField(
129
+ model_name="missingogttnote",
130
+ name="locale_modified",
131
+ field=models.CharField(
132
+ blank=True,
133
+ default="",
134
+ help_text="Auto-updated by Modeladmin",
135
+ max_length=10,
136
+ verbose_name="Locale modified",
137
+ ),
138
+ ),
139
+ migrations.AlterField(
140
+ model_name="missingogttnote",
141
+ name="note",
142
+ field=models.TextField(blank=True, default=""),
143
+ ),
144
+ migrations.AlterField(
145
+ model_name="missingogttnote",
146
+ name="report_datetime",
147
+ field=models.DateTimeField(default=django.utils.timezone.now),
148
+ ),
149
+ migrations.AlterField(
150
+ model_name="missingogttnote",
151
+ name="revision",
152
+ field=django_revision.revision_field.RevisionField(
153
+ blank=True,
154
+ default="",
155
+ editable=False,
156
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
157
+ max_length=75,
158
+ verbose_name="Revision",
159
+ ),
160
+ ),
161
+ ]
@@ -14,3 +14,20 @@ from .dbviews import (
14
14
  from .endpoints import Endpoints
15
15
  from .endpoints_proxy import EndpointsProxy
16
16
  from .last_imp_refill import LastImpRefill
17
+
18
+ __all__ = [
19
+ "NOTE_STATUSES",
20
+ "Endpoints",
21
+ "EndpointsProxy",
22
+ "GlucoseSummary",
23
+ "ImpSubstitutions",
24
+ "LastImpRefill",
25
+ "MissingOgttNote",
26
+ "MissingScreeningOgtt",
27
+ "OnStudyMissingLabValues",
28
+ "OnStudyMissingValues",
29
+ "PatientHistoryMissingBaselineCd4",
30
+ "UnattendedThreeInRow",
31
+ "UnattendedThreeInRow2",
32
+ "UnattendedTwoInRow",
33
+ ]
@@ -7,3 +7,17 @@ from .patient_history_missing_baseline_cd4 import PatientHistoryMissingBaselineC
7
7
  from .unattended_three_in_row import UnattendedThreeInRow
8
8
  from .unattended_three_in_row2 import UnattendedThreeInRow2
9
9
  from .unattended_two_in_row import UnattendedTwoInRow
10
+
11
+ __all__ = [
12
+ "NOTE_STATUSES",
13
+ "GlucoseSummary",
14
+ "ImpSubstitutions",
15
+ "MissingOgttNote",
16
+ "MissingScreeningOgtt",
17
+ "OnStudyMissingLabValues",
18
+ "OnStudyMissingValues",
19
+ "PatientHistoryMissingBaselineCd4",
20
+ "UnattendedThreeInRow",
21
+ "UnattendedThreeInRow2",
22
+ "UnattendedTwoInRow",
23
+ ]
@@ -1,2 +1,4 @@
1
1
  from .unmanaged_model import GlucoseSummary
2
2
  from .view_definition import get_view_definition
3
+
4
+ __all__ = ["GlucoseSummary", "get_view_definition"]
@@ -6,20 +6,19 @@ from .view_definition import get_view_definition
6
6
 
7
7
 
8
8
  class GlucoseSummary(QaReportModelMixin, DBView):
9
-
10
9
  fbg_value = models.DecimalField(max_digits=8, decimal_places=2, null=True)
11
10
 
12
- fbg_units = models.CharField(max_length=15, null=True)
11
+ fbg_units = models.CharField(max_length=15, default="")
13
12
 
14
13
  fbg_datetime = models.DateTimeField(null=True)
15
14
 
16
15
  ogtt_value = models.DecimalField(max_digits=8, decimal_places=2, null=True)
17
16
 
18
- ogtt_units = models.CharField(max_length=15, null=True)
17
+ ogtt_units = models.CharField(max_length=15, default="")
19
18
 
20
19
  ogtt_datetime = models.DateTimeField(null=True)
21
20
 
22
- fasted = models.CharField(max_length=15, null=True)
21
+ fasted = models.CharField(max_length=15, default="")
23
22
 
24
23
  fasting_duration_delta = models.DurationField(
25
24
  verbose_name="Fasting duration (hrs)", null=True
@@ -35,7 +34,7 @@ class GlucoseSummary(QaReportModelMixin, DBView):
35
34
 
36
35
  offstudy_datetime = models.DateTimeField(null=True)
37
36
 
38
- source = models.CharField(max_length=35, null=True)
37
+ source = models.CharField(max_length=35, default="")
39
38
 
40
39
  view_definition = get_view_definition()
41
40
 
@@ -1 +1,3 @@
1
1
  from .unmanaged_model import ImpSubstitutions
2
+
3
+ __all__ = ["ImpSubstitutions"]
@@ -9,7 +9,7 @@ def get_view_definition() -> dict:
9
9
  from meta_pharmacy_substitutions as s left join meta_rando_randomizationlist as r
10
10
  on r.subject_identifier=s.subject_identifier
11
11
  order by s.subject_identifier
12
- """ # noqa
12
+ """
13
13
  sql_view = SqlViewGenerator(
14
14
  report_model="meta_reports.imp_subjectitutions_view",
15
15
  ordering=["subject_identifier", "site_id"],
@@ -1,2 +1,4 @@
1
1
  from .note_model import NOTE_STATUSES, MissingOgttNote
2
2
  from .unmanaged_model import MissingScreeningOgtt
3
+
4
+ __all__ = ["NOTE_STATUSES", "MissingOgttNote", "MissingScreeningOgtt"]
@@ -1,7 +1,7 @@
1
1
  from django.db import models
2
2
  from edc_constants.choices import YES_NO, YES_NO_NA
3
3
  from edc_constants.constants import COMPLETE, DONE, NOT_APPLICABLE, NOT_AVAILABLE, YES
4
- from edc_glucose.model_mixins import (
4
+ from edc_glucose.model_mixin_factories import (
5
5
  fasting_model_mixin_factory,
6
6
  ogtt_model_mixin_factory,
7
7
  )
@@ -6,7 +6,6 @@ from .view_definition import get_view_definition
6
6
 
7
7
 
8
8
  class MissingScreeningOgtt(QaReportModelMixin, DBView):
9
-
10
9
  screening_datetime = models.DateTimeField(null=True)
11
10
 
12
11
  fbg_datetime = models.DateTimeField(null=True)
@@ -23,9 +22,11 @@ class MissingScreeningOgtt(QaReportModelMixin, DBView):
23
22
 
24
23
  ogtt2_datetime = models.DateTimeField(null=True)
25
24
 
26
- repeated = models.CharField(null=True, max_length=25, help_text="repeat_glucose_performed")
25
+ repeated = models.CharField(
26
+ default="", max_length=25, help_text="repeat_glucose_performed"
27
+ )
27
28
 
28
- p3_ltfu = models.CharField(null=True, max_length=25)
29
+ p3_ltfu = models.CharField(default="", max_length=25)
29
30
 
30
31
  consented = models.BooleanField(null=True)
31
32
 
@@ -1 +1,3 @@
1
1
  from .unmanged_model import OnStudyMissingLabValues
2
+
3
+ __all__ = ["OnStudyMissingLabValues"]
@@ -1,8 +1,10 @@
1
+ import contextlib
2
+
1
3
  from edc_lab_panel.constants import FBC, LFT, LIPIDS, RFT
2
4
  from edc_lab_panel.panels import fbc_panel, lft_panel, lipids_panel, rft_panel
3
5
  from edc_qareports.sql_generator import CrfCase, RequisitionCase
4
6
 
5
- qa_cases = [
7
+ qa_cases: list[RequisitionCase | CrfCase] = [
6
8
  RequisitionCase(
7
9
  label="FBC requisitioned but not entered",
8
10
  dbtable="meta_subject_bloodresultsfbc",
@@ -32,10 +34,8 @@ qa_cases = [
32
34
  panels = {FBC: fbc_panel, RFT: rft_panel, LFT: lft_panel, LIPIDS: lipids_panel}
33
35
  for abbrev, panel in panels.items():
34
36
  for utest_id in panel.utest_ids:
35
- try:
36
- utest_id, _ = utest_id
37
- except ValueError:
38
- pass
37
+ with contextlib.suppress(ValueError):
38
+ utest_id, _ = utest_id # noqa: PLW2901
39
39
  qa_cases.append(
40
40
  CrfCase(
41
41
  label=f"{abbrev.upper()}: missing {utest_id} value/units",
@@ -45,9 +45,11 @@ for abbrev, panel in panels.items():
45
45
  )
46
46
  )
47
47
 
48
- CrfCase(
49
- label="No UREA value",
50
- dbtable="meta_subject_bloodresultsrft",
51
- label_lower="meta_subject.bloodresultsrft",
52
- where="crf.urea_value is null or crf.urea_units is null",
53
- ),
48
+ (
49
+ CrfCase(
50
+ label="No UREA value",
51
+ dbtable="meta_subject_bloodresultsrft",
52
+ label_lower="meta_subject.bloodresultsrft",
53
+ where="crf.urea_value is null or crf.urea_units is null",
54
+ ),
55
+ )
@@ -1 +1,3 @@
1
1
  from .unmanged_model import OnStudyMissingValues
2
+
3
+ __all__ = ["OnStudyMissingValues"]
@@ -1,6 +1,8 @@
1
1
  from edc_constants.constants import OTHER, YES
2
2
  from edc_qareports.sql_generator import CrfCase
3
3
 
4
+ from meta_visit_schedule.constants import MONTH36, MONTH48
5
+
4
6
  qa_cases = [
5
7
  CrfCase(
6
8
  label="No HIV Diagnosis date",
@@ -51,4 +53,20 @@ qa_cases = [
51
53
  f"and ogtt_performed='{YES}'"
52
54
  ),
53
55
  ),
56
+ CrfCase(
57
+ label="Weight",
58
+ dbtable="meta_subject_followupvitals",
59
+ label_lower="meta_subject.followupvitals",
60
+ where="(crf.weight is null and v.visit_code_sequence==0)",
61
+ ),
62
+ CrfCase(
63
+ label="Waist circumference 36/48m",
64
+ dbtable="meta_subject_followupvitals",
65
+ label_lower="meta_subject.followupvitals",
66
+ where=(
67
+ f"(crf.waist_circumference_measured=='{YES}' and crf.waist_circumference "
68
+ "is null) or (crf.waist_circumference is null and v.visit_code in "
69
+ f"['{MONTH36}','{MONTH48}'] and v.visit_code_sequence==0)"
70
+ ),
71
+ ),
54
72
  ]
@@ -1 +1,3 @@
1
1
  from .unmanaged_model import PatientHistoryMissingBaselineCd4
2
+
3
+ __all__ = ["PatientHistoryMissingBaselineCd4"]
@@ -1 +1,3 @@
1
1
  from .unmanaged_model import UnattendedThreeInRow
2
+
3
+ __all__ = ["UnattendedThreeInRow"]
@@ -1 +1,3 @@
1
1
  from .unmanaged_model import UnattendedThreeInRow2
2
+
3
+ __all__ = ["UnattendedThreeInRow2"]
@@ -1 +1,3 @@
1
1
  from .unmanaged_model import UnattendedTwoInRow
2
+
3
+ __all__ = ["UnattendedTwoInRow"]