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
|
@@ -3,3 +3,11 @@ from .crf_model_mixin import CrfModelMixin
|
|
|
3
3
|
from .crf_with_action_model_mixin import CrfWithActionModelMixin
|
|
4
4
|
from .search_slug_model_mixin import SearchSlugModelMixin
|
|
5
5
|
from .vitals_fields_model_mixin import VitalsFieldsModelMixin
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"ArvHistoryModelMixin",
|
|
9
|
+
"CrfModelMixin",
|
|
10
|
+
"CrfWithActionModelMixin",
|
|
11
|
+
"SearchSlugModelMixin",
|
|
12
|
+
"VitalsFieldsModelMixin",
|
|
13
|
+
]
|
|
@@ -4,8 +4,7 @@ from edc_search.model_mixins import SearchSlugModelMixin as Base
|
|
|
4
4
|
class SearchSlugModelMixin(Base):
|
|
5
5
|
def get_search_slug_fields(self):
|
|
6
6
|
fields = super().get_search_slug_fields()
|
|
7
|
-
fields
|
|
8
|
-
return fields
|
|
7
|
+
return *fields, "subject_identifier"
|
|
9
8
|
|
|
10
9
|
class Meta:
|
|
11
10
|
abstract = True
|
meta_subject/models/__init__.py
CHANGED
|
@@ -48,3 +48,51 @@ from .subject_visit import SubjectVisit
|
|
|
48
48
|
from .subject_visit_missed import SubjectVisitMissed
|
|
49
49
|
from .urine_dipstick_test import UrineDipstickTest
|
|
50
50
|
from .urine_pregnancy import UrinePregnancy
|
|
51
|
+
|
|
52
|
+
__all__ = [
|
|
53
|
+
"BirthOutcomes",
|
|
54
|
+
"BloodResultsFbc",
|
|
55
|
+
"BloodResultsGluDummy",
|
|
56
|
+
"BloodResultsHba1c",
|
|
57
|
+
"BloodResultsIns",
|
|
58
|
+
"BloodResultsLft",
|
|
59
|
+
"BloodResultsLipids",
|
|
60
|
+
"BloodResultsRft",
|
|
61
|
+
"Complications",
|
|
62
|
+
"ComplicationsGlycemia",
|
|
63
|
+
"ConcomitantMedication",
|
|
64
|
+
"Delivery",
|
|
65
|
+
"DietAndLifestyle",
|
|
66
|
+
"DmEndpoint",
|
|
67
|
+
"DmFollowup",
|
|
68
|
+
"EgfrDropNotification",
|
|
69
|
+
"Eq5d3l",
|
|
70
|
+
"FollowupExamination",
|
|
71
|
+
"FollowupVitals",
|
|
72
|
+
"Glucose",
|
|
73
|
+
"GlucoseFbg",
|
|
74
|
+
"HealthEconomics",
|
|
75
|
+
"HealthEconomicsSimple",
|
|
76
|
+
"HealthEconomicsUpdate",
|
|
77
|
+
"HepatitisTest",
|
|
78
|
+
"MalariaTest",
|
|
79
|
+
"MedicationAdherence",
|
|
80
|
+
"Mnsi",
|
|
81
|
+
"NextAppointment",
|
|
82
|
+
"OtherArvRegimens",
|
|
83
|
+
"OtherArvRegimensDetail",
|
|
84
|
+
"PatientHistory",
|
|
85
|
+
"PhysicalExam",
|
|
86
|
+
"PregnancyUpdate",
|
|
87
|
+
"Sf12",
|
|
88
|
+
"StudyMedication",
|
|
89
|
+
"SubjectRequisition",
|
|
90
|
+
"SubjectVisit",
|
|
91
|
+
"SubjectVisitMissed",
|
|
92
|
+
"UrineDipstickTest",
|
|
93
|
+
"UrinePregnancy",
|
|
94
|
+
"study_medication_on_pre_save",
|
|
95
|
+
"update_glucose_endpoints_for_subject_on_post_save",
|
|
96
|
+
"update_pregnancy_notification_on_delivery_post_save",
|
|
97
|
+
"update_schedule_on_delivery_post_save",
|
|
98
|
+
]
|
|
@@ -15,7 +15,7 @@ from .delivery import Delivery
|
|
|
15
15
|
class Manager(models.Manager):
|
|
16
16
|
use_in_migrations = True
|
|
17
17
|
|
|
18
|
-
def get_by_natural_key(
|
|
18
|
+
def get_by_natural_key( # noqa: PLR0913
|
|
19
19
|
self,
|
|
20
20
|
birth_order,
|
|
21
21
|
subject_identifier,
|
|
@@ -97,5 +97,5 @@ class BirthOutcomes(
|
|
|
97
97
|
class Meta(BaseUuidModel.Meta):
|
|
98
98
|
verbose_name = "Birth Outcomes"
|
|
99
99
|
verbose_name_plural = "Birth Outcomes"
|
|
100
|
-
indexes =
|
|
101
|
-
unique_together =
|
|
100
|
+
indexes = (Index(fields=["delivery", "birth_order"]),)
|
|
101
|
+
unique_together = ("delivery", "birth_order")
|
|
@@ -5,3 +5,14 @@ from .blood_results_ins import BloodResultsIns
|
|
|
5
5
|
from .blood_results_lft import BloodResultsLft
|
|
6
6
|
from .blood_results_lipids import BloodResultsLipids
|
|
7
7
|
from .blood_results_rft import BloodResultsRft
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"BloodResultsFbc",
|
|
11
|
+
"BloodResultsGluDummy",
|
|
12
|
+
"BloodResultsHba1c",
|
|
13
|
+
"BloodResultsIns",
|
|
14
|
+
"BloodResultsLft",
|
|
15
|
+
"BloodResultsLipids",
|
|
16
|
+
"BloodResultsRft",
|
|
17
|
+
]
|
|
18
|
+
|
meta_subject/models/delivery.py
CHANGED
|
@@ -52,7 +52,7 @@ class Delivery(
|
|
|
52
52
|
|
|
53
53
|
info_not_available_reason = models.TextField(
|
|
54
54
|
verbose_name="If the report was not available, please explain?",
|
|
55
|
-
|
|
55
|
+
default="",
|
|
56
56
|
blank=True,
|
|
57
57
|
)
|
|
58
58
|
|
|
@@ -110,7 +110,7 @@ class Delivery(
|
|
|
110
110
|
"please give name of the facility"
|
|
111
111
|
),
|
|
112
112
|
max_length=150,
|
|
113
|
-
|
|
113
|
+
default="",
|
|
114
114
|
blank=True,
|
|
115
115
|
)
|
|
116
116
|
|
|
@@ -160,4 +160,4 @@ class Delivery(
|
|
|
160
160
|
class Meta(CrfWithActionModelMixin.Meta, BaseUuidModel.Meta):
|
|
161
161
|
verbose_name = "Delivery"
|
|
162
162
|
verbose_name_plural = "Delivery"
|
|
163
|
-
unique_together =
|
|
163
|
+
unique_together = ("subject_visit", "delivery_datetime")
|
|
@@ -16,7 +16,7 @@ class DmEndpoint(CrfModelMixin, BaseUuidModel):
|
|
|
16
16
|
verbose_name="Was the patient referred because the diabetes endpoint was reached?",
|
|
17
17
|
max_length=15,
|
|
18
18
|
choices=YES_NO,
|
|
19
|
-
|
|
19
|
+
default="",
|
|
20
20
|
blank=False,
|
|
21
21
|
help_text="If YES, the EDC will check for the patient on the Endpoints report.",
|
|
22
22
|
)
|
|
@@ -32,7 +32,7 @@ class DmEndpoint(CrfModelMixin, BaseUuidModel):
|
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
# retired
|
|
35
|
-
dx_initiated_by_other = OtherCharField(
|
|
35
|
+
dx_initiated_by_other = OtherCharField(blank=True)
|
|
36
36
|
|
|
37
37
|
# retired
|
|
38
38
|
dx_tmg = models.CharField(
|
|
@@ -50,11 +50,11 @@ class DmEndpoint(CrfModelMixin, BaseUuidModel):
|
|
|
50
50
|
# retired
|
|
51
51
|
dx_no_tmg_reason = models.TextField(
|
|
52
52
|
verbose_name="If NO, please explain why this case was not discussed with the TMG",
|
|
53
|
-
|
|
53
|
+
default="",
|
|
54
54
|
blank=True,
|
|
55
55
|
)
|
|
56
56
|
|
|
57
|
-
comments = models.TextField(verbose_name="Any other comments",
|
|
57
|
+
comments = models.TextField(verbose_name="Any other comments", default="", blank=True)
|
|
58
58
|
|
|
59
59
|
class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
|
|
60
60
|
verbose_name = "Diabetes endpoint"
|
|
@@ -22,7 +22,6 @@ from ...model_mixins import CrfWithActionModelMixin
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
|
|
25
|
-
|
|
26
25
|
action_name = DM_FOLLOWUP_ACTION
|
|
27
26
|
|
|
28
27
|
referral_date = models.DateField(
|
|
@@ -63,7 +62,7 @@ class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
63
62
|
facility_attended = models.CharField(
|
|
64
63
|
verbose_name="If 'Yes', please give the name of the facility you attended",
|
|
65
64
|
max_length=50,
|
|
66
|
-
|
|
65
|
+
default="",
|
|
67
66
|
blank=True,
|
|
68
67
|
)
|
|
69
68
|
|
|
@@ -181,7 +180,7 @@ class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
181
180
|
verbose_name="Visual score",
|
|
182
181
|
max_length=3,
|
|
183
182
|
help_text="%",
|
|
184
|
-
|
|
183
|
+
default="",
|
|
185
184
|
blank=True,
|
|
186
185
|
)
|
|
187
186
|
|
|
@@ -200,7 +199,7 @@ class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
200
199
|
verbose_name="When was the last time you missed your study pill?",
|
|
201
200
|
max_length=25,
|
|
202
201
|
choices=MISSED_PILLS,
|
|
203
|
-
|
|
202
|
+
default="",
|
|
204
203
|
blank=True,
|
|
205
204
|
)
|
|
206
205
|
|
|
@@ -8,11 +8,11 @@ from ..model_mixins import CrfModelMixin
|
|
|
8
8
|
class DietAndLifestyle(CrfModelMixin, BaseUuidModel):
|
|
9
9
|
diet_and_lifestyle = models.CharField(
|
|
10
10
|
verbose_name=(
|
|
11
|
-
"Has the participant received the META3
|
|
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
|
-
|
|
15
|
+
default="",
|
|
16
16
|
blank=False,
|
|
17
17
|
help_text="This response is not criteria for eligibility",
|
|
18
18
|
)
|
|
@@ -40,12 +40,12 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
40
40
|
related_name="symptoms_g3",
|
|
41
41
|
verbose_name="For these symptoms, were any grade 3 events",
|
|
42
42
|
help_text=(
|
|
43
|
-
"Refer to DAIDS toxicity table.
|
|
43
|
+
"Refer to DAIDS toxicity table. Please complete Serious Adverse Event form"
|
|
44
44
|
),
|
|
45
45
|
)
|
|
46
46
|
symptoms_g3_detail = models.TextField(
|
|
47
47
|
verbose_name="Please provide details on any of the Grade 3 symptoms above.",
|
|
48
|
-
|
|
48
|
+
default="",
|
|
49
49
|
blank=True,
|
|
50
50
|
)
|
|
51
51
|
|
|
@@ -55,19 +55,19 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
55
55
|
related_name="symptoms_g4",
|
|
56
56
|
verbose_name="For these symptoms, were any grade 4 events",
|
|
57
57
|
help_text=(
|
|
58
|
-
"Refer to DAIDS toxicity table.
|
|
58
|
+
"Refer to DAIDS toxicity table. Please complete Serious Adverse Event form"
|
|
59
59
|
),
|
|
60
60
|
)
|
|
61
61
|
symptoms_g4_detail = models.TextField(
|
|
62
62
|
verbose_name="Please provide details on any of the Grade 4 symptoms above.",
|
|
63
|
-
|
|
63
|
+
default="",
|
|
64
64
|
blank=True,
|
|
65
65
|
)
|
|
66
66
|
|
|
67
67
|
# 4c
|
|
68
68
|
symptoms_detail = models.TextField(
|
|
69
69
|
verbose_name="Please provide details on any of the symptoms above.",
|
|
70
|
-
|
|
70
|
+
default="",
|
|
71
71
|
blank=True,
|
|
72
72
|
)
|
|
73
73
|
|
|
@@ -89,7 +89,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
89
89
|
"If the participant was given a referral letter or "
|
|
90
90
|
"discharge summary record details here"
|
|
91
91
|
),
|
|
92
|
-
|
|
92
|
+
default="",
|
|
93
93
|
blank=True,
|
|
94
94
|
)
|
|
95
95
|
|
|
@@ -124,9 +124,9 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
124
124
|
# 5d
|
|
125
125
|
prescribed_medication_detail = models.TextField(
|
|
126
126
|
verbose_name=(
|
|
127
|
-
"If YES, prescribed any other medication,
|
|
127
|
+
"If YES, prescribed any other medication, please provide details of this visit"
|
|
128
128
|
),
|
|
129
|
-
|
|
129
|
+
default="",
|
|
130
130
|
blank=True,
|
|
131
131
|
)
|
|
132
132
|
|
|
@@ -145,7 +145,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
145
145
|
# 6a
|
|
146
146
|
any_other_problems_detail = models.TextField(
|
|
147
147
|
verbose_name="If YES, please provide details of the event",
|
|
148
|
-
|
|
148
|
+
default="",
|
|
149
149
|
blank=True,
|
|
150
150
|
)
|
|
151
151
|
|
|
@@ -176,7 +176,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
176
176
|
|
|
177
177
|
# 7b
|
|
178
178
|
art_change_reason = models.TextField(
|
|
179
|
-
verbose_name="If YES, please provide reason for change",
|
|
179
|
+
verbose_name="If YES, please provide reason for change", default="", blank=True
|
|
180
180
|
)
|
|
181
181
|
|
|
182
182
|
# 7c
|
|
@@ -241,7 +241,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
241
241
|
|
|
242
242
|
referral_reason = models.TextField(
|
|
243
243
|
verbose_name="If YES, where are they being referred to",
|
|
244
|
-
|
|
244
|
+
default="",
|
|
245
245
|
blank=True,
|
|
246
246
|
help_text=(
|
|
247
247
|
"Note: remind participant that admission or discharge information "
|
meta_subject/models/glucose.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
from edc_constants.choices import YES_NO
|
|
3
3
|
from edc_constants.constants import NOT_APPLICABLE
|
|
4
|
-
from edc_glucose.
|
|
4
|
+
from edc_glucose.model_mixin_factories import (
|
|
5
5
|
fasting_model_mixin_factory,
|
|
6
6
|
fbg_model_mixin_factory,
|
|
7
7
|
ogtt_model_mixin_factory,
|
|
@@ -22,7 +22,7 @@ class Glucose(
|
|
|
22
22
|
verbose_name="Has the participant fasted?",
|
|
23
23
|
max_length=15,
|
|
24
24
|
choices=YES_NO,
|
|
25
|
-
|
|
25
|
+
default="",
|
|
26
26
|
blank=False,
|
|
27
27
|
help_text="As reported by patient",
|
|
28
28
|
),
|
|
@@ -43,7 +43,7 @@ class Glucose(
|
|
|
43
43
|
)
|
|
44
44
|
|
|
45
45
|
fbg_not_performed_reason = models.CharField(
|
|
46
|
-
verbose_name="If NO, provide reason", max_length=150,
|
|
46
|
+
verbose_name="If NO, provide reason", max_length=150, default="", blank=True
|
|
47
47
|
)
|
|
48
48
|
|
|
49
49
|
ogtt_performed = models.CharField(
|
|
@@ -53,7 +53,7 @@ class Glucose(
|
|
|
53
53
|
)
|
|
54
54
|
|
|
55
55
|
ogtt_not_performed_reason = models.CharField(
|
|
56
|
-
verbose_name="If NO, provide reason", max_length=150,
|
|
56
|
+
verbose_name="If NO, provide reason", max_length=150, default="", blank=True
|
|
57
57
|
)
|
|
58
58
|
|
|
59
59
|
endpoint_today = models.CharField(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
from edc_constants.choices import YES_NO
|
|
3
3
|
from edc_constants.constants import NO
|
|
4
|
-
from edc_glucose.
|
|
4
|
+
from edc_glucose.model_mixin_factories import (
|
|
5
5
|
fasting_model_mixin_factory,
|
|
6
6
|
fbg_model_mixin_factory,
|
|
7
7
|
)
|
|
@@ -26,7 +26,6 @@ class GlucoseFbg(
|
|
|
26
26
|
fbg_model_mixin_factory("fbg"),
|
|
27
27
|
BaseUuidModel,
|
|
28
28
|
):
|
|
29
|
-
|
|
30
29
|
fbg_performed = models.CharField(
|
|
31
30
|
verbose_name="Was the FBG test performed?",
|
|
32
31
|
max_length=15,
|
|
@@ -36,7 +35,7 @@ class GlucoseFbg(
|
|
|
36
35
|
fbg_not_performed_reason = models.CharField(
|
|
37
36
|
verbose_name="If NO, provide reason",
|
|
38
37
|
max_length=150,
|
|
39
|
-
|
|
38
|
+
default="",
|
|
40
39
|
blank=True,
|
|
41
40
|
)
|
|
42
41
|
|
|
@@ -79,17 +79,17 @@ class HealthEconomics(CrfModelMixin, BaseUuidModel):
|
|
|
79
79
|
)
|
|
80
80
|
|
|
81
81
|
is_highest_earner = models.CharField(
|
|
82
|
-
verbose_name=
|
|
82
|
+
verbose_name="Are you the person who earns the highest income in your household?",
|
|
83
83
|
max_length=15,
|
|
84
84
|
choices=YES_NO,
|
|
85
85
|
)
|
|
86
86
|
|
|
87
87
|
highest_earner = models.CharField(
|
|
88
88
|
verbose_name=(
|
|
89
|
-
"If NO, what is the profession of the person
|
|
89
|
+
"If NO, what is the profession of the person who earns the highest income?"
|
|
90
90
|
),
|
|
91
91
|
max_length=50,
|
|
92
|
-
|
|
92
|
+
default="",
|
|
93
93
|
blank=True,
|
|
94
94
|
)
|
|
95
95
|
|
|
@@ -99,7 +99,7 @@ class HealthEconomics(CrfModelMixin, BaseUuidModel):
|
|
|
99
99
|
)
|
|
100
100
|
|
|
101
101
|
accomodation_per_month = models.IntegerField(
|
|
102
|
-
verbose_name=
|
|
102
|
+
verbose_name="How much do you/your family spend on rent and utilities in a month?",
|
|
103
103
|
help_text="in Shilling",
|
|
104
104
|
)
|
|
105
105
|
|
|
@@ -180,7 +180,7 @@ class HealthEconomics(CrfModelMixin, BaseUuidModel):
|
|
|
180
180
|
)
|
|
181
181
|
|
|
182
182
|
expenditure_other_detail = models.TextField(
|
|
183
|
-
verbose_name="If YES, what was the activity",
|
|
183
|
+
verbose_name="If YES, what was the activity", default="", blank=True
|
|
184
184
|
)
|
|
185
185
|
|
|
186
186
|
expenditure_other = models.IntegerField(
|
|
@@ -200,7 +200,7 @@ class HealthEconomics(CrfModelMixin, BaseUuidModel):
|
|
|
200
200
|
)
|
|
201
201
|
|
|
202
202
|
healthcare_expenditure_month = models.IntegerField(
|
|
203
|
-
verbose_name=
|
|
203
|
+
verbose_name="How much in total has been spent on your healthcare in the last month?"
|
|
204
204
|
)
|
|
205
205
|
|
|
206
206
|
routine_activities = models.CharField(
|
|
@@ -210,7 +210,7 @@ class HealthEconomics(CrfModelMixin, BaseUuidModel):
|
|
|
210
210
|
)
|
|
211
211
|
|
|
212
212
|
routine_activities_other = models.CharField(
|
|
213
|
-
verbose_name="If OTHER, please specify", max_length=50,
|
|
213
|
+
verbose_name="If OTHER, please specify", max_length=50, default="", blank=True
|
|
214
214
|
)
|
|
215
215
|
|
|
216
216
|
off_work_days = models.DecimalField(
|
|
@@ -5,7 +5,8 @@ from edc_constants.choices import YES_NO
|
|
|
5
5
|
from edc_constants.constants import NOT_APPLICABLE
|
|
6
6
|
from edc_crf.model_mixins import SingletonCrfModelMixin
|
|
7
7
|
from edc_he.choices import RELATIONSHIP_CHOICES, STATUS
|
|
8
|
-
from edc_he.
|
|
8
|
+
from edc_he.model_mixin_factories import income_model_mixin_factory
|
|
9
|
+
from edc_he.model_mixins import HouseholdModelMixin
|
|
9
10
|
from edc_model.models import BaseUuidModel
|
|
10
11
|
from edc_model_fields.fields import OtherCharField
|
|
11
12
|
|
|
@@ -20,7 +20,7 @@ class HepatitisTest(CrfModelMixin, BaseUuidModel):
|
|
|
20
20
|
verbose_name=mark_safe("<u>HbSAg</u>"), # nosec B308
|
|
21
21
|
max_length=15,
|
|
22
22
|
choices=POS_NEG,
|
|
23
|
-
|
|
23
|
+
default="",
|
|
24
24
|
blank=True,
|
|
25
25
|
)
|
|
26
26
|
|
|
@@ -43,7 +43,7 @@ class HepatitisTest(CrfModelMixin, BaseUuidModel):
|
|
|
43
43
|
verbose_name=mark_safe("<u>HCV</u>"), # nosec B308
|
|
44
44
|
max_length=15,
|
|
45
45
|
choices=POS_NEG,
|
|
46
|
-
|
|
46
|
+
default="",
|
|
47
47
|
blank=True,
|
|
48
48
|
)
|
|
49
49
|
|
|
@@ -45,7 +45,7 @@ class OtherArvRegimensDetail(CrfInlineModelMixin, BaseUuidModel):
|
|
|
45
45
|
blank=True,
|
|
46
46
|
)
|
|
47
47
|
|
|
48
|
-
notes = models.CharField(verbose_name="Notes", max_length=100,
|
|
48
|
+
notes = models.CharField(verbose_name="Notes", max_length=100, default="", blank=True)
|
|
49
49
|
|
|
50
50
|
objects = InlineModelManager()
|
|
51
51
|
on_site = CurrentSiteManager()
|
|
@@ -53,7 +53,7 @@ class PatientHistory(ArvHistoryModelMixin, CrfModelMixin, BaseUuidModel):
|
|
|
53
53
|
verbose_name="Has the patient been diagnosed with dyslipidaemia?",
|
|
54
54
|
max_length=15,
|
|
55
55
|
choices=YES_NO,
|
|
56
|
-
|
|
56
|
+
default="",
|
|
57
57
|
blank=False,
|
|
58
58
|
)
|
|
59
59
|
|
|
@@ -77,7 +77,7 @@ class PatientHistory(ArvHistoryModelMixin, CrfModelMixin, BaseUuidModel):
|
|
|
77
77
|
other_dyslipidaemia_rx = models.CharField(
|
|
78
78
|
verbose_name="What medication is the patient currently taking for dyslipidaemia?",
|
|
79
79
|
max_length=50,
|
|
80
|
-
|
|
80
|
+
default="",
|
|
81
81
|
blank=True,
|
|
82
82
|
)
|
|
83
83
|
|
|
@@ -85,14 +85,14 @@ class PatientHistory(ArvHistoryModelMixin, CrfModelMixin, BaseUuidModel):
|
|
|
85
85
|
concomitant_conditions = models.TextField(
|
|
86
86
|
verbose_name="Does the patient have any other conditions not mentioned above?",
|
|
87
87
|
max_length=250,
|
|
88
|
-
|
|
88
|
+
default="",
|
|
89
89
|
blank=True,
|
|
90
90
|
)
|
|
91
91
|
# PHASE_THREE_ONLY
|
|
92
92
|
concomitant_medications = models.TextField(
|
|
93
93
|
verbose_name="Is the patient taking any concomitant medications?",
|
|
94
94
|
max_length=250,
|
|
95
|
-
|
|
95
|
+
default="",
|
|
96
96
|
blank=True,
|
|
97
97
|
)
|
|
98
98
|
|
|
@@ -129,13 +129,12 @@ class PatientHistory(ArvHistoryModelMixin, CrfModelMixin, BaseUuidModel):
|
|
|
129
129
|
verbose_name=mark_safe( # nosec B308
|
|
130
130
|
"If other symptom in the <u>past year</u>, please specify ..."
|
|
131
131
|
),
|
|
132
|
-
null=True,
|
|
133
132
|
blank=True,
|
|
134
133
|
)
|
|
135
134
|
|
|
136
135
|
dm_in_family = models.CharField(
|
|
137
136
|
verbose_name=(
|
|
138
|
-
"Has anyone in your immediate family
|
|
137
|
+
"Has anyone in your immediate family ever been diagnosed with diabetes?"
|
|
139
138
|
),
|
|
140
139
|
max_length=15,
|
|
141
140
|
choices=YES_NO,
|
|
@@ -25,7 +25,7 @@ class PhysicalExam(
|
|
|
25
25
|
)
|
|
26
26
|
|
|
27
27
|
irregular_heartbeat_description = models.TextField(
|
|
28
|
-
"If the heartbeat is <u>irregular</u>, please describe",
|
|
28
|
+
"If the heartbeat is <u>irregular</u>, please describe", default="", blank=True
|
|
29
29
|
)
|
|
30
30
|
|
|
31
31
|
waist_circumference = models.DecimalField(
|
|
@@ -50,7 +50,7 @@ class PhysicalExam(
|
|
|
50
50
|
|
|
51
51
|
abdominal_tenderness_description = models.TextField(
|
|
52
52
|
verbose_name="If YES, abdominal tenderness, please describe",
|
|
53
|
-
|
|
53
|
+
default="",
|
|
54
54
|
blank=True,
|
|
55
55
|
)
|
|
56
56
|
|
|
@@ -23,7 +23,7 @@ class PregnancyUpdate(CrfModelMixin, BaseUuidModel):
|
|
|
23
23
|
help_text="If yes, please specify below",
|
|
24
24
|
)
|
|
25
25
|
|
|
26
|
-
comment = models.TextField(verbose_name="Comment / Updates",
|
|
26
|
+
comment = models.TextField(verbose_name="Comment / Updates", default="")
|
|
27
27
|
|
|
28
28
|
class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
|
|
29
29
|
verbose_name = "Pregnancy Update"
|
meta_subject/models/signals.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
|
|
1
3
|
from django.apps import apps as django_apps
|
|
2
4
|
from django.core.exceptions import ObjectDoesNotExist
|
|
3
5
|
from django.db.models.signals import post_save, pre_save
|
|
@@ -23,7 +25,7 @@ from .subject_visit import SubjectVisit
|
|
|
23
25
|
sender=StudyMedication,
|
|
24
26
|
dispatch_uid="study_medication_on_pre_save",
|
|
25
27
|
)
|
|
26
|
-
def study_medication_on_pre_save(sender, instance, raw, **kwargs):
|
|
28
|
+
def study_medication_on_pre_save(sender, instance, raw, **kwargs): # noqa: ARG001
|
|
27
29
|
"""Create a prescription if one does not exist
|
|
28
30
|
|
|
29
31
|
All refills are created against the prescription
|
|
@@ -35,7 +37,7 @@ def study_medication_on_pre_save(sender, instance, raw, **kwargs):
|
|
|
35
37
|
subject_consent = get_consent_model_cls().objects.get(
|
|
36
38
|
subject_identifier=instance.subject_visit.subject_identifier,
|
|
37
39
|
)
|
|
38
|
-
|
|
40
|
+
with contextlib.suppress(PrescriptionAlreadyExists):
|
|
39
41
|
create_prescription(
|
|
40
42
|
subject_identifier=subject_consent.subject_identifier,
|
|
41
43
|
report_datetime=subject_consent.consent_datetime,
|
|
@@ -43,8 +45,6 @@ def study_medication_on_pre_save(sender, instance, raw, **kwargs):
|
|
|
43
45
|
medication_names=[METFORMIN],
|
|
44
46
|
site=subject_consent.site,
|
|
45
47
|
)
|
|
46
|
-
except PrescriptionAlreadyExists:
|
|
47
|
-
pass
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
@receiver(
|
|
@@ -53,7 +53,7 @@ def study_medication_on_pre_save(sender, instance, raw, **kwargs):
|
|
|
53
53
|
sender=Delivery,
|
|
54
54
|
dispatch_uid="update_pregnancy_notification_on_delivery_post_save",
|
|
55
55
|
)
|
|
56
|
-
def update_pregnancy_notification_on_delivery_post_save(sender, instance, raw, **kwargs):
|
|
56
|
+
def update_pregnancy_notification_on_delivery_post_save(sender, instance, raw, **kwargs): # noqa: ARG001
|
|
57
57
|
"""Updates PregnancyNotification model instance when the delivery form is submitted.
|
|
58
58
|
|
|
59
59
|
Sets delivered=True and delivery_datetime
|
|
@@ -73,7 +73,7 @@ def update_pregnancy_notification_on_delivery_post_save(sender, instance, raw, *
|
|
|
73
73
|
sender=Delivery,
|
|
74
74
|
dispatch_uid="update_schedule_on_delivery_post_save",
|
|
75
75
|
)
|
|
76
|
-
def update_schedule_on_delivery_post_save(sender, instance, raw, **kwargs):
|
|
76
|
+
def update_schedule_on_delivery_post_save(sender, instance, raw, **kwargs): # noqa: ARG001
|
|
77
77
|
"""Takes a participant off the SCHEDULE_PREGNANCY schedule when
|
|
78
78
|
delivery model is submitted.
|
|
79
79
|
|
|
@@ -97,10 +97,8 @@ def update_schedule_on_delivery_post_save(sender, instance, raw, **kwargs):
|
|
|
97
97
|
delivery = Delivery.objects.get(
|
|
98
98
|
subject_visit__subject_identifier=instance.subject_identifier,
|
|
99
99
|
)
|
|
100
|
-
offschedule_datetime = (
|
|
101
|
-
delivery.delivery_datetime
|
|
102
|
-
if delivery.delivery_datetime > last_subject_visit.report_datetime
|
|
103
|
-
else last_subject_visit.report_datetime
|
|
100
|
+
offschedule_datetime = max(
|
|
101
|
+
last_subject_visit.report_datetime, delivery.delivery_datetime
|
|
104
102
|
)
|
|
105
103
|
offschedule_model_cls.objects.create(
|
|
106
104
|
subject_identifier=instance.subject_identifier,
|
|
@@ -114,10 +112,14 @@ def update_schedule_on_delivery_post_save(sender, instance, raw, **kwargs):
|
|
|
114
112
|
dispatch_uid="update_glucose_endpoints_for_subject_on_post_save",
|
|
115
113
|
)
|
|
116
114
|
def update_glucose_endpoints_for_subject_on_post_save(
|
|
117
|
-
sender,
|
|
115
|
+
sender,
|
|
116
|
+
instance,
|
|
117
|
+
raw,
|
|
118
|
+
update_fields,
|
|
119
|
+
**kwargs, # noqa: ARG001
|
|
118
120
|
):
|
|
119
121
|
if not raw and not update_fields and sender in [Glucose, GlucoseFbg]:
|
|
120
|
-
from meta_analytics.dataframes import GlucoseEndpointsByDate
|
|
122
|
+
from meta_analytics.dataframes import GlucoseEndpointsByDate # noqa: PLC0415
|
|
121
123
|
|
|
122
124
|
cls = GlucoseEndpointsByDate(
|
|
123
125
|
subject_identifiers=[instance.subject_visit.subject_identifier]
|
|
@@ -14,7 +14,7 @@ class UrineDipstickTest(CrfModelMixin, edc_models.BaseUuidModel):
|
|
|
14
14
|
)
|
|
15
15
|
|
|
16
16
|
not_performed_reason = models.CharField(
|
|
17
|
-
verbose_name="If NO, provide reason", max_length=150,
|
|
17
|
+
verbose_name="If NO, provide reason", max_length=150, default="", blank=True
|
|
18
18
|
)
|
|
19
19
|
|
|
20
20
|
ketones = models.CharField(
|