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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. meta_ae/action_items.py +38 -27
  2. meta_ae/admin/__init__.py +11 -0
  3. meta_ae/admin/ae_initial_admin.py +5 -2
  4. meta_ae/admin/ae_susar_admin.py +1 -1
  5. meta_ae/admin/death_report_admin.py +1 -1
  6. meta_ae/admin/modeladmin_mixins.py +14 -15
  7. meta_ae/baker_recipes.py +4 -6
  8. meta_ae/choices.py +1 -1
  9. meta_ae/forms/__init__.py +13 -0
  10. meta_ae/forms/death_report_form.py +1 -1
  11. meta_ae/forms/modelform_mixins.py +2 -2
  12. meta_ae/list_data.py +1 -1
  13. meta_ae/migrations/0001_initial.py +27 -27
  14. meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
  15. meta_ae/migrations/0017_auto_20221130_2257.py +1 -1
  16. meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
  17. meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
  18. meta_ae/model_mixins/__init__.py +2 -0
  19. meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
  20. meta_ae/model_mixins/death_report_model_mixin.py +3 -3
  21. meta_ae/models/__init__.py +13 -0
  22. meta_ae/models/hospitalization.py +3 -3
  23. meta_ae/pdf_reports/__init__.py +2 -0
  24. meta_ae/templatetags/meta_ae_extras.py +4 -6
  25. meta_analytics/.DS_Store +0 -0
  26. meta_analytics/README.rst +1 -2
  27. meta_analytics/dataframes/__init__.py +27 -0
  28. meta_analytics/dataframes/constants.py +5 -2
  29. meta_analytics/dataframes/get_eos_df.py +16 -4
  30. meta_analytics/dataframes/get_glucose_df.py +166 -0
  31. meta_analytics/dataframes/get_glucose_fbg_df.py +26 -0
  32. meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +21 -0
  33. meta_analytics/dataframes/get_last_imp_visits_df.py +12 -10
  34. meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
  35. meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +125 -124
  36. meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +111 -235
  37. meta_analytics/dataframes/screening/__init__.py +2 -0
  38. meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
  39. meta_analytics/dataframes/screening/get_screening_df.py +9 -15
  40. meta_analytics/dataframes/utils.py +21 -12
  41. meta_analytics/get_tables.py +1 -2
  42. meta_analytics/tables/__init__.py +2 -0
  43. meta_analytics/tables/enrolled/glucose.py +2 -1
  44. meta_analytics/utils.py +81 -0
  45. meta_auth/auths.py +1 -1
  46. meta_consent/action_items.py +22 -3
  47. meta_consent/admin/__init__.py +7 -0
  48. meta_consent/admin/actions/__init__.py +2 -0
  49. meta_consent/admin/actions/create_missing_prescriptions.py +2 -2
  50. meta_consent/admin/list_filters.py +22 -0
  51. meta_consent/admin/modeladmin_mixins.py +4 -5
  52. meta_consent/admin/subject_consent_v1_ext_admin.py +93 -0
  53. meta_consent/baker_recipes.py +7 -7
  54. meta_consent/consents.py +15 -2
  55. meta_consent/constants.py +1 -0
  56. meta_consent/form_validators/__init__.py +2 -0
  57. meta_consent/forms/__init__.py +8 -0
  58. meta_consent/forms/subject_consent_v1_ext_form.py +47 -0
  59. meta_consent/forms/subject_reconsent_form.py +4 -4
  60. meta_consent/management/commands/create_missing_prescriptions.py +5 -3
  61. meta_consent/migrations/0001_initial.py +9 -9
  62. meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
  63. meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +535 -0
  64. meta_consent/migrations/0027_auto_20250111_0344.py +30 -0
  65. meta_consent/migrations/0028_historicalsubjectconsentv1ext_assessment_score_and_more.py +162 -0
  66. meta_consent/migrations/0029_alter_historicalsubjectconsentv1ext_agrees_to_extension_and_more.py +33 -0
  67. meta_consent/migrations/0030_auto_20250120_2114.py +40 -0
  68. meta_consent/migrations/0031_alter_historicalsubjectconsent_guardian_name_and_more.py +124 -0
  69. meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
  70. meta_consent/migrations/0033_historicalsubjectconsentspfq_subjectconsentspfq.py +615 -0
  71. meta_consent/migrations/0034_remove_subjectconsentspfq_site_and_more.py +23 -0
  72. meta_consent/migrations/0035_alter_historicalsubjectconsent_consent_definition_name_and_more.py +43 -0
  73. meta_consent/models/__init__.py +10 -0
  74. meta_consent/models/model_mixins.py +1 -2
  75. meta_consent/models/signals.py +25 -11
  76. meta_consent/models/subject_consent.py +2 -2
  77. meta_consent/models/subject_consent_v1.py +0 -1
  78. meta_consent/models/subject_consent_v1_ext.py +34 -0
  79. meta_consent/models/subject_reconsent.py +4 -4
  80. meta_dashboard/navbars.py +2 -6
  81. meta_dashboard/patterns.py +1 -1
  82. meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/eligibility_button.html +1 -1
  83. meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/screening_button.html +1 -1
  84. meta_dashboard/templates/meta_dashboard/subject/dashboard/sidebar.html +24 -0
  85. meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/top_bar.html +1 -1
  86. meta_dashboard/templates/meta_dashboard/subject/dashboard.html +14 -0
  87. meta_dashboard/templatetags/meta_dashboard_extras.py +9 -14
  88. meta_dashboard/urls.py +5 -5
  89. meta_dashboard/view_utils/__init__.py +13 -0
  90. meta_dashboard/view_utils/subject_screening_button.py +13 -20
  91. meta_dashboard/views/__init__.py +8 -0
  92. meta_dashboard/views/ae/__init__.py +2 -0
  93. meta_dashboard/views/ae/ae_listboard_view.py +1 -1
  94. meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
  95. meta_dashboard/views/screening/__init__.py +2 -0
  96. meta_dashboard/views/screening/listboard_view.py +2 -3
  97. meta_dashboard/views/subject/__init__.py +2 -0
  98. meta_dashboard/views/subject/dashboard/__init__.py +2 -0
  99. meta_dashboard/views/subject/dashboard/dashboard_view.py +19 -8
  100. meta_dashboard/views/subject/listboard/__init__.py +2 -0
  101. meta_dashboard/views/subject/listboard/listboard_view.py +2 -3
  102. meta_edc/__init__.py +5 -9
  103. meta_edc/admin.py +3 -4
  104. meta_edc/celery.py +2 -2
  105. meta_edc/celery_live.py +19 -0
  106. meta_edc/celery_uat.py +25 -0
  107. meta_edc/management/commands/update_forms_reference.py +16 -14
  108. meta_edc/meta_version.py +2 -2
  109. meta_edc/navbars.py +7 -5
  110. meta_edc/settings/debug.py +13 -4
  111. meta_edc/settings/defaults.py +55 -18
  112. meta_edc/settings/live.py +4 -1
  113. meta_edc/settings/logging.py +9 -4
  114. meta_edc/settings/minimal.py +4 -5
  115. meta_edc/settings/uat.py +3 -1
  116. meta_edc/templates/meta_edc/{bootstrap3/base.html → base.html} +1 -1
  117. meta_edc/templates/meta_edc/{bootstrap3/home.html → home.html} +2 -2
  118. meta_edc/urls.py +3 -1
  119. meta_edc/utils.py +3 -1
  120. meta_edc/views/__init__.py +2 -0
  121. meta_edc/views/home_view.py +1 -2
  122. meta_edc-1.4.0.dist-info/METADATA +174 -0
  123. {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info}/RECORD +578 -586
  124. meta_edc-1.4.0.dist-info/WHEEL +4 -0
  125. meta_labs/list_data.py +2 -2
  126. meta_labs/reportables.py +80 -11
  127. meta_lists/list_data.py +13 -4
  128. meta_lists/migrations/0008_auto_20200528_1517.py +2 -2
  129. meta_lists/migrations/0019_auto_20250128_0143.py +48 -0
  130. meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
  131. meta_pharmacy/admin/__init__.py +5 -0
  132. meta_pharmacy/admin/rx_admin.py +1 -0
  133. meta_pharmacy/admin/substitutions_admin.py +3 -3
  134. meta_pharmacy/constants.py +1 -1
  135. meta_pharmacy/forms/__init__.py +2 -0
  136. meta_pharmacy/forms/rx_form.py +0 -1
  137. meta_pharmacy/forms/substitutions_form.py +6 -4
  138. meta_pharmacy/labels/__init__.py +5 -2
  139. meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +4 -1
  140. meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
  141. meta_pharmacy/labels/label_data.py +1 -2
  142. meta_pharmacy/labels/print_sheets.py +4 -6
  143. meta_pharmacy/management/commands/update_initial_pharmacy_data.py +4 -3
  144. meta_pharmacy/migrations/0002_initial.py +7 -20
  145. meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
  146. meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
  147. meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
  148. meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
  149. meta_pharmacy/models/__init__.py +7 -0
  150. meta_pharmacy/models/label_data.py +4 -5
  151. meta_pharmacy/models/rx_label.py +0 -1
  152. meta_pharmacy/models/substitutions.py +4 -4
  153. meta_pharmacy/prepare_meta_pharmacy.py +1 -1
  154. meta_pharmacy/utils/__init__.py +2 -0
  155. meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
  156. meta_prn/action_items.py +44 -45
  157. meta_prn/admin/__init__.py +16 -0
  158. meta_prn/admin/dm_referral_admin.py +2 -1
  159. meta_prn/admin/end_of_study_admin.py +26 -15
  160. meta_prn/admin/loss_to_followup_admin.py +3 -2
  161. meta_prn/admin/off_study_medication_admin.py +5 -6
  162. meta_prn/admin/offschedule_admin.py +12 -11
  163. meta_prn/admin/offschedule_dm_referral_admin.py +11 -10
  164. meta_prn/admin/offschedule_postnatal_admin.py +15 -7
  165. meta_prn/admin/offschedule_pregnancy_admin.py +18 -9
  166. meta_prn/admin/onschedule_admin.py +7 -8
  167. meta_prn/admin/onschedule_dm_referral_admin.py +11 -12
  168. meta_prn/admin/pregnancy_notification_admin.py +5 -6
  169. meta_prn/admin/protocol_incident_admin.py +1 -1
  170. meta_prn/admin/subject_transfer_admin.py +1 -1
  171. meta_prn/baker_recipes.py +10 -10
  172. meta_prn/choices.py +11 -7
  173. meta_prn/constants.py +1 -0
  174. meta_prn/form_validators/__init__.py +5 -0
  175. meta_prn/form_validators/end_of_study.py +65 -20
  176. meta_prn/form_validators/protocol_incident.py +1 -1
  177. meta_prn/forms/__init__.py +13 -0
  178. meta_prn/forms/dm_referral_form.py +2 -8
  179. meta_prn/forms/end_of_study_form.py +1 -1
  180. meta_prn/forms/loss_to_followup_form.py +1 -1
  181. meta_prn/forms/off_study_medication_form.py +2 -2
  182. meta_prn/forms/offschedule_form.py +25 -0
  183. meta_prn/forms/pregnancy_notification_form.py +15 -17
  184. meta_prn/list_data.py +3 -3
  185. meta_prn/migrations/0001_initial.py +25 -25
  186. meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
  187. meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
  188. meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
  189. meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
  190. meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
  191. meta_prn/migrations/0034_auto_20220630_1110.py +1 -1
  192. meta_prn/migrations/0035_auto_20220630_1140.py +1 -1
  193. meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
  194. meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
  195. meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
  196. meta_prn/migrations/0060_alter_onschedule_managers_and_more.py +55 -0
  197. meta_prn/migrations/0061_auto_20250115_2025.py +56 -0
  198. meta_prn/migrations/0062_alter_endofstudy_offstudy_reason_and_more.py +72 -0
  199. meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py +37 -0
  200. meta_prn/migrations/0064_auto_20250602_2143.py +18 -0
  201. meta_prn/migrations/0065_alter_historicaloffstudymedication_subject_identifier_and_more.py +23 -0
  202. meta_prn/migrations/0066_alter_historicallosstofollowup_subject_identifier_and_more.py +23 -0
  203. meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
  204. meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
  205. meta_prn/migrations/0069_alter_historicaloffstudymedication_singleton_field_and_more.py +37 -0
  206. meta_prn/models/__init__.py +20 -0
  207. meta_prn/models/dm_referral.py +2 -2
  208. meta_prn/models/end_of_study.py +28 -23
  209. meta_prn/models/loss_to_followup.py +8 -10
  210. meta_prn/models/off_study_medication.py +7 -4
  211. meta_prn/models/offschedule.py +4 -4
  212. meta_prn/models/pregnancy_notification.py +3 -5
  213. meta_prn/models/protocol_incident.py +5 -2
  214. meta_prn/models/signals.py +16 -14
  215. meta_prn/models/subject_transfer.py +7 -0
  216. meta_prn/templates/meta_prn/eos/additional_instructions.html +3 -0
  217. meta_prn/templates/meta_prn/offschedule/additional_instructions.html +2 -0
  218. meta_rando/migrations/0001_initial.py +5 -5
  219. meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
  220. meta_rando/migrations/0007_spfqlist.py +197 -0
  221. meta_rando/migrations/0008_delete_spfqlist.py +16 -0
  222. meta_rando/models/__init__.py +1 -0
  223. meta_rando/{models.py → models/randomization_list.py} +3 -3
  224. meta_rando/randomizers.py +2 -2
  225. meta_reports/__init__.py +2 -0
  226. meta_reports/admin/__init__.py +16 -0
  227. meta_reports/admin/dbviews/__init__.py +13 -0
  228. meta_reports/admin/dbviews/glucose_summary_admin.py +7 -7
  229. meta_reports/admin/dbviews/imp_substitutions_admin.py +14 -13
  230. meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
  231. meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
  232. meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +7 -7
  233. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
  234. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
  235. meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
  236. meta_reports/admin/dbviews/on_study_missing_values_admin/unmanaged_model_admin.py +0 -1
  237. meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +9 -9
  238. meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
  239. meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
  240. meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
  241. meta_reports/admin/endpoints_admin.py +1 -1
  242. meta_reports/admin/endpoints_all_admin.py +0 -1
  243. meta_reports/admin/last_imp_refill_admin.py +33 -36
  244. meta_reports/admin/list_filters.py +3 -3
  245. meta_reports/admin/modeladmin_mixins.py +10 -17
  246. meta_reports/death_report.py +2 -2
  247. meta_reports/forms/__init__.py +2 -0
  248. meta_reports/forms/missing_ogtt_note_form.py +3 -4
  249. meta_reports/management/commands/generate_endpoints.py +5 -4
  250. meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
  251. meta_reports/migrations/0054_auto_20250422_2003.py +81 -0
  252. meta_reports/migrations/0055_alter_glucosesummary_table.py +17 -0
  253. meta_reports/migrations/0056_auto_20250422_2214.py +54 -0
  254. meta_reports/migrations/0057_auto_20250422_2224.py +54 -0
  255. meta_reports/migrations/0058_auto_20250422_2232.py +54 -0
  256. meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
  257. meta_reports/migrations/0060_auto_20250926_0242.py +366 -0
  258. meta_reports/migrations/0061_auto_20251004_0043.py +21 -0
  259. meta_reports/migrations/0062_auto_20251004_0106.py +21 -0
  260. meta_reports/models/__init__.py +17 -0
  261. meta_reports/models/dbviews/__init__.py +14 -0
  262. meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
  263. meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +15 -3
  264. meta_reports/models/dbviews/glucose_summary/view_definition.py +8 -5
  265. meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
  266. meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +1 -2
  267. meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
  268. meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
  269. meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +2 -2
  270. meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
  271. meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
  272. meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
  273. meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py +0 -1
  274. meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
  275. meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +19 -1
  276. meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +0 -1
  277. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
  278. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +0 -1
  279. meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
  280. meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +0 -1
  281. meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
  282. meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +0 -1
  283. meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
  284. meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +0 -1
  285. meta_reports/models/endpoints.py +8 -4
  286. meta_reports/models/last_imp_refill.py +2 -3
  287. meta_reports/pdf_report.py +2 -2
  288. meta_reports/tasks.py +4 -3
  289. meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -1
  290. meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +1 -1
  291. meta_reports/templates/meta_reports/endpoints_change_list_note.html +1 -1
  292. meta_reports/templates/meta_reports/last_imp_refill/changelist_note.html +13 -0
  293. meta_screening/admin/__init__.py +8 -0
  294. meta_screening/admin/fieldsets.py +13 -15
  295. meta_screening/admin/list_filters.py +7 -5
  296. meta_screening/admin/screening_part_one_admin.py +1 -3
  297. meta_screening/admin/screening_part_three_admin.py +2 -3
  298. meta_screening/admin/screening_part_two_admin.py +7 -10
  299. meta_screening/admin/subject_refusal_admin.py +5 -3
  300. meta_screening/admin/subject_screening_admin.py +21 -10
  301. meta_screening/baker_recipes.py +18 -10
  302. meta_screening/calculators.py +1 -1
  303. meta_screening/choices.py +1 -1
  304. meta_screening/constants.py +1 -1
  305. meta_screening/eligibility/__init__.py +9 -0
  306. meta_screening/eligibility/eligibility.py +21 -14
  307. meta_screening/eligibility/eligibility_part_one.py +1 -1
  308. meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
  309. meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +68 -49
  310. meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +14 -15
  311. meta_screening/eligibility/eligibility_part_two.py +1 -1
  312. meta_screening/form_validators/__init__.py +8 -0
  313. meta_screening/form_validators/screening_part_one.py +1 -1
  314. meta_screening/form_validators/screening_part_three.py +6 -2
  315. meta_screening/form_validators/screening_part_two.py +1 -1
  316. meta_screening/form_validators/subject_refusal.py +1 -1
  317. meta_screening/forms/__init__.py +20 -0
  318. meta_screening/forms/field_lists.py +16 -18
  319. meta_screening/forms/screening_part_one_form.py +2 -2
  320. meta_screening/forms/screening_part_three_form.py +5 -3
  321. meta_screening/forms/screening_part_two_form.py +1 -5
  322. meta_screening/forms/subject_refusal_form.py +0 -4
  323. meta_screening/forms/subject_screening_form.py +0 -4
  324. meta_screening/migrations/0001_initial.py +15 -15
  325. meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
  326. meta_screening/migrations/0012_auto_20191107_0427.py +1 -1
  327. meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
  328. meta_screening/model_mixins/__init__.py +8 -0
  329. meta_screening/model_mixins/calculated_model_mixin.py +2 -2
  330. meta_screening/model_mixins/creatinine_fields_model_mixin.py +1 -1
  331. meta_screening/model_mixins/eligibility_model_mixin.py +6 -4
  332. meta_screening/model_mixins/part_one_fields_model_mixin.py +16 -19
  333. meta_screening/model_mixins/part_three_fields_model_mixin.py +6 -7
  334. meta_screening/model_mixins/part_two_fields_model_mixin.py +19 -17
  335. meta_screening/models/__init__.py +9 -0
  336. meta_screening/models/icp_referral.py +5 -5
  337. meta_screening/models/proxy_models.py +1 -1
  338. meta_screening/models/signals.py +10 -11
  339. meta_screening/models/subject_refusal.py +1 -1
  340. meta_screening/models/subject_screening.py +2 -4
  341. meta_subject/action_items.py +18 -14
  342. meta_subject/admin/__init__.py +42 -0
  343. meta_subject/admin/birth_outcome_admin.py +7 -9
  344. meta_subject/admin/blood_results/__init__.py +9 -0
  345. meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
  346. meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
  347. meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
  348. meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
  349. meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
  350. meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
  351. meta_subject/admin/complications_glycemia_admin.py +1 -1
  352. meta_subject/admin/delivery_admin.py +8 -11
  353. meta_subject/admin/diabetes/__init__.py +2 -0
  354. meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
  355. meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
  356. meta_subject/admin/egfr_drop_notification_admin.py +1 -1
  357. meta_subject/admin/fields.py +5 -5
  358. meta_subject/admin/fieldsets.py +5 -5
  359. meta_subject/admin/followup_examination_admin.py +11 -9
  360. meta_subject/admin/followup_vitals_admin.py +31 -6
  361. meta_subject/admin/glucose_admin.py +4 -8
  362. meta_subject/admin/glucose_fbg_admin.py +18 -11
  363. meta_subject/admin/health_economics/__init__.py +2 -0
  364. meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
  365. meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
  366. meta_subject/admin/hepatitis_test_admin.py +1 -1
  367. meta_subject/admin/hiv_exit_review_admin.py +55 -0
  368. meta_subject/admin/list_filters.py +5 -5
  369. meta_subject/admin/mnsi_admin.py +7 -5
  370. meta_subject/admin/next_appointment_admin.py +19 -0
  371. meta_subject/admin/other_arv_regimens_admin.py +3 -3
  372. meta_subject/admin/patient_history_admin.py +4 -4
  373. meta_subject/admin/physical_exam_admin.py +1 -1
  374. meta_subject/admin/pregnancy_update_admin.py +1 -1
  375. meta_subject/admin/study_medication_admin.py +8 -15
  376. meta_subject/admin/subject_requisition_admin.py +2 -2
  377. meta_subject/admin/subject_visit_admin.py +1 -1
  378. meta_subject/admin/subject_visit_missed_admin.py +1 -1
  379. meta_subject/admin/urine_dipstick_test_admin.py +1 -1
  380. meta_subject/admin/urine_pregnancy_admin.py +1 -1
  381. meta_subject/baker_recipes.py +15 -15
  382. meta_subject/choices.py +4 -3
  383. meta_subject/form_validators/__init__.py +15 -0
  384. meta_subject/form_validators/delivery_form_validator.py +3 -3
  385. meta_subject/form_validators/dm_endpoint_form_validator.py +3 -1
  386. meta_subject/form_validators/dm_followup_form_validator.py +8 -7
  387. meta_subject/form_validators/egfr_drop_notification_form_validator.py +1 -1
  388. meta_subject/form_validators/followup_examination_form_validator.py +1 -1
  389. meta_subject/form_validators/glucose_fbg_form_validator.py +76 -0
  390. meta_subject/form_validators/glucose_form_validator.py +10 -67
  391. meta_subject/form_validators/hiv_exit_review_form_validator.py +18 -0
  392. meta_subject/form_validators/mixins.py +95 -0
  393. meta_subject/forms/__init__.py +44 -0
  394. meta_subject/forms/blood_results/__init__.py +9 -0
  395. meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -1
  396. meta_subject/forms/blood_results/blood_results_rft_form.py +60 -4
  397. meta_subject/forms/delivery_form.py +2 -0
  398. meta_subject/forms/diabetes/__init__.py +2 -0
  399. meta_subject/forms/diabetes/dm_followup_form.py +2 -2
  400. meta_subject/forms/followup_vitals_form.py +27 -1
  401. meta_subject/forms/glucose_fbg_form.py +1 -46
  402. meta_subject/forms/health_economics/__init__.py +2 -0
  403. meta_subject/forms/hepatitis_test_form.py +1 -1
  404. meta_subject/forms/hiv_exit_review_form.py +13 -0
  405. meta_subject/forms/mixins.py +1 -1
  406. meta_subject/forms/next_appointment_form.py +36 -0
  407. meta_subject/forms/other_arv_regimens_form.py +1 -1
  408. meta_subject/forms/patient_history_form.py +1 -1
  409. meta_subject/forms/physical_exam_form.py +1 -1
  410. meta_subject/forms/pregnancy_update_form.py +1 -1
  411. meta_subject/forms/slider_widget.py +1 -1
  412. meta_subject/forms/study_medication_form.py +18 -12
  413. meta_subject/forms/subject_requisition_form.py +1 -1
  414. meta_subject/forms/subject_visit_missed_form.py +1 -1
  415. meta_subject/forms/urine_dipstick_test_form.py +1 -1
  416. meta_subject/forms/urine_pregnancy_form.py +1 -1
  417. meta_subject/management/commands/create_missing_refills.py +3 -3
  418. meta_subject/management/commands/create_missing_rx.py +2 -2
  419. meta_subject/management/commands/missed.py +20 -23
  420. meta_subject/metadata_rules/__init__.py +2 -0
  421. meta_subject/metadata_rules/metadata_rules.py +14 -0
  422. meta_subject/metadata_rules/predicates.py +44 -25
  423. meta_subject/migrations/0001_initial.py +61 -61
  424. meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
  425. meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
  426. meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
  427. meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
  428. meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
  429. meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
  430. meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
  431. meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
  432. meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
  433. meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
  434. meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
  435. meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
  436. meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
  437. meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
  438. meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
  439. meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
  440. meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
  441. meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
  442. meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
  443. meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
  444. meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
  445. meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
  446. meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
  447. meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
  448. meta_subject/migrations/0107_auto_20220415_0043.py +1 -1
  449. meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
  450. meta_subject/migrations/0128_auto_20220720_0055.py +1 -1
  451. meta_subject/migrations/0131_auto_20220722_0411.py +1 -1
  452. meta_subject/migrations/0135_auto_20220722_2212.py +2 -1
  453. meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
  454. meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
  455. meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
  456. meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
  457. meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
  458. meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
  459. meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
  460. meta_subject/migrations/0199_auto_20240516_0247.py +1 -1
  461. meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
  462. meta_subject/migrations/0212_auto_20240827_2222.py +1 -1
  463. meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +553 -0
  464. meta_subject/migrations/0217_alter_historicalnextappointment_appt_datetime_and_more.py +42 -0
  465. meta_subject/migrations/0218_alter_historicalnextappointment_appt_date_and_more.py +53 -0
  466. meta_subject/migrations/0219_remove_historicalnextappointment_allow_create_interim_and_more.py +92 -0
  467. meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +825 -0
  468. meta_subject/migrations/0221_auto_20250402_1913.py +42 -0
  469. meta_subject/migrations/0222_alter_historicalstudymedication_stock_codes_and_more.py +46 -0
  470. meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py +83 -0
  471. meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py +153 -0
  472. meta_subject/migrations/0225_followupvitals_waist_circumference_and_more.py +46 -0
  473. meta_subject/migrations/0226_followupvitals_waist_circumference_comment_and_more.py +97 -0
  474. meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
  475. meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +2518 -0
  476. meta_subject/migrations/0229_alter_glucosefbg_consent_model_and_more.py +1918 -0
  477. meta_subject/migrations/0230_alter_historicaldelivery_action_identifier_and_more.py +1733 -0
  478. meta_subject/migrations/0231_alter_historicalmedicationadherence_consent_model_and_more.py +2054 -0
  479. meta_subject/migrations/0232_alter_patienthistory_concomitant_conditions_and_more.py +1170 -0
  480. meta_subject/migrations/0233_historicalspfq_spfq.py +1066 -0
  481. meta_subject/migrations/0234_remove_spfq_site_remove_spfq_subject_visit_and_more.py +27 -0
  482. meta_subject/migrations/0235_glucosefbg_endpoint_today_and_more.py +606 -0
  483. meta_subject/migrations/0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more.py +58 -0
  484. meta_subject/migrations/0237_historicalhivexitreview_singleton_field_and_more.py +68 -0
  485. meta_subject/migrations/0238_historicalhivexitreview_available_and_more.py +88 -0
  486. meta_subject/model_mixins/__init__.py +10 -0
  487. meta_subject/model_mixins/arv_history_model_mixin.py +3 -44
  488. meta_subject/model_mixins/arv_review_model_mixin.py +53 -0
  489. meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
  490. meta_subject/model_mixins/vitals_fields_model_mixin.py +33 -0
  491. meta_subject/models/__init__.py +52 -0
  492. meta_subject/models/birth_outcomes.py +3 -3
  493. meta_subject/models/blood_results/__init__.py +11 -0
  494. meta_subject/models/blood_results/blood_results_glu.py +29 -0
  495. meta_subject/models/blood_results/blood_results_hba1c.py +0 -1
  496. meta_subject/models/blood_results/blood_results_ins.py +0 -1
  497. meta_subject/models/blood_results/blood_results_lft.py +0 -1
  498. meta_subject/models/delivery.py +4 -6
  499. meta_subject/models/diabetes/__init__.py +2 -0
  500. meta_subject/models/diabetes/dm_endpoint.py +5 -5
  501. meta_subject/models/diabetes/dm_followup.py +7 -8
  502. meta_subject/models/diet_and_lifestyle.py +2 -2
  503. meta_subject/models/followup_examination.py +12 -14
  504. meta_subject/models/glucose.py +5 -5
  505. meta_subject/models/glucose_fbg.py +17 -4
  506. meta_subject/models/health_economics/__init__.py +2 -0
  507. meta_subject/models/health_economics/health_economics.py +8 -8
  508. meta_subject/models/health_economics/health_economics_simple.py +2 -2
  509. meta_subject/models/health_economics/health_economics_update.py +3 -2
  510. meta_subject/models/hepatitis_test.py +2 -2
  511. meta_subject/models/hiv_exit_review.py +44 -0
  512. meta_subject/models/next_appointment.py +15 -0
  513. meta_subject/models/other_arv_regimens_detail.py +1 -1
  514. meta_subject/models/patient_history.py +6 -7
  515. meta_subject/models/physical_exam.py +2 -2
  516. meta_subject/models/pregnancy_update.py +1 -1
  517. meta_subject/models/signals.py +15 -13
  518. meta_subject/models/subject_visit.py +2 -2
  519. meta_subject/models/todo.txt +1 -1
  520. meta_subject/models/urine_dipstick_test.py +2 -2
  521. meta_subject/models/urine_pregnancy.py +1 -1
  522. meta_subject/static/meta_subject/slider.css +1 -1
  523. meta_subject/templates/meta_subject/endpoint_review_instructions.html +1 -1
  524. meta_subject/templates/meta_subject/widgets/slider.html +0 -1
  525. meta_visit_schedule/visit_schedules/__init__.py +2 -0
  526. meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
  527. meta_visit_schedule/visit_schedules/phase_three/crfs.py +34 -1
  528. meta_visit_schedule/visit_schedules/phase_three/schedule.py +4 -4
  529. meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
  530. meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +2 -3
  531. meta_ae/tests/holidays.csv +0 -15
  532. meta_ae/tests/tests/test_actions.py +0 -127
  533. meta_ae/tests/urls.py +0 -10
  534. meta_analytics/dataframes/enrolled/__init__.py +0 -1
  535. meta_analytics/dataframes/enrolled/get_glucose_df.py +0 -122
  536. meta_analytics/tests/__init__.py +0 -0
  537. meta_analytics/tests/test_endpoints_by_date.py +0 -94
  538. meta_consent/tests/__init__.py +0 -0
  539. meta_consent/tests/holidays.csv +0 -15
  540. meta_consent/tests/tests/__init__.py +0 -0
  541. meta_consent/tests/tests/test_form_validators.py +0 -110
  542. meta_consent/tests/tests/test_subject_consent.py +0 -10
  543. meta_consent/tests/urls.py +0 -17
  544. meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard.html +0 -11
  545. meta_dashboard/tests/__init__.py +0 -0
  546. meta_dashboard/tests/admin.py +0 -22
  547. meta_dashboard/tests/holidays.csv +0 -15
  548. meta_dashboard/tests/tests/__init__.py +0 -0
  549. meta_dashboard/tests/urls.py +0 -55
  550. meta_edc/tests/__init__.py +0 -0
  551. meta_edc/tests/tests/__init__.py +0 -0
  552. meta_edc/tests/tests/test_endpoints.py +0 -554
  553. meta_edc-0.3.39.dist-info/AUTHORS +0 -0
  554. meta_edc-0.3.39.dist-info/METADATA +0 -766
  555. meta_edc-0.3.39.dist-info/WHEEL +0 -5
  556. meta_edc-0.3.39.dist-info/top_level.txt +0 -20
  557. meta_labs/tests/__init__.py +0 -0
  558. meta_labs/tests/test_labs.py +0 -27
  559. meta_labs/tests/test_reportables.py +0 -16
  560. meta_labs/tests/urls.py +0 -4
  561. meta_lists/tests/__init__.py +0 -0
  562. meta_lists/tests/test_lists.py +0 -8
  563. meta_pharmacy/admin/actions.py +0 -38
  564. meta_prn/tests/__init__.py +0 -0
  565. meta_prn/tests/tests/__init__.py +0 -0
  566. meta_prn/tests/tests/test_actions.py +0 -97
  567. meta_prn/tests/tests/test_dm_referral.py +0 -206
  568. meta_prn/tests/tests/test_manager_order.py +0 -14
  569. meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
  570. meta_prn/tests/urls.py +0 -10
  571. meta_rando/tests/__init__.py +0 -0
  572. meta_rando/tests/tests/__init__.py +0 -0
  573. meta_rando/tests/tests/test_randomizers.py +0 -57
  574. meta_reports/tests/__init__.py +0 -0
  575. meta_reports/tests/test_reports.py +0 -35
  576. meta_reports/tests/test_sql_gen.py +0 -5
  577. meta_reports/tests/urls.py +0 -4
  578. meta_screening/offline_models.py +0 -3
  579. meta_screening/tests/__init__.py +0 -0
  580. meta_screening/tests/holidays.csv +0 -15
  581. meta_screening/tests/meta_test_case_mixin.py +0 -216
  582. meta_screening/tests/options.py +0 -127
  583. meta_screening/tests/tests/__init__.py +0 -0
  584. meta_screening/tests/tests/test_forms.py +0 -397
  585. meta_screening/tests/tests/test_screening_part_one.py +0 -108
  586. meta_screening/tests/tests/test_screening_part_three.py +0 -436
  587. meta_screening/tests/tests/test_screening_part_two.py +0 -84
  588. meta_sites/tests/__init__.py +0 -0
  589. meta_sites/tests/test_sites.py +0 -12
  590. meta_sites/tests/urls.py +0 -4
  591. meta_stats/__init__.py +0 -0
  592. meta_stats/incidence.py +0 -16
  593. meta_stats/models.py +0 -0
  594. meta_stats/tests/__init__.py +0 -0
  595. meta_stats/tests/tests/__init__.py +0 -0
  596. meta_stats/tests/tests/test_incidence.py +0 -10
  597. meta_subject/tests/__init__.py +0 -0
  598. meta_subject/tests/holidays.csv +0 -15
  599. meta_subject/tests/tests/__init__.py +0 -0
  600. meta_subject/tests/tests/test_egfr.py +0 -234
  601. meta_subject/tests/tests/test_fixes.py +0 -64
  602. meta_subject/tests/tests/test_followup.py +0 -52
  603. meta_subject/tests/tests/test_manager_order.py +0 -11
  604. meta_subject/tests/tests/test_medication_adherence.py +0 -75
  605. meta_subject/tests/tests/test_metadata_rules.py +0 -135
  606. meta_subject/tests/tests/test_mnsi.py +0 -317
  607. meta_subject/tests/tests/test_patient_history_form.py +0 -74
  608. meta_subject/tests/tests/test_physical_exam.py +0 -84
  609. meta_subject/tests/tests/test_sf12.py +0 -173
  610. meta_subject/tests/tests/test_study_medication.py +0 -230
  611. meta_subject/tests/urls.py +0 -24
  612. meta_visit_schedule/tests/__init__.py +0 -0
  613. meta_visit_schedule/tests/tests/__init__.py +0 -0
  614. meta_visit_schedule/tests/tests/test_schedule.py +0 -181
  615. meta_visit_schedule/tests/urls.py +0 -4
  616. tests/__init__.py +0 -0
  617. tests/etc/randomization_list.csv +0 -241
  618. tests/etc/randomization_list_phase_three.csv +0 -241
  619. tests/etc/user-aes-local.key +0 -0
  620. tests/etc/user-aes-restricted.key +0 -1
  621. tests/etc/user-rsa-local-private.pem +0 -27
  622. tests/etc/user-rsa-local-public.pem +0 -9
  623. tests/etc/user-rsa-restricted-private.pem +0 -27
  624. tests/etc/user-rsa-restricted-public.pem +0 -9
  625. tests/etc/user-salt-local.key +0 -0
  626. tests/etc/user-salt-restricted.key +0 -0
  627. tests/holidays.csv +0 -15
  628. tests/test_settings.py +0 -186
  629. /meta_ae/templates/meta_ae/{bootstrap3/ae_initial_description.html → aeinitial_description.html} +0 -0
  630. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/add_consent_button.html +0 -0
  631. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/dashboard_button.html +0 -0
  632. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/refusal_button.html +0 -0
  633. /meta_dashboard/templates/meta_dashboard/{bootstrap3/screening → screening}/listboard.html +0 -0
  634. /meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/listboard.html +0 -0
  635. {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info/licenses}/LICENSE +0 -0
  636. /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
  637. /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
meta_ae/action_items.py CHANGED
@@ -1,7 +1,21 @@
1
+ from clinicedc_constants import (
2
+ CLOSED,
3
+ DEAD,
4
+ GRADE3,
5
+ GRADE4,
6
+ GRADE5,
7
+ HIGH_PRIORITY,
8
+ LTFU,
9
+ NO,
10
+ YES,
11
+ )
1
12
  from django.apps import apps as django_apps
2
13
  from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
14
+ from django.utils.html import format_html
3
15
  from django.utils.safestring import mark_safe
4
- from edc_action_item import ActionWithNotification, site_action_items
16
+ from django.utils.translation import gettext as _
17
+ from edc_action_item.action_with_notification import ActionWithNotification
18
+ from edc_action_item.site_action_items import site_action_items
5
19
  from edc_adverse_event.constants import (
6
20
  AE_FOLLOWUP_ACTION,
7
21
  AE_INITIAL_ACTION,
@@ -10,7 +24,6 @@ from edc_adverse_event.constants import (
10
24
  DEATH_REPORT_ACTION,
11
25
  DEATH_REPORT_TMG_ACTION,
12
26
  )
13
- from edc_constants.constants import CLOSED, DEAD, HIGH_PRIORITY, NO, YES
14
27
  from edc_lab_results.constants import (
15
28
  BLOOD_RESULTS_FBC_ACTION,
16
29
  BLOOD_RESULTS_GLU_ACTION,
@@ -18,9 +31,7 @@ from edc_lab_results.constants import (
18
31
  BLOOD_RESULTS_LIPIDS_ACTION,
19
32
  BLOOD_RESULTS_RFT_ACTION,
20
33
  )
21
- from edc_ltfu.constants import LOST_TO_FOLLOWUP
22
34
  from edc_notification.utils import get_email_contacts
23
- from edc_reportable import GRADE3, GRADE4, GRADE5
24
35
  from edc_visit_schedule.utils import get_offschedule_models
25
36
 
26
37
  from meta_prn.constants import OFFSTUDY_MEDICATION_ACTION
@@ -32,22 +43,25 @@ class AeFollowupAction(ActionWithNotification):
32
43
  name = AE_FOLLOWUP_ACTION
33
44
  display_name = "Submit AE Followup Report"
34
45
  notification_display_name = "AE Followup Report"
35
- parent_action_names = [AE_INITIAL_ACTION, AE_FOLLOWUP_ACTION]
46
+ parent_action_names = (AE_INITIAL_ACTION, AE_FOLLOWUP_ACTION)
36
47
  reference_model = "meta_ae.aefollowup"
37
48
  related_reference_model = "meta_ae.aeinitial"
38
49
  related_reference_fk_attr = "ae_initial"
39
50
  create_by_user = False
40
51
  show_link_to_changelist = True
41
52
  admin_site_name = "meta_ae_admin"
42
- instructions = mark_safe( # nosec B308, B703
43
- "Upon submission the TMG group will be notified "
44
- f'by email at <a href="mailto:{get_email_contacts("tmg") or "#"}">'
45
- f'{get_email_contacts("tmg") or "unknown"}</a>'
53
+ instructions = format_html(
54
+ _(
55
+ "Upon submission the TMG group will be notified "
56
+ 'by email at <a href="mailto:{email1}">{email2}</a>'
57
+ ),
58
+ email1=get_email_contacts("tmg") or "#",
59
+ email2=get_email_contacts("tmg") or "unknown",
46
60
  )
47
61
  priority = HIGH_PRIORITY
48
62
 
49
63
  def get_next_actions(self):
50
- next_actions = []
64
+ next_actions = ()
51
65
 
52
66
  # add AE followup to next_actions if followup.
53
67
  next_actions = self.append_to_next_if_required(
@@ -66,7 +80,7 @@ class AeFollowupAction(ActionWithNotification):
66
80
  )
67
81
 
68
82
  # add Study termination to next_actions if LTFU
69
- if self.reference_obj.outcome == LOST_TO_FOLLOWUP:
83
+ if self.reference_obj.outcome == LTFU:
70
84
  for offschedule_model in get_offschedule_models(
71
85
  subject_identifier=self.subject_identifier,
72
86
  report_datetime=self.reference_obj.report_datetime,
@@ -84,14 +98,14 @@ class AeInitialAction(ActionWithNotification):
84
98
  name = AE_INITIAL_ACTION
85
99
  display_name = "Submit AE Initial Report"
86
100
  notification_display_name = "AE Initial Report"
87
- parent_action_names = [
101
+ parent_action_names = (
88
102
  BLOOD_RESULTS_LIPIDS_ACTION,
89
103
  BLOOD_RESULTS_GLU_ACTION,
90
104
  BLOOD_RESULTS_LFT_ACTION,
91
105
  BLOOD_RESULTS_RFT_ACTION,
92
106
  BLOOD_RESULTS_FBC_ACTION,
93
107
  FOLLOWUP_EXAMINATION_ACTION,
94
- ]
108
+ )
95
109
  reference_model = "meta_ae.aeinitial"
96
110
  show_link_to_changelist = True
97
111
  show_link_to_add = True
@@ -104,7 +118,7 @@ class AeInitialAction(ActionWithNotification):
104
118
 
105
119
  1. Add death report action if death
106
120
  """
107
- next_actions = []
121
+ next_actions = ()
108
122
  deceased = (
109
123
  self.reference_obj.ae_grade == GRADE5 or self.reference_obj.sae_reason.name == DEAD
110
124
  )
@@ -142,20 +156,18 @@ class AeInitialAction(ActionWithNotification):
142
156
  required=self.reference_obj.ae_grade == GRADE4,
143
157
  )
144
158
  # add next AeTmgAction if G3 and is an SAE
145
- next_actions = self.append_to_next_if_required(
159
+ return self.append_to_next_if_required(
146
160
  next_actions=next_actions,
147
161
  action_name=AE_TMG_ACTION,
148
162
  required=(self.reference_obj.ae_grade == GRADE3 and self.reference_obj.sae == YES),
149
163
  )
150
164
 
151
- return next_actions
152
-
153
165
 
154
166
  class AeSusarAction(ActionWithNotification):
155
167
  name = AE_SUSAR_ACTION
156
168
  display_name = "Submit AE SUSAR Report"
157
169
  notification_display_name = "AE SUSAR Report"
158
- parent_action_names = [AE_INITIAL_ACTION]
170
+ parent_action_names = (AE_INITIAL_ACTION,)
159
171
  reference_model = "meta_ae.aesusar"
160
172
  related_reference_model = "meta_ae.aeinitial"
161
173
  related_reference_fk_attr = "ae_initial"
@@ -170,7 +182,7 @@ class AeTmgAction(ActionWithNotification):
170
182
  name = AE_TMG_ACTION
171
183
  display_name = "TMG AE Report pending"
172
184
  notification_display_name = "TMG AE Report"
173
- parent_action_names = [AE_INITIAL_ACTION, AE_FOLLOWUP_ACTION, AE_TMG_ACTION]
185
+ parent_action_names = (AE_INITIAL_ACTION, AE_FOLLOWUP_ACTION, AE_TMG_ACTION)
174
186
  reference_model = "meta_ae.aetmg"
175
187
  related_reference_model = "meta_ae.aeinitial"
176
188
  related_reference_fk_attr = "ae_initial"
@@ -190,13 +202,13 @@ class DeathReportAction(PregnancyActionItemMixin, ActionWithNotification):
190
202
  display_name = "Submit Death Report"
191
203
  notification_display_name = "Death Report"
192
204
  reference_model = "meta_ae.deathreport"
193
- parent_action_names = [AE_INITIAL_ACTION, AE_FOLLOWUP_ACTION]
205
+ parent_action_names = (AE_INITIAL_ACTION, AE_FOLLOWUP_ACTION)
194
206
  show_link_to_changelist = True
195
207
  show_link_to_add = True
196
208
  admin_site_name = "meta_ae_admin"
197
209
  priority = HIGH_PRIORITY
198
210
  singleton = True
199
- dirty_fields = ["cause_of_death"]
211
+ dirty_fields = ("cause_of_death",)
200
212
 
201
213
  def get_next_actions(self):
202
214
  """Adds 1 DEATHReportTMG if not yet created and
@@ -228,7 +240,7 @@ class DeathReportTmgAction(ActionWithNotification):
228
240
  name = DEATH_REPORT_TMG_ACTION
229
241
  display_name = "TMG Death Report pending"
230
242
  notification_display_name = "TMG Death Report"
231
- parent_action_names = [DEATH_REPORT_ACTION, DEATH_REPORT_TMG_ACTION]
243
+ parent_action_names = (DEATH_REPORT_ACTION, DEATH_REPORT_TMG_ACTION)
232
244
  reference_model = "meta_ae.deathreporttmg"
233
245
  related_reference_model = "meta_ae.deathreport"
234
246
  related_reference_fk_attr = "death_report"
@@ -287,12 +299,11 @@ class DeathReportTmgAction(ActionWithNotification):
287
299
  )
288
300
  .count()
289
301
  < 2
302
+ ) and (
303
+ self.reference_obj.cause_of_death
304
+ != self.related_action_item.reference_obj.cause_of_death
290
305
  ):
291
- if (
292
- self.reference_obj.cause_of_death
293
- != self.related_action_item.reference_obj.cause_of_death
294
- ):
295
- next_actions = ["self"]
306
+ next_actions = ["self"]
296
307
  return next_actions
297
308
 
298
309
 
meta_ae/admin/__init__.py CHANGED
@@ -6,3 +6,14 @@ from .death_report_admin import DeathReportAdmin
6
6
  from .death_report_tmg_admin import DeathReportTmgAdmin
7
7
  from .death_report_tmg_second_admin import DeathReportTmgSecondAdmin
8
8
  from .hospitalization_admin import HospitalizationAdmin
9
+
10
+ __all__ = [
11
+ "AeFollowupAdmin",
12
+ "AeInitialAdmin",
13
+ "AeSusarAdmin",
14
+ "AeTmgAdmin",
15
+ "DeathReportAdmin",
16
+ "DeathReportTmgAdmin",
17
+ "DeathReportTmgSecondAdmin",
18
+ "HospitalizationAdmin",
19
+ ]
@@ -1,5 +1,6 @@
1
1
  from django.contrib import admin
2
2
  from django.utils.html import format_html
3
+ from django.utils.translation import gettext as _
3
4
  from edc_adverse_event.modeladmin_mixins import AeInitialModelAdminMixin
4
5
  from edc_model_admin.history import SimpleHistoryAdmin
5
6
  from edc_notification.utils import get_email_contacts
@@ -15,8 +16,10 @@ class AeInitialAdmin(SiteModelAdminMixin, AeInitialModelAdminMixin, SimpleHistor
15
16
  form = AeInitialForm
16
17
  email_contact = get_email_contacts("ae_reports")
17
18
  additional_instructions = format_html(
18
- "Complete the initial AE report and forward to the TMG. "
19
- 'Email to <a href="mailto:{}">{}</a>',
19
+ _(
20
+ "Complete the initial AE report and forward to the TMG. "
21
+ 'Email to <a href="mailto:{}">{}</a>'
22
+ ),
20
23
  email_contact,
21
24
  email_contact,
22
25
  )
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_adverse_event.modeladmin_mixins import AeSusarModelAdminMixin
2
+ from edc_adverse_event.modeladmin_mixins.ae_susar_admin_mixin import AeSusarModelAdminMixin
3
3
  from edc_model_admin.history import SimpleHistoryAdmin
4
4
  from edc_sites.admin import SiteModelAdminMixin
5
5
 
@@ -65,7 +65,7 @@ class DeathReportAdmin(SiteModelAdminMixin, DeathReportModelAdminMixin, SimpleHi
65
65
  audit_fieldset_tuple,
66
66
  )
67
67
 
68
- radio_fields = {
68
+ radio_fields = { # noqa: RUF012
69
69
  "cause_of_death": admin.VERTICAL,
70
70
  "death_as_inpatient": admin.VERTICAL,
71
71
  "death_location": admin.VERTICAL,
@@ -1,13 +1,13 @@
1
- from typing import Tuple
2
-
1
+ from clinicedc_constants import NO, NOT_APPLICABLE, YES
3
2
  from django.contrib import admin
4
3
  from django.core.exceptions import ObjectDoesNotExist
5
4
  from django.template.loader import render_to_string
6
5
  from django.urls.base import reverse
7
6
  from django.utils.html import format_html
8
7
  from django.utils.safestring import mark_safe
8
+ from django.utils.translation import gettext as _
9
9
  from django_audit_fields.admin import audit_fieldset_tuple
10
- from edc_action_item import action_fieldset_tuple
10
+ from edc_action_item.fieldsets import action_fieldset_tuple
11
11
  from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
12
12
  from edc_adverse_event.forms import AeFollowupForm
13
13
  from edc_adverse_event.modeladmin_mixins import (
@@ -18,7 +18,6 @@ from edc_adverse_event.templatetags.edc_adverse_event_extras import (
18
18
  format_ae_followup_description,
19
19
  select_description_template,
20
20
  )
21
- from edc_constants.constants import NO, NOT_APPLICABLE, YES
22
21
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
23
22
 
24
23
 
@@ -50,13 +49,13 @@ class AeReviewModelAdminMixin(
50
49
  audit_fieldset_tuple,
51
50
  )
52
51
 
53
- radio_fields = {
52
+ radio_fields = { # noqa: RUF012
54
53
  "outcome": admin.VERTICAL,
55
54
  "followup": admin.VERTICAL,
56
55
  "ae_grade": admin.VERTICAL,
57
56
  }
58
57
 
59
- list_display: Tuple[str, ...] = (
58
+ list_display: tuple[str, ...] = (
60
59
  "identifier",
61
60
  "dashboard",
62
61
  "description",
@@ -65,11 +64,10 @@ class AeReviewModelAdminMixin(
65
64
  "user",
66
65
  )
67
66
 
68
- list_filter: Tuple[str, ...] = ("ae_grade", "followup", "outcome_date", "report_datetime")
67
+ list_filter: tuple[str, ...] = ("ae_grade", "followup", "outcome_date", "report_datetime")
69
68
 
70
- search_fields: Tuple[str, ...] = (
69
+ search_fields: tuple[str, ...] = (
71
70
  "action_identifier",
72
- "ae_initial__tracking_identifier",
73
71
  "ae_initial__subject_identifier",
74
72
  "ae_initial__action_identifier",
75
73
  )
@@ -96,8 +94,8 @@ class AeReviewModelAdminMixin(
96
94
  if follow_up_reports:
97
95
  return format_html(
98
96
  "{}. See {}",
99
- mark_safe(obj.get_outcome_display()), # nosec B703, B308
100
- mark_safe(follow_up_reports), # nosec B703, B308
97
+ mark_safe(_(obj.get_outcome_display())), # noqa: S308
98
+ mark_safe(_(follow_up_reports)), # noqa: S308
101
99
  )
102
100
  return obj.get_outcome_display()
103
101
 
@@ -111,12 +109,13 @@ class AeReviewModelAdminMixin(
111
109
  namespace = self.admin_site.name
112
110
  url = reverse(f"{namespace}:{url_name}_changelist")
113
111
  return format_html(
114
- '<a data-toggle="tooltip" title="go to ae initial report" '
112
+ '<a data-toggle="tooltip" title="{title}" '
115
113
  'href="{url}?q={action_identifier}">{identifier}</a>',
116
- url=mark_safe(url), # nosec B703, B308
117
- action_identifier=mark_safe( # nosec B703, B308
114
+ title=_("go to ae initial report"),
115
+ url=mark_safe(url), # noqa: S308
116
+ action_identifier=mark_safe( # noqa: S308
118
117
  obj.ae_initial.action_identifier
119
118
  ),
120
- identifier=mark_safe(obj.ae_initial.identifier), # nosec B703, B308
119
+ identifier=mark_safe(obj.ae_initial.identifier), # noqa: S308
121
120
  )
122
121
  return None
meta_ae/baker_recipes.py CHANGED
@@ -1,7 +1,5 @@
1
- from edc_adverse_event.constants import NOT_RELATED
2
- from edc_constants.constants import NO, NOT_APPLICABLE, YES
3
- from edc_reportable.constants import GRADE4
4
- from edc_utils.date import get_utcnow
1
+ from clinicedc_constants import GRADE4, NO, NOT_APPLICABLE, NOT_RELATED, YES
2
+ from django.utils import timezone
5
3
  from model_bakery.recipe import Recipe
6
4
 
7
5
  from meta_ae.models.ae_followup import AeFollowup
@@ -16,8 +14,8 @@ aeinitial = Recipe(
16
14
  ae_description="A description of this event",
17
15
  ae_grade=GRADE4,
18
16
  ae_study_relation_possibility=YES,
19
- ae_start_date=get_utcnow().date(),
20
- ae_awareness_date=get_utcnow().date(),
17
+ ae_start_date=timezone.now().date(),
18
+ ae_awareness_date=timezone.now().date(),
21
19
  study_drug_relation=NOT_RELATED,
22
20
  ae_treatment="Some special treatment",
23
21
  sae=NO,
meta_ae/choices.py CHANGED
@@ -1,4 +1,4 @@
1
- from edc_constants.constants import OTHER, UNKNOWN
1
+ from clinicedc_constants import OTHER, UNKNOWN
2
2
 
3
3
  from .constants import HOSPITAL_CLINIC
4
4
 
meta_ae/forms/__init__.py CHANGED
@@ -8,3 +8,16 @@ from .death_report_form import DeathReportForm
8
8
  from .death_report_tmg_form import DeathReportTmgForm
9
9
  from .death_report_tmg_second_form import DeathReportTmgSecondForm
10
10
  from .hospitalization_form import HospitalizationForm
11
+
12
+ __all__ = [
13
+ "AeFollowupForm",
14
+ "AeInitialForm",
15
+ "AeLocalReviewForm",
16
+ "AeSponsorReviewForm",
17
+ "AeSusarForm",
18
+ "AeTmgForm",
19
+ "DeathReportForm",
20
+ "DeathReportTmgForm",
21
+ "DeathReportTmgSecondForm",
22
+ "HospitalizationForm",
23
+ ]
@@ -1,7 +1,7 @@
1
+ from clinicedc_constants import OTHER
1
2
  from django import forms
2
3
  from edc_adverse_event.form_validator_mixins import DeathReportFormValidatorMixin
3
4
  from edc_adverse_event.modelform_mixins import DeathReportModelFormMixin
4
- from edc_constants.constants import OTHER
5
5
  from edc_form_validators import FormValidator
6
6
 
7
7
  from ..constants import HOSPITAL_CLINIC
@@ -21,8 +21,8 @@ class AeReviewModelFormMixin(
21
21
  return cleaned_data
22
22
 
23
23
  class Meta:
24
- help_text = {"subject_identifier": "(read-only)", "action_identifier": "(read-only)"}
25
- widgets = {
24
+ help_text = {"subject_identifier": "(read-only)", "action_identifier": "(read-only)"} # noqa: RUF012
25
+ widgets = { # noqa: RUF012
26
26
  "subject_identifier": forms.TextInput(attrs={"readonly": "readonly"}),
27
27
  "action_identifier": forms.TextInput(attrs={"readonly": "readonly"}),
28
28
  }
meta_ae/list_data.py CHANGED
@@ -1,4 +1,4 @@
1
- from edc_constants.constants import DEAD, NOT_APPLICABLE, OTHER, UNKNOWN
1
+ from clinicedc_constants import DEAD, NOT_APPLICABLE, OTHER, UNKNOWN
2
2
 
3
3
  list_data = {
4
4
  "edc_adverse_event.aeclassification": [
@@ -8,7 +8,7 @@ import django.db.models.deletion
8
8
  import django_audit_fields.fields.hostname_modification_field
9
9
  import django_audit_fields.fields.userfield
10
10
  import django_audit_fields.fields.uuid_auto_field
11
- import django_audit_fields.models.audit_model_mixin
11
+ import django.utils.timezone
12
12
  import django_crypto_fields.fields.encrypted_text_field
13
13
  import django_revision.revision_field
14
14
  import edc_action_item.managers
@@ -51,14 +51,14 @@ class Migration(migrations.Migration):
51
51
  "created",
52
52
  models.DateTimeField(
53
53
  blank=True,
54
- default=django_audit_fields.models.audit_model_mixin.utcnow,
54
+ default=django.utils.timezone.now,
55
55
  ),
56
56
  ),
57
57
  (
58
58
  "modified",
59
59
  models.DateTimeField(
60
60
  blank=True,
61
- default=django_audit_fields.models.audit_model_mixin.utcnow,
61
+ default=django.utils.timezone.now,
62
62
  ),
63
63
  ),
64
64
  (
@@ -347,14 +347,14 @@ class Migration(migrations.Migration):
347
347
  "created",
348
348
  models.DateTimeField(
349
349
  blank=True,
350
- default=django_audit_fields.models.audit_model_mixin.utcnow,
350
+ default=django.utils.timezone.now,
351
351
  ),
352
352
  ),
353
353
  (
354
354
  "modified",
355
355
  models.DateTimeField(
356
356
  blank=True,
357
- default=django_audit_fields.models.audit_model_mixin.utcnow,
357
+ default=django.utils.timezone.now,
358
358
  ),
359
359
  ),
360
360
  (
@@ -617,14 +617,14 @@ class Migration(migrations.Migration):
617
617
  "created",
618
618
  models.DateTimeField(
619
619
  blank=True,
620
- default=django_audit_fields.models.audit_model_mixin.utcnow,
620
+ default=django.utils.timezone.now,
621
621
  ),
622
622
  ),
623
623
  (
624
624
  "modified",
625
625
  models.DateTimeField(
626
626
  blank=True,
627
- default=django_audit_fields.models.audit_model_mixin.utcnow,
627
+ default=django.utils.timezone.now,
628
628
  ),
629
629
  ),
630
630
  (
@@ -870,14 +870,14 @@ class Migration(migrations.Migration):
870
870
  "created",
871
871
  models.DateTimeField(
872
872
  blank=True,
873
- default=django_audit_fields.models.audit_model_mixin.utcnow,
873
+ default=django.utils.timezone.now,
874
874
  ),
875
875
  ),
876
876
  (
877
877
  "modified",
878
878
  models.DateTimeField(
879
879
  blank=True,
880
- default=django_audit_fields.models.audit_model_mixin.utcnow,
880
+ default=django.utils.timezone.now,
881
881
  ),
882
882
  ),
883
883
  (
@@ -1123,14 +1123,14 @@ class Migration(migrations.Migration):
1123
1123
  "created",
1124
1124
  models.DateTimeField(
1125
1125
  blank=True,
1126
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1126
+ default=django.utils.timezone.now,
1127
1127
  ),
1128
1128
  ),
1129
1129
  (
1130
1130
  "modified",
1131
1131
  models.DateTimeField(
1132
1132
  blank=True,
1133
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1133
+ default=django.utils.timezone.now,
1134
1134
  ),
1135
1135
  ),
1136
1136
  (
@@ -1436,14 +1436,14 @@ class Migration(migrations.Migration):
1436
1436
  "created",
1437
1437
  models.DateTimeField(
1438
1438
  blank=True,
1439
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1439
+ default=django.utils.timezone.now,
1440
1440
  ),
1441
1441
  ),
1442
1442
  (
1443
1443
  "modified",
1444
1444
  models.DateTimeField(
1445
1445
  blank=True,
1446
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1446
+ default=django.utils.timezone.now,
1447
1447
  ),
1448
1448
  ),
1449
1449
  (
@@ -1726,14 +1726,14 @@ class Migration(migrations.Migration):
1726
1726
  "created",
1727
1727
  models.DateTimeField(
1728
1728
  blank=True,
1729
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1729
+ default=django.utils.timezone.now,
1730
1730
  ),
1731
1731
  ),
1732
1732
  (
1733
1733
  "modified",
1734
1734
  models.DateTimeField(
1735
1735
  blank=True,
1736
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1736
+ default=django.utils.timezone.now,
1737
1737
  ),
1738
1738
  ),
1739
1739
  (
@@ -1948,14 +1948,14 @@ class Migration(migrations.Migration):
1948
1948
  "created",
1949
1949
  models.DateTimeField(
1950
1950
  blank=True,
1951
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1951
+ default=django.utils.timezone.now,
1952
1952
  ),
1953
1953
  ),
1954
1954
  (
1955
1955
  "modified",
1956
1956
  models.DateTimeField(
1957
1957
  blank=True,
1958
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1958
+ default=django.utils.timezone.now,
1959
1959
  ),
1960
1960
  ),
1961
1961
  (
@@ -2288,14 +2288,14 @@ class Migration(migrations.Migration):
2288
2288
  "created",
2289
2289
  models.DateTimeField(
2290
2290
  blank=True,
2291
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2291
+ default=django.utils.timezone.now,
2292
2292
  ),
2293
2293
  ),
2294
2294
  (
2295
2295
  "modified",
2296
2296
  models.DateTimeField(
2297
2297
  blank=True,
2298
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2298
+ default=django.utils.timezone.now,
2299
2299
  ),
2300
2300
  ),
2301
2301
  (
@@ -2531,14 +2531,14 @@ class Migration(migrations.Migration):
2531
2531
  "created",
2532
2532
  models.DateTimeField(
2533
2533
  blank=True,
2534
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2534
+ default=django.utils.timezone.now,
2535
2535
  ),
2536
2536
  ),
2537
2537
  (
2538
2538
  "modified",
2539
2539
  models.DateTimeField(
2540
2540
  blank=True,
2541
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2541
+ default=django.utils.timezone.now,
2542
2542
  ),
2543
2543
  ),
2544
2544
  (
@@ -2750,14 +2750,14 @@ class Migration(migrations.Migration):
2750
2750
  "created",
2751
2751
  models.DateTimeField(
2752
2752
  blank=True,
2753
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2753
+ default=django.utils.timezone.now,
2754
2754
  ),
2755
2755
  ),
2756
2756
  (
2757
2757
  "modified",
2758
2758
  models.DateTimeField(
2759
2759
  blank=True,
2760
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2760
+ default=django.utils.timezone.now,
2761
2761
  ),
2762
2762
  ),
2763
2763
  (
@@ -2999,14 +2999,14 @@ class Migration(migrations.Migration):
2999
2999
  "created",
3000
3000
  models.DateTimeField(
3001
3001
  blank=True,
3002
- default=django_audit_fields.models.audit_model_mixin.utcnow,
3002
+ default=django.utils.timezone.now,
3003
3003
  ),
3004
3004
  ),
3005
3005
  (
3006
3006
  "modified",
3007
3007
  models.DateTimeField(
3008
3008
  blank=True,
3009
- default=django_audit_fields.models.audit_model_mixin.utcnow,
3009
+ default=django.utils.timezone.now,
3010
3010
  ),
3011
3011
  ),
3012
3012
  (
@@ -3180,14 +3180,14 @@ class Migration(migrations.Migration):
3180
3180
  "created",
3181
3181
  models.DateTimeField(
3182
3182
  blank=True,
3183
- default=django_audit_fields.models.audit_model_mixin.utcnow,
3183
+ default=django.utils.timezone.now,
3184
3184
  ),
3185
3185
  ),
3186
3186
  (
3187
3187
  "modified",
3188
3188
  models.DateTimeField(
3189
3189
  blank=True,
3190
- default=django_audit_fields.models.audit_model_mixin.utcnow,
3190
+ default=django.utils.timezone.now,
3191
3191
  ),
3192
3192
  ),
3193
3193
  (
@@ -5,7 +5,7 @@ import django.db.models.deletion
5
5
  import django_audit_fields.fields.hostname_modification_field
6
6
  import django_audit_fields.fields.userfield
7
7
  import django_audit_fields.fields.uuid_auto_field
8
- import django_audit_fields.models.audit_model_mixin
8
+ import django.utils.timezone
9
9
  import django_revision.revision_field
10
10
  import edc_model.models.fields.other_charfield
11
11
  import edc_model.validators.date
@@ -38,14 +38,14 @@ class Migration(migrations.Migration):
38
38
  "created",
39
39
  models.DateTimeField(
40
40
  blank=True,
41
- default=django_audit_fields.models.audit_model_mixin.utcnow,
41
+ default=django.utils.timezone.now,
42
42
  ),
43
43
  ),
44
44
  (
45
45
  "modified",
46
46
  models.DateTimeField(
47
47
  blank=True,
48
- default=django_audit_fields.models.audit_model_mixin.utcnow,
48
+ default=django.utils.timezone.now,
49
49
  ),
50
50
  ),
51
51
  (
@@ -237,14 +237,14 @@ class Migration(migrations.Migration):
237
237
  "created",
238
238
  models.DateTimeField(
239
239
  blank=True,
240
- default=django_audit_fields.models.audit_model_mixin.utcnow,
240
+ default=django.utils.timezone.now,
241
241
  ),
242
242
  ),
243
243
  (
244
244
  "modified",
245
245
  models.DateTimeField(
246
246
  blank=True,
247
- default=django_audit_fields.models.audit_model_mixin.utcnow,
247
+ default=django.utils.timezone.now,
248
248
  ),
249
249
  ),
250
250
  (