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
@@ -0,0 +1,382 @@
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_pharmacy", "0009_remove_historicalrx_slug"),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.AlterField(
16
+ model_name="historicallabeldata",
17
+ name="device_created",
18
+ field=models.CharField(
19
+ blank=True, default="", max_length=10, verbose_name="Device created"
20
+ ),
21
+ ),
22
+ migrations.AlterField(
23
+ model_name="historicallabeldata",
24
+ name="device_modified",
25
+ field=models.CharField(
26
+ blank=True, default="", max_length=10, verbose_name="Device modified"
27
+ ),
28
+ ),
29
+ migrations.AlterField(
30
+ model_name="historicallabeldata",
31
+ name="gender",
32
+ field=models.CharField(default="", max_length=5),
33
+ ),
34
+ migrations.AlterField(
35
+ model_name="historicallabeldata",
36
+ name="locale_created",
37
+ field=models.CharField(
38
+ blank=True,
39
+ default="",
40
+ help_text="Auto-updated by Modeladmin",
41
+ max_length=10,
42
+ verbose_name="Locale created",
43
+ ),
44
+ ),
45
+ migrations.AlterField(
46
+ model_name="historicallabeldata",
47
+ name="locale_modified",
48
+ field=models.CharField(
49
+ blank=True,
50
+ default="",
51
+ help_text="Auto-updated by Modeladmin",
52
+ max_length=10,
53
+ verbose_name="Locale modified",
54
+ ),
55
+ ),
56
+ migrations.AlterField(
57
+ model_name="historicallabeldata",
58
+ name="reference",
59
+ field=models.CharField(
60
+ db_index=True, default="", help_text="Bottle reference", max_length=10
61
+ ),
62
+ ),
63
+ migrations.AlterField(
64
+ model_name="historicallabeldata",
65
+ name="revision",
66
+ field=django_revision.revision_field.RevisionField(
67
+ blank=True,
68
+ default="",
69
+ editable=False,
70
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
71
+ max_length=75,
72
+ verbose_name="Revision",
73
+ ),
74
+ ),
75
+ migrations.AlterField(
76
+ model_name="historicallabeldata",
77
+ name="site_name",
78
+ field=models.CharField(default="", max_length=15),
79
+ ),
80
+ migrations.AlterField(
81
+ model_name="historicallabeldata",
82
+ name="subject_identifier",
83
+ field=models.CharField(default="", max_length=15),
84
+ ),
85
+ migrations.AlterField(
86
+ model_name="historicalrx",
87
+ name="action_identifier",
88
+ field=models.CharField(
89
+ blank=True, db_index=True, default="", max_length=50
90
+ ),
91
+ ),
92
+ migrations.AlterField(
93
+ model_name="historicalrx",
94
+ name="action_item_reason",
95
+ field=models.TextField(default="", editable=False),
96
+ ),
97
+ migrations.AlterField(
98
+ model_name="historicalrx",
99
+ name="clinician_initials",
100
+ field=models.CharField(default="", max_length=3),
101
+ ),
102
+ migrations.AlterField(
103
+ model_name="historicalrx",
104
+ name="device_created",
105
+ field=models.CharField(
106
+ blank=True, default="", max_length=10, verbose_name="Device created"
107
+ ),
108
+ ),
109
+ migrations.AlterField(
110
+ model_name="historicalrx",
111
+ name="device_modified",
112
+ field=models.CharField(
113
+ blank=True, default="", max_length=10, verbose_name="Device modified"
114
+ ),
115
+ ),
116
+ migrations.AlterField(
117
+ model_name="historicalrx",
118
+ name="locale_created",
119
+ field=models.CharField(
120
+ blank=True,
121
+ default="",
122
+ help_text="Auto-updated by Modeladmin",
123
+ max_length=10,
124
+ verbose_name="Locale created",
125
+ ),
126
+ ),
127
+ migrations.AlterField(
128
+ model_name="historicalrx",
129
+ name="locale_modified",
130
+ field=models.CharField(
131
+ blank=True,
132
+ default="",
133
+ help_text="Auto-updated by Modeladmin",
134
+ max_length=10,
135
+ verbose_name="Locale modified",
136
+ ),
137
+ ),
138
+ migrations.AlterField(
139
+ model_name="historicalrx",
140
+ name="notes",
141
+ field=models.TextField(
142
+ blank=True,
143
+ default="",
144
+ help_text="Private notes for pharmacist only",
145
+ max_length=250,
146
+ ),
147
+ ),
148
+ migrations.AlterField(
149
+ model_name="historicalrx",
150
+ name="parent_action_identifier",
151
+ field=models.CharField(
152
+ blank=True,
153
+ default="",
154
+ help_text="action identifier that links to parent reference model instance.",
155
+ max_length=30,
156
+ ),
157
+ ),
158
+ migrations.AlterField(
159
+ model_name="historicalrx",
160
+ name="rando_sid",
161
+ field=models.CharField(blank=True, default="", max_length=25),
162
+ ),
163
+ migrations.AlterField(
164
+ model_name="historicalrx",
165
+ name="randomizer_name",
166
+ field=models.CharField(blank=True, default="", max_length=25),
167
+ ),
168
+ migrations.AlterField(
169
+ model_name="historicalrx",
170
+ name="related_action_identifier",
171
+ field=models.CharField(
172
+ blank=True,
173
+ default="",
174
+ help_text="action identifier that links to related reference model instance.",
175
+ max_length=30,
176
+ ),
177
+ ),
178
+ migrations.AlterField(
179
+ model_name="historicalrx",
180
+ name="report_datetime",
181
+ field=models.DateTimeField(default=django.utils.timezone.now),
182
+ ),
183
+ migrations.AlterField(
184
+ model_name="historicalrx",
185
+ name="revision",
186
+ field=django_revision.revision_field.RevisionField(
187
+ blank=True,
188
+ default="",
189
+ editable=False,
190
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
191
+ max_length=75,
192
+ verbose_name="Revision",
193
+ ),
194
+ ),
195
+ migrations.AlterField(
196
+ model_name="historicalrx",
197
+ name="rx_date",
198
+ field=models.DateField(
199
+ default=django.utils.timezone.now, verbose_name="Date RX written"
200
+ ),
201
+ ),
202
+ migrations.AlterField(
203
+ model_name="historicalsubstitutions",
204
+ name="device_created",
205
+ field=models.CharField(
206
+ blank=True, default="", max_length=10, verbose_name="Device created"
207
+ ),
208
+ ),
209
+ migrations.AlterField(
210
+ model_name="historicalsubstitutions",
211
+ name="device_modified",
212
+ field=models.CharField(
213
+ blank=True, default="", max_length=10, verbose_name="Device modified"
214
+ ),
215
+ ),
216
+ migrations.AlterField(
217
+ model_name="historicalsubstitutions",
218
+ name="locale_created",
219
+ field=models.CharField(
220
+ blank=True,
221
+ default="",
222
+ help_text="Auto-updated by Modeladmin",
223
+ max_length=10,
224
+ verbose_name="Locale created",
225
+ ),
226
+ ),
227
+ migrations.AlterField(
228
+ model_name="historicalsubstitutions",
229
+ name="locale_modified",
230
+ field=models.CharField(
231
+ blank=True,
232
+ default="",
233
+ help_text="Auto-updated by Modeladmin",
234
+ max_length=10,
235
+ verbose_name="Locale modified",
236
+ ),
237
+ ),
238
+ migrations.AlterField(
239
+ model_name="historicalsubstitutions",
240
+ name="revision",
241
+ field=django_revision.revision_field.RevisionField(
242
+ blank=True,
243
+ default="",
244
+ editable=False,
245
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
246
+ max_length=75,
247
+ verbose_name="Revision",
248
+ ),
249
+ ),
250
+ migrations.AlterField(
251
+ model_name="historicalsubstitutions",
252
+ name="updated_subject_identifier",
253
+ field=models.CharField(
254
+ blank=True, default="", max_length=50, verbose_name="Taken from subject"
255
+ ),
256
+ ),
257
+ migrations.AlterField(
258
+ model_name="labeldata",
259
+ name="device_created",
260
+ field=models.CharField(
261
+ blank=True, default="", max_length=10, verbose_name="Device created"
262
+ ),
263
+ ),
264
+ migrations.AlterField(
265
+ model_name="labeldata",
266
+ name="device_modified",
267
+ field=models.CharField(
268
+ blank=True, default="", max_length=10, verbose_name="Device modified"
269
+ ),
270
+ ),
271
+ migrations.AlterField(
272
+ model_name="labeldata",
273
+ name="gender",
274
+ field=models.CharField(default="", max_length=5),
275
+ ),
276
+ migrations.AlterField(
277
+ model_name="labeldata",
278
+ name="locale_created",
279
+ field=models.CharField(
280
+ blank=True,
281
+ default="",
282
+ help_text="Auto-updated by Modeladmin",
283
+ max_length=10,
284
+ verbose_name="Locale created",
285
+ ),
286
+ ),
287
+ migrations.AlterField(
288
+ model_name="labeldata",
289
+ name="locale_modified",
290
+ field=models.CharField(
291
+ blank=True,
292
+ default="",
293
+ help_text="Auto-updated by Modeladmin",
294
+ max_length=10,
295
+ verbose_name="Locale modified",
296
+ ),
297
+ ),
298
+ migrations.AlterField(
299
+ model_name="labeldata",
300
+ name="reference",
301
+ field=models.CharField(
302
+ default="", help_text="Bottle reference", max_length=10, unique=True
303
+ ),
304
+ ),
305
+ migrations.AlterField(
306
+ model_name="labeldata",
307
+ name="revision",
308
+ field=django_revision.revision_field.RevisionField(
309
+ blank=True,
310
+ default="",
311
+ editable=False,
312
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
313
+ max_length=75,
314
+ verbose_name="Revision",
315
+ ),
316
+ ),
317
+ migrations.AlterField(
318
+ model_name="labeldata",
319
+ name="site_name",
320
+ field=models.CharField(default="", max_length=15),
321
+ ),
322
+ migrations.AlterField(
323
+ model_name="labeldata",
324
+ name="subject_identifier",
325
+ field=models.CharField(default="", max_length=15),
326
+ ),
327
+ migrations.AlterField(
328
+ model_name="substitutions",
329
+ name="device_created",
330
+ field=models.CharField(
331
+ blank=True, default="", max_length=10, verbose_name="Device created"
332
+ ),
333
+ ),
334
+ migrations.AlterField(
335
+ model_name="substitutions",
336
+ name="device_modified",
337
+ field=models.CharField(
338
+ blank=True, default="", max_length=10, verbose_name="Device modified"
339
+ ),
340
+ ),
341
+ migrations.AlterField(
342
+ model_name="substitutions",
343
+ name="locale_created",
344
+ field=models.CharField(
345
+ blank=True,
346
+ default="",
347
+ help_text="Auto-updated by Modeladmin",
348
+ max_length=10,
349
+ verbose_name="Locale created",
350
+ ),
351
+ ),
352
+ migrations.AlterField(
353
+ model_name="substitutions",
354
+ name="locale_modified",
355
+ field=models.CharField(
356
+ blank=True,
357
+ default="",
358
+ help_text="Auto-updated by Modeladmin",
359
+ max_length=10,
360
+ verbose_name="Locale modified",
361
+ ),
362
+ ),
363
+ migrations.AlterField(
364
+ model_name="substitutions",
365
+ name="revision",
366
+ field=django_revision.revision_field.RevisionField(
367
+ blank=True,
368
+ default="",
369
+ editable=False,
370
+ help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.",
371
+ max_length=75,
372
+ verbose_name="Revision",
373
+ ),
374
+ ),
375
+ migrations.AlterField(
376
+ model_name="substitutions",
377
+ name="updated_subject_identifier",
378
+ field=models.CharField(
379
+ blank=True, default="", max_length=50, verbose_name="Taken from subject"
380
+ ),
381
+ ),
382
+ ]
@@ -1,3 +1,10 @@
1
1
  from .label_data import LabelData
2
2
  from .rx import Rx
3
3
  from .substitutions import MyManager, Substitutions
4
+
5
+ __all__ = [
6
+ "LabelData",
7
+ "MyManager",
8
+ "Rx",
9
+ "Substitutions",
10
+ ]
@@ -9,14 +9,13 @@ random.seed(237548)
9
9
 
10
10
 
11
11
  class LabelData(SiteModelMixin, BaseUuidModel):
12
-
13
- subject_identifier = models.CharField(max_length=15, null=True)
12
+ subject_identifier = models.CharField(max_length=15, default="")
14
13
  sid = models.IntegerField(null=True, help_text="Pharmacy reference")
15
14
  reference = models.CharField(
16
- max_length=10, null=True, unique=True, help_text="Bottle reference"
15
+ max_length=10, default="", unique=True, help_text="Bottle reference"
17
16
  )
18
- site_name = models.CharField(max_length=15, null=True)
19
- gender = models.CharField(max_length=5, null=True)
17
+ site_name = models.CharField(max_length=15, default="")
18
+ gender = models.CharField(max_length=5, default="")
20
19
  pills_per_bottle = models.IntegerField(null=True, default=128)
21
20
 
22
21
  printed_datetime = models.DateTimeField(null=True)
@@ -13,7 +13,6 @@ class LabelIdentifier(SimpleUniqueIdentifier):
13
13
 
14
14
 
15
15
  class RxLabel(BaseUuidModel):
16
-
17
16
  identifier_cls = LabelIdentifier
18
17
 
19
18
  rx = models.ForeignKey(Rx, on_delete=models.PROTECT)
@@ -1,8 +1,8 @@
1
+ from clinicedc_constants import NO, NOT_EVALUATED, YES
1
2
  from django.core.exceptions import ObjectDoesNotExist
2
3
  from django.db import models
3
4
  from django.db.models import Index
4
5
  from edc_constants.choices import YES_NO_NOT_EVALUATED
5
- from edc_constants.constants import NO, NOT_EVALUATED, YES
6
6
  from edc_identifier.model_mixins import NonUniqueSubjectIdentifierFieldMixin
7
7
  from edc_model.models import BaseUuidModel, HistoricalRecords
8
8
  from edc_sites.managers import CurrentSiteManager
@@ -42,7 +42,7 @@ class Substitutions(NonUniqueSubjectIdentifierFieldMixin, SiteModelMixin, BaseUu
42
42
  updated_visit_no = models.IntegerField("Visit Number", null=True, blank=True)
43
43
 
44
44
  updated_subject_identifier = models.CharField(
45
- max_length=50, verbose_name="Taken from subject", null=True, blank=True
45
+ max_length=50, verbose_name="Taken from subject", default="", blank=True
46
46
  )
47
47
 
48
48
  arm_match = models.CharField(
@@ -82,7 +82,7 @@ class Substitutions(NonUniqueSubjectIdentifierFieldMixin, SiteModelMixin, BaseUu
82
82
  class Meta(SiteModelMixin.Meta, BaseUuidModel.Meta):
83
83
  verbose_name_plural = "IMP Substitutions"
84
84
  verbose_name = "IMP Substitution"
85
- indexes = [
85
+ indexes = (
86
86
  Index(fields=["sid", "dispensed_sid", "subject_identifier"]),
87
87
  Index(fields=["row_index"]),
88
- ]
88
+ )
@@ -9,7 +9,7 @@ style = color_style()
9
9
 
10
10
 
11
11
  def prepare_meta_pharmacy():
12
- from django.apps import apps as django_apps
12
+ from django.apps import apps as django_apps # noqa: PLC0415
13
13
 
14
14
  sys.stdout.write(style.MIGRATE_HEADING("Populating static pharmacy models for META3:\n"))
15
15
 
@@ -1 +1,3 @@
1
1
  from .update_initial_pharmacy_data import update_initial_pharmacy_data
2
+
3
+ __all__ = ["update_initial_pharmacy_data"]
@@ -136,7 +136,7 @@ def update_labels():
136
136
  LabelSpecification().save()
137
137
  default = LabelSpecification.objects.get(name="default")
138
138
 
139
- for name, label_config in site_label_configs.registry.items():
139
+ for name in site_label_configs.registry:
140
140
  LabelConfiguration.objects.create(name=name, label_specification=default)
141
141
  for label_configuration in LabelConfiguration.objects.filter(name__contains="patient"):
142
142
  label_configuration.requires_allocation = True
meta_prn/action_items.py CHANGED
@@ -1,9 +1,9 @@
1
+ from clinicedc_constants import HIGH_PRIORITY, NOT_SURE, TBD, YES
1
2
  from django.apps import apps as django_apps
2
3
  from django.utils.safestring import mark_safe
3
4
  from edc_action_item.action_with_notification import ActionWithNotification
4
5
  from edc_action_item.site_action_items import site_action_items
5
6
  from edc_adverse_event.constants import DEATH_REPORT_ACTION
6
- from edc_constants.constants import HIGH_PRIORITY, NOT_SURE, TBD, YES
7
7
  from edc_lab_results import BLOOD_RESULTS_RFT_ACTION
8
8
  from edc_ltfu.constants import LTFU_ACTION
9
9
  from edc_offstudy.constants import END_OF_STUDY_ACTION
@@ -38,12 +38,13 @@ class OffscheduleAction(ActionWithNotification):
38
38
  name = OFFSCHEDULE_ACTION
39
39
  display_name = "Submit Off-Schedule"
40
40
  notification_display_name = "Off-Schedule"
41
- parent_action_names = [
41
+ parent_action_names = (
42
42
  UNBLINDING_REVIEW_ACTION,
43
43
  DEATH_REPORT_ACTION,
44
44
  LTFU_ACTION,
45
45
  BLOOD_RESULTS_RFT_ACTION,
46
- ]
46
+ SUBJECT_TRANSFER_ACTION,
47
+ )
47
48
  reference_model = "meta_prn.offschedule"
48
49
  show_link_to_changelist = True
49
50
  admin_site_name = "meta_prn_admin"
@@ -68,12 +69,13 @@ class OffschedulePregnancyAction(ActionWithNotification):
68
69
  name = OFFSCHEDULE_PREGNANCY_ACTION
69
70
  display_name = "Submit Off-Schedule (Pregnancy)"
70
71
  notification_display_name = "Off-Schedule (Pregnancy)"
71
- parent_action_names = [
72
+ parent_action_names = (
72
73
  UNBLINDING_REVIEW_ACTION,
73
74
  DEATH_REPORT_ACTION,
74
75
  LTFU_ACTION,
76
+ SUBJECT_TRANSFER_ACTION,
75
77
  DELIVERY_ACTION,
76
- ]
78
+ )
77
79
  reference_model = "meta_prn.offschedulepregnancy"
78
80
  show_link_to_changelist = True
79
81
  admin_site_name = "meta_prn_admin"
@@ -81,20 +83,39 @@ class OffschedulePregnancyAction(ActionWithNotification):
81
83
  singleton = True
82
84
 
83
85
  def get_next_actions(self):
84
- next_actions = [END_OF_STUDY_ACTION]
85
- return next_actions
86
+ return [END_OF_STUDY_ACTION]
87
+
88
+
89
+ class OffscheduleDmReferralAction(ActionWithNotification):
90
+ name = OFFSCHEDULE_DM_REFERRAL_ACTION
91
+ display_name = "Submit Off-Schedule (Diabetes Referral)"
92
+ notification_display_name = "Off-Schedule (Diabetes Referral)"
93
+ parent_action_names = (
94
+ DM_FOLLOWUP_ACTION,
95
+ DEATH_REPORT_ACTION,
96
+ LTFU_ACTION,
97
+ SUBJECT_TRANSFER_ACTION,
98
+ )
99
+ reference_model = "meta_prn.offscheduledmreferral"
100
+ show_link_to_changelist = True
101
+ admin_site_name = "meta_prn_admin"
102
+ priority = HIGH_PRIORITY
103
+ singleton = True
104
+
105
+ def get_next_actions(self):
106
+ return [END_OF_STUDY_ACTION]
86
107
 
87
108
 
88
109
  class EndOfStudyAction(ActionWithNotification):
89
110
  name = END_OF_STUDY_ACTION
90
111
  display_name = "Submit End of Study Report"
91
112
  notification_display_name = "End of Study Report"
92
- parent_action_names = [
93
- # OFFSCHEDULE_ACTION,
113
+ parent_action_names = (
114
+ OFFSCHEDULE_ACTION,
94
115
  OFFSTUDY_MEDICATION_ACTION,
95
116
  OFFSCHEDULE_PREGNANCY_ACTION,
96
117
  OFFSCHEDULE_DM_REFERRAL_ACTION,
97
- ]
118
+ )
98
119
  reference_model = "meta_prn.endofstudy"
99
120
  show_link_to_changelist = True
100
121
  admin_site_name = "meta_prn_admin"
@@ -106,7 +127,7 @@ class LossToFollowupAction(PregnancyActionItemMixin, ActionWithNotification):
106
127
  name = LTFU_ACTION
107
128
  display_name = "Submit Loss to Follow Up Report"
108
129
  notification_display_name = " Loss to Follow Up Report"
109
- parent_action_names = [MISSED_VISIT_ACTION]
130
+ parent_action_names = (MISSED_VISIT_ACTION,)
110
131
  reference_model = "meta_prn.losstofollowup"
111
132
  show_link_to_changelist = True
112
133
  show_link_to_add = True
@@ -115,15 +136,14 @@ class LossToFollowupAction(PregnancyActionItemMixin, ActionWithNotification):
115
136
  singleton = True
116
137
 
117
138
  def get_next_actions(self):
118
- next_actions = [self.get_next_offschedule_action(), OFFSTUDY_MEDICATION_ACTION]
119
- return next_actions
139
+ return [self.get_next_offschedule_action(), OFFSTUDY_MEDICATION_ACTION]
120
140
 
121
141
 
122
142
  class PregnancyNotificationAction(ActionWithNotification):
123
143
  name = PREGNANCY_NOTIFICATION_ACTION
124
144
  display_name = "Submit Pregnancy Notification"
125
145
  notification_display_name = "Pregnancy Notification"
126
- parent_action_names = [URINE_PREGNANCY_ACTION]
146
+ parent_action_names = (URINE_PREGNANCY_ACTION,)
127
147
  reference_model = "meta_prn.pregnancynotification"
128
148
  show_link_to_changelist = True
129
149
  show_link_to_add = True
@@ -137,7 +157,7 @@ class DmReferralAction(ActionWithNotification):
137
157
  name = DM_REFFERAL_ACTION
138
158
  display_name = "Diabetes referral"
139
159
  notification_display_name = "Diabetes referral"
140
- parent_action_names = [OFFSTUDY_MEDICATION_ACTION]
160
+ parent_action_names = (OFFSTUDY_MEDICATION_ACTION,)
141
161
  reference_model = "meta_prn.dmreferral"
142
162
  show_link_to_changelist = True
143
163
  show_link_to_add = True
@@ -146,36 +166,19 @@ class DmReferralAction(ActionWithNotification):
146
166
  singleton = True
147
167
 
148
168
  def get_next_actions(self):
149
- next_actions = [DM_FOLLOWUP_ACTION]
150
- return next_actions
151
-
152
-
153
- class OffscheduleDmReferralAction(ActionWithNotification):
154
- name = OFFSCHEDULE_DM_REFERRAL_ACTION
155
- display_name = "Submit Off-Schedule (Diabetes Referral)"
156
- notification_display_name = "Off-Schedule (Diabetes Referral)"
157
- parent_action_names = [DM_FOLLOWUP_ACTION]
158
- reference_model = "meta_prn.offscheduledmreferral"
159
- show_link_to_changelist = True
160
- admin_site_name = "meta_prn_admin"
161
- priority = HIGH_PRIORITY
162
- singleton = True
163
-
164
- def get_next_actions(self):
165
- next_actions = [END_OF_STUDY_ACTION]
166
- return next_actions
169
+ return [DM_FOLLOWUP_ACTION]
167
170
 
168
171
 
169
172
  class OffStudyMedicationAction(ActionWithNotification):
170
173
  name = OFFSTUDY_MEDICATION_ACTION
171
174
  display_name = "Withdrawal Study Medication"
172
175
  notification_display_name = "Withdrawal Study Medication"
173
- parent_action_names = [
176
+ parent_action_names = (
174
177
  OFFSCHEDULE_ACTION,
175
178
  LTFU_ACTION,
176
179
  SUBJECT_TRANSFER_ACTION,
177
180
  DEATH_REPORT_ACTION,
178
- ]
181
+ )
179
182
  reference_model = "meta_prn.offstudymedication"
180
183
  show_link_to_changelist = True
181
184
  show_link_to_add = True
@@ -195,7 +198,7 @@ class UnblindingRequestAction(ActionWithNotification):
195
198
  name = UNBLINDING_REQUEST_ACTION
196
199
  display_name = "Unblinding request"
197
200
  notification_display_name = " Unblinding request"
198
- parent_action_names = []
201
+ parent_action_names = ()
199
202
  reference_model = "edc_unblinding.unblindingrequest"
200
203
  show_link_to_changelist = True
201
204
  show_link_to_add = True
@@ -203,20 +206,18 @@ class UnblindingRequestAction(ActionWithNotification):
203
206
  priority = HIGH_PRIORITY
204
207
 
205
208
  def get_next_actions(self):
206
- next_actions = []
207
- next_actions = self.append_to_next_if_required(
208
- next_actions=next_actions,
209
+ return self.append_to_next_if_required(
210
+ next_actions=[],
209
211
  action_name=UNBLINDING_REVIEW_ACTION,
210
212
  required=self.reference_obj.approved == TBD,
211
213
  )
212
- return next_actions
213
214
 
214
215
 
215
216
  class UnblindingReviewAction(PregnancyActionItemMixin, ActionWithNotification):
216
217
  name = UNBLINDING_REVIEW_ACTION
217
218
  display_name = "Unblinding review pending"
218
219
  notification_display_name = " Unblinding review needed"
219
- parent_action_names = [UNBLINDING_REQUEST_ACTION]
220
+ parent_action_names = (UNBLINDING_REQUEST_ACTION,)
220
221
  reference_model = "edc_unblinding.unblindingreview"
221
222
  show_link_to_changelist = True
222
223
  admin_site_name = "edc_unblinding_admin"
@@ -228,13 +229,11 @@ class UnblindingReviewAction(PregnancyActionItemMixin, ActionWithNotification):
228
229
  )
229
230
 
230
231
  def get_next_actions(self):
231
- next_actions = []
232
- next_actions = self.append_to_next_if_required(
233
- next_actions=next_actions,
232
+ return self.append_to_next_if_required(
233
+ next_actions=[],
234
234
  action_name=self.get_next_offschedule_action(),
235
235
  required=self.reference_obj.approved == YES,
236
236
  )
237
- return next_actions
238
237
 
239
238
 
240
239
  class SubjectTransferAction(PregnancyActionItemMixin, BaseSubjectTransferAction):