meta-edc 0.2.24__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 (1169) hide show
  1. meta_ae/action_items.py +40 -29
  2. meta_ae/admin/__init__.py +12 -2
  3. meta_ae/admin/ae_followup_admin.py +2 -2
  4. meta_ae/admin/ae_initial_admin.py +7 -4
  5. meta_ae/admin/ae_local_review_admin.py +2 -2
  6. meta_ae/admin/ae_sponsor_review_admin.py +2 -2
  7. meta_ae/admin/ae_susar_admin.py +3 -3
  8. meta_ae/admin/ae_tmg_admin.py +2 -2
  9. meta_ae/admin/death_report_admin.py +3 -3
  10. meta_ae/admin/death_report_tmg_admin.py +4 -2
  11. meta_ae/admin/death_report_tmg_second_admin.py +4 -2
  12. meta_ae/admin/hospitalization_admin.py +15 -0
  13. meta_ae/admin/modeladmin_mixins.py +14 -16
  14. meta_ae/baker_recipes.py +5 -6
  15. meta_ae/choices.py +1 -1
  16. meta_ae/forms/__init__.py +14 -0
  17. meta_ae/forms/death_report_form.py +1 -2
  18. meta_ae/forms/hospitalization_form.py +11 -0
  19. meta_ae/forms/modelform_mixins.py +2 -2
  20. meta_ae/list_data.py +2 -1
  21. meta_ae/migrations/0001_initial.py +27 -28
  22. meta_ae/migrations/0002_auto_20191024_1000.py +0 -1
  23. meta_ae/migrations/0003_auto_20191102_0033.py +0 -1
  24. meta_ae/migrations/0004_auto_20191114_0821.py +0 -1
  25. meta_ae/migrations/0005_auto_20210624_0225.py +0 -1
  26. meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -6
  27. meta_ae/migrations/0007_auto_20210911_2036.py +0 -1
  28. meta_ae/migrations/0008_auto_20211011_1657.py +0 -1
  29. meta_ae/migrations/0009_auto_20220307_1929.py +0 -1
  30. meta_ae/migrations/0010_auto_20220704_1841.py +0 -1
  31. meta_ae/migrations/0011_alter_aefollowup_action_identifier_and_more.py +0 -1
  32. meta_ae/migrations/0012_auto_20220826_0258.py +0 -1
  33. meta_ae/migrations/0013_auto_20220826_0322.py +0 -1
  34. meta_ae/migrations/0014_auto_20220826_0406.py +0 -1
  35. meta_ae/migrations/0015_auto_20220907_0157.py +0 -1
  36. meta_ae/migrations/0016_rename_narrative_aetmg_investigator_narrative_and_more.py +128 -0
  37. meta_ae/migrations/0017_auto_20221130_2257.py +29 -0
  38. meta_ae/migrations/0018_alter_deathreporttmg_cause_of_death_agreed_and_more.py +45 -0
  39. meta_ae/migrations/0019_alter_aefollowup_managers_alter_aeinitial_managers_and_more.py +529 -0
  40. meta_ae/migrations/0020_alter_aesusar_options_alter_aetmg_options_and_more.py +532 -0
  41. meta_ae/migrations/0021_alter_aefollowup_site_alter_aeinitial_site_and_more.py +158 -0
  42. meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +590 -0
  43. meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
  44. meta_ae/model_mixins/__init__.py +2 -0
  45. meta_ae/model_mixins/ae_review_model_mixin.py +8 -8
  46. meta_ae/model_mixins/death_report_model_mixin.py +3 -4
  47. meta_ae/models/__init__.py +14 -0
  48. meta_ae/models/ae_initial.py +4 -0
  49. meta_ae/models/death_report.py +0 -1
  50. meta_ae/models/death_report_tmg_second.py +0 -1
  51. meta_ae/models/hospitalization.py +21 -0
  52. meta_ae/models/managers.py +1 -4
  53. meta_ae/pdf_reports/__init__.py +4 -2
  54. meta_ae/pdf_reports/ae_pdf_report.py +7 -0
  55. meta_ae/pdf_reports/death_pdf_report.py +7 -0
  56. meta_ae/pdf_reports/meta_pdf_report_mixin.py +4 -2
  57. meta_ae/templatetags/meta_ae_extras.py +5 -6
  58. meta_analytics/.DS_Store +0 -0
  59. meta_analytics/README.rst +16 -0
  60. meta_analytics/dataframes/__init__.py +46 -0
  61. meta_analytics/dataframes/constants.py +36 -0
  62. meta_analytics/dataframes/get_eos_df.py +38 -0
  63. meta_analytics/dataframes/get_glucose_df.py +166 -0
  64. meta_analytics/dataframes/get_glucose_fbg_df.py +26 -0
  65. meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +21 -0
  66. meta_analytics/dataframes/get_last_imp_visits_df.py +103 -0
  67. meta_analytics/dataframes/glucose_endpoints/__init__.py +4 -0
  68. meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +184 -0
  69. meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +407 -0
  70. meta_analytics/dataframes/screening/__init__.py +4 -0
  71. meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +19 -0
  72. meta_analytics/dataframes/screening/get_screening_df.py +156 -0
  73. meta_analytics/dataframes/utils.py +74 -0
  74. meta_analytics/get_tables.py +80 -0
  75. meta_analytics/tables/__init__.py +4 -0
  76. meta_analytics/tables/eligible.py +106 -0
  77. meta_analytics/tables/enrolled/glucose.py +27 -0
  78. meta_analytics/tables/has_dm.py +61 -0
  79. meta_analytics/utils.py +81 -0
  80. meta_auth/auth_objects.py +34 -5
  81. meta_auth/auths.py +21 -6
  82. meta_consent/action_items.py +22 -3
  83. meta_consent/admin/__init__.py +8 -1
  84. meta_consent/admin/actions/__init__.py +2 -0
  85. meta_consent/admin/actions/create_missing_prescriptions.py +2 -2
  86. meta_consent/admin/list_filters.py +22 -0
  87. meta_consent/admin/modeladmin_mixins.py +148 -0
  88. meta_consent/admin/subject_consent_admin.py +6 -134
  89. meta_consent/admin/subject_consent_v1_admin.py +19 -0
  90. meta_consent/admin/subject_consent_v1_ext_admin.py +93 -0
  91. meta_consent/baker_recipes.py +11 -11
  92. meta_consent/consents.py +27 -8
  93. meta_consent/constants.py +1 -0
  94. meta_consent/form_validators/__init__.py +3 -0
  95. meta_consent/form_validators/subject_consent_form_validator.py +30 -0
  96. meta_consent/forms/__init__.py +10 -1
  97. meta_consent/forms/subject_consent_form.py +26 -46
  98. meta_consent/forms/subject_consent_v1_ext_form.py +47 -0
  99. meta_consent/forms/subject_consent_v1_form.py +26 -0
  100. meta_consent/forms/subject_reconsent_form.py +4 -4
  101. meta_consent/locale/lg/LC_MESSAGES/django.po +69 -0
  102. meta_consent/locale/sw/LC_MESSAGES/django.po +70 -0
  103. meta_consent/management/commands/create_missing_prescriptions.py +5 -3
  104. meta_consent/migrations/0001_initial.py +9 -10
  105. meta_consent/migrations/0002_auto_20191024_1000.py +0 -1
  106. meta_consent/migrations/0003_auto_20200325_0901.py +0 -1
  107. meta_consent/migrations/0004_auto_20210624_0225.py +0 -1
  108. meta_consent/migrations/0005_alter_subjectconsent_options.py +0 -1
  109. meta_consent/migrations/0006_auto_20210911_2036.py +0 -1
  110. meta_consent/migrations/0007_auto_20220128_1719.py +0 -1
  111. meta_consent/migrations/0008_auto_20220412_2151.py +0 -1
  112. meta_consent/migrations/0009_auto_20220704_1841.py +0 -1
  113. meta_consent/migrations/0010_alter_historicalsubjectreconsent_action_identifier_and_more.py +0 -1
  114. meta_consent/migrations/0011_auto_20220826_0258.py +0 -1
  115. meta_consent/migrations/0012_auto_20220826_0322.py +0 -1
  116. meta_consent/migrations/0013_auto_20220826_0406.py +0 -1
  117. meta_consent/migrations/0014_alter_subjectconsent_managers.py +1 -2
  118. meta_consent/migrations/0015_auto_20220914_0542.py +0 -1
  119. meta_consent/migrations/0016_auto_20220914_0547.py +0 -2
  120. meta_consent/migrations/0017_auto_20220929_1742.py +3 -3
  121. meta_consent/migrations/0018_alter_subjectconsent_options_and_more.py +170 -0
  122. meta_consent/migrations/0019_alter_subjectconsent_options_and_more.py +191 -0
  123. meta_consent/migrations/0020_historicalsubjectconsent_model_name_and_more.py +34 -0
  124. meta_consent/migrations/0021_auto_20240111_0442.py +17 -0
  125. meta_consent/migrations/0022_alter_historicalsubjectconsent_site_and_more.py +36 -0
  126. meta_consent/migrations/0023_subjectconsentv1_and_more.py +86 -0
  127. meta_consent/migrations/0024_historicalsubjectconsentv1.py +595 -0
  128. meta_consent/migrations/0025_alter_historicalsubjectconsent_first_name_and_more.py +151 -0
  129. meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +535 -0
  130. meta_consent/migrations/0027_auto_20250111_0344.py +30 -0
  131. meta_consent/migrations/0028_historicalsubjectconsentv1ext_assessment_score_and_more.py +162 -0
  132. meta_consent/migrations/0029_alter_historicalsubjectconsentv1ext_agrees_to_extension_and_more.py +33 -0
  133. meta_consent/migrations/0030_auto_20250120_2114.py +40 -0
  134. meta_consent/migrations/0031_alter_historicalsubjectconsent_guardian_name_and_more.py +124 -0
  135. meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
  136. meta_consent/migrations/0033_historicalsubjectconsentspfq_subjectconsentspfq.py +615 -0
  137. meta_consent/migrations/0034_remove_subjectconsentspfq_site_and_more.py +23 -0
  138. meta_consent/migrations/0035_alter_historicalsubjectconsent_consent_definition_name_and_more.py +43 -0
  139. meta_consent/models/__init__.py +11 -0
  140. meta_consent/models/model_mixins.py +1 -2
  141. meta_consent/models/signals.py +68 -52
  142. meta_consent/models/subject_consent.py +9 -20
  143. meta_consent/models/subject_consent_v1.py +15 -0
  144. meta_consent/models/subject_consent_v1_ext.py +34 -0
  145. meta_consent/models/subject_reconsent.py +6 -7
  146. meta_dashboard/apps.py +0 -40
  147. meta_dashboard/locale/lg/LC_MESSAGES/django.po +30 -0
  148. meta_dashboard/locale/sw/LC_MESSAGES/django.po +31 -0
  149. meta_dashboard/navbars.py +12 -14
  150. meta_dashboard/patterns.py +1 -1
  151. meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/dashboard_button.html +1 -1
  152. meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/eligibility_button.html +1 -1
  153. meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/screening_button.html +1 -1
  154. meta_dashboard/templates/meta_dashboard/{bootstrap3/screening → screening}/listboard.html +18 -17
  155. meta_dashboard/templates/meta_dashboard/subject/dashboard/sidebar.html +24 -0
  156. meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/top_bar.html +1 -1
  157. meta_dashboard/templates/meta_dashboard/subject/dashboard.html +14 -0
  158. meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/listboard.html +14 -6
  159. meta_dashboard/templatetags/meta_dashboard_extras.py +77 -78
  160. meta_dashboard/urls.py +10 -10
  161. meta_dashboard/view_utils/__init__.py +13 -0
  162. meta_dashboard/view_utils/subject_screening_button.py +114 -0
  163. meta_dashboard/views/__init__.py +8 -0
  164. meta_dashboard/views/ae/__init__.py +2 -0
  165. meta_dashboard/views/ae/ae_listboard_view.py +3 -4
  166. meta_dashboard/views/ae/death_report_listboard_view.py +4 -4
  167. meta_dashboard/views/screening/__init__.py +2 -0
  168. meta_dashboard/views/screening/listboard_view.py +5 -16
  169. meta_dashboard/views/subject/__init__.py +2 -0
  170. meta_dashboard/views/subject/dashboard/__init__.py +2 -0
  171. meta_dashboard/views/subject/dashboard/dashboard_view.py +41 -3
  172. meta_dashboard/views/subject/listboard/__init__.py +2 -0
  173. meta_dashboard/views/subject/listboard/listboard_view.py +8 -12
  174. meta_data_manager/handlers.py +0 -1
  175. meta_edc/__init__.py +10 -0
  176. meta_edc/admin.py +3 -4
  177. meta_edc/celery.py +6 -14
  178. meta_edc/celery_live.py +19 -0
  179. meta_edc/celery_uat.py +25 -0
  180. meta_edc/management/commands/update_forms_reference.py +16 -17
  181. meta_edc/meta_version.py +2 -2
  182. meta_edc/navbars.py +17 -12
  183. meta_edc/settings/debug.py +30 -9
  184. meta_edc/settings/defaults.py +145 -94
  185. meta_edc/settings/live.py +5 -10
  186. meta_edc/settings/logging.py +10 -3
  187. meta_edc/settings/minimal.py +5 -5
  188. meta_edc/settings/uat.py +4 -13
  189. meta_edc/templates/meta_edc/{bootstrap3/base.html → base.html} +1 -1
  190. meta_edc/templates/meta_edc/{bootstrap3/home.html → home.html} +14 -8
  191. meta_edc/urls.py +10 -4
  192. meta_edc/utils.py +3 -1
  193. meta_edc/views/__init__.py +2 -0
  194. meta_edc/views/home_view.py +6 -7
  195. meta_edc/wsgi.py +1 -1
  196. meta_edc/wsgi_live.py +1 -1
  197. meta_edc/wsgi_uat.py +1 -1
  198. meta_edc-1.4.0.dist-info/METADATA +174 -0
  199. meta_edc-1.4.0.dist-info/RECORD +1164 -0
  200. meta_edc-1.4.0.dist-info/WHEEL +4 -0
  201. meta_labs/list_data.py +2 -2
  202. meta_labs/reportables.py +80 -11
  203. meta_lists/admin.py +30 -0
  204. meta_lists/list_data.py +60 -5
  205. meta_lists/migrations/0001_initial.py +0 -1
  206. meta_lists/migrations/0002_auto_20191026_2231.py +0 -1
  207. meta_lists/migrations/0003_auto_20191102_0033.py +0 -1
  208. meta_lists/migrations/0004_auto_20191102_1859.py +0 -1
  209. meta_lists/migrations/0005_auto_20191104_0930.py +0 -1
  210. meta_lists/migrations/0006_auto_20200514_1959.py +0 -1
  211. meta_lists/migrations/0007_auto_20200516_2356.py +0 -1
  212. meta_lists/migrations/0008_auto_20200528_1517.py +3 -4
  213. meta_lists/migrations/0009_auto_20200613_2041.py +0 -1
  214. meta_lists/migrations/0010_auto_20200617_1738.py +0 -1
  215. meta_lists/migrations/0011_auto_20210624_0225.py +0 -1
  216. meta_lists/migrations/0012_auto_20210728_1809.py +0 -1
  217. meta_lists/migrations/0013_transferreasons_and_more.py +0 -1
  218. meta_lists/migrations/0014_auto_20220913_2139.py +0 -1
  219. meta_lists/migrations/0015_abnormalfootappearanceobservations_extra_value_and_more.py +67 -0
  220. meta_lists/migrations/0016_alter_abnormalfootappearanceobservations_options_and_more.py +617 -0
  221. meta_lists/migrations/0017_complications_dmmedications_dmtreatments_and_more.py +365 -0
  222. meta_lists/migrations/0018_missedreferralreasons.py +73 -0
  223. meta_lists/migrations/0019_auto_20250128_0143.py +48 -0
  224. meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
  225. meta_lists/models.py +36 -0
  226. meta_pharmacy/admin/__init__.py +7 -0
  227. meta_pharmacy/admin/rx_admin.py +76 -0
  228. meta_pharmacy/admin/substitutions_admin.py +67 -0
  229. meta_pharmacy/admin_site.py +9 -0
  230. meta_pharmacy/apps.py +5 -0
  231. meta_pharmacy/constants.py +10 -0
  232. meta_pharmacy/forms/__init__.py +4 -0
  233. meta_pharmacy/forms/rx_form.py +15 -0
  234. meta_pharmacy/forms/substitutions_form.py +56 -0
  235. meta_pharmacy/label_configs.py +30 -0
  236. meta_pharmacy/labels/__init__.py +7 -0
  237. meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +61 -0
  238. meta_pharmacy/labels/draw_label_for_subject_with_code128.py +14 -0
  239. meta_pharmacy/labels/draw_label_with_test_data.py +26 -0
  240. meta_pharmacy/labels/label_data.py +13 -0
  241. meta_pharmacy/labels/print_sheets.py +95 -0
  242. meta_pharmacy/list_data.py +8 -0
  243. meta_pharmacy/management/commands/update_initial_pharmacy_data.py +11 -0
  244. meta_pharmacy/migrations/0001_initial.py +32 -0
  245. meta_pharmacy/migrations/0002_initial.py +682 -0
  246. meta_pharmacy/migrations/0003_auto_20240909_2335.py +65 -0
  247. meta_pharmacy/migrations/0004_alter_historicalsubstitutions_report_datetime_and_more.py +23 -0
  248. meta_pharmacy/migrations/0005_auto_20240911_0352.py +17 -0
  249. meta_pharmacy/migrations/0006_lotnumber_label.py +280 -0
  250. meta_pharmacy/migrations/0007_lotnumber_medication.py +24 -0
  251. meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +389 -0
  252. meta_pharmacy/migrations/0009_remove_historicalrx_slug.py +17 -0
  253. meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
  254. meta_pharmacy/models/__init__.py +10 -0
  255. meta_pharmacy/models/label_data.py +37 -0
  256. meta_pharmacy/models/rx.py +18 -0
  257. meta_pharmacy/models/rx_label.py +38 -0
  258. meta_pharmacy/models/substitutions.py +88 -0
  259. meta_pharmacy/prepare_meta_pharmacy.py +1 -1
  260. meta_pharmacy/urls.py +8 -0
  261. meta_pharmacy/utils/__init__.py +3 -0
  262. meta_pharmacy/utils/update_initial_pharmacy_data.py +146 -0
  263. meta_prn/action_items.py +76 -27
  264. meta_prn/admin/__init__.py +20 -1
  265. meta_prn/admin/dm_referral_admin.py +50 -0
  266. meta_prn/admin/end_of_study_admin.py +28 -18
  267. meta_prn/admin/loss_to_followup_admin.py +5 -5
  268. meta_prn/admin/off_study_medication_admin.py +7 -9
  269. meta_prn/admin/offschedule_admin.py +14 -14
  270. meta_prn/admin/offschedule_dm_referral_admin.py +48 -0
  271. meta_prn/admin/offschedule_postnatal_admin.py +17 -10
  272. meta_prn/admin/offschedule_pregnancy_admin.py +20 -12
  273. meta_prn/admin/onschedule_admin.py +9 -11
  274. meta_prn/admin/onschedule_dm_referral_admin.py +38 -0
  275. meta_prn/admin/pregnancy_notification_admin.py +13 -11
  276. meta_prn/admin/protocol_incident_admin.py +6 -104
  277. meta_prn/admin/subject_transfer_admin.py +3 -2
  278. meta_prn/baker_recipes.py +15 -8
  279. meta_prn/choices.py +15 -10
  280. meta_prn/constants.py +5 -2
  281. meta_prn/form_validators/__init__.py +5 -0
  282. meta_prn/form_validators/end_of_study.py +65 -21
  283. meta_prn/form_validators/protocol_incident.py +1 -2
  284. meta_prn/forms/__init__.py +15 -0
  285. meta_prn/forms/dm_referral_form.py +34 -0
  286. meta_prn/forms/end_of_study_form.py +1 -2
  287. meta_prn/forms/loss_to_followup_form.py +1 -2
  288. meta_prn/forms/off_study_medication_form.py +2 -3
  289. meta_prn/forms/offschedule_dm_referral_form.py +35 -0
  290. meta_prn/forms/offschedule_form.py +31 -1
  291. meta_prn/forms/offschedule_pregnancy_form.py +0 -1
  292. meta_prn/forms/pregnancy_notification_form.py +16 -19
  293. meta_prn/forms/subject_transfer_form.py +0 -1
  294. meta_prn/list_data.py +3 -3
  295. meta_prn/migrations/0001_initial.py +25 -26
  296. meta_prn/migrations/0002_auto_20191024_1000.py +0 -1
  297. meta_prn/migrations/0003_auto_20200120_2020.py +0 -1
  298. meta_prn/migrations/0004_auto_20200403_0332.py +0 -1
  299. meta_prn/migrations/0005_auto_20200524_1944.py +0 -1
  300. meta_prn/migrations/0006_auto_20210624_0225.py +0 -1
  301. meta_prn/migrations/0007_auto_20210721_0335.py +0 -1
  302. meta_prn/migrations/0008_auto_20210910_0238.py +0 -1
  303. meta_prn/migrations/0009_auto_20210910_0239.py +0 -1
  304. meta_prn/migrations/0010_auto_20210910_1906.py +0 -1
  305. meta_prn/migrations/0011_auto_20210910_1911.py +1 -2
  306. meta_prn/migrations/0012_auto_20210911_0004.py +1 -2
  307. meta_prn/migrations/0013_auto_20210911_2036.py +0 -1
  308. meta_prn/migrations/0014_auto_20211003_1709.py +0 -1
  309. meta_prn/migrations/0015_auto_20211104_1447.py +0 -1
  310. meta_prn/migrations/0016_auto_20220128_1719.py +0 -1
  311. meta_prn/migrations/0017_auto_20220307_1929.py +5 -6
  312. meta_prn/migrations/0018_auto_20220309_2106.py +9 -10
  313. meta_prn/migrations/0019_auto_20220309_2230.py +0 -1
  314. meta_prn/migrations/0020_auto_20220310_0439.py +0 -1
  315. meta_prn/migrations/0021_auto_20220316_2147.py +13 -14
  316. meta_prn/migrations/0022_auto_20220318_0133.py +9 -10
  317. meta_prn/migrations/0023_auto_20220415_1747.py +0 -1
  318. meta_prn/migrations/0024_alter_protocoldeviationviolation_violation.py +0 -1
  319. meta_prn/migrations/0025_alter_historicalprotocoldeviationviolation_options_and_more.py +0 -1
  320. meta_prn/migrations/0026_remove_historicalprotocoldeviationviolation_violation_type_and_more.py +0 -1
  321. meta_prn/migrations/0027_rename_historicalprotocoldeviationviolation_historicalprotocolincident_and_more.py +0 -1
  322. meta_prn/migrations/0028_historicalpregnancynotification_bhcg_date_and_more.py +0 -1
  323. meta_prn/migrations/0029_alter_historicalpregnancynotification_edd_and_more.py +0 -1
  324. meta_prn/migrations/0030_auto_20220627_1119.py +0 -1
  325. meta_prn/migrations/0031_alter_historicaloffschedule_options_and_more.py +0 -1
  326. meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -14
  327. meta_prn/migrations/0033_remove_historicalegfrnotification_action_item_and_more.py +0 -1
  328. meta_prn/migrations/0034_auto_20220630_1110.py +4 -5
  329. meta_prn/migrations/0035_auto_20220630_1140.py +61 -60
  330. meta_prn/migrations/0036_remove_endofstudy_meta_prn_en_id_a50384_idx_and_more.py +0 -1
  331. meta_prn/migrations/0037_endofstudy_delivery_date_endofstudy_pregnancy_date_and_more.py +0 -1
  332. meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -14
  333. meta_prn/migrations/0039_historicaloffstudymedication_reason_other_and_more.py +0 -1
  334. meta_prn/migrations/0040_remove_historicaloffstudymedication_expected_restart_date_and_more.py +0 -1
  335. meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -14
  336. meta_prn/migrations/0042_remove_endofstudy_investigator_decision_and_more.py +0 -1
  337. meta_prn/migrations/0043_auto_20220704_1841.py +0 -1
  338. meta_prn/migrations/0044_alter_endofstudy_action_identifier_and_more.py +0 -1
  339. meta_prn/migrations/0045_auto_20220826_0258.py +0 -1
  340. meta_prn/migrations/0046_auto_20220826_0322.py +0 -1
  341. meta_prn/migrations/0047_auto_20220826_0406.py +0 -1
  342. meta_prn/migrations/0048_auto_20220922_2236.py +0 -1
  343. meta_prn/migrations/0049_auto_20220929_1742.py +0 -1
  344. meta_prn/migrations/0050_auto_20221004_0629.py +0 -1
  345. meta_prn/migrations/0051_historicalprotocolincident_reasons_withdrawn_and_more.py +54 -0
  346. meta_prn/migrations/0052_alter_historicalprotocolincident_reasons_withdrawn_and_more.py +22 -0
  347. meta_prn/migrations/0053_alter_losstofollowup_options_and_more.py +975 -0
  348. meta_prn/migrations/0054_alter_losstofollowup_options_and_more.py +834 -0
  349. meta_prn/migrations/0055_alter_endofstudy_site_and_more.py +278 -0
  350. meta_prn/migrations/0056_alter_endofstudy_clinical_withdrawal_reason_and_more.py +97 -0
  351. meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +1131 -0
  352. meta_prn/migrations/0058_dmreferral_referral_note_and_more.py +29 -0
  353. meta_prn/migrations/0059_alter_historicaloffstudymedication_reason_and_more.py +53 -0
  354. meta_prn/migrations/0060_alter_onschedule_managers_and_more.py +55 -0
  355. meta_prn/migrations/0061_auto_20250115_2025.py +56 -0
  356. meta_prn/migrations/0062_alter_endofstudy_offstudy_reason_and_more.py +72 -0
  357. meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py +37 -0
  358. meta_prn/migrations/0064_auto_20250602_2143.py +18 -0
  359. meta_prn/migrations/0065_alter_historicaloffstudymedication_subject_identifier_and_more.py +23 -0
  360. meta_prn/migrations/0066_alter_historicallosstofollowup_subject_identifier_and_more.py +23 -0
  361. meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
  362. meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
  363. meta_prn/migrations/0069_alter_historicaloffstudymedication_singleton_field_and_more.py +37 -0
  364. meta_prn/models/__init__.py +33 -2
  365. meta_prn/models/dm_referral.py +39 -0
  366. meta_prn/models/end_of_study.py +29 -25
  367. meta_prn/models/loss_to_followup.py +10 -13
  368. meta_prn/models/off_study_medication.py +8 -6
  369. meta_prn/models/offschedule.py +16 -8
  370. meta_prn/models/onschedule.py +10 -5
  371. meta_prn/models/pregnancy_notification.py +4 -7
  372. meta_prn/models/protocol_incident.py +6 -4
  373. meta_prn/models/signals.py +56 -16
  374. meta_prn/models/subject_transfer.py +7 -0
  375. meta_prn/pregnancy_action_item_mixin.py +2 -1
  376. meta_prn/templates/meta_prn/eos/additional_instructions.html +3 -0
  377. meta_prn/templates/meta_prn/offschedule/additional_instructions.html +2 -0
  378. meta_rando/migrations/0001_initial.py +5 -6
  379. meta_rando/migrations/0002_auto_20220704_1841.py +0 -1
  380. meta_rando/migrations/0003_auto_20220826_1640.py +0 -1
  381. meta_rando/migrations/0004_alter_randomizationlist_options_and_more.py +95 -0
  382. meta_rando/migrations/0005_alter_randomizationlist_options_and_more.py +98 -0
  383. meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
  384. meta_rando/migrations/0007_spfqlist.py +197 -0
  385. meta_rando/migrations/0008_delete_spfqlist.py +16 -0
  386. meta_rando/models/__init__.py +1 -0
  387. meta_rando/{models.py → models/randomization_list.py} +3 -4
  388. meta_rando/randomizers.py +2 -3
  389. meta_reports/__init__.py +3 -0
  390. meta_reports/admin/__init__.py +31 -0
  391. meta_reports/admin/dbviews/__init__.py +27 -0
  392. meta_reports/admin/dbviews/glucose_summary_admin.py +116 -0
  393. meta_reports/admin/dbviews/imp_substitutions_admin.py +102 -0
  394. meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +7 -0
  395. meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +77 -0
  396. meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +84 -0
  397. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +3 -0
  398. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +10 -0
  399. meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +3 -0
  400. meta_reports/admin/dbviews/on_study_missing_values_admin/unmanaged_model_admin.py +12 -0
  401. meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +58 -0
  402. meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +47 -0
  403. meta_reports/admin/dbviews/unattended_three_in_row_admin.py +35 -0
  404. meta_reports/admin/dbviews/unattended_two_in_row_admin.py +34 -0
  405. meta_reports/admin/endpoints_admin.py +14 -0
  406. meta_reports/admin/endpoints_all_admin.py +12 -0
  407. meta_reports/admin/last_imp_refill_admin.py +178 -0
  408. meta_reports/admin/list_filters.py +30 -0
  409. meta_reports/admin/modeladmin_mixins.py +105 -0
  410. meta_reports/admin_site.py +5 -0
  411. meta_reports/ae_report.py +2 -3
  412. meta_reports/apps.py +1 -17
  413. meta_reports/death_report.py +3 -5
  414. meta_reports/forms/__init__.py +3 -0
  415. meta_reports/forms/missing_ogtt_note_form.py +32 -0
  416. meta_reports/management/commands/generate_endpoints.py +14 -0
  417. meta_reports/migrations/0001_initial.py +87 -0
  418. meta_reports/migrations/0002_patienthistorymissingbaselinecd4_and_more.py +64 -0
  419. meta_reports/migrations/0003_auto_20240618_0505.py +12 -0
  420. meta_reports/migrations/0004_alter_patienthistorymissingbaselinecd4_table.py +17 -0
  421. meta_reports/migrations/0005_endpoints.py +47 -0
  422. meta_reports/migrations/0006_endpoints_baseline_datetime.py +18 -0
  423. meta_reports/migrations/0007_alter_endpoints_endpoint_label_and_more.py +43 -0
  424. meta_reports/migrations/0008_alter_endpoints_endpoint_label.py +18 -0
  425. meta_reports/migrations/0009_alter_endpoints_options.py +21 -0
  426. meta_reports/migrations/0010_alter_patienthistorymissingbaselinecd4_options_and_more.py +49 -0
  427. meta_reports/migrations/0011_auto_20240813_0156.py +54 -0
  428. meta_reports/migrations/0012_auto_20240813_1516.py +48 -0
  429. meta_reports/migrations/0013_auto_20240813_1516.py +48 -0
  430. meta_reports/migrations/0014_auto_20240813_1517.py +48 -0
  431. meta_reports/migrations/0015_alter_endpoints_site.py +22 -0
  432. meta_reports/migrations/0016_missingscreeningogtt.py +47 -0
  433. meta_reports/migrations/0017_auto_20240819_1711.py +166 -0
  434. meta_reports/migrations/0018_auto_20240819_1713.py +54 -0
  435. meta_reports/migrations/0019_auto_20240819_1721.py +54 -0
  436. meta_reports/migrations/0020_auto_20240819_1811.py +54 -0
  437. meta_reports/migrations/0021_auto_20240819_1817.py +54 -0
  438. meta_reports/migrations/0022_auto_20240819_1832.py +54 -0
  439. meta_reports/migrations/0023_endpoints_meta_report_subject_a56b22_idx.py +20 -0
  440. meta_reports/migrations/0024_glucosesummary.py +38 -0
  441. meta_reports/migrations/0025_auto_20240822_0115.py +87 -0
  442. meta_reports/migrations/0026_auto_20240822_0120.py +54 -0
  443. meta_reports/migrations/0027_auto_20240822_0140.py +54 -0
  444. meta_reports/migrations/0028_alter_glucosesummary_options.py +22 -0
  445. meta_reports/migrations/0029_auto_20240822_0149.py +54 -0
  446. meta_reports/migrations/0030_auto_20240822_1637.py +54 -0
  447. meta_reports/migrations/0031_endpointsproxy.py +25 -0
  448. meta_reports/migrations/0032_alter_endpointsproxy_options.py +21 -0
  449. meta_reports/migrations/0033_auto_20240823_0012.py +54 -0
  450. meta_reports/migrations/0034_auto_20240823_1642.py +54 -0
  451. meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +448 -0
  452. meta_reports/migrations/0036_historicalmissingogttnote_fasting_and_more.py +86 -0
  453. meta_reports/migrations/0037_historicalmissingogttnote_result_status_and_more.py +51 -0
  454. meta_reports/migrations/0038_alter_historicalmissingogttnote_fasting_and_more.py +33 -0
  455. meta_reports/migrations/0039_onstudymissingvalues.py +44 -0
  456. meta_reports/migrations/0040_auto_20240824_0412.py +282 -0
  457. meta_reports/migrations/0041_auto_20240828_2229.py +14 -0
  458. meta_reports/migrations/0042_onstudymissinglabvalues.py +43 -0
  459. meta_reports/migrations/0043_auto_20240828_2309.py +88 -0
  460. meta_reports/migrations/0044_auto_20240828_2323.py +93 -0
  461. meta_reports/migrations/0045_auto_20240829_0248.py +54 -0
  462. meta_reports/migrations/0046_auto_20240829_0250.py +54 -0
  463. meta_reports/migrations/0047_impsubstitutions.py +56 -0
  464. meta_reports/migrations/0048_auto_20240909_2338.py +48 -0
  465. meta_reports/migrations/0049_auto_20240911_0327.py +54 -0
  466. meta_reports/migrations/0050_alter_endpoints_created.py +19 -0
  467. meta_reports/migrations/0051_remove_endpoints_baseline_datetime_and_more.py +40 -0
  468. meta_reports/migrations/0052_lastimpvisit.py +57 -0
  469. meta_reports/migrations/0053_rename_lastimpvisit_lastimprefill_and_more.py +31 -0
  470. meta_reports/migrations/0054_auto_20250422_2003.py +81 -0
  471. meta_reports/migrations/0055_alter_glucosesummary_table.py +17 -0
  472. meta_reports/migrations/0056_auto_20250422_2214.py +54 -0
  473. meta_reports/migrations/0057_auto_20250422_2224.py +54 -0
  474. meta_reports/migrations/0058_auto_20250422_2232.py +54 -0
  475. meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
  476. meta_reports/migrations/0060_auto_20250926_0242.py +366 -0
  477. meta_reports/migrations/0061_auto_20251004_0043.py +21 -0
  478. meta_reports/migrations/0062_auto_20251004_0106.py +21 -0
  479. meta_reports/models/__init__.py +33 -0
  480. meta_reports/models/dbviews/README +14 -0
  481. meta_reports/models/dbviews/__init__.py +23 -0
  482. meta_reports/models/dbviews/glucose_summary/__init__.py +4 -0
  483. meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +47 -0
  484. meta_reports/models/dbviews/glucose_summary/view_definition.py +31 -0
  485. meta_reports/models/dbviews/imp_substitutions/__init__.py +3 -0
  486. meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +40 -0
  487. meta_reports/models/dbviews/imp_substitutions/view_definition.py +21 -0
  488. meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +4 -0
  489. meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +57 -0
  490. meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +42 -0
  491. meta_reports/models/dbviews/missing_screening_ogtt/view_definition.py +20 -0
  492. meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +3 -0
  493. meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +55 -0
  494. meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py +19 -0
  495. meta_reports/models/dbviews/on_study_missing_lab_values/view_definition.py +17 -0
  496. meta_reports/models/dbviews/on_study_missing_values/__init__.py +3 -0
  497. meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +72 -0
  498. meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +19 -0
  499. meta_reports/models/dbviews/on_study_missing_values/view_definition.py +17 -0
  500. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +3 -0
  501. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +30 -0
  502. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/view_definition.py +21 -0
  503. meta_reports/models/dbviews/unattended_three_in_row/__init__.py +3 -0
  504. meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +28 -0
  505. meta_reports/models/dbviews/unattended_three_in_row/view_definition.py +31 -0
  506. meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +3 -0
  507. meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +28 -0
  508. meta_reports/models/dbviews/unattended_three_in_row2/view_definition.py +50 -0
  509. meta_reports/models/dbviews/unattended_two_in_row/__init__.py +3 -0
  510. meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +26 -0
  511. meta_reports/models/dbviews/unattended_two_in_row/view_definition.py +30 -0
  512. meta_reports/models/endpoints.py +35 -0
  513. meta_reports/models/endpoints_proxy.py +11 -0
  514. meta_reports/models/last_imp_refill.py +33 -0
  515. meta_reports/pdf_report.py +2 -4
  516. meta_reports/tasks.py +13 -0
  517. meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -0
  518. meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +12 -0
  519. meta_reports/templates/meta_reports/endpoints_change_list_note.html +12 -0
  520. meta_reports/templates/meta_reports/last_imp_refill/changelist_note.html +13 -0
  521. meta_reports/urls.py +8 -0
  522. meta_screening/admin/__init__.py +8 -0
  523. meta_screening/admin/fieldsets.py +13 -16
  524. meta_screening/admin/list_filters.py +7 -15
  525. meta_screening/admin/screening_part_one_admin.py +3 -5
  526. meta_screening/admin/screening_part_three_admin.py +4 -5
  527. meta_screening/admin/screening_part_two_admin.py +9 -10
  528. meta_screening/admin/subject_refusal_admin.py +9 -5
  529. meta_screening/admin/subject_screening_admin.py +28 -11
  530. meta_screening/baker_recipes.py +18 -10
  531. meta_screening/calculators.py +1 -1
  532. meta_screening/choices.py +1 -1
  533. meta_screening/constants.py +1 -1
  534. meta_screening/eligibility/__init__.py +9 -0
  535. meta_screening/eligibility/eligibility.py +21 -14
  536. meta_screening/eligibility/eligibility_part_one.py +3 -3
  537. meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
  538. meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +72 -50
  539. meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +15 -16
  540. meta_screening/eligibility/eligibility_part_two.py +3 -3
  541. meta_screening/form_validators/__init__.py +8 -0
  542. meta_screening/form_validators/screening_part_one.py +2 -8
  543. meta_screening/form_validators/screening_part_three.py +6 -7
  544. meta_screening/form_validators/screening_part_two.py +3 -5
  545. meta_screening/form_validators/subject_refusal.py +1 -1
  546. meta_screening/forms/__init__.py +20 -0
  547. meta_screening/forms/field_lists.py +17 -18
  548. meta_screening/forms/screening_part_one_form.py +11 -2
  549. meta_screening/forms/screening_part_three_form.py +5 -4
  550. meta_screening/forms/screening_part_two_form.py +1 -6
  551. meta_screening/forms/subject_refusal_form.py +0 -5
  552. meta_screening/forms/subject_screening_form.py +4 -6
  553. meta_screening/migrations/0001_initial.py +15 -16
  554. meta_screening/migrations/0002_auto_20191020_0612.py +0 -1
  555. meta_screening/migrations/0003_auto_20191020_0627.py +0 -1
  556. meta_screening/migrations/0004_auto_20191020_0738.py +0 -1
  557. meta_screening/migrations/0005_auto_20191021_0353.py +0 -1
  558. meta_screening/migrations/0006_auto_20191022_0134.py +0 -1
  559. meta_screening/migrations/0007_auto_20191024_1000.py +0 -1
  560. meta_screening/migrations/0008_auto_20191031_0745.py +0 -1
  561. meta_screening/migrations/0009_auto_20191105_0122.py +0 -1
  562. meta_screening/migrations/0010_auto_20191106_0828.py +5 -6
  563. meta_screening/migrations/0011_auto_20191107_0342.py +2 -3
  564. meta_screening/migrations/0012_auto_20191107_0427.py +3 -4
  565. meta_screening/migrations/0013_auto_20191107_0442.py +0 -1
  566. meta_screening/migrations/0014_auto_20191107_0528.py +0 -1
  567. meta_screening/migrations/0015_auto_20191107_2249.py +0 -1
  568. meta_screening/migrations/0016_auto_20191119_2331.py +0 -1
  569. meta_screening/migrations/0017_auto_20191213_0314.py +0 -1
  570. meta_screening/migrations/0018_auto_20200118_1854.py +0 -1
  571. meta_screening/migrations/0019_auto_20200120_2256.py +0 -1
  572. meta_screening/migrations/0020_auto_20200524_1944.py +0 -1
  573. meta_screening/migrations/0021_auto_20210628_2105.py +0 -1
  574. meta_screening/migrations/0022_auto_20210702_0426.py +0 -1
  575. meta_screening/migrations/0023_auto_20210702_0533.py +0 -1
  576. meta_screening/migrations/0024_auto_20210710_1929.py +0 -1
  577. meta_screening/migrations/0025_auto_20210710_2247.py +0 -1
  578. meta_screening/migrations/0026_auto_20210712_0433.py +0 -1
  579. meta_screening/migrations/0027_auto_20210804_0438.py +0 -1
  580. meta_screening/migrations/0028_auto_20210823_2353.py +0 -1
  581. meta_screening/migrations/0029_auto_20211123_1645.py +0 -1
  582. meta_screening/migrations/0030_auto_20220128_1719.py +0 -1
  583. meta_screening/migrations/0031_auto_20220304_0448.py +0 -1
  584. meta_screening/migrations/0032_auto_20220304_0501.py +0 -1
  585. meta_screening/migrations/0033_auto_20220304_0504.py +0 -1
  586. meta_screening/migrations/0034_auto_20220304_0508.py +0 -1
  587. meta_screening/migrations/0035_auto_20220304_2233.py +0 -1
  588. meta_screening/migrations/0036_auto_20220304_2307.py +0 -1
  589. meta_screening/migrations/0037_auto_20220312_0339.py +0 -1
  590. meta_screening/migrations/0038_auto_20220312_1929.py +0 -1
  591. meta_screening/migrations/0039_auto_20220312_1938.py +0 -1
  592. meta_screening/migrations/0040_auto_20220316_2147.py +0 -1
  593. meta_screening/migrations/0041_auto_20220403_1227.py +0 -1
  594. meta_screening/migrations/0042_auto_20220403_1402.py +0 -1
  595. meta_screening/migrations/0043_auto_20220407_1713.py +0 -1
  596. meta_screening/migrations/0044_alter_historicalscreeningpartone_severe_htn_and_more.py +0 -1
  597. meta_screening/migrations/0045_historicalscreeningpartone_contact_number_and_more.py +0 -1
  598. meta_screening/migrations/0046_historicalscreeningpartone_hba1c_datetime_and_more.py +0 -1
  599. meta_screening/migrations/0047_historicalscreeningpartone_appt_datetime_repeat_and_more.py +0 -1
  600. meta_screening/migrations/0048_rename_appt_datetime_repeat_historicalscreeningpartone_repeat_appt_datetime_and_more.py +0 -1
  601. meta_screening/migrations/0049_historicalscreeningpartone_p3_ltfu_and_more.py +0 -1
  602. meta_screening/migrations/0050_historicalscreeningpartone_agree_to_p3_and_more.py +0 -1
  603. meta_screening/migrations/0051_alter_historicalscreeningpartone_advised_to_fast_and_more.py +0 -1
  604. meta_screening/migrations/0052_alter_historicalscreeningpartone_p3_ltfu_and_more.py +0 -1
  605. meta_screening/migrations/0053_auto_20220704_1841.py +0 -1
  606. meta_screening/migrations/0054_auto_20220722_2130.py +0 -1
  607. meta_screening/migrations/0055_alter_historicalscreeningpartone_creatinine_value_and_more.py +0 -1
  608. meta_screening/migrations/0056_alter_historicalscreeningpartone_agree_to_p3_and_more.py +0 -1
  609. meta_screening/migrations/0057_alter_historicalscreeningpartone_calculated_egfr_value_and_more.py +397 -0
  610. meta_screening/migrations/0058_alter_historicalscreeningpartone_eligibility_datetime_and_more.py +210 -0
  611. meta_screening/migrations/0059_alter_icpreferral_managers_and_more.py +323 -0
  612. meta_screening/migrations/0060_historicalicpreferral_locale_created_and_more.py +210 -0
  613. meta_screening/migrations/0061_alter_historicalicpreferral_site_and_more.py +128 -0
  614. meta_screening/migrations/0062_remove_icpreferral_site_and_more.py +27 -0
  615. meta_screening/migrations/0063_alter_historicalscreeningpartone_fasting_duration_str_and_more.py +184 -0
  616. meta_screening/migrations/0064_remove_historicalscreeningpartone_fasting_duration_minutes_and_more.py +126 -0
  617. meta_screening/migrations/0065_auto_20240516_0352.py +31 -0
  618. meta_screening/migrations/0066_alter_historicalscreeningpartone_fasting_duration_delta_and_more.py +103 -0
  619. meta_screening/migrations/0067_alter_historicalscreeningpartone_report_datetime_and_more.py +84 -0
  620. meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
  621. meta_screening/model_mixins/__init__.py +8 -0
  622. meta_screening/model_mixins/calculated_model_mixin.py +8 -9
  623. meta_screening/model_mixins/creatinine_fields_model_mixin.py +2 -4
  624. meta_screening/model_mixins/eligibility_model_mixin.py +6 -5
  625. meta_screening/model_mixins/part_one_fields_model_mixin.py +17 -21
  626. meta_screening/model_mixins/part_three_fields_model_mixin.py +19 -33
  627. meta_screening/model_mixins/part_two_fields_model_mixin.py +19 -18
  628. meta_screening/models/__init__.py +10 -1
  629. meta_screening/models/icp_referral.py +9 -8
  630. meta_screening/models/proxy_models.py +9 -1
  631. meta_screening/models/signals.py +10 -11
  632. meta_screening/models/subject_refusal.py +5 -5
  633. meta_screening/models/subject_screening.py +19 -3
  634. meta_sites/__init__.py +0 -1
  635. meta_sites/apps.py +0 -23
  636. meta_sites/sites.py +61 -53
  637. meta_subject/action_items.py +58 -27
  638. meta_subject/admin/__init__.py +46 -2
  639. meta_subject/admin/birth_outcome_admin.py +13 -15
  640. meta_subject/admin/blood_results/__init__.py +10 -2
  641. meta_subject/admin/blood_results/blood_results_fbc_admin.py +6 -3
  642. meta_subject/admin/blood_results/blood_results_hba1c_admin.py +6 -3
  643. meta_subject/admin/blood_results/blood_results_ins_admin.py +6 -3
  644. meta_subject/admin/blood_results/blood_results_lft_admin.py +6 -3
  645. meta_subject/admin/blood_results/blood_results_lipids_admin.py +24 -0
  646. meta_subject/admin/blood_results/blood_results_rft_admin.py +8 -8
  647. meta_subject/admin/complications_admin.py +3 -4
  648. meta_subject/admin/complications_glycemia_admin.py +4 -4
  649. meta_subject/admin/concomitant_medication_admin.py +3 -3
  650. meta_subject/admin/delivery_admin.py +8 -13
  651. meta_subject/admin/diabetes/__init__.py +4 -0
  652. meta_subject/admin/diabetes/dm_endpoint_admin.py +35 -0
  653. meta_subject/admin/diabetes/dm_followup_admin.py +97 -0
  654. meta_subject/admin/egfr_drop_notification_admin.py +1 -4
  655. meta_subject/admin/eq5d3l_admin.py +4 -4
  656. meta_subject/admin/fields.py +5 -5
  657. meta_subject/admin/fieldsets.py +5 -5
  658. meta_subject/admin/followup_examination_admin.py +12 -11
  659. meta_subject/admin/followup_vitals_admin.py +31 -7
  660. meta_subject/admin/glucose_admin.py +37 -5
  661. meta_subject/admin/glucose_fbg_admin.py +89 -0
  662. meta_subject/admin/health_economics/__init__.py +4 -0
  663. meta_subject/admin/{health_economics_simple_admin.py → health_economics/health_economics_simple_admin.py} +7 -7
  664. meta_subject/admin/health_economics/health_economics_update_admin.py +101 -0
  665. meta_subject/admin/hepatitis_test_admin.py +4 -4
  666. meta_subject/admin/hiv_exit_review_admin.py +55 -0
  667. meta_subject/admin/list_filters.py +76 -0
  668. meta_subject/admin/malaria_test_admin.py +4 -29
  669. meta_subject/admin/medication_adherence_admin.py +5 -10
  670. meta_subject/admin/mnsi_admin.py +9 -8
  671. meta_subject/admin/modeladmin.py +9 -8
  672. meta_subject/admin/next_appointment_admin.py +19 -0
  673. meta_subject/admin/other_arv_regimens_admin.py +10 -14
  674. meta_subject/admin/patient_history_admin.py +7 -7
  675. meta_subject/admin/physical_exam_admin.py +4 -4
  676. meta_subject/admin/pregnancy_update_admin.py +4 -4
  677. meta_subject/admin/sf12_admin.py +3 -3
  678. meta_subject/admin/study_medication_admin.py +56 -11
  679. meta_subject/admin/subject_requisition_admin.py +5 -5
  680. meta_subject/admin/subject_visit_admin.py +5 -3
  681. meta_subject/admin/subject_visit_missed_admin.py +5 -4
  682. meta_subject/admin/urine_dipstick_test_admin.py +4 -4
  683. meta_subject/admin/urine_pregnancy_admin.py +4 -4
  684. meta_subject/apps.py +1 -1
  685. meta_subject/baker_recipes.py +20 -14
  686. meta_subject/choices.py +125 -123
  687. meta_subject/constants.py +4 -0
  688. meta_subject/form_validators/__init__.py +23 -0
  689. meta_subject/form_validators/birth_outcomes_form_validator.py +13 -0
  690. meta_subject/form_validators/delivery_form_validator.py +83 -0
  691. meta_subject/form_validators/dm_endpoint_form_validator.py +37 -0
  692. meta_subject/form_validators/dm_followup_form_validator.py +236 -0
  693. meta_subject/form_validators/egfr_drop_notification_form_validator.py +12 -0
  694. meta_subject/form_validators/followup_examination_form_validator.py +105 -0
  695. meta_subject/form_validators/glucose_fbg_form_validator.py +76 -0
  696. meta_subject/form_validators/glucose_form_validator.py +26 -0
  697. meta_subject/form_validators/health_economics_form_validator.py +7 -0
  698. meta_subject/form_validators/hiv_exit_review_form_validator.py +18 -0
  699. meta_subject/form_validators/mixins.py +95 -0
  700. meta_subject/forms/__init__.py +48 -3
  701. meta_subject/forms/birth_outcomes_form.py +1 -13
  702. meta_subject/forms/blood_results/__init__.py +10 -2
  703. meta_subject/forms/blood_results/blood_results_fbc_form.py +0 -1
  704. meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -2
  705. meta_subject/forms/blood_results/blood_results_ins_form.py +0 -1
  706. meta_subject/forms/blood_results/blood_results_lft_form.py +0 -1
  707. meta_subject/forms/blood_results/{blood_results_lipid_form.py → blood_results_lipids_form.py} +5 -6
  708. meta_subject/forms/blood_results/blood_results_rft_form.py +60 -5
  709. meta_subject/forms/complications_glycemia_form.py +1 -7
  710. meta_subject/forms/concomitant_medication_form.py +1 -7
  711. meta_subject/forms/delivery_form.py +2 -82
  712. meta_subject/forms/diabetes/__init__.py +4 -0
  713. meta_subject/forms/diabetes/dm_endpoint_form.py +13 -0
  714. meta_subject/forms/diabetes/dm_followup_form.py +25 -0
  715. meta_subject/forms/egfr_drop_notification_form.py +1 -13
  716. meta_subject/forms/eq53d3l_form.py +1 -5
  717. meta_subject/forms/followup_examination_form.py +1 -103
  718. meta_subject/forms/followup_vitals_form.py +23 -2
  719. meta_subject/forms/glucose_fbg_form.py +13 -0
  720. meta_subject/forms/glucose_form.py +1 -7
  721. meta_subject/forms/health_economics/__init__.py +4 -0
  722. meta_subject/forms/health_economics/health_economics_simple_form.py +13 -0
  723. meta_subject/forms/health_economics/health_economics_update_form.py +12 -0
  724. meta_subject/forms/hepatitis_test_form.py +1 -3
  725. meta_subject/forms/hiv_exit_review_form.py +13 -0
  726. meta_subject/forms/malaria_test_form.py +1 -13
  727. meta_subject/forms/medication_adherence_form.py +0 -1
  728. meta_subject/forms/mixins.py +1 -1
  729. meta_subject/forms/mnsi_form.py +0 -1
  730. meta_subject/forms/next_appointment_form.py +36 -0
  731. meta_subject/forms/other_arv_regimens_detail_form.py +3 -1
  732. meta_subject/forms/other_arv_regimens_form.py +1 -2
  733. meta_subject/forms/patient_history_form.py +1 -3
  734. meta_subject/forms/physical_exam_form.py +1 -3
  735. meta_subject/forms/pregnancy_update_form.py +1 -2
  736. meta_subject/forms/slider_widget.py +1 -2
  737. meta_subject/forms/study_medication_form.py +47 -8
  738. meta_subject/forms/subject_requisition_form.py +1 -2
  739. meta_subject/forms/subject_visit_form.py +18 -3
  740. meta_subject/forms/subject_visit_missed_form.py +1 -3
  741. meta_subject/forms/urine_dipstick_test_form.py +1 -3
  742. meta_subject/forms/urine_pregnancy_form.py +1 -3
  743. meta_subject/locale/lg/LC_MESSAGES/django.po +470 -0
  744. meta_subject/locale/sw/LC_MESSAGES/django.po +471 -0
  745. meta_subject/management/commands/create_missing_refills.py +3 -3
  746. meta_subject/management/commands/create_missing_rx.py +2 -2
  747. meta_subject/management/commands/missed.py +251 -0
  748. meta_subject/metadata_rules/__init__.py +2 -0
  749. meta_subject/metadata_rules/metadata_rules.py +49 -8
  750. meta_subject/metadata_rules/predicates.py +122 -27
  751. meta_subject/migrations/0001_initial.py +61 -62
  752. meta_subject/migrations/0002_auto_20191021_0353.py +5 -6
  753. meta_subject/migrations/0003_auto_20191021_0534.py +0 -1
  754. meta_subject/migrations/0004_auto_20191022_0134.py +0 -1
  755. meta_subject/migrations/0005_auto_20191024_1000.py +0 -1
  756. meta_subject/migrations/0006_auto_20191104_0756.py +0 -1
  757. meta_subject/migrations/0007_auto_20191107_2249.py +0 -1
  758. meta_subject/migrations/0008_auto_20191115_0132.py +0 -1
  759. meta_subject/migrations/0009_auto_20191119_2331.py +0 -1
  760. meta_subject/migrations/0010_auto_20191213_0314.py +0 -1
  761. meta_subject/migrations/0011_auto_20200118_1854.py +0 -1
  762. meta_subject/migrations/0012_auto_20200118_2334.py +5 -6
  763. meta_subject/migrations/0013_auto_20200119_0013.py +0 -1
  764. meta_subject/migrations/0014_auto_20200120_1622.py +5 -6
  765. meta_subject/migrations/0015_auto_20200120_1943.py +0 -1
  766. meta_subject/migrations/0016_auto_20200123_1508.py +0 -1
  767. meta_subject/migrations/0017_auto_20200325_0901.py +0 -1
  768. meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -6
  769. meta_subject/migrations/0019_auto_20200417_0315.py +0 -1
  770. meta_subject/migrations/0020_auto_20200417_0329.py +0 -1
  771. meta_subject/migrations/0021_auto_20200417_0332.py +0 -1
  772. meta_subject/migrations/0022_auto_20200419_2223.py +0 -1
  773. meta_subject/migrations/0023_auto_20200419_2305.py +0 -1
  774. meta_subject/migrations/0024_auto_20200419_2331.py +0 -1
  775. meta_subject/migrations/0025_auto_20200420_1455.py +0 -1
  776. meta_subject/migrations/0026_auto_20200420_1524.py +0 -1
  777. meta_subject/migrations/0027_auto_20200420_1645.py +0 -1
  778. meta_subject/migrations/0028_auto_20200420_1732.py +0 -1
  779. meta_subject/migrations/0029_auto_20200420_1751.py +0 -1
  780. meta_subject/migrations/0030_auto_20200420_1816.py +0 -1
  781. meta_subject/migrations/0031_auto_20200422_2039.py +0 -1
  782. meta_subject/migrations/0032_auto_20200515_0307.py +0 -1
  783. meta_subject/migrations/0033_auto_20200516_2356.py +5 -6
  784. meta_subject/migrations/0034_auto_20200517_0125.py +0 -1
  785. meta_subject/migrations/0035_auto_20200517_0128.py +0 -1
  786. meta_subject/migrations/0036_auto_20200517_0150.py +0 -1
  787. meta_subject/migrations/0037_auto_20200517_0207.py +0 -1
  788. meta_subject/migrations/0038_auto_20200520_0020.py +5 -6
  789. meta_subject/migrations/0039_auto_20200524_1944.py +0 -1
  790. meta_subject/migrations/0040_auto_20200527_2155.py +1 -2
  791. meta_subject/migrations/0041_auto_20200528_0242.py +0 -1
  792. meta_subject/migrations/0042_auto_20200528_0252.py +0 -1
  793. meta_subject/migrations/0043_auto_20200528_1555.py +0 -1
  794. meta_subject/migrations/0044_auto_20200528_1853.py +0 -1
  795. meta_subject/migrations/0045_auto_20200530_1801.py +1 -2
  796. meta_subject/migrations/0046_auto_20200530_1804.py +0 -1
  797. meta_subject/migrations/0047_auto_20200530_1819.py +0 -1
  798. meta_subject/migrations/0048_auto_20200530_1819.py +0 -1
  799. meta_subject/migrations/0049_auto_20200613_2041.py +0 -1
  800. meta_subject/migrations/0050_auto_20200614_1934.py +0 -1
  801. meta_subject/migrations/0051_auto_20200617_2117.py +5 -6
  802. meta_subject/migrations/0052_auto_20210624_0225.py +0 -1
  803. meta_subject/migrations/0053_auto_20210628_2105.py +0 -1
  804. meta_subject/migrations/0054_auto_20210628_2314.py +0 -1
  805. meta_subject/migrations/0055_auto_20210628_2331.py +0 -1
  806. meta_subject/migrations/0056_auto_20210702_0426.py +0 -1
  807. meta_subject/migrations/0057_auto_20210702_0458.py +0 -1
  808. meta_subject/migrations/0058_auto_20210702_0533.py +0 -1
  809. meta_subject/migrations/0059_auto_20210709_2056.py +0 -1
  810. meta_subject/migrations/0060_auto_20210709_2241.py +0 -1
  811. meta_subject/migrations/0061_auto_20210710_1929.py +0 -1
  812. meta_subject/migrations/0062_auto_20210713_0616.py +0 -1
  813. meta_subject/migrations/0063_auto_20210715_0337.py +5 -6
  814. meta_subject/migrations/0064_auto_20210715_2336.py +0 -1
  815. meta_subject/migrations/0065_auto_20210716_0813.py +0 -1
  816. meta_subject/migrations/0066_auto_20210721_0335.py +9 -10
  817. meta_subject/migrations/0067_auto_20210726_0340.py +5 -6
  818. meta_subject/migrations/0068_auto_20210728_1809.py +5 -6
  819. meta_subject/migrations/0069_auto_20210801_2021.py +0 -1
  820. meta_subject/migrations/0070_auto_20210804_0438.py +0 -1
  821. meta_subject/migrations/0071_auto_20210804_0715.py +0 -1
  822. meta_subject/migrations/0072_auto_20210805_1545.py +7 -8
  823. meta_subject/migrations/0073_auto_20210809_0055.py +5 -6
  824. meta_subject/migrations/0075_auto_20210809_1744.py +0 -1
  825. meta_subject/migrations/0076_auto_20210809_1854.py +0 -1
  826. meta_subject/migrations/0077_auto_20210809_2323.py +3 -4
  827. meta_subject/migrations/0078_auto_20210810_0857.py +0 -1
  828. meta_subject/migrations/0079_auto_20210812_0335.py +0 -1
  829. meta_subject/migrations/0080_auto_20210812_0400.py +0 -1
  830. meta_subject/migrations/0081_auto_20210817_2306.py +0 -1
  831. meta_subject/migrations/0082_auto_20210823_1612.py +3 -4
  832. meta_subject/migrations/0083_auto_20210823_1620.py +3 -4
  833. meta_subject/migrations/0084_auto_20210910_0234.py +0 -1
  834. meta_subject/migrations/0085_auto_20210911_2036.py +0 -1
  835. meta_subject/migrations/0086_auto_20210920_0229.py +0 -1
  836. meta_subject/migrations/0087_auto_20210922_2058.py +0 -1
  837. meta_subject/migrations/0088_auto_20210924_0027.py +5 -6
  838. meta_subject/migrations/0089_auto_20210924_0121.py +0 -1
  839. meta_subject/migrations/0090_auto_20210924_0424.py +5 -6
  840. meta_subject/migrations/0091_auto_20210929_2324.py +0 -1
  841. meta_subject/migrations/0092_auto_20211013_0447.py +0 -1
  842. meta_subject/migrations/0093_auto_20211117_0352.py +5 -6
  843. meta_subject/migrations/0094_auto_20211123_1645.py +0 -1
  844. meta_subject/migrations/0095_auto_20220128_1719.py +5 -6
  845. meta_subject/migrations/0096_auto_20220304_0501.py +0 -1
  846. meta_subject/migrations/0097_auto_20220304_2233.py +0 -1
  847. meta_subject/migrations/0098_auto_20220309_2106.py +5 -6
  848. meta_subject/migrations/0099_auto_20220309_2218.py +0 -1
  849. meta_subject/migrations/0100_auto_20220309_2238.py +0 -1
  850. meta_subject/migrations/0101_auto_20220316_2147.py +13 -14
  851. meta_subject/migrations/0102_auto_20220324_0304.py +0 -1
  852. meta_subject/migrations/0103_auto_20220324_0326.py +0 -1
  853. meta_subject/migrations/0104_auto_20220412_2151.py +0 -1
  854. meta_subject/migrations/0105_auto_20220412_2310.py +0 -1
  855. meta_subject/migrations/0106_auto_20220414_1741.py +0 -1
  856. meta_subject/migrations/0107_auto_20220415_0043.py +28 -23
  857. meta_subject/migrations/0108_auto_20220415_1747.py +0 -1
  858. meta_subject/migrations/0109_auto_20220415_1758.py +0 -1
  859. meta_subject/migrations/0110_auto_20220512_1811.py +0 -1
  860. meta_subject/migrations/0111_alter_followupvitals_severe_htn_and_more.py +0 -1
  861. meta_subject/migrations/0112_historicalsubjectvisit_document_status_comments_and_more.py +0 -1
  862. meta_subject/migrations/0113_bloodresultsrft_egfr_percent_change_and_more.py +0 -1
  863. meta_subject/migrations/0114_alter_bloodresultsrft_egfr_percent_change_and_more.py +0 -1
  864. meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -14
  865. meta_subject/migrations/0116_egfrnotification_report_status_and_more.py +0 -1
  866. meta_subject/migrations/0117_alter_egfrnotification_managers_and_more.py +0 -1
  867. meta_subject/migrations/0118_delivery_crf_status_delivery_crf_status_comments_and_more.py +0 -1
  868. meta_subject/migrations/0119_historicalstudymedication_roundup_divisible_by_and_more.py +0 -1
  869. meta_subject/migrations/0120_alter_birthoutcomes_managers_and_more.py +0 -1
  870. meta_subject/migrations/0121_auto_20220704_1841.py +0 -1
  871. meta_subject/migrations/0122_auto_20220708_2144.py +0 -1
  872. meta_subject/migrations/0123_auto_20220714_2136.py +0 -1
  873. meta_subject/migrations/0124_auto_20220714_2303.py +0 -1
  874. meta_subject/migrations/0125_auto_20220719_2134.py +0 -1
  875. meta_subject/migrations/0126_auto_20220719_2142.py +4 -5
  876. meta_subject/migrations/0127_auto_20220720_0053.py +0 -1
  877. meta_subject/migrations/0128_auto_20220720_0055.py +1 -2
  878. meta_subject/migrations/0129_auto_20220720_0108.py +0 -1
  879. meta_subject/migrations/0130_auto_20220720_0216.py +0 -1
  880. meta_subject/migrations/0131_auto_20220722_0411.py +29 -25
  881. meta_subject/migrations/0132_auto_20220722_1825.py +10 -7
  882. meta_subject/migrations/0133_auto_20220722_2140.py +0 -1
  883. meta_subject/migrations/0134_auto_20220722_2211.py +0 -1
  884. meta_subject/migrations/0135_auto_20220722_2212.py +41 -37
  885. meta_subject/migrations/0136_egfrdropnotification_creatinine_quantifier_and_more.py +0 -1
  886. meta_subject/migrations/0137_alter_egfrdropnotification_egfr_percent_change_and_more.py +0 -1
  887. meta_subject/migrations/0138_alter_glucose_fbg_datetime_and_more.py +0 -1
  888. meta_subject/migrations/0139_alter_bloodresultsins_ins_units_and_more.py +0 -1
  889. meta_subject/migrations/0140_alter_bloodresultsfbc_action_identifier_and_more.py +0 -1
  890. meta_subject/migrations/0141_auto_20220826_0258.py +0 -1
  891. meta_subject/migrations/0142_auto_20220826_0322.py +0 -1
  892. meta_subject/migrations/0143_auto_20220826_0406.py +0 -1
  893. meta_subject/migrations/0144_auto_20220907_0157.py +0 -1
  894. meta_subject/migrations/0145_auto_20220907_0202.py +0 -1
  895. meta_subject/migrations/0146_auto_20220907_0207.py +0 -1
  896. meta_subject/migrations/0147_auto_20220907_1505.py +0 -1
  897. meta_subject/migrations/0148_auto_20220908_1826.py +0 -1
  898. meta_subject/migrations/0149_auto_20220913_2139.py +0 -1
  899. meta_subject/migrations/0150_auto_20220914_0039.py +15 -13
  900. meta_subject/migrations/0151_auto_20220918_0508.py +0 -1
  901. meta_subject/migrations/0152_auto_20220925_0509.py +0 -1
  902. meta_subject/migrations/0153_auto_20220928_0250.py +0 -1
  903. meta_subject/migrations/0154_auto_20220928_0419.py +0 -1
  904. meta_subject/migrations/0155_auto_20220929_1742.py +0 -1
  905. meta_subject/migrations/0156_alter_bloodresultsfbc_assay_datetime_and_more.py +153 -0
  906. meta_subject/migrations/0157_remove_bloodresultsfbc_crf_status_and_more.py +512 -0
  907. meta_subject/migrations/0158_alter_followupexamination_attended_clinic_and_more.py +52 -0
  908. meta_subject/migrations/0159_alter_bloodresultsfbc_results_abnormal_and_more.py +152 -0
  909. meta_subject/migrations/0160_alter_healtheconomicssimple_education_certificate_and_more.py +44 -0
  910. meta_subject/migrations/0161_alter_birthoutcomes_options_and_more.py +3307 -0
  911. meta_subject/migrations/0162_alter_followupexamination_abdominal_tenderness_and_more.py +66 -0
  912. meta_subject/migrations/0163_alter_birthoutcomes_options_and_more.py +3470 -0
  913. meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +709 -0
  914. meta_subject/migrations/0165_alter_dmreferralfollowup_healthcare_workers.py +22 -0
  915. meta_subject/migrations/0166_rename_dm_medications_other_dmreferralfollowup_other_dm_medications_and_more.py +184 -0
  916. meta_subject/migrations/0167_rename_healthcare_workers_other_dmreferralfollowup_other_healthcare_workers_and_more.py +25 -0
  917. meta_subject/migrations/0168_alter_dmreferralfollowup_last_missed_pill_and_more.py +53 -0
  918. meta_subject/migrations/0169_alter_dmreferralfollowup_options_and_more.py +94 -0
  919. meta_subject/migrations/0170_remove_glucose_repeat_fbg_and_more.py +52 -0
  920. meta_subject/migrations/0171_alter_glucose_endpoint_today_and_more.py +80 -0
  921. meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +67 -0
  922. meta_subject/migrations/0173_alter_glucosefbg_options_and_more.py +117 -0
  923. meta_subject/migrations/0174_remove_glucosefbg_glucose_abnormal_and_more.py +105 -0
  924. meta_subject/migrations/0175_auto_20240214_2239.py +23 -0
  925. meta_subject/migrations/0176_alter_glucosefbg_glucose_value_and_more.py +44 -0
  926. meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +91 -0
  927. meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +719 -0
  928. meta_subject/migrations/0179_alter_birthoutcomes_consent_model_and_more.py +835 -0
  929. meta_subject/migrations/0180_dmreferralfollowup_missed_referral_reasons_and_more.py +62 -0
  930. meta_subject/migrations/0181_dmreferralfollowup_action_identifier_and_more.py +143 -0
  931. meta_subject/migrations/0182_rename_dmreferralfollowup_dmfollowup_and_more.py +54 -0
  932. meta_subject/migrations/0183_alter_dmfollowup_on_dm_medications_and_more.py +31 -0
  933. meta_subject/migrations/0184_alter_glucose_options_and_more.py +31 -0
  934. meta_subject/migrations/0185_alter_bloodresultsins_fasting_duration_str_and_more.py +82 -0
  935. meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +54 -0
  936. meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +442 -0
  937. meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +394 -0
  938. meta_subject/migrations/0189_alter_dmdxresult_options_and_more.py +116 -0
  939. meta_subject/migrations/0190_dmdiagnosis_dx_no_tmg_reason_and_more.py +65 -0
  940. meta_subject/migrations/0191_alter_dmdiagnosis_dx_no_tmg_reason_and_more.py +70 -0
  941. meta_subject/migrations/0192_rename_glucose_quantifier_glucosefbg_fbg_quantifier_and_more.py +44 -0
  942. meta_subject/migrations/0193_alter_glucosefbg_fbg_value_and_more.py +44 -0
  943. meta_subject/migrations/0194_remove_glucosefbg_assay_datetime_and_more.py +166 -0
  944. meta_subject/migrations/0195_alter_glucosefbg_fbg_datetime_and_more.py +27 -0
  945. meta_subject/migrations/0196_glucosefbg_fbg_not_performed_reason_and_more.py +49 -0
  946. meta_subject/migrations/0197_glucosefbg_fasting_duration_estimated_and_more.py +33 -0
  947. meta_subject/migrations/0198_alter_glucosefbg_fasting_duration_estimated_and_more.py +33 -0
  948. meta_subject/migrations/0199_auto_20240516_0247.py +18 -0
  949. meta_subject/migrations/0200_rename_fasting_duration_minutes_bloodresultsins_fasting_duration_delta_and_more.py +43 -0
  950. meta_subject/migrations/0201_alter_bloodresultsins_fasting_duration_delta_and_more.py +58 -0
  951. meta_subject/migrations/0202_auto_20240516_0315.py +32 -0
  952. meta_subject/migrations/0203_alter_bloodresultsins_fasting_duration_delta_and_more.py +67 -0
  953. meta_subject/migrations/0204_glucosefbg_repeat_fbg_date_and_more.py +27 -0
  954. meta_subject/migrations/0205_historicalsubjectrequisition_crf_status_and_more.py +80 -0
  955. meta_subject/migrations/0206_bloodresultsfbc_crf_status_and_more.py +62 -0
  956. meta_subject/migrations/0207_alter_historicalphysicalexam_waist_circumference_and_more.py +46 -0
  957. meta_subject/migrations/0208_birthoutcomes_crf_status_and_more.py +62 -0
  958. meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +36 -0
  959. meta_subject/migrations/0210_remove_dmdxresult_dm_diagnosis_and_more.py +123 -0
  960. meta_subject/migrations/0211_dmendpoint_endpoint_reached_and_more.py +45 -0
  961. meta_subject/migrations/0212_auto_20240827_2222.py +23 -0
  962. meta_subject/migrations/0213_rename_bloodresultslipid_bloodresultslipids_and_more.py +35 -0
  963. meta_subject/migrations/0214_historicalstudymedication_stock_codes_and_more.py +44 -0
  964. meta_subject/migrations/0215_alter_historicalstudymedication_stock_codes_and_more.py +46 -0
  965. meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +553 -0
  966. meta_subject/migrations/0217_alter_historicalnextappointment_appt_datetime_and_more.py +42 -0
  967. meta_subject/migrations/0218_alter_historicalnextappointment_appt_date_and_more.py +53 -0
  968. meta_subject/migrations/0219_remove_historicalnextappointment_allow_create_interim_and_more.py +92 -0
  969. meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +825 -0
  970. meta_subject/migrations/0221_auto_20250402_1913.py +42 -0
  971. meta_subject/migrations/0222_alter_historicalstudymedication_stock_codes_and_more.py +46 -0
  972. meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py +83 -0
  973. meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py +153 -0
  974. meta_subject/migrations/0225_followupvitals_waist_circumference_and_more.py +46 -0
  975. meta_subject/migrations/0226_followupvitals_waist_circumference_comment_and_more.py +97 -0
  976. meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
  977. meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +2518 -0
  978. meta_subject/migrations/0229_alter_glucosefbg_consent_model_and_more.py +1918 -0
  979. meta_subject/migrations/0230_alter_historicaldelivery_action_identifier_and_more.py +1733 -0
  980. meta_subject/migrations/0231_alter_historicalmedicationadherence_consent_model_and_more.py +2054 -0
  981. meta_subject/migrations/0232_alter_patienthistory_concomitant_conditions_and_more.py +1170 -0
  982. meta_subject/migrations/0233_historicalspfq_spfq.py +1066 -0
  983. meta_subject/migrations/0234_remove_spfq_site_remove_spfq_subject_visit_and_more.py +27 -0
  984. meta_subject/migrations/0235_glucosefbg_endpoint_today_and_more.py +606 -0
  985. meta_subject/migrations/0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more.py +58 -0
  986. meta_subject/migrations/0237_historicalhivexitreview_singleton_field_and_more.py +68 -0
  987. meta_subject/migrations/0238_historicalhivexitreview_available_and_more.py +88 -0
  988. meta_subject/model_mixins/__init__.py +10 -0
  989. meta_subject/model_mixins/arv_history_model_mixin.py +5 -46
  990. meta_subject/model_mixins/arv_review_model_mixin.py +53 -0
  991. meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
  992. meta_subject/model_mixins/vitals_fields_model_mixin.py +33 -1
  993. meta_subject/models/__init__.py +61 -4
  994. meta_subject/models/birth_outcomes.py +17 -8
  995. meta_subject/models/blood_results/__init__.py +12 -2
  996. meta_subject/models/blood_results/blood_results_fbc.py +9 -4
  997. meta_subject/models/blood_results/blood_results_glu.py +9 -4
  998. meta_subject/models/blood_results/blood_results_hba1c.py +8 -2
  999. meta_subject/models/blood_results/blood_results_ins.py +8 -2
  1000. meta_subject/models/blood_results/blood_results_lft.py +8 -2
  1001. meta_subject/models/blood_results/{blood_results_lipid.py → blood_results_lipids.py} +11 -4
  1002. meta_subject/models/blood_results/blood_results_rft.py +7 -1
  1003. meta_subject/models/complications.py +1 -3
  1004. meta_subject/models/complications_glycemia.py +3 -4
  1005. meta_subject/models/concomitant_medication.py +0 -1
  1006. meta_subject/models/delivery.py +4 -6
  1007. meta_subject/models/diabetes/__init__.py +4 -0
  1008. meta_subject/models/diabetes/dm_endpoint.py +61 -0
  1009. meta_subject/models/diabetes/dm_followup.py +215 -0
  1010. meta_subject/models/diet_and_lifestyle.py +5 -5
  1011. meta_subject/models/egfr_drop_notification.py +0 -1
  1012. meta_subject/models/followup_examination.py +28 -32
  1013. meta_subject/models/followup_vitals.py +3 -4
  1014. meta_subject/models/glucose.py +50 -15
  1015. meta_subject/models/glucose_fbg.py +74 -0
  1016. meta_subject/models/glucose_review.py +15 -0
  1017. meta_subject/models/health_economics/__init__.py +5 -0
  1018. meta_subject/models/{health_economics.py → health_economics/health_economics.py} +13 -14
  1019. meta_subject/models/{health_economics_simple.py → health_economics/health_economics_simple.py} +3 -4
  1020. meta_subject/models/health_economics/health_economics_update.py +97 -0
  1021. meta_subject/models/hepatitis_test.py +2 -3
  1022. meta_subject/models/hiv_exit_review.py +44 -0
  1023. meta_subject/models/malaria_test.py +3 -31
  1024. meta_subject/models/next_appointment.py +15 -0
  1025. meta_subject/models/off_study_drug.py +0 -1
  1026. meta_subject/models/other_arv_regimens_detail.py +3 -5
  1027. meta_subject/models/patient_history.py +6 -8
  1028. meta_subject/models/physical_exam.py +6 -6
  1029. meta_subject/models/pregnancy_update.py +1 -2
  1030. meta_subject/models/sf12.py +0 -3
  1031. meta_subject/models/signals.py +32 -11
  1032. meta_subject/models/study_medication.py +0 -1
  1033. meta_subject/models/subject_requisition.py +3 -5
  1034. meta_subject/models/subject_visit.py +5 -8
  1035. meta_subject/models/subject_visit_missed.py +0 -1
  1036. meta_subject/models/todo.txt +1 -1
  1037. meta_subject/models/urine_dipstick_test.py +2 -3
  1038. meta_subject/models/urine_pregnancy.py +1 -2
  1039. meta_subject/static/meta_subject/slider.css +1 -1
  1040. meta_subject/templates/meta_subject/endpoint_review_instructions.html +6 -0
  1041. meta_subject/templates/meta_subject/widgets/slider.html +0 -1
  1042. meta_visit_schedule/constants.py +7 -1
  1043. meta_visit_schedule/visit_schedules/__init__.py +3 -1
  1044. meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
  1045. meta_visit_schedule/visit_schedules/phase_three/crfs.py +212 -95
  1046. meta_visit_schedule/visit_schedules/phase_three/crfs_pregnancy.py +2 -2
  1047. meta_visit_schedule/visit_schedules/phase_three/requisitions.py +30 -51
  1048. meta_visit_schedule/visit_schedules/phase_three/schedule.py +72 -7
  1049. meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +59 -0
  1050. meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +7 -5
  1051. meta_visit_schedule/visit_schedules/phase_three/visit_schedule.py +3 -1
  1052. meta_ae/pdf_reports/ae_report.py +0 -8
  1053. meta_ae/pdf_reports/death_report.py +0 -8
  1054. meta_ae/tests/holidays.csv +0 -15
  1055. meta_ae/tests/tests/test_actions.py +0 -127
  1056. meta_ae/tests/urls.py +0 -10
  1057. meta_consent/admin/subject_reconsent_admin.py +0 -77
  1058. meta_consent/tests/holidays.csv +0 -15
  1059. meta_consent/tests/tests/test_form_validators.py +0 -85
  1060. meta_consent/tests/tests/test_subject_consent.py +0 -10
  1061. meta_consent/tests/urls.py +0 -18
  1062. meta_dashboard/model_wrappers/__init__.py +0 -8
  1063. meta_dashboard/model_wrappers/ae_initial_model_wrapper.py +0 -6
  1064. meta_dashboard/model_wrappers/death_report_model_wrapper.py +0 -15
  1065. meta_dashboard/model_wrappers/subject_refusal_model_wrapper.py +0 -16
  1066. meta_dashboard/model_wrappers/subject_screening_model_wrapper.py +0 -85
  1067. meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard.html +0 -11
  1068. meta_dashboard/tests/admin.py +0 -22
  1069. meta_dashboard/tests/holidays.csv +0 -15
  1070. meta_dashboard/tests/tests/test_model_wrappers.py +0 -71
  1071. meta_dashboard/tests/urls.py +0 -59
  1072. meta_edc/tests/etc/randomization_list_phase_three.csv +0 -241
  1073. meta_edc/tests/etc/user-aes-local.key +0 -1
  1074. meta_edc/tests/etc/user-aes-restricted.key +0 -0
  1075. meta_edc/tests/etc/user-rsa-local-private.pem +0 -27
  1076. meta_edc/tests/etc/user-rsa-local-public.pem +0 -9
  1077. meta_edc/tests/etc/user-rsa-restricted-private.pem +0 -27
  1078. meta_edc/tests/etc/user-rsa-restricted-public.pem +0 -9
  1079. meta_edc/tests/etc/user-salt-local.key +0 -0
  1080. meta_edc/tests/etc/user-salt-restricted.key +0 -0
  1081. meta_edc/tests/tests/test_endpoints.py +0 -525
  1082. meta_edc-0.2.24.dist-info/METADATA +0 -180
  1083. meta_edc-0.2.24.dist-info/RECORD +0 -849
  1084. meta_edc-0.2.24.dist-info/WHEEL +0 -5
  1085. meta_edc-0.2.24.dist-info/top_level.txt +0 -19
  1086. meta_labs/tests/test_labs.py +0 -27
  1087. meta_labs/tests/test_reportables.py +0 -16
  1088. meta_labs/tests/urls.py +0 -4
  1089. meta_lists/tests/test_lists.py +0 -8
  1090. meta_pharmacy/models.py +0 -0
  1091. meta_prn/tests/__init__.py +0 -0
  1092. meta_prn/tests/tests/__init__.py +0 -0
  1093. meta_prn/tests/tests/test_actions.py +0 -97
  1094. meta_prn/tests/tests/test_manager_order.py +0 -15
  1095. meta_prn/tests/tests/test_pregnancy_notification.py +0 -94
  1096. meta_prn/tests/urls.py +0 -10
  1097. meta_rando/tests/__init__.py +0 -0
  1098. meta_rando/tests/tests/__init__.py +0 -0
  1099. meta_rando/tests/tests/test_randomizers.py +0 -58
  1100. meta_reference/__init__.py +0 -0
  1101. meta_reference/apps.py +0 -6
  1102. meta_reference/migrations/__init__.py +0 -0
  1103. meta_reference/reference_model_configs.py +0 -5
  1104. meta_reports/models.py +0 -0
  1105. meta_reports/tests/__init__.py +0 -0
  1106. meta_reports/tests/holidays.csv +0 -15
  1107. meta_reports/tests/test_reports.py +0 -36
  1108. meta_reports/tests/urls.py +0 -4
  1109. meta_screening/offline_models.py +0 -3
  1110. meta_screening/tests/__init__.py +0 -0
  1111. meta_screening/tests/holidays.csv +0 -15
  1112. meta_screening/tests/meta_test_case_mixin.py +0 -214
  1113. meta_screening/tests/options.py +0 -124
  1114. meta_screening/tests/tests/__init__.py +0 -0
  1115. meta_screening/tests/tests/test_forms.py +0 -397
  1116. meta_screening/tests/tests/test_screening_part_one.py +0 -108
  1117. meta_screening/tests/tests/test_screening_part_three.py +0 -437
  1118. meta_screening/tests/tests/test_screening_part_two.py +0 -86
  1119. meta_sites/tests/__init__.py +0 -0
  1120. meta_sites/tests/test_sites.py +0 -16
  1121. meta_sites/tests/urls.py +0 -4
  1122. meta_subject/admin/blood_results/blood_results_glu_admin.py +0 -30
  1123. meta_subject/admin/blood_results/blood_results_lipid_admin.py +0 -21
  1124. meta_subject/forms/blood_results/blood_results_glu_form.py +0 -26
  1125. meta_subject/forms/health_economics_simple_form.py +0 -19
  1126. meta_subject/tests/__init__.py +0 -0
  1127. meta_subject/tests/holidays.csv +0 -15
  1128. meta_subject/tests/tests/__init__.py +0 -0
  1129. meta_subject/tests/tests/test_egfr.py +0 -222
  1130. meta_subject/tests/tests/test_followup.py +0 -50
  1131. meta_subject/tests/tests/test_manager_order.py +0 -31
  1132. meta_subject/tests/tests/test_medication_adherence.py +0 -72
  1133. meta_subject/tests/tests/test_metadata_rules.py +0 -105
  1134. meta_subject/tests/tests/test_mnsi.py +0 -246
  1135. meta_subject/tests/tests/test_patient_history_form.py +0 -71
  1136. meta_subject/tests/tests/test_physical_exam.py +0 -81
  1137. meta_subject/tests/tests/test_sf12.py +0 -164
  1138. meta_subject/tests/tests/test_study_medication.py +0 -230
  1139. meta_subject/tests/urls.py +0 -25
  1140. meta_visit_schedule/tests/__init__.py +0 -0
  1141. meta_visit_schedule/tests/tests/__init__.py +0 -0
  1142. meta_visit_schedule/tests/tests/test_schedule.py +0 -177
  1143. meta_visit_schedule/tests/urls.py +0 -4
  1144. tests/__init__.py +0 -0
  1145. tests/etc/randomization_list.csv +0 -241
  1146. tests/etc/user-aes-local.key +0 -0
  1147. tests/etc/user-aes-restricted.key +0 -1
  1148. tests/etc/user-rsa-local-private.pem +0 -27
  1149. tests/etc/user-rsa-local-public.pem +0 -9
  1150. tests/etc/user-rsa-restricted-private.pem +0 -27
  1151. tests/etc/user-rsa-restricted-public.pem +0 -9
  1152. tests/etc/user-salt-local.key +0 -0
  1153. tests/etc/user-salt-restricted.key +0 -0
  1154. tests/holidays.csv +0 -15
  1155. /meta_ae/templates/meta_ae/{bootstrap3/ae_initial_description.html → aeinitial_description.html} +0 -0
  1156. {meta_ae/tests → meta_analytics}/__init__.py +0 -0
  1157. /meta_ae/tests/tests/__init__.py → /meta_analytics/constants.py +0 -0
  1158. {meta_consent/tests → meta_analytics/tables/enrolled}/__init__.py +0 -0
  1159. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/add_consent_button.html +0 -0
  1160. /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/refusal_button.html +0 -0
  1161. {meta_consent/tests/tests → meta_edc/migrations}/__init__.py +0 -0
  1162. {meta_edc-0.2.24.dist-info → meta_edc-1.4.0.dist-info/licenses}/LICENSE +0 -0
  1163. {meta_dashboard/tests → meta_pharmacy/management}/__init__.py +0 -0
  1164. {meta_dashboard/tests/tests → meta_pharmacy/management/commands}/__init__.py +0 -0
  1165. {meta_edc/tests → meta_reports/management}/__init__.py +0 -0
  1166. {meta_edc/tests/tests → meta_reports/management/commands}/__init__.py +0 -0
  1167. /meta_edc-0.2.24.dist-info/AUTHORS → /meta_reports/utils.py +0 -0
  1168. /meta_labs/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
  1169. /meta_lists/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
@@ -1,4 +1,6 @@
1
- from edc_lab.model_mixins import CrfWithRequisitionModelMixin
1
+ from django.db import models
2
+ from edc_crf.model_mixins import CrfStatusModelMixin
3
+ from edc_lab.model_mixins import CrfWithRequisitionModelMixin, requisition_fk_options
2
4
  from edc_lab_panel.panels import lft_panel
3
5
  from edc_lab_results import BLOOD_RESULTS_LFT_ACTION
4
6
  from edc_lab_results.model_mixins import (
@@ -25,12 +27,16 @@ class BloodResultsLft(
25
27
  GgtModelMixin,
26
28
  CrfWithRequisitionModelMixin,
27
29
  BloodResultsModelMixin,
30
+ CrfStatusModelMixin,
28
31
  BaseUuidModel,
29
32
  ):
30
33
  action_name = BLOOD_RESULTS_LFT_ACTION
31
- tracking_identifier_prefix = "LF"
32
34
  lab_panel = lft_panel
33
35
 
36
+ requisition = models.ForeignKey(
37
+ limit_choices_to={"panel__name": lft_panel.name}, **requisition_fk_options
38
+ )
39
+
34
40
  class Meta(CrfWithActionModelMixin.Meta, BaseUuidModel.Meta):
35
41
  verbose_name = "Blood Result: LFT"
36
42
  verbose_name_plural = "Blood Results: LFT"
@@ -1,6 +1,8 @@
1
- from edc_lab.model_mixins import CrfWithRequisitionModelMixin
1
+ from django.db import models
2
+ from edc_crf.model_mixins import CrfStatusModelMixin
3
+ from edc_lab.model_mixins import CrfWithRequisitionModelMixin, requisition_fk_options
2
4
  from edc_lab_panel.panels import lipids_panel
3
- from edc_lab_results import BLOOD_RESULTS_LIPID_ACTION
5
+ from edc_lab_results import BLOOD_RESULTS_LIPIDS_ACTION
4
6
  from edc_lab_results.model_mixins import (
5
7
  BloodResultsModelMixin,
6
8
  CholModelMixin,
@@ -13,7 +15,7 @@ from edc_model.models import BaseUuidModel
13
15
  from ...model_mixins import CrfWithActionModelMixin
14
16
 
15
17
 
16
- class BloodResultsLipid(
18
+ class BloodResultsLipids(
17
19
  CrfWithActionModelMixin,
18
20
  HdlModelMixin,
19
21
  LdlModelMixin,
@@ -21,12 +23,17 @@ class BloodResultsLipid(
21
23
  CholModelMixin,
22
24
  CrfWithRequisitionModelMixin,
23
25
  BloodResultsModelMixin,
26
+ CrfStatusModelMixin,
24
27
  BaseUuidModel,
25
28
  ):
26
- action_name = BLOOD_RESULTS_LIPID_ACTION
29
+ action_name = BLOOD_RESULTS_LIPIDS_ACTION
27
30
  tracking_identifier_prefix = "LP"
28
31
  lab_panel = lipids_panel
29
32
 
33
+ requisition = models.ForeignKey(
34
+ limit_choices_to={"panel__name": lipids_panel.name}, **requisition_fk_options
35
+ )
36
+
30
37
  class Meta(CrfWithActionModelMixin.Meta, BaseUuidModel.Meta):
31
38
  verbose_name = "Blood Result: Lipids"
32
39
  verbose_name_plural = "Blood Results: Lipids"
@@ -1,6 +1,7 @@
1
1
  from django.db import models
2
+ from edc_crf.model_mixins import CrfStatusModelMixin
2
3
  from edc_egfr.model_mixins import EgfrModelMixin
3
- from edc_lab.model_mixins import CrfWithRequisitionModelMixin
4
+ from edc_lab.model_mixins import CrfWithRequisitionModelMixin, requisition_fk_options
4
5
  from edc_lab_panel.panels import rft_panel
5
6
  from edc_lab_results import BLOOD_RESULTS_RFT_ACTION
6
7
  from edc_lab_results.model_mixins import (
@@ -22,12 +23,17 @@ class BloodResultsRft(
22
23
  UricAcidModelMixin,
23
24
  CrfWithRequisitionModelMixin,
24
25
  BloodResultsModelMixin,
26
+ CrfStatusModelMixin,
25
27
  BaseUuidModel,
26
28
  ):
27
29
  action_name = BLOOD_RESULTS_RFT_ACTION
28
30
  lab_panel = rft_panel
29
31
  egfr_formula_name = "ckd-epi"
30
32
 
33
+ requisition = models.ForeignKey(
34
+ limit_choices_to={"panel__name": rft_panel.name}, **requisition_fk_options
35
+ )
36
+
31
37
  old_egfr_value = models.DecimalField(
32
38
  decimal_places=4,
33
39
  max_digits=8,
@@ -1,14 +1,12 @@
1
1
  from django.db import models
2
2
  from edc_constants.choices import NORMAL_ABNORMAL, PRESENT_ABSENT, YES_NO
3
- from edc_data_manager.modeladmin_mixins import DataManagerModelAdminMixin
4
3
  from edc_model import models as edc_models
5
4
 
6
5
  from ..choices import FUNDOSCOPY_CHOICES
7
6
  from ..model_mixins import CrfModelMixin
8
7
 
9
8
 
10
- class Complications(DataManagerModelAdminMixin, CrfModelMixin, edc_models.BaseUuidModel):
11
-
9
+ class Complications(CrfModelMixin, edc_models.BaseUuidModel):
12
10
  cataracts = models.CharField(
13
11
  verbose_name="Presence of cataracts", max_length=15, choices=YES_NO
14
12
  )
@@ -1,6 +1,6 @@
1
1
  from django.db import models
2
2
  from edc_constants.choices import NORMAL_ABNORMAL_NOEXAM
3
- from edc_model import models as edc_models
3
+ from edc_model.models import BaseUuidModel
4
4
 
5
5
  from ..choices import (
6
6
  FUNDOSCOPY_CHOICES,
@@ -11,8 +11,7 @@ from ..choices import (
11
11
  from ..model_mixins import CrfModelMixin
12
12
 
13
13
 
14
- class ComplicationsGlycemia(CrfModelMixin, edc_models.BaseUuidModel):
15
-
14
+ class ComplicationsGlycemia(CrfModelMixin, BaseUuidModel):
16
15
  """Not used"""
17
16
 
18
17
  # eye examination
@@ -207,6 +206,6 @@ class ComplicationsGlycemia(CrfModelMixin, edc_models.BaseUuidModel):
207
206
  choices=YES_NO_NO_EXAM,
208
207
  )
209
208
 
210
- class Meta(CrfModelMixin.Meta, edc_models.BaseUuidModel.Meta):
209
+ class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
211
210
  verbose_name = "Complications (Raised Glycemia)"
212
211
  verbose_name_plural = "Complications (Raised Glycemia)"
@@ -4,7 +4,6 @@ from ..model_mixins import CrfModelMixin
4
4
 
5
5
 
6
6
  class ConcomitantMedication(CrfModelMixin, BaseUuidModel):
7
-
8
7
  # prescription
9
8
  # days
10
9
  # dosage
@@ -1,12 +1,12 @@
1
1
  # TODO: urine_bhcg form (probably not necessary)
2
2
  # TODO: if pos, take of study drug and estimate
3
3
  # delivery date for the pregnancy outcomes form. See Form 25/26
4
+ from clinicedc_constants import NOT_APPLICABLE, PATIENT, YES
4
5
  from django.apps import apps as django_apps
5
6
  from django.core.validators import MaxValueValidator, MinValueValidator
6
7
  from django.db import models
7
8
  from django_crypto_fields.fields import EncryptedTextField
8
9
  from edc_constants.choices import YES_NO, YES_NO_NA
9
- from edc_constants.constants import NOT_APPLICABLE, PATIENT, YES
10
10
  from edc_model.models import BaseUuidModel
11
11
  from edc_model.validators import datetime_not_future
12
12
  from edc_model_fields.fields import OtherCharField
@@ -38,8 +38,6 @@ class Delivery(
38
38
 
39
39
  action_name = DELIVERY_ACTION
40
40
 
41
- tracking_identifier_prefix = "DL"
42
-
43
41
  report_datetime = models.DateTimeField(
44
42
  verbose_name="Report Date and Time", default=get_utcnow
45
43
  )
@@ -54,7 +52,7 @@ class Delivery(
54
52
 
55
53
  info_not_available_reason = models.TextField(
56
54
  verbose_name="If the report was not available, please explain?",
57
- null=True,
55
+ default="",
58
56
  blank=True,
59
57
  )
60
58
 
@@ -112,7 +110,7 @@ class Delivery(
112
110
  "please give name of the facility"
113
111
  ),
114
112
  max_length=150,
115
- null=True,
113
+ default="",
116
114
  blank=True,
117
115
  )
118
116
 
@@ -162,4 +160,4 @@ class Delivery(
162
160
  class Meta(CrfWithActionModelMixin.Meta, BaseUuidModel.Meta):
163
161
  verbose_name = "Delivery"
164
162
  verbose_name_plural = "Delivery"
165
- unique_together = ["subject_visit", "delivery_datetime"]
163
+ unique_together = ("subject_visit", "delivery_datetime")
@@ -0,0 +1,4 @@
1
+ from .dm_endpoint import DmEndpoint
2
+ from .dm_followup import DmFollowup
3
+
4
+ __all__ = ["DmEndpoint", "DmFollowup"]
@@ -0,0 +1,61 @@
1
+ from clinicedc_constants import QUESTION_RETIRED
2
+ from django.db import models
3
+ from edc_constants.choices import YES_NO, YES_NO_RETIRED
4
+ from edc_model.models import BaseUuidModel
5
+ from edc_model_fields.fields import OtherCharField
6
+
7
+ from ...model_mixins import CrfModelMixin
8
+
9
+
10
+ class DmEndpoint(CrfModelMixin, BaseUuidModel):
11
+ """A user model to enrolled patient onto the DM Referral
12
+ Schedule.
13
+ """
14
+
15
+ endpoint_reached = models.CharField(
16
+ verbose_name="Was the patient referred because the diabetes endpoint was reached?",
17
+ max_length=15,
18
+ choices=YES_NO,
19
+ default="",
20
+ blank=False,
21
+ help_text="If YES, the EDC will check for the patient on the Endpoints report.",
22
+ )
23
+
24
+ # retired
25
+ dx_date = models.DateField(verbose_name="Date endpoint reached", null=True)
26
+
27
+ # retired
28
+ dx_initiated_by = models.CharField(
29
+ verbose_name="What initiated the diagnosis",
30
+ max_length=25,
31
+ default=QUESTION_RETIRED,
32
+ )
33
+
34
+ # retired
35
+ dx_initiated_by_other = OtherCharField(blank=True)
36
+
37
+ # retired
38
+ dx_tmg = models.CharField(
39
+ verbose_name="Was this case discussed with the TMG?",
40
+ max_length=25,
41
+ choices=YES_NO_RETIRED,
42
+ default=QUESTION_RETIRED,
43
+ )
44
+
45
+ # retired
46
+ dx_tmg_date = models.DateField(
47
+ verbose_name="If YES, provide the date of the TMG discussion", null=True, blank=True
48
+ )
49
+
50
+ # retired
51
+ dx_no_tmg_reason = models.TextField(
52
+ verbose_name="If NO, please explain why this case was not discussed with the TMG",
53
+ default="",
54
+ blank=True,
55
+ )
56
+
57
+ comments = models.TextField(verbose_name="Any other comments", default="", blank=True)
58
+
59
+ class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
60
+ verbose_name = "Diabetes endpoint"
61
+ verbose_name_plural = "Diabetes endpoint"
@@ -0,0 +1,215 @@
1
+ from clinicedc_constants import NOT_APPLICABLE, QUESTION_RETIRED
2
+ from django.core.validators import MaxValueValidator, MinValueValidator
3
+ from django.db import models
4
+ from django.utils.safestring import mark_safe
5
+ from edc_action_item.models import ActionItem
6
+ from edc_adherence.choices import MISSED_PILLS
7
+ from edc_constants.choices import YES_NO, YES_NO_NA
8
+ from edc_model.models import BaseUuidModel
9
+ from edc_model_fields.fields import OtherCharField
10
+
11
+ from meta_lists.models import (
12
+ Complications,
13
+ DmMedications,
14
+ DmTreatments,
15
+ HealthcareWorkers,
16
+ Investigations,
17
+ MissedReferralReasons,
18
+ )
19
+
20
+ from ...constants import DM_FOLLOWUP_ACTION
21
+ from ...model_mixins import CrfWithActionModelMixin
22
+
23
+
24
+ class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
25
+ action_name = DM_FOLLOWUP_ACTION
26
+
27
+ referral_date = models.DateField(
28
+ verbose_name="Date of referral to diabetes clinic",
29
+ )
30
+
31
+ # Diabetes clinic attendance
32
+ attended = models.CharField(
33
+ verbose_name=(
34
+ "Did you attend the diabetes clinic following referral from the META Trial"
35
+ ),
36
+ choices=YES_NO,
37
+ max_length=25,
38
+ )
39
+
40
+ missed_referral_reasons = models.ManyToManyField(
41
+ MissedReferralReasons,
42
+ verbose_name=(
43
+ "If 'No', please provide a reason for not seeking further care or follow up?"
44
+ ),
45
+ blank=True,
46
+ )
47
+
48
+ other_missed_referral_reason = OtherCharField(
49
+ verbose_name="If other 'reason for not seeking further care', please specify ...",
50
+ null=True,
51
+ blank=True,
52
+ )
53
+
54
+ not_attended_reason = models.TextField(
55
+ verbose_name=(
56
+ "If 'No', please provide a reason for not seeking further care or follow up?"
57
+ ),
58
+ default=QUESTION_RETIRED,
59
+ editable=False,
60
+ )
61
+
62
+ facility_attended = models.CharField(
63
+ verbose_name="If 'Yes', please give the name of the facility you attended",
64
+ max_length=50,
65
+ default="",
66
+ blank=True,
67
+ )
68
+
69
+ attended_date = models.DateField(
70
+ verbose_name="What was the date you attended the health facility named above?",
71
+ null=True,
72
+ blank=True,
73
+ )
74
+
75
+ healthcare_workers = models.ManyToManyField(
76
+ HealthcareWorkers,
77
+ verbose_name="What type of health care worker did you see?",
78
+ blank=True,
79
+ )
80
+
81
+ other_healthcare_workers = OtherCharField(
82
+ verbose_name="If other 'healthcare worker', please specify ...",
83
+ null=True,
84
+ blank=True,
85
+ )
86
+
87
+ # investigations
88
+ investigations_performed = models.CharField(
89
+ verbose_name="Were any further investigations conducted at this visit?",
90
+ choices=YES_NO_NA,
91
+ default=NOT_APPLICABLE,
92
+ max_length=25,
93
+ )
94
+
95
+ investigations = models.ManyToManyField(
96
+ Investigations,
97
+ verbose_name="If 'Yes', please indicate what investigations were conducted.",
98
+ blank=True,
99
+ )
100
+
101
+ other_investigations = OtherCharField(
102
+ verbose_name="If other 'investigations', please specify ...",
103
+ null=True,
104
+ blank=True,
105
+ )
106
+
107
+ complications_checks_performed = models.CharField(
108
+ verbose_name=(
109
+ "Was the patient checked for diabetes related complications at this visit?"
110
+ ),
111
+ choices=YES_NO_NA,
112
+ default=NOT_APPLICABLE,
113
+ max_length=25,
114
+ )
115
+ complications_checks = models.ManyToManyField(
116
+ Complications,
117
+ verbose_name="If 'Yes, which diabetes related complications were checked for?",
118
+ blank=True,
119
+ )
120
+
121
+ other_complications_checks = OtherCharField(
122
+ verbose_name=(
123
+ "If other 'diabetes related complications checked for ', please specify ..."
124
+ ),
125
+ null=True,
126
+ blank=True,
127
+ )
128
+
129
+ # dm treatment
130
+
131
+ treatment_prescribed = models.CharField(
132
+ verbose_name="Was any treatment prescribed at this visit?",
133
+ choices=YES_NO_NA,
134
+ max_length=25,
135
+ default=NOT_APPLICABLE,
136
+ )
137
+ dm_treatments = models.ManyToManyField(
138
+ DmTreatments,
139
+ verbose_name="What treatment was prescribed?",
140
+ blank=True,
141
+ )
142
+
143
+ on_dm_medications = models.CharField(
144
+ verbose_name="Are you currently taking any drug therapy for diabetes?",
145
+ choices=YES_NO_NA,
146
+ max_length=25,
147
+ )
148
+
149
+ dm_medications_init_date = models.DateField(
150
+ verbose_name="If 'Yes', please give the date when drug treatment was started.",
151
+ null=True,
152
+ blank=True,
153
+ )
154
+
155
+ dm_medications = models.ManyToManyField(
156
+ DmMedications,
157
+ verbose_name=(
158
+ "If 'Yes', please indicate which diabetes drug "
159
+ "treatments you are currently taking."
160
+ ),
161
+ blank=True,
162
+ )
163
+
164
+ other_dm_medications = OtherCharField(
165
+ verbose_name="If other 'drug treatments', please specify ...",
166
+ null=True,
167
+ blank=True,
168
+ )
169
+
170
+ # Diabetes Medication Adherence
171
+
172
+ medications_adherent = models.CharField(
173
+ verbose_name="Are you taking the diabetes drug treatments regularly, i.e. every day?",
174
+ choices=YES_NO_NA,
175
+ default=NOT_APPLICABLE,
176
+ max_length=25,
177
+ )
178
+
179
+ visual_score_slider = models.CharField(
180
+ verbose_name="Visual score",
181
+ max_length=3,
182
+ help_text="%",
183
+ default="",
184
+ blank=True,
185
+ )
186
+
187
+ visual_score_confirmed = models.IntegerField(
188
+ verbose_name=mark_safe(
189
+ "<B><font color='orange'>Interviewer</font></B>: "
190
+ "please transcribe the score indicated from above."
191
+ ), # nosec B308
192
+ validators=[MinValueValidator(0), MaxValueValidator(100)],
193
+ help_text="%",
194
+ null=True,
195
+ blank=True,
196
+ )
197
+
198
+ last_missed_pill = models.CharField(
199
+ verbose_name="When was the last time you missed your study pill?",
200
+ max_length=25,
201
+ choices=MISSED_PILLS,
202
+ default="",
203
+ blank=True,
204
+ )
205
+
206
+ def save(self, *args, **kwargs):
207
+ self.action_item = ActionItem.objects.get(
208
+ subject_identifier=self.subject_identifier, action_type__name=self.action_name
209
+ )
210
+ self.action_identifier = self.action_item.action_identifier
211
+ super().save(*args, **kwargs)
212
+
213
+ class Meta(CrfWithActionModelMixin.Meta, BaseUuidModel.Meta):
214
+ verbose_name = "Diabetes follow-up after referral"
215
+ verbose_name_plural = "Diabetes follow-up after referral"
@@ -1,18 +1,18 @@
1
1
  from django.db import models
2
2
  from edc_constants.choices import YES_NO
3
- from edc_model import models as edc_models
3
+ from edc_model.models import BaseUuidModel
4
4
 
5
5
  from ..model_mixins import CrfModelMixin
6
6
 
7
7
 
8
- class DietAndLifestyle(CrfModelMixin, edc_models.BaseUuidModel):
8
+ class DietAndLifestyle(CrfModelMixin, BaseUuidModel):
9
9
  diet_and_lifestyle = models.CharField(
10
10
  verbose_name=(
11
- "Has the participant received the META3 " "approved diet and lifetsyle counseling?"
11
+ "Has the participant received the META3 approved diet and lifetsyle counseling?"
12
12
  ),
13
13
  max_length=15,
14
14
  choices=YES_NO,
15
- null=True,
15
+ default="",
16
16
  blank=False,
17
17
  help_text="This response is not criteria for eligibility",
18
18
  )
@@ -27,6 +27,6 @@ class DietAndLifestyle(CrfModelMixin, edc_models.BaseUuidModel):
27
27
  help_text="Report in minutes. This response is not criteria for eligibility",
28
28
  )
29
29
 
30
- class Meta(CrfModelMixin.Meta, edc_models.BaseUuidModel.Meta):
30
+ class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
31
31
  verbose_name = "Clinic follow up: Examination"
32
32
  verbose_name_plural = "Clinic follow up: Examination"
@@ -10,7 +10,6 @@ class EgfrDropNotification(
10
10
  CrfWithActionModelMixin,
11
11
  BaseUuidModel,
12
12
  ):
13
-
14
13
  action_name = EGFR_DROP_NOTIFICATION_ACTION
15
14
 
16
15
  class Meta(CrfWithActionModelMixin.Meta, BaseUuidModel.Meta):
@@ -1,8 +1,8 @@
1
+ from clinicedc_constants import NOT_APPLICABLE
1
2
  from django.db import models
2
3
  from django.db.models import PROTECT
3
4
  from django.utils.safestring import mark_safe
4
- from edc_constants.choices import YES_NO, YES_NO_NA
5
- from edc_constants.constants import NOT_APPLICABLE
5
+ from edc_constants.choices import YES_NO, YES_NO_NA, YES_NO_NOT_EVALUATED
6
6
  from edc_model.models import BaseUuidModel
7
7
  from edc_model_fields.fields import OtherCharField
8
8
 
@@ -14,11 +14,8 @@ from ..model_mixins import CrfWithActionModelMixin
14
14
 
15
15
 
16
16
  class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
17
-
18
17
  action_name = FOLLOWUP_EXAMINATION_ACTION
19
18
 
20
- tracking_identifier_prefix = "FU"
21
-
22
19
  # 4a
23
20
  symptoms = models.ManyToManyField(
24
21
  Symptoms,
@@ -43,12 +40,12 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
43
40
  related_name="symptoms_g3",
44
41
  verbose_name="For these symptoms, were any grade 3 events",
45
42
  help_text=(
46
- "Refer to DAIDS toxicity table. " "Please complete Serious Adverse Event form"
43
+ "Refer to DAIDS toxicity table. Please complete Serious Adverse Event form"
47
44
  ),
48
45
  )
49
46
  symptoms_g3_detail = models.TextField(
50
47
  verbose_name="Please provide details on any of the Grade 3 symptoms above.",
51
- null=True,
48
+ default="",
52
49
  blank=True,
53
50
  )
54
51
 
@@ -58,54 +55,51 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
58
55
  related_name="symptoms_g4",
59
56
  verbose_name="For these symptoms, were any grade 4 events",
60
57
  help_text=(
61
- "Refer to DAIDS toxicity table. " "Please complete Serious Adverse Event form"
58
+ "Refer to DAIDS toxicity table. Please complete Serious Adverse Event form"
62
59
  ),
63
60
  )
64
61
  symptoms_g4_detail = models.TextField(
65
62
  verbose_name="Please provide details on any of the Grade 4 symptoms above.",
66
- null=True,
63
+ default="",
67
64
  blank=True,
68
65
  )
69
66
 
70
67
  # 4c
71
68
  symptoms_detail = models.TextField(
72
69
  verbose_name="Please provide details on any of the symptoms above.",
73
- null=True,
70
+ default="",
74
71
  blank=True,
75
72
  )
76
73
 
77
- # 5a
78
74
  attended_clinic = models.CharField(
79
75
  verbose_name=(
80
- "Since the participant's last visit did they attend any other clinic or hospital "
81
- "for care for any reason"
76
+ "Since the participant's last study visit did they attend any clinic or hospital "
77
+ "for care for ANY reason"
82
78
  ),
83
79
  max_length=25,
84
80
  choices=YES_NO,
85
81
  help_text="Includes other routine appointments, e.g. BP check or family planning",
86
82
  )
87
83
 
88
- # 5b
89
- admitted_hospital = models.CharField(
90
- verbose_name="If YES, were they admitted to hospital?",
91
- max_length=25,
92
- choices=YES_NO_NA,
93
- default=NOT_APPLICABLE,
94
- )
95
-
96
- # 5c
97
84
  attended_clinic_detail = models.TextField(
98
85
  verbose_name=(
99
- "If YES, attend other clinic or hospital, " "please provide details of this event"
86
+ "If YES, attend clinic or hospital, please provide details of this event"
100
87
  ),
101
88
  help_text=(
102
89
  "If the participant was given a referral letter or "
103
90
  "discharge summary record details here"
104
91
  ),
105
- null=True,
92
+ default="",
106
93
  blank=True,
107
94
  )
108
95
 
96
+ admitted_hospital = models.CharField(
97
+ verbose_name="If YES, were they admitted to hospital?",
98
+ max_length=25,
99
+ choices=YES_NO_NA,
100
+ default=NOT_APPLICABLE,
101
+ )
102
+
109
103
  attended_clinic_sae = models.CharField(
110
104
  verbose_name=mark_safe( # nosec B308
111
105
  "Does the event constitute a <u>Serious Adverse Event</u>"
@@ -130,9 +124,9 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
130
124
  # 5d
131
125
  prescribed_medication_detail = models.TextField(
132
126
  verbose_name=(
133
- "If YES, prescribed any other medication, " "please provide details of this visit"
127
+ "If YES, prescribed any other medication, please provide details of this visit"
134
128
  ),
135
- null=True,
129
+ default="",
136
130
  blank=True,
137
131
  )
138
132
 
@@ -151,7 +145,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
151
145
  # 6a
152
146
  any_other_problems_detail = models.TextField(
153
147
  verbose_name="If YES, please provide details of the event",
154
- null=True,
148
+ default="",
155
149
  blank=True,
156
150
  )
157
151
 
@@ -182,7 +176,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
182
176
 
183
177
  # 7b
184
178
  art_change_reason = models.TextField(
185
- verbose_name="If YES, please provide reason for change", null=True, blank=True
179
+ verbose_name="If YES, please provide reason for change", default="", blank=True
186
180
  )
187
181
 
188
182
  # 7c
@@ -198,14 +192,16 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
198
192
  art_new_regimen_other = OtherCharField()
199
193
 
200
194
  abdominal_tenderness = models.CharField(
201
- verbose_name="Abdominal tenderness", max_length=25, choices=YES_NO
195
+ verbose_name="Abdominal tenderness", max_length=25, choices=YES_NO_NOT_EVALUATED
202
196
  )
203
197
 
204
198
  enlarged_liver = models.CharField(
205
- verbose_name="Enlarged liver", max_length=25, choices=YES_NO
199
+ verbose_name="Enlarged liver", max_length=25, choices=YES_NO_NOT_EVALUATED
206
200
  )
207
201
 
208
- jaundice = models.CharField(verbose_name="Jaundice", max_length=25, choices=YES_NO)
202
+ jaundice = models.CharField(
203
+ verbose_name="Jaundice", max_length=25, choices=YES_NO_NOT_EVALUATED
204
+ )
209
205
 
210
206
  comment = models.TextField(
211
207
  verbose_name=(
@@ -245,7 +241,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
245
241
 
246
242
  referral_reason = models.TextField(
247
243
  verbose_name="If YES, where are they being referred to",
248
- null=True,
244
+ default="",
249
245
  blank=True,
250
246
  help_text=(
251
247
  "Note: remind participant that admission or discharge information "