clinicedc 2.0.40__py3-none-any.whl → 2.0.42__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of clinicedc might be problematic. Click here for more details.

Files changed (347) hide show
  1. {clinicedc-2.0.40.dist-info → clinicedc-2.0.42.dist-info}/METADATA +3 -1
  2. {clinicedc-2.0.40.dist-info → clinicedc-2.0.42.dist-info}/RECORD +338 -344
  3. edc_action_item/action.py +1 -1
  4. edc_action_item/action_item_notification.py +1 -1
  5. edc_action_item/choices.py +1 -1
  6. edc_action_item/data_fixers.py +1 -2
  7. edc_action_item/delete_action_item.py +1 -2
  8. edc_action_item/forms/action_item_form.py +1 -1
  9. edc_action_item/models/action_item.py +1 -1
  10. edc_action_item/models/action_type.py +1 -1
  11. edc_action_item/models/signals.py +1 -1
  12. edc_action_item/templatetags/action_item_extras.py +1 -1
  13. edc_action_item/utils.py +1 -2
  14. edc_action_item/view_mixins/action_item_view_mixin.py +1 -1
  15. edc_adherence/choices.py +1 -1
  16. edc_adherence/form_validator_mixin.py +1 -2
  17. edc_adherence/list_data.py +1 -1
  18. edc_adherence/model_mixins.py +1 -1
  19. edc_adverse_event/action_items/ae_followup_action.py +9 -9
  20. edc_adverse_event/action_items/ae_initial_action.py +12 -16
  21. edc_adverse_event/action_items/ae_susar_action.py +2 -1
  22. edc_adverse_event/action_items/ae_tmg_action.py +6 -4
  23. edc_adverse_event/action_items/death_report_action.py +7 -7
  24. edc_adverse_event/action_items/death_report_tmg_action.py +2 -1
  25. edc_adverse_event/action_items/death_report_tmg_second_action.py +2 -1
  26. edc_adverse_event/action_items/hospitalization_action.py +2 -1
  27. edc_adverse_event/auths.py +3 -1
  28. edc_adverse_event/choices.py +13 -6
  29. edc_adverse_event/constants.py +1 -23
  30. edc_adverse_event/form_validator_mixins/death_report_form_validator.py +1 -1
  31. edc_adverse_event/form_validator_mixins/requires_death_report_form_validator_mixin.py +1 -2
  32. edc_adverse_event/form_validators/ae_followup.py +2 -3
  33. edc_adverse_event/form_validators/ae_initial.py +2 -1
  34. edc_adverse_event/form_validators/ae_tmg.py +2 -1
  35. edc_adverse_event/form_validators/death_report_tmg.py +1 -1
  36. edc_adverse_event/form_validators/hospitalization.py +2 -1
  37. edc_adverse_event/list_data.py +1 -1
  38. edc_adverse_event/model_mixins/ae_followup/ae_followup_fields_model_mixin.py +1 -1
  39. edc_adverse_event/model_mixins/ae_followup/ae_followup_methods_model_mixin.py +1 -2
  40. edc_adverse_event/model_mixins/ae_initial/ae_initial_fields_model_mixin.py +1 -1
  41. edc_adverse_event/model_mixins/ae_initial/ae_initial_susar_model_mixin.py +2 -2
  42. edc_adverse_event/model_mixins/ae_susar/ae_susar_methods_model_mixin.py +1 -2
  43. edc_adverse_event/model_mixins/ae_tmg/ae_tmg_fields_model_mixin.py +1 -1
  44. edc_adverse_event/model_mixins/hospitaization/hospitalization_model_mixin.py +1 -1
  45. edc_adverse_event/modeladmin_mixins/ae_initial_admin_mixin.py +1 -1
  46. edc_adverse_event/modeladmin_mixins/ae_tmg_admin_mixin.py +1 -1
  47. edc_adverse_event/modeladmin_mixins/death_report_admin_mixin.py +1 -1
  48. edc_adverse_event/modeladmin_mixins/death_report_tmg_admin_mixin.py +1 -1
  49. edc_adverse_event/modelform_mixins/ae_followup_modelform_mixin.py +1 -2
  50. edc_adverse_event/modelform_mixins/ae_initial_modelform_mixin.py +1 -2
  51. edc_adverse_event/models/signals.py +2 -2
  52. edc_adverse_event/pdf_reports/ae_pdf_report.py +3 -2
  53. edc_adverse_event/pdf_reports/death_pdf_report.py +3 -2
  54. edc_adverse_event/templatetags/edc_adverse_event_extras.py +2 -3
  55. edc_adverse_event/urls.py +1 -0
  56. edc_adverse_event/utils.py +11 -14
  57. edc_adverse_event/view_mixins/ae/ae_listboard_view_mixin.py +3 -3
  58. edc_adverse_event/view_mixins/ae/death_report_listboard_view_mixin.py +1 -1
  59. edc_adverse_event/view_mixins/tmg/tmg_ae_listboard_view_mixin.py +2 -1
  60. edc_adverse_event/views/home_view.py +1 -0
  61. edc_adverse_event/views/tmg/home_view.py +1 -1
  62. edc_adverse_event/views/tmg/status_listboards.py +1 -1
  63. edc_analytics/custom_tables/age.py +1 -2
  64. edc_analytics/custom_tables/art.py +1 -2
  65. edc_analytics/custom_tables/bmi.py +1 -3
  66. edc_analytics/custom_tables/bp.py +1 -3
  67. edc_analytics/custom_tables/fasting.py +1 -2
  68. edc_analytics/custom_tables/fbg.py +1 -2
  69. edc_analytics/custom_tables/fbg_ogtt.py +1 -2
  70. edc_analytics/custom_tables/hba1c.py +1 -2
  71. edc_analytics/custom_tables/ogtt.py +1 -2
  72. edc_analytics/custom_tables/waist.py +1 -2
  73. edc_analytics/row/row_statistics_with_gender.py +1 -2
  74. edc_analytics/table.py +1 -2
  75. edc_appointment/admin/actions.py +1 -1
  76. edc_appointment/admin/appointment_admin.py +1 -1
  77. edc_appointment/appointment_reason_updater.py +1 -1
  78. edc_appointment/choices.py +1 -2
  79. edc_appointment/form_validator_mixins/next_appointment_crf_form_validator_mixin.py +1 -1
  80. edc_appointment/list_data.py +2 -3
  81. edc_appointment/model_mixins/missed_appointment_model_mixin.py +1 -1
  82. edc_appointment/model_mixins/next_appointment_crf_model_mixin.py +1 -2
  83. edc_appointment/modeladmin_mixins/next_appointment_crf_modeladmin_mixin.py +1 -1
  84. edc_appointment/models/signals.py +1 -1
  85. edc_appointment/utils.py +4 -2
  86. edc_auth/constants.py +3 -0
  87. edc_consent/choices.py +1 -1
  88. edc_consent/consent_definition.py +1 -1
  89. edc_consent/consent_definition_extension.py +1 -1
  90. edc_consent/field_mixins/citizen_fields_mixin.py +3 -3
  91. edc_consent/model_mixins/consent_model_mixin.py +1 -1
  92. edc_consent/modelform_mixins/consent_modelform_mixin/consent_modelform_validation_mixin.py +1 -1
  93. edc_consent/modelform_mixins/consent_modelform_mixin/review_fields_modelform_mixin.py +1 -2
  94. edc_consent/validators.py +5 -10
  95. edc_constants/__init__.py +0 -3
  96. edc_constants/choices.py +2 -3
  97. edc_constants/context_processor.py +2 -3
  98. edc_constants/utils.py +2 -3
  99. edc_crf/model_mixins/crf_status_model_mixin.py +1 -1
  100. edc_crf/model_mixins/singleton_crf_model_mixin.py +0 -1
  101. edc_crf/update_crf_status_command.py +1 -2
  102. edc_crf/update_crf_status_for_instance.py +1 -2
  103. edc_dashboard/url_config.py +1 -2
  104. edc_dashboard/views/administration_view.py +1 -0
  105. edc_data_manager/action_items.py +7 -7
  106. edc_data_manager/admin/actions.py +1 -1
  107. edc_data_manager/admin/data_query_admin.py +10 -10
  108. edc_data_manager/choices.py +1 -1
  109. edc_data_manager/forms/data_query.py +1 -1
  110. edc_data_manager/handlers/handlers.py +1 -1
  111. edc_data_manager/migrations/0043_alter_historicalqueryrule_comment_and_more.py +51 -0
  112. edc_data_manager/models/data_query.py +1 -1
  113. edc_data_manager/models/model_mixins.py +1 -2
  114. edc_data_manager/models/query_rule.py +1 -1
  115. edc_data_manager/view_mixins/data_manager_view_mixin.py +1 -1
  116. edc_document_status/model_mixins.py +1 -1
  117. edc_document_status/models/signals.py +1 -2
  118. edc_dx/diagnoses.py +2 -3
  119. edc_dx/form_validators/diagnosis_form_validator_mixin.py +1 -2
  120. edc_dx_review/choices.py +1 -1
  121. edc_dx_review/form_validator_mixins/clinical_review_followup_form_validator_mixin.py +2 -1
  122. edc_dx_review/list_data.py +1 -1
  123. edc_dx_review/medical_date.py +1 -1
  124. edc_dx_review/model_mixins/clinical_review_baseline_model_mixin.py +1 -1
  125. edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_chol_model_mixin.py +1 -1
  126. edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_dm_model_mixin.py +1 -1
  127. edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_hiv_model_mixin.py +1 -1
  128. edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_htn_model_mixin.py +1 -1
  129. edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_model_mixin.py +1 -1
  130. edc_dx_review/model_mixins/factory/baseline_review_model_mixin_factory.py +1 -1
  131. edc_dx_review/model_mixins/factory/calculate_date.py +1 -1
  132. edc_dx_review/model_mixins/factory/dx_initial_review_model_mixin_factory.py +1 -1
  133. edc_dx_review/model_mixins/factory/followup_review_model_mixin_factory.py +1 -1
  134. edc_dx_review/model_mixins/factory/rx_initial_review_model_mixin_factory.py +1 -1
  135. edc_dx_review/model_mixins/followup_review/followup_review_model_mixin.py +1 -1
  136. edc_dx_review/model_mixins/followup_review/hiv_followup_review_model_mixin.py +1 -1
  137. edc_dx_review/model_mixins/initial_review/chol_initial_review_model_mixin.py +1 -1
  138. edc_dx_review/model_mixins/initial_review/hiv_initial_model_mixins.py +2 -3
  139. edc_dx_review/model_mixins/initial_review/ncd_initial_review_model_mixin.py +1 -1
  140. edc_dx_review/utils.py +1 -1
  141. edc_egfr/__init__.py +0 -1
  142. edc_egfr/egfr.py +23 -15
  143. edc_egfr/form_validator_mixins/egfr_form_validator_mixins.py +30 -25
  144. edc_egfr/model_mixins/egfr_drop_notification_model_mixin.py +8 -2
  145. edc_egfr/model_mixins/egfr_model_mixin.py +2 -2
  146. edc_export/management/commands/import_receipts.py +1 -2
  147. edc_export/model_exporter/object_history_helpers.py +1 -2
  148. edc_export/models/object_history.py +1 -1
  149. edc_export/models/upload_export_receipt_file.py +1 -1
  150. edc_facility/list_data.py +1 -1
  151. edc_fieldsets/fieldsets_modeladmin_mixin.py +1 -2
  152. edc_form_validators/applicable_field_validator.py +1 -1
  153. edc_form_validators/date_validator.py +1 -1
  154. edc_form_validators/many_to_many_field_validator.py +1 -2
  155. edc_form_validators/other_specify_field_validator.py +1 -2
  156. edc_form_validators/required_field_validator.py +1 -2
  157. edc_glucose/form_validators/fasting_form_validator.py +1 -1
  158. edc_glucose/form_validators/glucose_form_validator.py +3 -3
  159. edc_glucose/form_validators/glucose_form_validator_mixin.py +1 -2
  160. edc_glucose/form_validators/ogtt_form_validator_mixin.py +1 -2
  161. edc_glucose/model_mixin_factories/fasting_model_mixin_factory.py +1 -1
  162. edc_glucose/model_mixin_factories/fbg_model_mixin_factory.py +1 -2
  163. edc_glucose/model_mixin_factories/glucose_model_mixin_factory.py +1 -1
  164. edc_glucose/model_mixin_factories/ogtt_model_mixin_factory.py +1 -2
  165. edc_glucose/model_mixins/hba1c_model_mixin.py +1 -3
  166. edc_glucose/utils.py +2 -2
  167. edc_identifier/model_mixins.py +1 -2
  168. edc_identifier/models.py +1 -1
  169. edc_identifier/simple_identifier.py +1 -2
  170. edc_lab/admin/modeladmin_mixins.py +1 -1
  171. edc_lab/choices.py +7 -10
  172. edc_lab/constants.py +0 -2
  173. edc_lab/form_validators/crf_requisition_form_validator_mixin.py +1 -0
  174. edc_lab/form_validators/requisition_form_validator_mixin.py +1 -1
  175. edc_lab/lab/specimen.py +1 -2
  176. edc_lab/model_mixins/requisition/requisition_identifier_mixin.py +1 -1
  177. edc_lab/model_mixins/requisition/requisition_model_mixin.py +1 -1
  178. edc_lab/model_mixins/shipping/manifest_model_mixin.py +1 -1
  179. edc_lab/model_mixins/shipping/verify_model_mixin.py +1 -2
  180. edc_lab/models/box.py +1 -1
  181. edc_lab_dashboard/middleware.py +1 -0
  182. edc_lab_dashboard/urls.py +1 -0
  183. edc_lab_dashboard/view_mixins/form_action_view_mixin.py +1 -0
  184. edc_lab_dashboard/view_mixins/process_requisition_view_mixin.py +1 -1
  185. edc_lab_dashboard/views/action_views/manage_box_item_view.py +1 -0
  186. edc_lab_dashboard/views/action_views/receive_view.py +1 -1
  187. edc_lab_dashboard/views/listboard_views/manage_box_listboard_view.py +1 -0
  188. edc_lab_dashboard/views/listboard_views/pack_listboard_view.py +1 -1
  189. edc_lab_dashboard/views/listboard_views/process_listboard_view.py +2 -1
  190. edc_lab_dashboard/views/listboard_views/receive_listboard_view.py +2 -1
  191. edc_lab_dashboard/views/listboard_views/requisition_listboard_view.py +1 -2
  192. edc_lab_dashboard/views/listboard_views/verify_box_listboard_view.py +1 -0
  193. edc_lab_results/action_items.py +1 -1
  194. edc_lab_results/form_validator_mixins/blood_results_fbg_form_validator_mixin.py +1 -1
  195. edc_lab_results/form_validator_mixins/blood_results_form_validator_mixin.py +2 -1
  196. edc_lab_results/model_mixin_factories/field_attrs.py +1 -1
  197. edc_lab_results/model_mixins/electrolytes_model_mixins.py +2 -2
  198. edc_lab_results/model_mixins/fbc_model_mixins.py +9 -8
  199. edc_lab_results/model_mixins/fbg_model_mixin.py +2 -7
  200. edc_lab_results/model_mixins/glucose_model_mixin.py +2 -7
  201. edc_lab_results/model_mixins/insulin_model_mixin.py +2 -1
  202. edc_lab_results/model_mixins/lft_model_mixins.py +7 -6
  203. edc_lab_results/model_mixins/lipid_model_mixins.py +1 -2
  204. edc_lab_results/model_mixins/proteinuria_model_mixin.py +1 -2
  205. edc_lab_results/model_mixins/rft_model_mixins.py +5 -3
  206. edc_listboard/views/screen/screening_listboard_view.py +1 -1
  207. edc_locator/action_items.py +2 -1
  208. edc_locator/forms/subject_locator_form_validator.py +1 -1
  209. edc_locator/modeladmin_mixins.py +1 -1
  210. edc_ltfu/action_items.py +2 -1
  211. edc_ltfu/choices.py +1 -1
  212. edc_ltfu/constants.py +0 -2
  213. edc_ltfu/forms/ltfu_form_validator.py +2 -1
  214. edc_ltfu/forms/ltfu_form_validator_mixin.py +1 -1
  215. edc_ltfu/modelform_mixins.py +2 -5
  216. edc_metadata/admin/modeladmin_mixins.py +4 -4
  217. edc_model/choices.py +1 -1
  218. edc_model/models/fields/date_estimated.py +1 -1
  219. edc_model_admin/context_processors.py +1 -1
  220. edc_model_admin/list_filters/future_date_list_filter.py +6 -7
  221. edc_model_admin/list_filters/list_field_with_other_list_filter.py +1 -1
  222. edc_model_admin/list_filters/past_date_list_filter.py +6 -7
  223. edc_model_admin/mixins/model_admin_redirect_on_delete_mixin.py +1 -0
  224. edc_model_admin/templatetags/edc_admin_modify.py +1 -1
  225. edc_model_fields/fields/date_estimated.py +1 -1
  226. edc_model_to_dataframe/model_to_dataframe.py +1 -1
  227. edc_navbar/navbar_item.py +1 -0
  228. edc_navbar/system_checks.py +3 -0
  229. edc_offstudy/action_items.py +2 -1
  230. edc_offstudy/choices.py +2 -1
  231. edc_pdf_reports/crf_pdf_report.py +9 -7
  232. edc_pdutils/dataframes/get_subject_consent.py +1 -2
  233. edc_pdutils/dataframes/get_subject_visit.py +1 -11
  234. edc_pdutils/helper.py +1 -2
  235. edc_pdutils/mappings.py +1 -1
  236. edc_pdutils/tables/crf.py +1 -2
  237. edc_pdutils/tables/requisition.py +1 -2
  238. edc_pdutils/utils/__init__.py +1 -0
  239. edc_pdutils/utils/convert_visit_code_to_float.py +8 -0
  240. edc_pdutils/utils/decrypt.py +5 -4
  241. edc_pdutils/utils/missing_subject_identifiers.py +5 -4
  242. edc_pharmacy/action_items.py +2 -1
  243. edc_pharmacy/admin/list_filters.py +1 -1
  244. edc_pharmacy/admin/stock/allocation_admin.py +1 -1
  245. edc_pharmacy/admin/stock/order_item_admin.py +1 -1
  246. edc_pharmacy/admin/stock/stock_request_admin.py +1 -1
  247. edc_pharmacy/admin/stock/stock_transfer_admin.py +1 -1
  248. edc_pharmacy/admin/stock/stock_transfer_item_admin.py +1 -1
  249. edc_pharmacy/choices.py +1 -2
  250. edc_pharmacy/form_validators/crf/study_medication_form_validator.py +1 -1
  251. edc_pharmacy/list_data.py +1 -1
  252. edc_pharmacy/model_mixins/study_medication_crf_model_mixin.py +1 -1
  253. edc_pharmacy/model_mixins/study_medication_refill_model_mixin.py +1 -1
  254. edc_pharmacy/models/model_mixins.py +1 -2
  255. edc_pharmacy/models/prescription/rx.py +1 -1
  256. edc_pharmacy/models/signals.py +1 -1
  257. edc_pharmacy/models/stock/order.py +1 -1
  258. edc_pharmacy/models/stock/order_item.py +1 -2
  259. edc_pharmacy/models/stock/stock_request.py +1 -1
  260. edc_pharmacy/views/confirm_stock_from_queryset_view.py +2 -1
  261. edc_pharmacy/views/confirmation_at_site_view.py +1 -1
  262. edc_prn/models.py +1 -2
  263. edc_protocol_incident/action_items.py +2 -1
  264. edc_protocol_incident/choices.py +1 -1
  265. edc_protocol_incident/form_validators/mixins.py +2 -1
  266. edc_protocol_incident/form_validators/protocol_deviation_violation_form_validator.py +2 -1
  267. edc_protocol_incident/form_validators/protocol_incident_form_validator.py +2 -1
  268. edc_protocol_incident/list_data.py +1 -1
  269. edc_protocol_incident/model_mixins/protocol_deviation_violation_model_mixin.py +1 -1
  270. edc_protocol_incident/modeladmin_mixins.py +1 -1
  271. edc_qareports/choices.py +1 -1
  272. edc_qareports/migrations/0017_auto_20240816_0256.py +1 -2
  273. edc_qareports/modeladmin_mixins/list_filters.py +1 -2
  274. edc_qareports/modeladmin_mixins/qa_report_modeladmin_mixin.py +1 -1
  275. edc_qareports/sql_generator/requisition_subquery.py +1 -1
  276. edc_refusal/forms.py +2 -1
  277. edc_refusal/list_data.py +1 -1
  278. edc_registration/model_mixins/updates_or_creates_registered_subject_model_mixin.py +1 -1
  279. edc_registration/models/registered_subject.py +1 -1
  280. edc_reportable/__init__.py +0 -35
  281. edc_reportable/choices.py +8 -3
  282. edc_reportable/constants.py +0 -7
  283. edc_reportable/data/__init__.py +0 -1
  284. edc_reportable/data/grading_data/ctcae_v5.py +1 -2
  285. edc_reportable/data/grading_data/daids_july_2017.py +7 -6
  286. edc_reportable/data/normal_data/africa.py +6 -5
  287. edc_reportable/exceptions.py +0 -4
  288. edc_reportable/forms/reportables_form_validator_mixin.py +2 -1
  289. edc_reportable/formula.py +1 -1
  290. edc_reportable/post_migrate_signals.py +1 -1
  291. edc_reportable/reference_range_evaluator.py +8 -2
  292. edc_reportable/units.py +2 -23
  293. edc_reportable/utils/__init__.py +1 -1
  294. edc_reportable/utils/get_mw.py +20 -0
  295. edc_reportable/utils/get_normal_data_or_raise.py +1 -1
  296. edc_review_dashboard/auths.py +1 -1
  297. edc_review_dashboard/middleware.py +1 -0
  298. edc_review_dashboard/urls.py +1 -0
  299. edc_review_dashboard/views/subject_review_listboard_view.py +1 -0
  300. edc_screening/choices.py +1 -1
  301. edc_screening/gender_evaluator.py +1 -1
  302. edc_screening/model_mixins/screening_fields_model_mixin.py +1 -1
  303. edc_screening/modelform_mixins.py +1 -1
  304. edc_screening/screening_eligibility.py +1 -2
  305. edc_sites/models/site_profile.py +1 -2
  306. edc_sites/site.py +1 -1
  307. edc_subject_dashboard/requisition_labels.py +1 -1
  308. edc_subject_dashboard/requisition_report.py +1 -1
  309. edc_subject_dashboard/requisition_verifier.py +1 -1
  310. edc_subject_dashboard/urls.py +1 -0
  311. edc_subject_dashboard/view_utils/go_to_forms_button.py +1 -1
  312. edc_subject_dashboard/views/requisition_print_actions_view.py +1 -1
  313. edc_subject_dashboard/views/subject_dashboard_view.py +1 -0
  314. edc_transfer/action_items.py +2 -1
  315. edc_transfer/choices.py +1 -1
  316. edc_transfer/form_validators.py +1 -1
  317. edc_transfer/list_data.py +1 -1
  318. edc_unblinding/action_items.py +2 -1
  319. edc_unblinding/models/unblinding_request.py +1 -1
  320. edc_unblinding/models/unblinding_review.py +1 -1
  321. edc_visit_schedule/action_items.py +2 -1
  322. edc_visit_schedule/admin/subject_schedule_history_admin.py +1 -0
  323. edc_visit_tracking/action_items.py +2 -1
  324. edc_visit_tracking/choices.py +1 -1
  325. edc_visit_tracking/form_validators/visit_form_validator.py +1 -1
  326. edc_visit_tracking/form_validators/visit_missed_form_validator.py +2 -1
  327. edc_visit_tracking/managers.py +1 -2
  328. edc_visit_tracking/model_mixins/subject_visit_missed_model_mixin.py +1 -1
  329. edc_visit_tracking/model_mixins/visit_model_mixin/caretaker_fields_mixin.py +1 -1
  330. edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_fields_mixin.py +1 -1
  331. edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_mixin.py +1 -1
  332. edc_visit_tracking/modeladmin_mixins/crf_model_admin_mixin.py +2 -1
  333. edc_visit_tracking/modeladmin_mixins/visit_model_admin_mixin.py +1 -1
  334. edc_visit_tracking/models/signals.py +1 -1
  335. edc_visit_tracking/view_utils/related_visit_button.py +1 -1
  336. edc_vitals/form_validators/blood_pressure_form_validator_mixin.py +1 -2
  337. edc_constants/constants.py +0 -250
  338. edc_constants/disease_constants.py +0 -22
  339. edc_egfr/calculators/__init__.py +0 -4
  340. edc_egfr/calculators/base_egrfr.py +0 -56
  341. edc_egfr/calculators/egfr_ckd_epi.py +0 -68
  342. edc_egfr/calculators/egfr_cockcroft_gault.py +0 -62
  343. edc_egfr/calculators/percent_change.py +0 -7
  344. edc_reportable/data/molecular_weights.py +0 -11
  345. edc_reportable/utils/convert_units.py +0 -163
  346. {clinicedc-2.0.40.dist-info → clinicedc-2.0.42.dist-info}/WHEEL +0 -0
  347. {clinicedc-2.0.40.dist-info → clinicedc-2.0.42.dist-info}/licenses/LICENSE +0 -0
@@ -1,163 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from django.core.exceptions import ObjectDoesNotExist
4
-
5
- from edc_utils.round_up import round_half_away_from_zero
6
-
7
- from ..exceptions import ConversionNotHandled
8
- from ..units import (
9
- GRAMS_PER_LITER,
10
- MICROMOLES_PER_LITER,
11
- MILLIGRAMS_PER_DECILITER,
12
- MILLIGRAMS_PER_LITER,
13
- MILLIMOLES_PER_LITER,
14
- )
15
- from .molecular_weight_model_cls import molecular_weight_model_cls
16
-
17
- __all__ = ["convert_units"]
18
-
19
-
20
- def get_mw(label):
21
- try:
22
- molecular_weight = molecular_weight_model_cls().objects.get(label=label)
23
- except ObjectDoesNotExist as e:
24
- raise ConversionNotHandled(
25
- f"Conversion not handled. Molecular weight not found for {label}."
26
- ) from e
27
- else:
28
- mw = molecular_weight.mw
29
- return mw
30
-
31
-
32
- def micromoles_per_liter_to(*, label: str, value: float | int, units_to: str) -> dict:
33
- if units_to == MICROMOLES_PER_LITER:
34
- return {MICROMOLES_PER_LITER: float(value)}
35
- if units_to == MILLIMOLES_PER_LITER:
36
- return {MILLIMOLES_PER_LITER: float(value) / 1000.00}
37
- if units_to == GRAMS_PER_LITER:
38
- return {GRAMS_PER_LITER: (float(value) * get_mw(label)) / 100.00}
39
- if units_to == MILLIGRAMS_PER_DECILITER:
40
- return {MILLIGRAMS_PER_DECILITER: (float(value) * get_mw(label)) / 10000.00}
41
- raise ConversionNotHandled(f"Conversion not found. Tried umol/L to {units_to}. ")
42
-
43
-
44
- def milligrams_per_deciliter_to(
45
- *, label: str, value: float | int, units_to: str
46
- ) -> dict[str, float]:
47
- if units_to == MILLIGRAMS_PER_DECILITER:
48
- return {MILLIGRAMS_PER_DECILITER: float(value)}
49
- if units_to == MILLIMOLES_PER_LITER:
50
- return {MILLIMOLES_PER_LITER: (float(value) * 10.00) / get_mw(label)}
51
- if units_to == MICROMOLES_PER_LITER:
52
- return {MICROMOLES_PER_LITER: (float(value) * 10000.00) / get_mw(label)}
53
- if units_to == MILLIGRAMS_PER_LITER:
54
- return {MILLIGRAMS_PER_LITER: float(value) * 10.00}
55
- if units_to == GRAMS_PER_LITER:
56
- return {GRAMS_PER_LITER: float(value) / 100.00}
57
- raise ConversionNotHandled(f"Conversion not found. Tried mg/dL to {units_to}. ")
58
-
59
-
60
- class UnitsConverter:
61
- def __init__(
62
- self,
63
- *,
64
- label: str,
65
- value: int | float,
66
- units_from: str,
67
- units_to: str,
68
- places: int | None = None,
69
- ):
70
- self.label = label
71
- self.value = value
72
- self.units_from = units_from
73
- self.units_to = units_to
74
- self.places = places or 4
75
-
76
- if label is None:
77
- raise ValueError("label is required. See convert_units.")
78
- if value is not None and units_from and units_to and units_from != units_to:
79
- self.converted_value = self.get_converted_value()
80
- elif units_from == units_to:
81
- self.converted_value = value
82
- else:
83
- raise ConversionNotHandled(
84
- f"Conversion not handled. Tried {label} from {units_from} to {units_to}."
85
- )
86
-
87
- def get_mw(self):
88
- return get_mw(self.label)
89
-
90
- def round_up(self, converted_value):
91
- try:
92
- converted_value = round_half_away_from_zero(converted_value, self.places)
93
- except TypeError as e:
94
- raise ConversionNotHandled(
95
- f"Conversion not handled. Tried {self.label} from {self.units_from} "
96
- f"to {self.units_to}. "
97
- f"Got {e} when rounding {converted_value} to {self.places} places."
98
- ) from e
99
- return converted_value
100
-
101
- def from_milligrams_per_deciliter(self) -> float | int:
102
- if self.units_to != MILLIGRAMS_PER_DECILITER:
103
- return milligrams_per_deciliter_to(
104
- label=self.label, value=float(self.value), units_to=self.units_to
105
- )[self.units_to]
106
- return self.value
107
-
108
- def from_grams_per_liter(self) -> float | int:
109
- if self.units_to != GRAMS_PER_LITER:
110
- return milligrams_per_deciliter_to(
111
- label=self.label,
112
- value=float(self.value) * 100.00,
113
- units_to=self.units_to,
114
- )[self.units_to]
115
- return self.value
116
-
117
- def from_millimoles_per_liter(self) -> float | int:
118
- if self.units_to != MILLIMOLES_PER_LITER:
119
- return micromoles_per_liter_to(
120
- label=self.label, value=self.value / 1000, units_to=self.units_to
121
- )[self.units_to]
122
- return self.value
123
-
124
- def from_micromoles_per_liter(self):
125
- if self.units_to != MICROMOLES_PER_LITER:
126
- return micromoles_per_liter_to(
127
- label=self.label, value=self.value, units_to=self.units_to
128
- )[self.units_to]
129
- return self.value
130
-
131
- def get_converted_value(self) -> int | float:
132
- converted_value = None
133
- if self.units_from == MILLIGRAMS_PER_DECILITER:
134
- converted_value = self.from_milligrams_per_deciliter()
135
- elif self.units_from == GRAMS_PER_LITER:
136
- converted_value = self.from_grams_per_liter()
137
- elif self.units_from == MILLIMOLES_PER_LITER:
138
- converted_value = self.from_millimoles_per_liter()
139
- elif self.units_from == MICROMOLES_PER_LITER:
140
- converted_value = self.from_micromoles_per_liter()
141
- if not converted_value:
142
- raise ConversionNotHandled(
143
- f"Conversion not handled. Tried {self.label} from "
144
- f"{self.units_from} to {self.units_to}."
145
- )
146
- return self.round_up(converted_value)
147
-
148
-
149
- def convert_units(
150
- *,
151
- label: str | None = None,
152
- value: int | float | None = None,
153
- units_from: str | None = None,
154
- units_to: str | None = None,
155
- places: int | None = None,
156
- ) -> int | float:
157
- return UnitsConverter(
158
- label=label,
159
- value=value,
160
- units_from=units_from,
161
- units_to=units_to,
162
- places=places,
163
- ).converted_value