meta-edc 1.1.8__py3-none-any.whl → 1.1.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of meta-edc might be problematic. Click here for more details.
- meta_ae/action_items.py +2 -1
- meta_ae/admin/__init__.py +11 -0
- meta_ae/admin/ae_susar_admin.py +1 -1
- meta_ae/admin/death_report_admin.py +1 -1
- meta_ae/admin/modeladmin_mixins.py +10 -12
- meta_ae/baker_recipes.py +3 -3
- meta_ae/forms/__init__.py +13 -0
- meta_ae/forms/modelform_mixins.py +2 -2
- meta_ae/migrations/0001_initial.py +27 -27
- meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
- meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
- meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
- meta_ae/model_mixins/__init__.py +2 -0
- meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
- meta_ae/model_mixins/death_report_model_mixin.py +3 -3
- meta_ae/models/__init__.py +13 -0
- meta_ae/models/hospitalization.py +3 -3
- meta_ae/pdf_reports/__init__.py +2 -0
- meta_analytics/.DS_Store +0 -0
- meta_analytics/dataframes/__init__.py +24 -0
- meta_analytics/dataframes/get_eos_df.py +1 -2
- meta_analytics/dataframes/get_glucose_df.py +6 -7
- meta_analytics/dataframes/get_glucose_fbg_df.py +2 -3
- meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +1 -2
- meta_analytics/dataframes/get_last_imp_visits_df.py +5 -6
- meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
- meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +13 -20
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +9 -10
- meta_analytics/dataframes/screening/__init__.py +2 -0
- meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
- meta_analytics/dataframes/screening/get_screening_df.py +6 -10
- meta_analytics/dataframes/utils.py +3 -8
- meta_analytics/get_tables.py +1 -2
- meta_analytics/tables/__init__.py +2 -0
- meta_consent/action_items.py +2 -1
- meta_consent/admin/__init__.py +6 -0
- meta_consent/admin/actions/__init__.py +2 -0
- meta_consent/admin/actions/create_missing_prescriptions.py +1 -1
- meta_consent/admin/list_filters.py +2 -2
- meta_consent/admin/modeladmin_mixins.py +3 -4
- meta_consent/admin/subject_consent_v1_ext_admin.py +2 -2
- meta_consent/baker_recipes.py +7 -8
- meta_consent/form_validators/__init__.py +2 -0
- meta_consent/forms/__init__.py +7 -0
- meta_consent/forms/subject_consent_v1_ext_form.py +2 -3
- meta_consent/forms/subject_reconsent_form.py +4 -4
- meta_consent/management/commands/create_missing_prescriptions.py +4 -2
- meta_consent/migrations/0001_initial.py +9 -9
- meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
- meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +5 -14
- meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
- meta_consent/models/__init__.py +9 -0
- meta_consent/models/model_mixins.py +1 -2
- meta_consent/models/signals.py +9 -10
- meta_consent/models/subject_consent.py +1 -1
- meta_consent/models/subject_reconsent.py +3 -3
- meta_dashboard/patterns.py +1 -1
- meta_dashboard/templatetags/meta_dashboard_extras.py +1 -1
- meta_dashboard/view_utils/__init__.py +7 -0
- meta_dashboard/view_utils/subject_screening_button.py +9 -16
- meta_dashboard/views/__init__.py +8 -0
- meta_dashboard/views/ae/__init__.py +2 -0
- meta_dashboard/views/ae/ae_listboard_view.py +1 -1
- meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
- meta_dashboard/views/screening/__init__.py +2 -0
- meta_dashboard/views/subject/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/dashboard_view.py +1 -1
- meta_dashboard/views/subject/listboard/__init__.py +2 -0
- meta_edc/__init__.py +5 -9
- meta_edc/celery.py +1 -1
- meta_edc/celery_live.py +1 -1
- meta_edc/celery_uat.py +1 -1
- meta_edc/management/commands/update_forms_reference.py +10 -12
- meta_edc/settings/debug.py +5 -4
- meta_edc/settings/defaults.py +18 -3
- meta_edc/settings/live.py +3 -1
- meta_edc/settings/logging.py +9 -4
- meta_edc/settings/minimal.py +4 -5
- meta_edc/settings/uat.py +3 -1
- meta_edc/views/__init__.py +2 -0
- meta_edc-1.1.12.dist-info/METADATA +174 -0
- {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/RECORD +413 -526
- meta_edc-1.1.12.dist-info/WHEEL +4 -0
- meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
- meta_pharmacy/admin/__init__.py +5 -0
- meta_pharmacy/admin/substitutions_admin.py +2 -2
- meta_pharmacy/forms/__init__.py +2 -0
- meta_pharmacy/forms/substitutions_form.py +6 -4
- meta_pharmacy/labels/__init__.py +4 -2
- meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +1 -2
- meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
- meta_pharmacy/labels/label_data.py +1 -2
- meta_pharmacy/labels/print_sheets.py +4 -6
- meta_pharmacy/migrations/0002_initial.py +7 -20
- meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
- meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
- meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
- meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
- meta_pharmacy/models/__init__.py +7 -0
- meta_pharmacy/models/label_data.py +4 -5
- meta_pharmacy/models/substitutions.py +3 -3
- meta_pharmacy/prepare_meta_pharmacy.py +1 -1
- meta_pharmacy/utils/__init__.py +2 -0
- meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
- meta_prn/admin/__init__.py +16 -0
- meta_prn/admin/dm_referral_admin.py +2 -1
- meta_prn/admin/end_of_study_admin.py +6 -7
- meta_prn/admin/loss_to_followup_admin.py +3 -2
- meta_prn/admin/off_study_medication_admin.py +5 -6
- meta_prn/admin/offschedule_admin.py +5 -6
- meta_prn/admin/offschedule_dm_referral_admin.py +6 -6
- meta_prn/admin/offschedule_postnatal_admin.py +7 -7
- meta_prn/admin/offschedule_pregnancy_admin.py +8 -7
- meta_prn/admin/onschedule_admin.py +7 -8
- meta_prn/admin/onschedule_dm_referral_admin.py +6 -7
- meta_prn/admin/pregnancy_notification_admin.py +5 -6
- meta_prn/admin/protocol_incident_admin.py +1 -1
- meta_prn/admin/subject_transfer_admin.py +1 -1
- meta_prn/baker_recipes.py +4 -4
- meta_prn/form_validators/__init__.py +5 -0
- meta_prn/form_validators/end_of_study.py +2 -2
- meta_prn/forms/__init__.py +13 -0
- meta_prn/migrations/0001_initial.py +25 -25
- meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
- meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
- meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
- meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
- meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
- meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
- meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
- meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
- meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
- meta_prn/models/__init__.py +20 -0
- meta_prn/models/offschedule.py +4 -4
- meta_prn/models/protocol_incident.py +1 -1
- meta_prn/models/subject_transfer.py +8 -0
- meta_rando/migrations/0001_initial.py +5 -5
- meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
- meta_reports/__init__.py +2 -0
- meta_reports/admin/__init__.py +16 -0
- meta_reports/admin/dbviews/__init__.py +13 -0
- meta_reports/admin/dbviews/glucose_summary_admin.py +6 -6
- meta_reports/admin/dbviews/imp_substitutions_admin.py +12 -11
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +6 -6
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
- meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +8 -8
- meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
- meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
- meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
- meta_reports/admin/endpoints_admin.py +1 -1
- meta_reports/admin/last_imp_refill_admin.py +9 -9
- meta_reports/admin/list_filters.py +2 -2
- meta_reports/admin/modeladmin_mixins.py +9 -16
- meta_reports/death_report.py +1 -1
- meta_reports/forms/__init__.py +2 -0
- meta_reports/forms/missing_ogtt_note_form.py +2 -3
- meta_reports/management/commands/generate_endpoints.py +5 -4
- meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
- meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
- meta_reports/models/__init__.py +17 -0
- meta_reports/models/dbviews/__init__.py +14 -0
- meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
- meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +4 -5
- meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
- meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
- meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
- meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +1 -1
- meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
- meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
- meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +18 -0
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
- meta_reports/models/endpoints.py +4 -4
- meta_reports/models/last_imp_refill.py +2 -3
- meta_reports/pdf_report.py +2 -2
- meta_reports/tasks.py +1 -1
- meta_screening/admin/__init__.py +8 -0
- meta_screening/admin/fieldsets.py +13 -14
- meta_screening/admin/list_filters.py +6 -4
- meta_screening/admin/screening_part_one_admin.py +1 -2
- meta_screening/admin/screening_part_three_admin.py +2 -3
- meta_screening/admin/screening_part_two_admin.py +7 -10
- meta_screening/admin/subject_refusal_admin.py +5 -3
- meta_screening/admin/subject_screening_admin.py +4 -4
- meta_screening/baker_recipes.py +9 -9
- meta_screening/eligibility/__init__.py +9 -0
- meta_screening/eligibility/eligibility.py +7 -7
- meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
- meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +8 -8
- meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +13 -14
- meta_screening/form_validators/__init__.py +8 -0
- meta_screening/forms/__init__.py +20 -0
- meta_screening/forms/field_lists.py +16 -17
- meta_screening/forms/screening_part_one_form.py +2 -2
- meta_screening/forms/screening_part_three_form.py +5 -3
- meta_screening/forms/screening_part_two_form.py +1 -5
- meta_screening/forms/subject_refusal_form.py +0 -4
- meta_screening/forms/subject_screening_form.py +0 -4
- meta_screening/migrations/0001_initial.py +15 -15
- meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
- meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
- meta_screening/model_mixins/__init__.py +8 -0
- meta_screening/model_mixins/eligibility_model_mixin.py +5 -3
- meta_screening/model_mixins/part_one_fields_model_mixin.py +5 -9
- meta_screening/model_mixins/part_three_fields_model_mixin.py +5 -6
- meta_screening/model_mixins/part_two_fields_model_mixin.py +18 -16
- meta_screening/models/__init__.py +9 -0
- meta_screening/models/icp_referral.py +5 -5
- meta_screening/models/signals.py +10 -11
- meta_screening/models/subject_refusal.py +1 -1
- meta_screening/models/subject_screening.py +1 -3
- meta_subject/action_items.py +13 -15
- meta_subject/admin/__init__.py +39 -0
- meta_subject/admin/birth_outcome_admin.py +4 -8
- meta_subject/admin/blood_results/__init__.py +9 -0
- meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
- meta_subject/admin/complications_glycemia_admin.py +1 -1
- meta_subject/admin/delivery_admin.py +7 -10
- meta_subject/admin/diabetes/__init__.py +2 -0
- meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
- meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
- meta_subject/admin/egfr_drop_notification_admin.py +1 -1
- meta_subject/admin/followup_examination_admin.py +10 -9
- meta_subject/admin/followup_vitals_admin.py +4 -5
- meta_subject/admin/glucose_admin.py +2 -4
- meta_subject/admin/glucose_fbg_admin.py +1 -3
- meta_subject/admin/health_economics/__init__.py +2 -0
- meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
- meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
- meta_subject/admin/hepatitis_test_admin.py +1 -1
- meta_subject/admin/list_filters.py +1 -1
- meta_subject/admin/mnsi_admin.py +7 -5
- meta_subject/admin/other_arv_regimens_admin.py +3 -3
- meta_subject/admin/patient_history_admin.py +4 -4
- meta_subject/admin/physical_exam_admin.py +1 -1
- meta_subject/admin/pregnancy_update_admin.py +1 -1
- meta_subject/admin/study_medication_admin.py +8 -15
- meta_subject/admin/subject_requisition_admin.py +1 -1
- meta_subject/admin/subject_visit_admin.py +1 -1
- meta_subject/admin/subject_visit_missed_admin.py +1 -1
- meta_subject/admin/urine_dipstick_test_admin.py +1 -1
- meta_subject/admin/urine_pregnancy_admin.py +1 -1
- meta_subject/baker_recipes.py +15 -15
- meta_subject/form_validators/__init__.py +11 -0
- meta_subject/form_validators/delivery_form_validator.py +2 -3
- meta_subject/form_validators/dm_endpoint_form_validator.py +1 -1
- meta_subject/form_validators/dm_followup_form_validator.py +7 -6
- meta_subject/form_validators/glucose_form_validator.py +3 -5
- meta_subject/forms/__init__.py +41 -0
- meta_subject/forms/blood_results/__init__.py +9 -0
- meta_subject/forms/blood_results/blood_results_rft_form.py +1 -2
- meta_subject/forms/diabetes/__init__.py +2 -0
- meta_subject/forms/diabetes/dm_followup_form.py +2 -2
- meta_subject/forms/followup_vitals_form.py +3 -8
- meta_subject/forms/health_economics/__init__.py +2 -0
- meta_subject/forms/next_appointment_form.py +2 -3
- meta_subject/forms/slider_widget.py +1 -1
- meta_subject/forms/study_medication_form.py +11 -8
- meta_subject/management/commands/create_missing_refills.py +3 -3
- meta_subject/management/commands/create_missing_rx.py +1 -1
- meta_subject/management/commands/missed.py +20 -23
- meta_subject/metadata_rules/__init__.py +2 -0
- meta_subject/metadata_rules/predicates.py +25 -32
- meta_subject/migrations/0001_initial.py +61 -61
- meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
- meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
- meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
- meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
- meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
- meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
- meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
- meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
- meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
- meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
- meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
- meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
- meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
- meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
- meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
- meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
- meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
- meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
- meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
- meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
- meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
- meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
- meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
- meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
- meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
- meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
- meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
- meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
- meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
- meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
- meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
- meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
- meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
- meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +5 -6
- meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +5 -14
- meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +9297 -0
- meta_subject/model_mixins/__init__.py +8 -0
- meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
- meta_subject/model_mixins/vitals_fields_model_mixin.py +1 -1
- meta_subject/models/__init__.py +48 -0
- meta_subject/models/birth_outcomes.py +3 -3
- meta_subject/models/blood_results/__init__.py +11 -0
- meta_subject/models/delivery.py +3 -3
- meta_subject/models/diabetes/__init__.py +2 -0
- meta_subject/models/diabetes/dm_endpoint.py +4 -4
- meta_subject/models/diabetes/dm_followup.py +3 -4
- meta_subject/models/diet_and_lifestyle.py +2 -2
- meta_subject/models/followup_examination.py +11 -11
- meta_subject/models/glucose.py +4 -4
- meta_subject/models/glucose_fbg.py +2 -3
- meta_subject/models/health_economics/__init__.py +2 -0
- meta_subject/models/health_economics/health_economics.py +7 -7
- meta_subject/models/health_economics/health_economics_update.py +2 -1
- meta_subject/models/hepatitis_test.py +2 -2
- meta_subject/models/other_arv_regimens_detail.py +1 -1
- meta_subject/models/patient_history.py +5 -6
- meta_subject/models/physical_exam.py +2 -2
- meta_subject/models/pregnancy_update.py +1 -1
- meta_subject/models/signals.py +14 -12
- meta_subject/models/subject_visit.py +1 -1
- meta_subject/models/urine_dipstick_test.py +1 -1
- meta_subject/models/urine_pregnancy.py +1 -1
- meta_visit_schedule/visit_schedules/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/schedule.py +2 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +1 -2
- meta_ae/tests/holidays.csv +0 -15
- meta_ae/tests/tests/test_actions.py +0 -126
- meta_ae/tests/urls.py +0 -10
- meta_analytics/dataframes/glucose_endpoints/utils.py +0 -0
- meta_analytics/notebooks/anu.ipynb +0 -95
- meta_analytics/notebooks/appointment_planning.ipynb +0 -329
- meta_analytics/notebooks/arvs.ipynb +0 -103
- meta_analytics/notebooks/cleaning/__init__.py +0 -0
- meta_analytics/notebooks/cleaning/consent_v1_ext.ipynb +0 -227
- meta_analytics/notebooks/cleaning/offschedule_eos.ipynb +0 -353
- meta_analytics/notebooks/dsmc/renal_dysfunction.ipynb +0 -435
- meta_analytics/notebooks/endpoints/meta_endpoints_by_date.ipynb +0 -656
- meta_analytics/notebooks/followup_examination.ipynb +0 -141
- meta_analytics/notebooks/hba1c.ipynb +0 -136
- meta_analytics/notebooks/hiv_regimens.ipynb +0 -429
- meta_analytics/notebooks/incidence.ipynb +0 -232
- meta_analytics/notebooks/liver.ipynb +0 -389
- meta_analytics/notebooks/magreth.ipynb +0 -645
- meta_analytics/notebooks/monitoring_report.ipynb +0 -1834
- meta_analytics/notebooks/pharmacy.ipynb +0 -1061
- meta_analytics/notebooks/pharmacy_stock_202410.ipynb +0 -306
- meta_analytics/notebooks/qa.ipynb +0 -273
- meta_analytics/notebooks/steering.ipynb +0 -61
- meta_analytics/notebooks/undiagnosed/meta3_screening_consort_chart.ipynb +0 -1176
- meta_analytics/notebooks/undiagnosed/meta3_screening_undiagnosed.ipynb +0 -519
- meta_analytics/notebooks/undiagnosed/meta_screening_table2.ipynb +0 -964
- meta_analytics/notebooks/undiagnosed/screen_undiagnosed_or.ipynb +0 -296
- meta_analytics/notebooks/undiagnosed/screening.ipynb +0 -273
- meta_analytics/notebooks/undiagnosed/screening2.ipynb +0 -958
- meta_analytics/notebooks/undiagnosed/screening_undiagnosed_20241002.ipynb +0 -958
- meta_analytics/notebooks/ven.ipynb +0 -191
- meta_analytics/notebooks/vitals.ipynb +0 -263
- meta_analytics/tests/__init__.py +0 -0
- meta_analytics/tests/test_endpoints_by_date.py +0 -94
- meta_consent/tests/__init__.py +0 -0
- meta_consent/tests/holidays.csv +0 -15
- meta_consent/tests/tests/__init__.py +0 -0
- meta_consent/tests/tests/test_form_validators.py +0 -110
- meta_consent/tests/tests/test_subject_consent.py +0 -10
- meta_consent/tests/urls.py +0 -17
- meta_dashboard/tests/__init__.py +0 -0
- meta_dashboard/tests/admin.py +0 -22
- meta_dashboard/tests/holidays.csv +0 -15
- meta_dashboard/tests/tests/__init__.py +0 -0
- meta_dashboard/tests/urls.py +0 -55
- meta_edc/tests/__init__.py +0 -0
- meta_edc/tests/tests/__init__.py +0 -0
- meta_edc/tests/tests/test_endpoints.py +0 -555
- meta_edc-1.1.8.dist-info/METADATA +0 -767
- meta_edc-1.1.8.dist-info/WHEEL +0 -5
- meta_edc-1.1.8.dist-info/licenses/AUTHORS.rst +0 -8
- meta_edc-1.1.8.dist-info/top_level.txt +0 -20
- meta_labs/tests/__init__.py +0 -0
- meta_labs/tests/test_labs.py +0 -27
- meta_labs/tests/test_reportables.py +0 -70
- meta_labs/tests/urls.py +0 -4
- meta_lists/tests/__init__.py +0 -0
- meta_lists/tests/test_lists.py +0 -8
- meta_pharmacy/notebooks/pharmacy.ipynb +0 -41
- meta_prn/tests/__init__.py +0 -0
- meta_prn/tests/tests/__init__.py +0 -0
- meta_prn/tests/tests/test_actions.py +0 -97
- meta_prn/tests/tests/test_dm_referral.py +0 -203
- meta_prn/tests/tests/test_eos_events.py +0 -134
- meta_prn/tests/tests/test_manager_order.py +0 -14
- meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
- meta_prn/tests/urls.py +0 -10
- meta_rando/tests/__init__.py +0 -0
- meta_rando/tests/tests/__init__.py +0 -0
- meta_rando/tests/tests/test_randomizers.py +0 -57
- meta_reports/tests/__init__.py +0 -0
- meta_reports/tests/test_reports.py +0 -35
- meta_reports/tests/test_sql_gen.py +0 -5
- meta_reports/tests/urls.py +0 -4
- meta_screening/offline_models.py +0 -3
- meta_screening/tests/__init__.py +0 -0
- meta_screening/tests/holidays.csv +0 -15
- meta_screening/tests/meta_test_case_mixin.py +0 -234
- meta_screening/tests/options.py +0 -127
- meta_screening/tests/tests/__init__.py +0 -0
- meta_screening/tests/tests/test_forms.py +0 -404
- meta_screening/tests/tests/test_screening_part_one.py +0 -108
- meta_screening/tests/tests/test_screening_part_three.py +0 -433
- meta_screening/tests/tests/test_screening_part_two.py +0 -84
- meta_sites/tests/__init__.py +0 -0
- meta_sites/tests/test_sites.py +0 -12
- meta_sites/tests/urls.py +0 -4
- meta_stats/__init__.py +0 -0
- meta_stats/incidence.py +0 -16
- meta_stats/models.py +0 -0
- meta_stats/tests/__init__.py +0 -0
- meta_stats/tests/tests/__init__.py +0 -0
- meta_stats/tests/tests/test_incidence.py +0 -10
- meta_subject/tests/__init__.py +0 -0
- meta_subject/tests/holidays.csv +0 -15
- meta_subject/tests/tests/__init__.py +0 -0
- meta_subject/tests/tests/test_egfr.py +0 -234
- meta_subject/tests/tests/test_fixes.py +0 -64
- meta_subject/tests/tests/test_followup.py +0 -52
- meta_subject/tests/tests/test_manager_order.py +0 -11
- meta_subject/tests/tests/test_medication_adherence.py +0 -79
- meta_subject/tests/tests/test_metadata_rules.py +0 -135
- meta_subject/tests/tests/test_mnsi.py +0 -341
- meta_subject/tests/tests/test_next_appointment.py +0 -231
- meta_subject/tests/tests/test_patient_history_form.py +0 -74
- meta_subject/tests/tests/test_physical_exam.py +0 -84
- meta_subject/tests/tests/test_sf12.py +0 -161
- meta_subject/tests/tests/test_study_medication.py +0 -229
- meta_subject/tests/urls.py +0 -24
- meta_visit_schedule/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/test_schedule.py +0 -181
- meta_visit_schedule/tests/urls.py +0 -4
- tests/__init__.py +0 -0
- tests/etc/randomization_list.csv +0 -241
- tests/etc/randomization_list_phase_three.csv +0 -241
- tests/etc/user-aes-local.key +0 -0
- tests/etc/user-aes-restricted.key +0 -1
- tests/etc/user-rsa-local-private.pem +0 -27
- tests/etc/user-rsa-local-public.pem +0 -9
- tests/etc/user-rsa-restricted-private.pem +0 -27
- tests/etc/user-rsa-restricted-public.pem +0 -9
- tests/etc/user-salt-local.key +0 -0
- tests/etc/user-salt-restricted.key +0 -0
- tests/holidays.csv +0 -15
- tests/test_settings.py +0 -185
- {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/licenses/LICENSE +0 -0
- /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
- /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
|
@@ -2,11 +2,8 @@ from django.contrib import admin
|
|
|
2
2
|
from django.template.loader import render_to_string
|
|
3
3
|
from django.urls import reverse
|
|
4
4
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
5
|
-
from edc_action_item import
|
|
6
|
-
|
|
7
|
-
action_fields,
|
|
8
|
-
action_fieldset_tuple,
|
|
9
|
-
)
|
|
5
|
+
from edc_action_item.fieldsets import action_fields, action_fieldset_tuple
|
|
6
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
10
7
|
from edc_crf.fieldset import crf_status_fieldset
|
|
11
8
|
from edc_form_label import FormLabelModelAdminMixin
|
|
12
9
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
@@ -22,11 +19,11 @@ class BirthOutcomesInlineAdmin(TabularInlineMixin, admin.TabularInline):
|
|
|
22
19
|
model = BirthOutcomes
|
|
23
20
|
form = BirthOutcomesForm
|
|
24
21
|
extra = 1
|
|
25
|
-
fields =
|
|
22
|
+
fields = (
|
|
26
23
|
"birth_order",
|
|
27
24
|
"birth_outcome",
|
|
28
25
|
"birth_weight",
|
|
29
|
-
|
|
26
|
+
)
|
|
30
27
|
|
|
31
28
|
|
|
32
29
|
@admin.register(Delivery, site=meta_subject_admin)
|
|
@@ -38,7 +35,7 @@ class DeliveryAdmin(
|
|
|
38
35
|
):
|
|
39
36
|
form = DeliveryForm
|
|
40
37
|
|
|
41
|
-
inlines =
|
|
38
|
+
inlines = (BirthOutcomesInlineAdmin,)
|
|
42
39
|
|
|
43
40
|
fieldsets = (
|
|
44
41
|
(None, {"fields": ("subject_visit", "report_datetime")}),
|
|
@@ -94,7 +91,7 @@ class DeliveryAdmin(
|
|
|
94
91
|
"maternal_outcome",
|
|
95
92
|
)
|
|
96
93
|
|
|
97
|
-
radio_fields = {
|
|
94
|
+
radio_fields = { # noqa: RUF012
|
|
98
95
|
"info_available": admin.VERTICAL,
|
|
99
96
|
"info_source": admin.VERTICAL,
|
|
100
97
|
"informant_relation": admin.VERTICAL,
|
|
@@ -112,7 +109,7 @@ class DeliveryAdmin(
|
|
|
112
109
|
)
|
|
113
110
|
|
|
114
111
|
@admin.display
|
|
115
|
-
def birth_outcomes(self, obj=None, label=None):
|
|
112
|
+
def birth_outcomes(self, obj=None, label=None): # noqa: ARG002
|
|
116
113
|
url = reverse("meta_subject_admin:meta_subject_birthoutcomes_changelist")
|
|
117
114
|
url = f"{url}?q={obj.subject_identifier}"
|
|
118
115
|
context = dict(title="Outcomes", url=url, label="Outcomes")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
2
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
3
|
-
from edc_action_item import
|
|
3
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
4
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
4
5
|
from edc_adherence.model_admin_mixin import get_visual_score_fieldset_tuple
|
|
5
6
|
from edc_crf.fieldset import crf_status_fieldset
|
|
6
7
|
from edc_form_label.form_label_modeladmin_mixin import FormLabelModelAdminMixin
|
|
@@ -86,7 +87,7 @@ class DmFollowupAdmin(
|
|
|
86
87
|
"missed_referral_reasons",
|
|
87
88
|
)
|
|
88
89
|
|
|
89
|
-
radio_fields = {
|
|
90
|
+
radio_fields = { # noqa: RUF012
|
|
90
91
|
"attended": admin.VERTICAL,
|
|
91
92
|
"investigations_performed": admin.VERTICAL,
|
|
92
93
|
"on_dm_medications": admin.VERTICAL,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
|
-
from edc_action_item import ActionItemModelAdminMixin
|
|
2
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
3
3
|
from edc_egfr.admin import EgfrDropNotificationAdminMixin
|
|
4
4
|
from edc_model_admin.history import SimpleHistoryAdmin
|
|
5
5
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from django.contrib import admin
|
|
2
2
|
from django_audit_fields.admin import audit_fieldset_tuple
|
|
3
|
-
from edc_action_item import
|
|
3
|
+
from edc_action_item.fieldsets import action_fieldset_tuple
|
|
4
|
+
from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
|
|
4
5
|
from edc_constants.constants import NONE, YES
|
|
5
6
|
from edc_crf.fieldset import crf_status_fieldset
|
|
6
7
|
from edc_form_label.form_label_modeladmin_mixin import FormLabelModelAdminMixin
|
|
@@ -16,17 +17,18 @@ class GradedEventFilter(admin.SimpleListFilter):
|
|
|
16
17
|
title = "Graded events"
|
|
17
18
|
parameter_name = "grade"
|
|
18
19
|
|
|
19
|
-
def lookups(self, request, model_admin):
|
|
20
|
+
def lookups(self, request, model_admin): # noqa: ARG002
|
|
20
21
|
return (
|
|
21
22
|
("g3", "Grade 3"),
|
|
22
23
|
("g4", "Grade 4"),
|
|
23
24
|
)
|
|
24
25
|
|
|
25
|
-
def queryset(self, request, queryset):
|
|
26
|
+
def queryset(self, request, queryset): # noqa: ARG002
|
|
26
27
|
if self.value() == "g3":
|
|
27
28
|
return queryset.exclude(symptoms_g3__name=NONE)
|
|
28
29
|
if self.value() == "g4":
|
|
29
30
|
return queryset.exclude(symptoms_g4__name=NONE)
|
|
31
|
+
return queryset
|
|
30
32
|
|
|
31
33
|
|
|
32
34
|
@admin.register(FollowupExamination, site=meta_subject_admin)
|
|
@@ -36,14 +38,13 @@ class FollowupExaminationAdmin(
|
|
|
36
38
|
ActionItemModelAdminMixin,
|
|
37
39
|
SimpleHistoryAdmin,
|
|
38
40
|
):
|
|
39
|
-
|
|
40
41
|
form = FollowupExaminationForm
|
|
41
42
|
|
|
42
|
-
autocomplete_fields =
|
|
43
|
+
autocomplete_fields = ("art_new_regimen",)
|
|
43
44
|
|
|
44
|
-
additional_instructions =
|
|
45
|
-
"If participant is pregnant, complete the action linked CRF `Pregnancy notification`."
|
|
46
|
-
|
|
45
|
+
additional_instructions = (
|
|
46
|
+
"If participant is pregnant, complete the action linked CRF `Pregnancy notification`.",
|
|
47
|
+
)
|
|
47
48
|
|
|
48
49
|
fieldsets = (
|
|
49
50
|
(None, {"fields": ("subject_visit", "report_datetime")}),
|
|
@@ -128,7 +129,7 @@ class FollowupExaminationAdmin(
|
|
|
128
129
|
|
|
129
130
|
# readonly_fields = action_fields
|
|
130
131
|
|
|
131
|
-
radio_fields = {
|
|
132
|
+
radio_fields = { # noqa: RUF012
|
|
132
133
|
"abdominal_tenderness": admin.VERTICAL,
|
|
133
134
|
"admitted_hospital": admin.VERTICAL,
|
|
134
135
|
"any_other_problems": admin.VERTICAL,
|
|
@@ -15,10 +15,9 @@ from .modeladmin import CrfModelAdminMixin
|
|
|
15
15
|
class FollowupVitalsAdmin(CrfModelAdminMixin, FormLabelModelAdminMixin, SimpleHistoryAdmin):
|
|
16
16
|
form = FollowupVitalsForm
|
|
17
17
|
|
|
18
|
-
additional_instructions =
|
|
19
|
-
"If participant is pregnant, complete the action "
|
|
20
|
-
|
|
21
|
-
]
|
|
18
|
+
additional_instructions = (
|
|
19
|
+
"If participant is pregnant, complete the action linked CRF `Pregnancy notification`."
|
|
20
|
+
)
|
|
22
21
|
|
|
23
22
|
fieldsets = (
|
|
24
23
|
(None, {"fields": ("subject_visit", "report_datetime")}),
|
|
@@ -68,7 +67,7 @@ class FollowupVitalsAdmin(CrfModelAdminMixin, FormLabelModelAdminMixin, SimpleHi
|
|
|
68
67
|
|
|
69
68
|
filter_horizontal = ()
|
|
70
69
|
|
|
71
|
-
radio_fields = {
|
|
70
|
+
radio_fields = { # noqa: RUF012
|
|
72
71
|
"waist_circumference_measured": admin.VERTICAL,
|
|
73
72
|
"severe_htn": admin.VERTICAL,
|
|
74
73
|
}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Type
|
|
4
|
-
|
|
5
3
|
from django.contrib import admin
|
|
6
4
|
from django.contrib.admin import SimpleListFilter
|
|
7
5
|
from django.template.loader import render_to_string
|
|
@@ -72,7 +70,7 @@ class GlucoseAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
72
70
|
audit_fieldset_tuple,
|
|
73
71
|
)
|
|
74
72
|
|
|
75
|
-
radio_fields = {
|
|
73
|
+
radio_fields = { # noqa: RUF012
|
|
76
74
|
"fasting": admin.VERTICAL,
|
|
77
75
|
"fbg_units": admin.VERTICAL,
|
|
78
76
|
"fbg_performed": admin.VERTICAL,
|
|
@@ -89,7 +87,7 @@ class GlucoseAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
89
87
|
list_display = tuple(list_display)
|
|
90
88
|
return list_display
|
|
91
89
|
|
|
92
|
-
def get_list_filter(self, request) -> tuple[str |
|
|
90
|
+
def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
|
|
93
91
|
list_filter = super().get_list_filter(request)
|
|
94
92
|
list_filter = list(list_filter)
|
|
95
93
|
list_filter.insert(2, OgttListFilter)
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import Type
|
|
4
|
-
|
|
5
3
|
from django.contrib import admin
|
|
6
4
|
from django.contrib.admin import SimpleListFilter
|
|
7
5
|
from django_audit_fields import audit_fieldset_tuple
|
|
@@ -74,7 +72,7 @@ class GlucoseFbgAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
74
72
|
list_display = tuple(list_display)
|
|
75
73
|
return list_display
|
|
76
74
|
|
|
77
|
-
def get_list_filter(self, request) -> tuple[str |
|
|
75
|
+
def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
|
|
78
76
|
list_filter = super().get_list_filter(request)
|
|
79
77
|
list_filter = list(list_filter)
|
|
80
78
|
list_filter.insert(2, GlucoseListFilter)
|
|
@@ -92,7 +92,7 @@ class HealthEconomicsUpdateAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
92
92
|
audit_fieldset_tuple,
|
|
93
93
|
)
|
|
94
94
|
|
|
95
|
-
radio_fields = {
|
|
95
|
+
radio_fields = { # noqa: RUF012
|
|
96
96
|
"hoh": admin.VERTICAL,
|
|
97
97
|
"relationship_to_hoh": admin.VERTICAL,
|
|
98
98
|
"avg_income": admin.VERTICAL,
|
meta_subject/admin/mnsi_admin.py
CHANGED
|
@@ -28,11 +28,13 @@ def get_fieldsets():
|
|
|
28
28
|
},
|
|
29
29
|
)
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
return (
|
|
32
|
+
fieldset,
|
|
33
|
+
*get_mnsi_fieldsets(),
|
|
34
|
+
crf_status_fieldset_tuple,
|
|
35
|
+
calculated_values_fieldset,
|
|
36
|
+
audit_fieldset_tuple,
|
|
37
|
+
)
|
|
36
38
|
|
|
37
39
|
|
|
38
40
|
edc_mnsi_admin.unregister(DefaultMnsi)
|
|
@@ -15,7 +15,7 @@ class OtherArvRegimensInlineAdmin(TabularInlineMixin, admin.TabularInline):
|
|
|
15
15
|
form = OtherArvRegimensDetailForm
|
|
16
16
|
extra = 1
|
|
17
17
|
view_on_site = False
|
|
18
|
-
autocomplete_fields =
|
|
18
|
+
autocomplete_fields = ("arv_regimen",)
|
|
19
19
|
|
|
20
20
|
fieldsets = (
|
|
21
21
|
(
|
|
@@ -40,7 +40,7 @@ class OtherArvRegimensInlineAdmin(TabularInlineMixin, admin.TabularInline):
|
|
|
40
40
|
class OtherArvRegimensAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
41
41
|
form = OtherArvRegimensForm
|
|
42
42
|
|
|
43
|
-
inlines =
|
|
43
|
+
inlines = (OtherArvRegimensInlineAdmin,)
|
|
44
44
|
|
|
45
45
|
fieldsets = (
|
|
46
46
|
(None, {"fields": ("subject_visit", "report_datetime", "has_other_regimens")}),
|
|
@@ -48,6 +48,6 @@ class OtherArvRegimensAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
48
48
|
audit_fieldset_tuple,
|
|
49
49
|
)
|
|
50
50
|
|
|
51
|
-
radio_fields = {
|
|
51
|
+
radio_fields = { # noqa: RUF012
|
|
52
52
|
"has_other_regimens": admin.VERTICAL,
|
|
53
53
|
}
|
|
@@ -14,8 +14,8 @@ from .modeladmin import CrfModelAdminMixin
|
|
|
14
14
|
class PatientHistoryAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
15
15
|
form = PatientHistoryForm
|
|
16
16
|
|
|
17
|
-
autocomplete_fields =
|
|
18
|
-
fieldsets =
|
|
17
|
+
autocomplete_fields = ("current_arv_regimen", "previous_arv_regimen")
|
|
18
|
+
fieldsets = (
|
|
19
19
|
(None, {"fields": ("subject_visit", "report_datetime")}),
|
|
20
20
|
("Part 1: Symptoms", {"fields": ("symptoms", "other_symptoms")}),
|
|
21
21
|
get_hiv_fieldset(part="2"),
|
|
@@ -23,9 +23,9 @@ class PatientHistoryAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
23
23
|
get_other_history_fieldset(part="4"),
|
|
24
24
|
crf_status_fieldset,
|
|
25
25
|
audit_fieldset_tuple,
|
|
26
|
-
|
|
26
|
+
)
|
|
27
27
|
|
|
28
|
-
radio_fields = {
|
|
28
|
+
radio_fields = { # noqa: RUF012
|
|
29
29
|
"current_arv_regimen": admin.VERTICAL,
|
|
30
30
|
"current_smoker": admin.VERTICAL,
|
|
31
31
|
"dm_in_family": admin.VERTICAL,
|
|
@@ -52,7 +52,7 @@ class PhysicalExamAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
52
52
|
audit_fieldset_tuple,
|
|
53
53
|
)
|
|
54
54
|
|
|
55
|
-
radio_fields = {
|
|
55
|
+
radio_fields = { # noqa: RUF012
|
|
56
56
|
"abdominal_tenderness": admin.VERTICAL,
|
|
57
57
|
"enlarged_liver": admin.VERTICAL,
|
|
58
58
|
"irregular_heartbeat": admin.VERTICAL,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from decimal import Decimal
|
|
4
|
-
from typing import Type
|
|
5
4
|
|
|
6
5
|
from django.contrib import admin, messages
|
|
7
6
|
from django.contrib.admin import SimpleListFilter
|
|
@@ -30,15 +29,14 @@ from .modeladmin import CrfModelAdminMixin
|
|
|
30
29
|
|
|
31
30
|
@admin.register(StudyMedication, site=meta_subject_admin)
|
|
32
31
|
class StudyMedicationAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
33
|
-
|
|
34
|
-
actions = ["create_or_update_rx_refills"]
|
|
32
|
+
actions = ("create_or_update_rx_refills",)
|
|
35
33
|
|
|
36
34
|
form = StudyMedicationForm
|
|
37
35
|
|
|
38
|
-
autocomplete_fields =
|
|
36
|
+
autocomplete_fields = (
|
|
39
37
|
"dosage_guideline",
|
|
40
38
|
"formulation",
|
|
41
|
-
|
|
39
|
+
)
|
|
42
40
|
|
|
43
41
|
fieldsets = (
|
|
44
42
|
(
|
|
@@ -78,20 +76,19 @@ class StudyMedicationAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
78
76
|
audit_fieldset_tuple,
|
|
79
77
|
)
|
|
80
78
|
|
|
81
|
-
radio_fields = {
|
|
79
|
+
radio_fields = { # noqa: RUF012
|
|
82
80
|
"formulation": admin.VERTICAL,
|
|
83
81
|
"refill": admin.VERTICAL,
|
|
84
82
|
"refill_to_next_visit": admin.VERTICAL,
|
|
85
83
|
}
|
|
86
84
|
|
|
87
|
-
def get_list_filter(self, request) -> tuple[str |
|
|
85
|
+
def get_list_filter(self, request) -> tuple[str | type[SimpleListFilter], ...]:
|
|
88
86
|
list_filter = super().get_list_filter(request)
|
|
89
87
|
list_filter = list(list_filter)
|
|
90
88
|
list_filter.insert(4, "dosage_guideline")
|
|
91
89
|
list_filter.insert(4, RefillEndDateListFilter)
|
|
92
90
|
list_filter.insert(4, RefillStartDateListFilter)
|
|
93
|
-
|
|
94
|
-
return list_filter
|
|
91
|
+
return tuple(list_filter)
|
|
95
92
|
|
|
96
93
|
def get_list_display(self, request) -> tuple[str, ...]:
|
|
97
94
|
list_display = super().get_list_display(request)
|
|
@@ -100,8 +97,7 @@ class StudyMedicationAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
100
97
|
list_display.insert(4, "refill_end_date")
|
|
101
98
|
list_display.insert(4, "refill_start_date")
|
|
102
99
|
list_display.insert(4, "dosage_guideline")
|
|
103
|
-
|
|
104
|
-
return list_display
|
|
100
|
+
return tuple(list_display)
|
|
105
101
|
|
|
106
102
|
@admin.display(description="days", ordering="number_of_days")
|
|
107
103
|
def refill_days(self, obj):
|
|
@@ -156,10 +152,7 @@ class StudyMedicationAdmin(CrfModelAdminMixin, SimpleHistoryAdmin):
|
|
|
156
152
|
messages.add_message(
|
|
157
153
|
request,
|
|
158
154
|
ERROR,
|
|
159
|
-
(
|
|
160
|
-
f"ObjectDoesNotExist: {obj.subject_identifier}, "
|
|
161
|
-
f"{obj.related_visit}, {str(e)}"
|
|
162
|
-
),
|
|
155
|
+
(f"ObjectDoesNotExist: {obj.subject_identifier}, {obj.related_visit}, {e!s}"),
|
|
163
156
|
)
|
|
164
157
|
errors += 1
|
|
165
158
|
except StudyMedicationError as e:
|
|
@@ -31,7 +31,7 @@ class SubjectRequisitionAdmin(RequisitionAdminMixin, CrfModelAdminMixin, SimpleH
|
|
|
31
31
|
audit_fieldset_tuple,
|
|
32
32
|
)
|
|
33
33
|
|
|
34
|
-
radio_fields = {
|
|
34
|
+
radio_fields = { # noqa: RUF012
|
|
35
35
|
"is_drawn": admin.VERTICAL,
|
|
36
36
|
"reason_not_drawn": admin.VERTICAL,
|
|
37
37
|
"item_type": admin.VERTICAL,
|
meta_subject/baker_recipes.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from
|
|
2
|
-
from
|
|
1
|
+
from django.utils import timezone
|
|
2
|
+
from edc_constants.constants import NO, NOT_APPLICABLE, NULL_STRING, PATIENT, POS, YES
|
|
3
3
|
from edc_visit_tracking.constants import SCHEDULED
|
|
4
4
|
from faker import Faker
|
|
5
5
|
from model_bakery.recipe import Recipe
|
|
@@ -26,22 +26,22 @@ subjectrequisition = Recipe(SubjectRequisition)
|
|
|
26
26
|
|
|
27
27
|
medicationadherence = Recipe(
|
|
28
28
|
MedicationAdherence,
|
|
29
|
-
report_datetime=
|
|
29
|
+
report_datetime=timezone.now(),
|
|
30
30
|
visual_score_slider=90,
|
|
31
31
|
visual_score_confirmed=90,
|
|
32
32
|
last_missed_pill=NO,
|
|
33
33
|
pill_count_performed=YES,
|
|
34
34
|
pill_count=3,
|
|
35
35
|
missed_pill_reason=[],
|
|
36
|
-
other_missed_pill_reason=
|
|
36
|
+
other_missed_pill_reason=NULL_STRING,
|
|
37
37
|
)
|
|
38
38
|
|
|
39
39
|
urinepregnancy = Recipe(
|
|
40
40
|
UrinePregnancy,
|
|
41
|
-
action_identifier=
|
|
42
|
-
report_datetime=
|
|
41
|
+
action_identifier=NULL_STRING,
|
|
42
|
+
report_datetime=timezone.now(),
|
|
43
43
|
performed=YES,
|
|
44
|
-
not_performed_reason=
|
|
44
|
+
not_performed_reason=NULL_STRING,
|
|
45
45
|
bhcg_value=POS,
|
|
46
46
|
notified=False,
|
|
47
47
|
notified_datetime=None,
|
|
@@ -79,16 +79,16 @@ followupexamination = Recipe(
|
|
|
79
79
|
delivery = Recipe(
|
|
80
80
|
Delivery,
|
|
81
81
|
# site=None,
|
|
82
|
-
action_identifier=
|
|
83
|
-
report_datetime=
|
|
82
|
+
action_identifier=NULL_STRING,
|
|
83
|
+
report_datetime=timezone.now(),
|
|
84
84
|
info_available=YES,
|
|
85
85
|
info_source=PATIENT,
|
|
86
86
|
informant_relation=NOT_APPLICABLE,
|
|
87
|
-
informant_relation_other=
|
|
88
|
-
delivery_datetime=
|
|
87
|
+
informant_relation_other=NULL_STRING,
|
|
88
|
+
delivery_datetime=timezone.now(),
|
|
89
89
|
delivery_time_estimated=NO,
|
|
90
90
|
delivery_location=HOSPITAL_CLINIC,
|
|
91
|
-
delivery_location_other=
|
|
91
|
+
delivery_location_other=NULL_STRING,
|
|
92
92
|
delivery_location_name="Big hospital",
|
|
93
93
|
delivery_ga=40,
|
|
94
94
|
gm_treated=NO,
|
|
@@ -98,8 +98,8 @@ delivery = Recipe(
|
|
|
98
98
|
birthoutcomes = Recipe(
|
|
99
99
|
BirthOutcomes,
|
|
100
100
|
delivery=None,
|
|
101
|
-
action_identifier=
|
|
102
|
-
report_datetime=
|
|
101
|
+
action_identifier=NULL_STRING,
|
|
102
|
+
report_datetime=timezone.now(),
|
|
103
103
|
birth_order=1,
|
|
104
104
|
birth_outcome=LIVE_AT_TERM,
|
|
105
105
|
birth_weight=320,
|
|
@@ -107,5 +107,5 @@ birthoutcomes = Recipe(
|
|
|
107
107
|
|
|
108
108
|
healtheconomicsupdate = Recipe(
|
|
109
109
|
HealthEconomicsUpdate,
|
|
110
|
-
report_datetime=
|
|
110
|
+
report_datetime=timezone.now(),
|
|
111
111
|
)
|
|
@@ -6,3 +6,14 @@ from .egfr_drop_notification_form_validator import EgfrDropNotificationFormValid
|
|
|
6
6
|
from .followup_examination_form_validator import FollowupExaminationFormValidator
|
|
7
7
|
from .glucose_form_validator import GlucoseFormValidator
|
|
8
8
|
from .health_economics_form_validator import HealthEconomicsFormValidator
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"BirthOutcomesFormValidator",
|
|
12
|
+
"DeliveryFormValidator",
|
|
13
|
+
"DmEndpointFormValidator",
|
|
14
|
+
"DmFollowupFormValidator",
|
|
15
|
+
"EgfrDropNotificationFormValidator",
|
|
16
|
+
"FollowupExaminationFormValidator",
|
|
17
|
+
"GlucoseFormValidator",
|
|
18
|
+
"HealthEconomicsFormValidator",
|
|
19
|
+
]
|
|
@@ -10,16 +10,15 @@ from meta_prn.models import PregnancyNotification
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class DeliveryFormValidator(CrfFormValidator):
|
|
13
|
-
|
|
14
13
|
def clean(self):
|
|
15
14
|
try:
|
|
16
15
|
pregnancy_notification = PregnancyNotification.objects.get(
|
|
17
16
|
subject_identifier=self.cleaned_data.get("subject_visit").subject_identifier
|
|
18
17
|
)
|
|
19
|
-
except ObjectDoesNotExist:
|
|
18
|
+
except ObjectDoesNotExist as e:
|
|
20
19
|
raise forms.ValidationError(
|
|
21
20
|
f"{PregnancyNotification._meta.verbose_name} not found."
|
|
22
|
-
)
|
|
21
|
+
) from e
|
|
23
22
|
|
|
24
23
|
self.required_if(
|
|
25
24
|
NO, field="info_available", field_required="info_not_available_reason"
|
|
@@ -11,7 +11,6 @@ from meta_prn.models import DmReferral
|
|
|
11
11
|
|
|
12
12
|
class DmFollowupFormValidator(CrfFormValidator):
|
|
13
13
|
def clean(self):
|
|
14
|
-
|
|
15
14
|
# referral_date must be before report datetime
|
|
16
15
|
if (
|
|
17
16
|
self.report_datetime
|
|
@@ -228,8 +227,10 @@ class DmFollowupFormValidator(CrfFormValidator):
|
|
|
228
227
|
and self.cleaned_data.get("on_dm_medications") == YES
|
|
229
228
|
):
|
|
230
229
|
confirmed = self.cleaned_data.get("visual_score_confirmed")
|
|
231
|
-
if
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
230
|
+
if (
|
|
231
|
+
confirmed is not None
|
|
232
|
+
and int(self.cleaned_data.get("visual_score_slider", "0")) != confirmed
|
|
233
|
+
):
|
|
234
|
+
raise forms.ValidationError(
|
|
235
|
+
{"visual_score_confirmed": "Does not match visual score above."}
|
|
236
|
+
)
|
|
@@ -70,13 +70,11 @@ class GlucoseFormValidator(FbgOgttFormValidatorMixin, CrfFormValidator):
|
|
|
70
70
|
|
|
71
71
|
def is_endpoint(self):
|
|
72
72
|
value = NO
|
|
73
|
-
if self.cleaned_data.get("fbg_value") >= Decimal("7.0") and self.cleaned_data.get(
|
|
73
|
+
if (self.cleaned_data.get("fbg_value") >= Decimal("7.0") and self.cleaned_data.get(
|
|
74
74
|
"ogtt_value"
|
|
75
|
-
) >= Decimal("11.1")
|
|
76
|
-
value = YES
|
|
77
|
-
elif self.cleaned_data.get("fbg_value") < Decimal("7.0") and self.cleaned_data.get(
|
|
75
|
+
) >= Decimal("11.1")) or (self.cleaned_data.get("fbg_value") < Decimal("7.0") and self.cleaned_data.get(
|
|
78
76
|
"ogtt_value"
|
|
79
|
-
) >= Decimal("11.1"):
|
|
77
|
+
) >= Decimal("11.1")):
|
|
80
78
|
value = YES
|
|
81
79
|
elif self.cleaned_data.get("fbg_value") >= Decimal("7.0") and self.cleaned_data.get(
|
|
82
80
|
"ogtt_value"
|