meta-edc 0.3.39__py3-none-any.whl → 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- meta_ae/action_items.py +38 -27
- meta_ae/admin/__init__.py +11 -0
- meta_ae/admin/ae_initial_admin.py +5 -2
- meta_ae/admin/ae_susar_admin.py +1 -1
- meta_ae/admin/death_report_admin.py +1 -1
- meta_ae/admin/modeladmin_mixins.py +14 -15
- meta_ae/baker_recipes.py +4 -6
- meta_ae/choices.py +1 -1
- meta_ae/forms/__init__.py +13 -0
- meta_ae/forms/death_report_form.py +1 -1
- meta_ae/forms/modelform_mixins.py +2 -2
- meta_ae/list_data.py +1 -1
- meta_ae/migrations/0001_initial.py +27 -27
- meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
- meta_ae/migrations/0017_auto_20221130_2257.py +1 -1
- 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_ae/templatetags/meta_ae_extras.py +4 -6
- meta_analytics/.DS_Store +0 -0
- meta_analytics/README.rst +1 -2
- meta_analytics/dataframes/__init__.py +27 -0
- meta_analytics/dataframes/constants.py +5 -2
- meta_analytics/dataframes/get_eos_df.py +16 -4
- meta_analytics/dataframes/get_glucose_df.py +166 -0
- meta_analytics/dataframes/get_glucose_fbg_df.py +26 -0
- meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +21 -0
- meta_analytics/dataframes/get_last_imp_visits_df.py +12 -10
- meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
- meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +125 -124
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +111 -235
- 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 +9 -15
- meta_analytics/dataframes/utils.py +21 -12
- meta_analytics/get_tables.py +1 -2
- meta_analytics/tables/__init__.py +2 -0
- meta_analytics/tables/enrolled/glucose.py +2 -1
- meta_analytics/utils.py +81 -0
- meta_auth/auths.py +1 -1
- meta_consent/action_items.py +22 -3
- meta_consent/admin/__init__.py +7 -0
- meta_consent/admin/actions/__init__.py +2 -0
- meta_consent/admin/actions/create_missing_prescriptions.py +2 -2
- meta_consent/admin/list_filters.py +22 -0
- meta_consent/admin/modeladmin_mixins.py +4 -5
- meta_consent/admin/subject_consent_v1_ext_admin.py +93 -0
- meta_consent/baker_recipes.py +7 -7
- meta_consent/consents.py +15 -2
- meta_consent/constants.py +1 -0
- meta_consent/form_validators/__init__.py +2 -0
- meta_consent/forms/__init__.py +8 -0
- meta_consent/forms/subject_consent_v1_ext_form.py +47 -0
- meta_consent/forms/subject_reconsent_form.py +4 -4
- meta_consent/management/commands/create_missing_prescriptions.py +5 -3
- meta_consent/migrations/0001_initial.py +9 -9
- meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
- meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +535 -0
- meta_consent/migrations/0027_auto_20250111_0344.py +30 -0
- meta_consent/migrations/0028_historicalsubjectconsentv1ext_assessment_score_and_more.py +162 -0
- meta_consent/migrations/0029_alter_historicalsubjectconsentv1ext_agrees_to_extension_and_more.py +33 -0
- meta_consent/migrations/0030_auto_20250120_2114.py +40 -0
- meta_consent/migrations/0031_alter_historicalsubjectconsent_guardian_name_and_more.py +124 -0
- meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
- meta_consent/migrations/0033_historicalsubjectconsentspfq_subjectconsentspfq.py +615 -0
- meta_consent/migrations/0034_remove_subjectconsentspfq_site_and_more.py +23 -0
- meta_consent/migrations/0035_alter_historicalsubjectconsent_consent_definition_name_and_more.py +43 -0
- meta_consent/models/__init__.py +10 -0
- meta_consent/models/model_mixins.py +1 -2
- meta_consent/models/signals.py +25 -11
- meta_consent/models/subject_consent.py +2 -2
- meta_consent/models/subject_consent_v1.py +0 -1
- meta_consent/models/subject_consent_v1_ext.py +34 -0
- meta_consent/models/subject_reconsent.py +4 -4
- meta_dashboard/navbars.py +2 -6
- meta_dashboard/patterns.py +1 -1
- meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/eligibility_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/screening_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/subject/dashboard/sidebar.html +24 -0
- meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/top_bar.html +1 -1
- meta_dashboard/templates/meta_dashboard/subject/dashboard.html +14 -0
- meta_dashboard/templatetags/meta_dashboard_extras.py +9 -14
- meta_dashboard/urls.py +5 -5
- meta_dashboard/view_utils/__init__.py +13 -0
- meta_dashboard/view_utils/subject_screening_button.py +13 -20
- 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/screening/listboard_view.py +2 -3
- 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 +19 -8
- meta_dashboard/views/subject/listboard/__init__.py +2 -0
- meta_dashboard/views/subject/listboard/listboard_view.py +2 -3
- meta_edc/__init__.py +5 -9
- meta_edc/admin.py +3 -4
- meta_edc/celery.py +2 -2
- meta_edc/celery_live.py +19 -0
- meta_edc/celery_uat.py +25 -0
- meta_edc/management/commands/update_forms_reference.py +16 -14
- meta_edc/meta_version.py +2 -2
- meta_edc/navbars.py +7 -5
- meta_edc/settings/debug.py +13 -4
- meta_edc/settings/defaults.py +55 -18
- meta_edc/settings/live.py +4 -1
- meta_edc/settings/logging.py +9 -4
- meta_edc/settings/minimal.py +4 -5
- meta_edc/settings/uat.py +3 -1
- meta_edc/templates/meta_edc/{bootstrap3/base.html → base.html} +1 -1
- meta_edc/templates/meta_edc/{bootstrap3/home.html → home.html} +2 -2
- meta_edc/urls.py +3 -1
- meta_edc/utils.py +3 -1
- meta_edc/views/__init__.py +2 -0
- meta_edc/views/home_view.py +1 -2
- meta_edc-1.4.0.dist-info/METADATA +174 -0
- {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info}/RECORD +578 -586
- meta_edc-1.4.0.dist-info/WHEEL +4 -0
- meta_labs/list_data.py +2 -2
- meta_labs/reportables.py +80 -11
- meta_lists/list_data.py +13 -4
- meta_lists/migrations/0008_auto_20200528_1517.py +2 -2
- meta_lists/migrations/0019_auto_20250128_0143.py +48 -0
- meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
- meta_pharmacy/admin/__init__.py +5 -0
- meta_pharmacy/admin/rx_admin.py +1 -0
- meta_pharmacy/admin/substitutions_admin.py +3 -3
- meta_pharmacy/constants.py +1 -1
- meta_pharmacy/forms/__init__.py +2 -0
- meta_pharmacy/forms/rx_form.py +0 -1
- meta_pharmacy/forms/substitutions_form.py +6 -4
- meta_pharmacy/labels/__init__.py +5 -2
- meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +4 -1
- 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/management/commands/update_initial_pharmacy_data.py +4 -3
- 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/rx_label.py +0 -1
- meta_pharmacy/models/substitutions.py +4 -4
- 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/action_items.py +44 -45
- meta_prn/admin/__init__.py +16 -0
- meta_prn/admin/dm_referral_admin.py +2 -1
- meta_prn/admin/end_of_study_admin.py +26 -15
- 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 +12 -11
- meta_prn/admin/offschedule_dm_referral_admin.py +11 -10
- meta_prn/admin/offschedule_postnatal_admin.py +15 -7
- meta_prn/admin/offschedule_pregnancy_admin.py +18 -9
- meta_prn/admin/onschedule_admin.py +7 -8
- meta_prn/admin/onschedule_dm_referral_admin.py +11 -12
- 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 +10 -10
- meta_prn/choices.py +11 -7
- meta_prn/constants.py +1 -0
- meta_prn/form_validators/__init__.py +5 -0
- meta_prn/form_validators/end_of_study.py +65 -20
- meta_prn/form_validators/protocol_incident.py +1 -1
- meta_prn/forms/__init__.py +13 -0
- meta_prn/forms/dm_referral_form.py +2 -8
- meta_prn/forms/end_of_study_form.py +1 -1
- meta_prn/forms/loss_to_followup_form.py +1 -1
- meta_prn/forms/off_study_medication_form.py +2 -2
- meta_prn/forms/offschedule_form.py +25 -0
- meta_prn/forms/pregnancy_notification_form.py +15 -17
- meta_prn/list_data.py +3 -3
- 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/0034_auto_20220630_1110.py +1 -1
- meta_prn/migrations/0035_auto_20220630_1140.py +1 -1
- 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/0060_alter_onschedule_managers_and_more.py +55 -0
- meta_prn/migrations/0061_auto_20250115_2025.py +56 -0
- meta_prn/migrations/0062_alter_endofstudy_offstudy_reason_and_more.py +72 -0
- meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/migrations/0064_auto_20250602_2143.py +18 -0
- meta_prn/migrations/0065_alter_historicaloffstudymedication_subject_identifier_and_more.py +23 -0
- meta_prn/migrations/0066_alter_historicallosstofollowup_subject_identifier_and_more.py +23 -0
- meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
- meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
- meta_prn/migrations/0069_alter_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/models/__init__.py +20 -0
- meta_prn/models/dm_referral.py +2 -2
- meta_prn/models/end_of_study.py +28 -23
- meta_prn/models/loss_to_followup.py +8 -10
- meta_prn/models/off_study_medication.py +7 -4
- meta_prn/models/offschedule.py +4 -4
- meta_prn/models/pregnancy_notification.py +3 -5
- meta_prn/models/protocol_incident.py +5 -2
- meta_prn/models/signals.py +16 -14
- meta_prn/models/subject_transfer.py +7 -0
- meta_prn/templates/meta_prn/eos/additional_instructions.html +3 -0
- meta_prn/templates/meta_prn/offschedule/additional_instructions.html +2 -0
- meta_rando/migrations/0001_initial.py +5 -5
- meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
- meta_rando/migrations/0007_spfqlist.py +197 -0
- meta_rando/migrations/0008_delete_spfqlist.py +16 -0
- meta_rando/models/__init__.py +1 -0
- meta_rando/{models.py → models/randomization_list.py} +3 -3
- meta_rando/randomizers.py +2 -2
- 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 +7 -7
- meta_reports/admin/dbviews/imp_substitutions_admin.py +14 -13
- 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 +7 -7
- 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/on_study_missing_values_admin/unmanaged_model_admin.py +0 -1
- meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +9 -9
- 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/endpoints_all_admin.py +0 -1
- meta_reports/admin/last_imp_refill_admin.py +33 -36
- meta_reports/admin/list_filters.py +3 -3
- meta_reports/admin/modeladmin_mixins.py +10 -17
- meta_reports/death_report.py +2 -2
- meta_reports/forms/__init__.py +2 -0
- meta_reports/forms/missing_ogtt_note_form.py +3 -4
- meta_reports/management/commands/generate_endpoints.py +5 -4
- meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
- meta_reports/migrations/0054_auto_20250422_2003.py +81 -0
- meta_reports/migrations/0055_alter_glucosesummary_table.py +17 -0
- meta_reports/migrations/0056_auto_20250422_2214.py +54 -0
- meta_reports/migrations/0057_auto_20250422_2224.py +54 -0
- meta_reports/migrations/0058_auto_20250422_2232.py +54 -0
- meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
- meta_reports/migrations/0060_auto_20250926_0242.py +366 -0
- meta_reports/migrations/0061_auto_20251004_0043.py +21 -0
- meta_reports/migrations/0062_auto_20251004_0106.py +21 -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 +15 -3
- meta_reports/models/dbviews/glucose_summary/view_definition.py +8 -5
- meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
- meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +1 -2
- 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 +2 -2
- 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_lab_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +19 -1
- meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +0 -1
- meta_reports/models/endpoints.py +8 -4
- meta_reports/models/last_imp_refill.py +2 -3
- meta_reports/pdf_report.py +2 -2
- meta_reports/tasks.py +4 -3
- meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -1
- meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/endpoints_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/last_imp_refill/changelist_note.html +13 -0
- meta_screening/admin/__init__.py +8 -0
- meta_screening/admin/fieldsets.py +13 -15
- meta_screening/admin/list_filters.py +7 -5
- meta_screening/admin/screening_part_one_admin.py +1 -3
- 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 +21 -10
- meta_screening/baker_recipes.py +18 -10
- meta_screening/calculators.py +1 -1
- meta_screening/choices.py +1 -1
- meta_screening/constants.py +1 -1
- meta_screening/eligibility/__init__.py +9 -0
- meta_screening/eligibility/eligibility.py +21 -14
- meta_screening/eligibility/eligibility_part_one.py +1 -1
- meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
- meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +68 -49
- meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +14 -15
- meta_screening/eligibility/eligibility_part_two.py +1 -1
- meta_screening/form_validators/__init__.py +8 -0
- meta_screening/form_validators/screening_part_one.py +1 -1
- meta_screening/form_validators/screening_part_three.py +6 -2
- meta_screening/form_validators/screening_part_two.py +1 -1
- meta_screening/form_validators/subject_refusal.py +1 -1
- meta_screening/forms/__init__.py +20 -0
- meta_screening/forms/field_lists.py +16 -18
- 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/0012_auto_20191107_0427.py +1 -1
- 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/calculated_model_mixin.py +2 -2
- meta_screening/model_mixins/creatinine_fields_model_mixin.py +1 -1
- meta_screening/model_mixins/eligibility_model_mixin.py +6 -4
- meta_screening/model_mixins/part_one_fields_model_mixin.py +16 -19
- meta_screening/model_mixins/part_three_fields_model_mixin.py +6 -7
- meta_screening/model_mixins/part_two_fields_model_mixin.py +19 -17
- meta_screening/models/__init__.py +9 -0
- meta_screening/models/icp_referral.py +5 -5
- meta_screening/models/proxy_models.py +1 -1
- meta_screening/models/signals.py +10 -11
- meta_screening/models/subject_refusal.py +1 -1
- meta_screening/models/subject_screening.py +2 -4
- meta_subject/action_items.py +18 -14
- meta_subject/admin/__init__.py +42 -0
- meta_subject/admin/birth_outcome_admin.py +7 -9
- 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 +8 -11
- 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/fields.py +5 -5
- meta_subject/admin/fieldsets.py +5 -5
- meta_subject/admin/followup_examination_admin.py +11 -9
- meta_subject/admin/followup_vitals_admin.py +31 -6
- meta_subject/admin/glucose_admin.py +4 -8
- meta_subject/admin/glucose_fbg_admin.py +18 -11
- 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/hiv_exit_review_admin.py +55 -0
- meta_subject/admin/list_filters.py +5 -5
- meta_subject/admin/mnsi_admin.py +7 -5
- meta_subject/admin/next_appointment_admin.py +19 -0
- 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 +2 -2
- 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/choices.py +4 -3
- meta_subject/form_validators/__init__.py +15 -0
- meta_subject/form_validators/delivery_form_validator.py +3 -3
- meta_subject/form_validators/dm_endpoint_form_validator.py +3 -1
- meta_subject/form_validators/dm_followup_form_validator.py +8 -7
- meta_subject/form_validators/egfr_drop_notification_form_validator.py +1 -1
- meta_subject/form_validators/followup_examination_form_validator.py +1 -1
- meta_subject/form_validators/glucose_fbg_form_validator.py +76 -0
- meta_subject/form_validators/glucose_form_validator.py +10 -67
- meta_subject/form_validators/hiv_exit_review_form_validator.py +18 -0
- meta_subject/form_validators/mixins.py +95 -0
- meta_subject/forms/__init__.py +44 -0
- meta_subject/forms/blood_results/__init__.py +9 -0
- meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -1
- meta_subject/forms/blood_results/blood_results_rft_form.py +60 -4
- meta_subject/forms/delivery_form.py +2 -0
- 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 +27 -1
- meta_subject/forms/glucose_fbg_form.py +1 -46
- meta_subject/forms/health_economics/__init__.py +2 -0
- meta_subject/forms/hepatitis_test_form.py +1 -1
- meta_subject/forms/hiv_exit_review_form.py +13 -0
- meta_subject/forms/mixins.py +1 -1
- meta_subject/forms/next_appointment_form.py +36 -0
- meta_subject/forms/other_arv_regimens_form.py +1 -1
- meta_subject/forms/patient_history_form.py +1 -1
- meta_subject/forms/physical_exam_form.py +1 -1
- meta_subject/forms/pregnancy_update_form.py +1 -1
- meta_subject/forms/slider_widget.py +1 -1
- meta_subject/forms/study_medication_form.py +18 -12
- meta_subject/forms/subject_requisition_form.py +1 -1
- meta_subject/forms/subject_visit_missed_form.py +1 -1
- meta_subject/forms/urine_dipstick_test_form.py +1 -1
- meta_subject/forms/urine_pregnancy_form.py +1 -1
- meta_subject/management/commands/create_missing_refills.py +3 -3
- meta_subject/management/commands/create_missing_rx.py +2 -2
- meta_subject/management/commands/missed.py +20 -23
- meta_subject/metadata_rules/__init__.py +2 -0
- meta_subject/metadata_rules/metadata_rules.py +14 -0
- meta_subject/metadata_rules/predicates.py +44 -25
- 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/0107_auto_20220415_0043.py +1 -1
- meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
- meta_subject/migrations/0128_auto_20220720_0055.py +1 -1
- meta_subject/migrations/0131_auto_20220722_0411.py +1 -1
- meta_subject/migrations/0135_auto_20220722_2212.py +2 -1
- 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/0199_auto_20240516_0247.py +1 -1
- meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
- meta_subject/migrations/0212_auto_20240827_2222.py +1 -1
- meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +553 -0
- meta_subject/migrations/0217_alter_historicalnextappointment_appt_datetime_and_more.py +42 -0
- meta_subject/migrations/0218_alter_historicalnextappointment_appt_date_and_more.py +53 -0
- meta_subject/migrations/0219_remove_historicalnextappointment_allow_create_interim_and_more.py +92 -0
- meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +825 -0
- meta_subject/migrations/0221_auto_20250402_1913.py +42 -0
- meta_subject/migrations/0222_alter_historicalstudymedication_stock_codes_and_more.py +46 -0
- meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py +83 -0
- meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py +153 -0
- meta_subject/migrations/0225_followupvitals_waist_circumference_and_more.py +46 -0
- meta_subject/migrations/0226_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +2518 -0
- meta_subject/migrations/0229_alter_glucosefbg_consent_model_and_more.py +1918 -0
- meta_subject/migrations/0230_alter_historicaldelivery_action_identifier_and_more.py +1733 -0
- meta_subject/migrations/0231_alter_historicalmedicationadherence_consent_model_and_more.py +2054 -0
- meta_subject/migrations/0232_alter_patienthistory_concomitant_conditions_and_more.py +1170 -0
- meta_subject/migrations/0233_historicalspfq_spfq.py +1066 -0
- meta_subject/migrations/0234_remove_spfq_site_remove_spfq_subject_visit_and_more.py +27 -0
- meta_subject/migrations/0235_glucosefbg_endpoint_today_and_more.py +606 -0
- meta_subject/migrations/0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more.py +58 -0
- meta_subject/migrations/0237_historicalhivexitreview_singleton_field_and_more.py +68 -0
- meta_subject/migrations/0238_historicalhivexitreview_available_and_more.py +88 -0
- meta_subject/model_mixins/__init__.py +10 -0
- meta_subject/model_mixins/arv_history_model_mixin.py +3 -44
- meta_subject/model_mixins/arv_review_model_mixin.py +53 -0
- meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
- meta_subject/model_mixins/vitals_fields_model_mixin.py +33 -0
- meta_subject/models/__init__.py +52 -0
- meta_subject/models/birth_outcomes.py +3 -3
- meta_subject/models/blood_results/__init__.py +11 -0
- meta_subject/models/blood_results/blood_results_glu.py +29 -0
- meta_subject/models/blood_results/blood_results_hba1c.py +0 -1
- meta_subject/models/blood_results/blood_results_ins.py +0 -1
- meta_subject/models/blood_results/blood_results_lft.py +0 -1
- meta_subject/models/delivery.py +4 -6
- meta_subject/models/diabetes/__init__.py +2 -0
- meta_subject/models/diabetes/dm_endpoint.py +5 -5
- meta_subject/models/diabetes/dm_followup.py +7 -8
- meta_subject/models/diet_and_lifestyle.py +2 -2
- meta_subject/models/followup_examination.py +12 -14
- meta_subject/models/glucose.py +5 -5
- meta_subject/models/glucose_fbg.py +17 -4
- meta_subject/models/health_economics/__init__.py +2 -0
- meta_subject/models/health_economics/health_economics.py +8 -8
- meta_subject/models/health_economics/health_economics_simple.py +2 -2
- meta_subject/models/health_economics/health_economics_update.py +3 -2
- meta_subject/models/hepatitis_test.py +2 -2
- meta_subject/models/hiv_exit_review.py +44 -0
- meta_subject/models/next_appointment.py +15 -0
- meta_subject/models/other_arv_regimens_detail.py +1 -1
- meta_subject/models/patient_history.py +6 -7
- meta_subject/models/physical_exam.py +2 -2
- meta_subject/models/pregnancy_update.py +1 -1
- meta_subject/models/signals.py +15 -13
- meta_subject/models/subject_visit.py +2 -2
- meta_subject/models/todo.txt +1 -1
- meta_subject/models/urine_dipstick_test.py +2 -2
- meta_subject/models/urine_pregnancy.py +1 -1
- meta_subject/static/meta_subject/slider.css +1 -1
- meta_subject/templates/meta_subject/endpoint_review_instructions.html +1 -1
- meta_subject/templates/meta_subject/widgets/slider.html +0 -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/crfs.py +34 -1
- meta_visit_schedule/visit_schedules/phase_three/schedule.py +4 -4
- meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +2 -3
- meta_ae/tests/holidays.csv +0 -15
- meta_ae/tests/tests/test_actions.py +0 -127
- meta_ae/tests/urls.py +0 -10
- meta_analytics/dataframes/enrolled/__init__.py +0 -1
- meta_analytics/dataframes/enrolled/get_glucose_df.py +0 -122
- 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/templates/meta_dashboard/bootstrap3/subject/dashboard.html +0 -11
- 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 -554
- meta_edc-0.3.39.dist-info/AUTHORS +0 -0
- meta_edc-0.3.39.dist-info/METADATA +0 -766
- meta_edc-0.3.39.dist-info/WHEEL +0 -5
- meta_edc-0.3.39.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 -16
- meta_labs/tests/urls.py +0 -4
- meta_lists/tests/__init__.py +0 -0
- meta_lists/tests/test_lists.py +0 -8
- meta_pharmacy/admin/actions.py +0 -38
- 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 -206
- 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 -216
- meta_screening/tests/options.py +0 -127
- meta_screening/tests/tests/__init__.py +0 -0
- meta_screening/tests/tests/test_forms.py +0 -397
- meta_screening/tests/tests/test_screening_part_one.py +0 -108
- meta_screening/tests/tests/test_screening_part_three.py +0 -436
- 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 -75
- meta_subject/tests/tests/test_metadata_rules.py +0 -135
- meta_subject/tests/tests/test_mnsi.py +0 -317
- 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 -173
- meta_subject/tests/tests/test_study_medication.py +0 -230
- 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 -186
- /meta_ae/templates/meta_ae/{bootstrap3/ae_initial_description.html → aeinitial_description.html} +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/add_consent_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/dashboard_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/refusal_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/screening → screening}/listboard.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/listboard.html +0 -0
- {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.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 .eligibility_model_mixin import EligibilityModelMixin
|
|
|
3
3
|
from .part_one_fields_model_mixin import PartOneFieldsModelMixin
|
|
4
4
|
from .part_three_fields_model_mixin import PartThreeFieldsModelMixin
|
|
5
5
|
from .part_two_fields_model_mixin import PartTwoFieldsModelMixin
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"CalculatedModelMixin",
|
|
9
|
+
"EligibilityModelMixin",
|
|
10
|
+
"PartOneFieldsModelMixin",
|
|
11
|
+
"PartThreeFieldsModelMixin",
|
|
12
|
+
"PartTwoFieldsModelMixin",
|
|
13
|
+
]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import MILLIMOLES_PER_LITER, TBD
|
|
1
2
|
from django.db import models
|
|
2
3
|
from edc_constants.choices import YES_NO_TBD
|
|
3
|
-
from
|
|
4
|
-
from edc_reportable.units import MICROMOLES_PER_LITER_DISPLAY, MILLIMOLES_PER_LITER
|
|
4
|
+
from edc_reportable.units import MICROMOLES_PER_LITER_DISPLAY
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class CalculatedModelMixin(models.Model):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
from clinicedc_constants import TBD
|
|
1
2
|
from django.db import models
|
|
2
3
|
from edc_constants.choices import YES_NO_TBD
|
|
3
|
-
from edc_constants.constants import TBD
|
|
4
4
|
from edc_screening.model_mixins import (
|
|
5
5
|
EligibilityModelMixin as BaseEligibilityModelMixin,
|
|
6
6
|
)
|
|
@@ -19,7 +19,7 @@ class EligibilityModelMixin(BaseEligibilityModelMixin):
|
|
|
19
19
|
help_text="system calculated value",
|
|
20
20
|
)
|
|
21
21
|
|
|
22
|
-
reasons_ineligible_part_one = models.TextField(max_length=150,
|
|
22
|
+
reasons_ineligible_part_one = models.TextField(max_length=150, default="", editable=False)
|
|
23
23
|
|
|
24
24
|
eligible_part_two = models.CharField(
|
|
25
25
|
max_length=15,
|
|
@@ -29,7 +29,7 @@ class EligibilityModelMixin(BaseEligibilityModelMixin):
|
|
|
29
29
|
help_text="system calculated value",
|
|
30
30
|
)
|
|
31
31
|
|
|
32
|
-
reasons_ineligible_part_two = models.TextField(max_length=150,
|
|
32
|
+
reasons_ineligible_part_two = models.TextField(max_length=150, default="", editable=False)
|
|
33
33
|
|
|
34
34
|
eligible_part_three = models.CharField(
|
|
35
35
|
max_length=15,
|
|
@@ -39,7 +39,9 @@ class EligibilityModelMixin(BaseEligibilityModelMixin):
|
|
|
39
39
|
help_text="system calculated value",
|
|
40
40
|
)
|
|
41
41
|
|
|
42
|
-
reasons_ineligible_part_three = models.TextField(
|
|
42
|
+
reasons_ineligible_part_three = models.TextField(
|
|
43
|
+
max_length=150, default="", editable=False
|
|
44
|
+
)
|
|
43
45
|
|
|
44
46
|
def get_report_datetime_for_eligibility_datetime(self):
|
|
45
47
|
return self.part_three_report_datetime
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import YES
|
|
1
2
|
from django.db import models
|
|
2
|
-
from django.utils.html import format_html
|
|
3
3
|
from django.utils.safestring import mark_safe
|
|
4
4
|
from django_crypto_fields.fields import EncryptedCharField
|
|
5
5
|
from edc_constants.choices import SELECTION_METHOD, YES_NO, YES_NO_NA, YESDEFAULT_NO
|
|
6
|
-
from edc_constants.constants import YES
|
|
7
6
|
|
|
8
7
|
from ..choices import ETHNICITY
|
|
9
8
|
from ..constants import PREG_YES_NO_NA
|
|
@@ -11,10 +10,10 @@ from ..constants import PREG_YES_NO_NA
|
|
|
11
10
|
|
|
12
11
|
class PartOneFieldsModelMixin(models.Model):
|
|
13
12
|
screening_consent = models.CharField(
|
|
14
|
-
verbose_name=
|
|
13
|
+
verbose_name=mark_safe(
|
|
15
14
|
"Has the subject given his/her verbal consent to be screened for "
|
|
16
15
|
"the <u>META Phase 3</u> trial?"
|
|
17
|
-
),
|
|
16
|
+
), # nosec B308
|
|
18
17
|
max_length=15,
|
|
19
18
|
choices=YES_NO,
|
|
20
19
|
)
|
|
@@ -26,10 +25,10 @@ class PartOneFieldsModelMixin(models.Model):
|
|
|
26
25
|
)
|
|
27
26
|
|
|
28
27
|
meta_phase_two = models.CharField(
|
|
29
|
-
verbose_name=
|
|
28
|
+
verbose_name=mark_safe("Was the subject enrolled in the <u>META Phase 2</u> trial?"), # nosec B308
|
|
30
29
|
max_length=15,
|
|
31
30
|
choices=YES_NO,
|
|
32
|
-
|
|
31
|
+
default="",
|
|
33
32
|
blank=False,
|
|
34
33
|
)
|
|
35
34
|
|
|
@@ -44,9 +43,9 @@ class PartOneFieldsModelMixin(models.Model):
|
|
|
44
43
|
)
|
|
45
44
|
|
|
46
45
|
art_six_months = models.CharField(
|
|
47
|
-
verbose_name=
|
|
46
|
+
verbose_name=mark_safe(
|
|
48
47
|
"Has the patient been on anti-retroviral therapy for <u>at least 6 months</u>"
|
|
49
|
-
),
|
|
48
|
+
), # nosec B308
|
|
50
49
|
max_length=15,
|
|
51
50
|
choices=YES_NO_NA,
|
|
52
51
|
)
|
|
@@ -59,10 +58,10 @@ class PartOneFieldsModelMixin(models.Model):
|
|
|
59
58
|
)
|
|
60
59
|
|
|
61
60
|
vl_undetectable = models.CharField(
|
|
62
|
-
verbose_name=
|
|
61
|
+
verbose_name=mark_safe(
|
|
63
62
|
"Does the patient have a viral load measure of less than 1000 copies per ml "
|
|
64
63
|
"taken <u>within the last 12 months</u>"
|
|
65
|
-
),
|
|
64
|
+
), # nosec B308
|
|
66
65
|
max_length=15,
|
|
67
66
|
choices=YES_NO_NA,
|
|
68
67
|
)
|
|
@@ -79,20 +78,20 @@ class PartOneFieldsModelMixin(models.Model):
|
|
|
79
78
|
),
|
|
80
79
|
max_length=15,
|
|
81
80
|
choices=YES_NO,
|
|
82
|
-
|
|
81
|
+
default="",
|
|
83
82
|
blank=False,
|
|
84
83
|
help_text="META PHASE_TWO ONLY",
|
|
85
84
|
editable=False,
|
|
86
85
|
)
|
|
87
86
|
|
|
88
87
|
staying_nearby_12 = models.CharField(
|
|
89
|
-
verbose_name=
|
|
88
|
+
verbose_name=mark_safe(
|
|
90
89
|
"Is the patient planning to remain in the catchment area "
|
|
91
90
|
"for <u>at least 12 months</u>"
|
|
92
|
-
),
|
|
91
|
+
), # nosec B308
|
|
93
92
|
max_length=15,
|
|
94
93
|
choices=YES_NO,
|
|
95
|
-
|
|
94
|
+
default="",
|
|
96
95
|
blank=False,
|
|
97
96
|
)
|
|
98
97
|
|
|
@@ -101,18 +100,16 @@ class PartOneFieldsModelMixin(models.Model):
|
|
|
101
100
|
)
|
|
102
101
|
|
|
103
102
|
continue_part_two = models.CharField(
|
|
104
|
-
verbose_name=mark_safe( # nosec B308
|
|
105
|
-
"Continue with <U>part two</U> of the screening process?"
|
|
106
|
-
),
|
|
103
|
+
verbose_name=mark_safe("Continue with <U>part two</U> of the screening process?"), # nosec B308
|
|
107
104
|
max_length=15,
|
|
108
105
|
choices=YESDEFAULT_NO,
|
|
109
106
|
default=YES,
|
|
110
|
-
help_text=mark_safe(
|
|
107
|
+
help_text=mark_safe(
|
|
111
108
|
"<B>Important</B>: This response will be be automatically "
|
|
112
109
|
"set to YES if:<BR><BR>"
|
|
113
110
|
"- the participant meets the eligibility criteria for part one, or;<BR><BR>"
|
|
114
111
|
"- the eligibility criteria for part two is already complete.<BR>"
|
|
115
|
-
),
|
|
112
|
+
), # nosec B308
|
|
116
113
|
)
|
|
117
114
|
|
|
118
115
|
class Meta:
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.contrib import admin
|
|
2
3
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
3
4
|
from django.db import models
|
|
4
5
|
from edc_constants.choices import NO, YES_NO, YES_NO_PENDING_NA_GLUCOSE_SCREENING
|
|
5
|
-
from
|
|
6
|
-
from edc_glucose.model_mixins import (
|
|
6
|
+
from edc_glucose.model_mixin_factories import (
|
|
7
7
|
fasting_model_mixin_factory,
|
|
8
8
|
fbg_model_mixin_factory,
|
|
9
9
|
ogtt_model_mixin_factory,
|
|
@@ -94,14 +94,13 @@ class PartThreeFieldsModelMixin(
|
|
|
94
94
|
):
|
|
95
95
|
repeat_glucose_opinion = models.CharField(
|
|
96
96
|
verbose_name=(
|
|
97
|
-
"In opinion of the clinician,
|
|
97
|
+
"In opinion of the clinician, should the glucose measurements be repeated?"
|
|
98
98
|
),
|
|
99
99
|
max_length=15,
|
|
100
100
|
choices=YES_NO,
|
|
101
101
|
default=NO,
|
|
102
102
|
help_text=(
|
|
103
|
-
"If repeated, must be at least 3 days "
|
|
104
|
-
"after the first glucose measures (FBG, OGTT)"
|
|
103
|
+
"If repeated, must be at least 3 days after the first glucose measures (FBG, OGTT)"
|
|
105
104
|
),
|
|
106
105
|
)
|
|
107
106
|
|
|
@@ -124,7 +123,7 @@ class PartThreeFieldsModelMixin(
|
|
|
124
123
|
verbose_name="Units (creatinine)",
|
|
125
124
|
max_length=15,
|
|
126
125
|
choices=SERUM_CREATININE_UNITS,
|
|
127
|
-
|
|
126
|
+
default="",
|
|
128
127
|
blank=True,
|
|
129
128
|
)
|
|
130
129
|
|
|
@@ -180,5 +179,5 @@ class PartThreeFieldsModelMixin(
|
|
|
180
179
|
def p3_repeat_appt(self):
|
|
181
180
|
return self.repeat_appt_datetime
|
|
182
181
|
|
|
183
|
-
class Meta:
|
|
182
|
+
class Meta: # noqa: DJ012
|
|
184
183
|
abstract = True
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import NO, NOT_APPLICABLE
|
|
1
2
|
from django.contrib import admin
|
|
2
3
|
from django.db import models
|
|
3
4
|
from edc_constants.choices import POS_NEG_NA, YES_NO, YES_NO_NA
|
|
4
|
-
from edc_constants.constants import NO, NOT_APPLICABLE
|
|
5
5
|
|
|
6
6
|
from ..choices import YES_NO_NOT_ELIGIBLE, YES_PENDING_NA
|
|
7
7
|
from ..constants import PREG_YES_NO_NA
|
|
@@ -40,7 +40,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
40
40
|
),
|
|
41
41
|
max_length=15,
|
|
42
42
|
choices=YES_NO,
|
|
43
|
-
|
|
43
|
+
default="",
|
|
44
44
|
blank=False,
|
|
45
45
|
)
|
|
46
46
|
|
|
@@ -48,7 +48,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
48
48
|
verbose_name="Is there clinical evidence of liver disease",
|
|
49
49
|
max_length=15,
|
|
50
50
|
choices=YES_NO,
|
|
51
|
-
|
|
51
|
+
default="",
|
|
52
52
|
blank=False,
|
|
53
53
|
help_text=(
|
|
54
54
|
"Evidence of chronic liver disease: Jaundice, pruritus, "
|
|
@@ -62,7 +62,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
62
62
|
),
|
|
63
63
|
max_length=15,
|
|
64
64
|
choices=YES_NO,
|
|
65
|
-
|
|
65
|
+
default="",
|
|
66
66
|
blank=False,
|
|
67
67
|
help_text=(
|
|
68
68
|
"Evidence of alcoholism or acute alcohol intoxication: "
|
|
@@ -77,7 +77,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
77
77
|
),
|
|
78
78
|
max_length=15,
|
|
79
79
|
choices=YES_NO,
|
|
80
|
-
|
|
80
|
+
default="",
|
|
81
81
|
blank=False,
|
|
82
82
|
help_text="lactic acidosis and/or diabetic ketoacidosis",
|
|
83
83
|
)
|
|
@@ -88,7 +88,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
88
88
|
),
|
|
89
89
|
max_length=15,
|
|
90
90
|
choices=YES_NO,
|
|
91
|
-
|
|
91
|
+
default="",
|
|
92
92
|
blank=False,
|
|
93
93
|
)
|
|
94
94
|
|
|
@@ -98,7 +98,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
98
98
|
),
|
|
99
99
|
max_length=15,
|
|
100
100
|
choices=YES_NO,
|
|
101
|
-
|
|
101
|
+
default="",
|
|
102
102
|
blank=False,
|
|
103
103
|
help_text=(
|
|
104
104
|
"Including: decompensated heart failure, respiratory failure, "
|
|
@@ -113,7 +113,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
113
113
|
),
|
|
114
114
|
max_length=15,
|
|
115
115
|
choices=YES_NO,
|
|
116
|
-
|
|
116
|
+
default="",
|
|
117
117
|
blank=False,
|
|
118
118
|
)
|
|
119
119
|
|
|
@@ -124,7 +124,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
124
124
|
),
|
|
125
125
|
max_length=15,
|
|
126
126
|
choices=YES_NO,
|
|
127
|
-
|
|
127
|
+
default="",
|
|
128
128
|
blank=False,
|
|
129
129
|
help_text=(
|
|
130
130
|
"For example: Magnesium stearate, sodium carboxymethylcellulose, hypromellose"
|
|
@@ -135,7 +135,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
135
135
|
verbose_name="Is the patient known to have diabetes?",
|
|
136
136
|
max_length=15,
|
|
137
137
|
choices=YES_NO,
|
|
138
|
-
|
|
138
|
+
default="",
|
|
139
139
|
blank=False,
|
|
140
140
|
)
|
|
141
141
|
|
|
@@ -143,7 +143,7 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
143
143
|
verbose_name="Is the patient known to be taking anti-diabetic medications?",
|
|
144
144
|
max_length=15,
|
|
145
145
|
choices=YES_NO,
|
|
146
|
-
|
|
146
|
+
default="",
|
|
147
147
|
blank=False,
|
|
148
148
|
)
|
|
149
149
|
|
|
@@ -191,9 +191,9 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
191
191
|
choices=YES_PENDING_NA,
|
|
192
192
|
default=NOT_APPLICABLE,
|
|
193
193
|
help_text=(
|
|
194
|
-
"Only applicable if the patient missed the appointment for the second
|
|
195
|
-
"of screening (P3), several attempts have been made to contact the
|
|
196
|
-
"and the patient has not started P3. See above"
|
|
194
|
+
"Only applicable if the patient missed the appointment for the second "
|
|
195
|
+
"stage of screening (P3), several attempts have been made to contact the "
|
|
196
|
+
"patient, and the patient has not started P3. See above"
|
|
197
197
|
),
|
|
198
198
|
)
|
|
199
199
|
|
|
@@ -201,12 +201,14 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
201
201
|
verbose_name="Date decision made",
|
|
202
202
|
null=True,
|
|
203
203
|
blank=True,
|
|
204
|
-
help_text=
|
|
204
|
+
help_text=(
|
|
205
|
+
"Must be after the appointment date for the second stage of screening (P3)"
|
|
206
|
+
),
|
|
205
207
|
)
|
|
206
208
|
|
|
207
209
|
p3_ltfu_comment = models.TextField(
|
|
208
210
|
verbose_name="Provide any additional comments on this decision (or leave blank)",
|
|
209
|
-
|
|
211
|
+
default="",
|
|
210
212
|
blank=True,
|
|
211
213
|
)
|
|
212
214
|
|
|
@@ -214,5 +216,5 @@ class PartTwoFieldsModelMixin(models.Model):
|
|
|
214
216
|
def p3_appt(self):
|
|
215
217
|
return self.appt_datetime
|
|
216
218
|
|
|
217
|
-
class Meta:
|
|
219
|
+
class Meta: # noqa: DJ012
|
|
218
220
|
abstract = True
|
|
@@ -3,3 +3,12 @@ from .proxy_models import ScreeningPartOne, ScreeningPartThree, ScreeningPartTwo
|
|
|
3
3
|
from .signals import update_p3_ltfu_on_post_save
|
|
4
4
|
from .subject_refusal import SubjectRefusal
|
|
5
5
|
from .subject_screening import SubjectScreening
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
"ScreeningPartOne",
|
|
9
|
+
"ScreeningPartThree",
|
|
10
|
+
"ScreeningPartTwo",
|
|
11
|
+
"SubjectRefusal",
|
|
12
|
+
"SubjectScreening",
|
|
13
|
+
"update_p3_ltfu_on_post_save",
|
|
14
|
+
]
|
|
@@ -21,7 +21,7 @@ class IcpReferralManager(models.Manager):
|
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class IcpReferral(SiteModelMixin, BaseUuidModel):
|
|
24
|
-
"""
|
|
24
|
+
"""Not used"""
|
|
25
25
|
|
|
26
26
|
subject_screening = models.OneToOneField(
|
|
27
27
|
SubjectScreening, null=True, on_delete=models.PROTECT
|
|
@@ -91,7 +91,7 @@ class IcpReferral(SiteModelMixin, BaseUuidModel):
|
|
|
91
91
|
|
|
92
92
|
referred_datetime = models.DateTimeField(null=True, help_text="Date and time of referral")
|
|
93
93
|
|
|
94
|
-
referral_reasons = models.TextField(
|
|
94
|
+
referral_reasons = models.TextField(default="")
|
|
95
95
|
|
|
96
96
|
objects = IcpReferralManager()
|
|
97
97
|
|
|
@@ -102,17 +102,17 @@ class IcpReferral(SiteModelMixin, BaseUuidModel):
|
|
|
102
102
|
def save(self, *args, **kwargs):
|
|
103
103
|
try:
|
|
104
104
|
SubjectScreening.objects.get(screening_identifier=self.screening_identifier)
|
|
105
|
-
except ObjectDoesNotExist:
|
|
105
|
+
except ObjectDoesNotExist as e:
|
|
106
106
|
raise IcpReferralError(
|
|
107
107
|
f"Invalid META screening identifier. Got {self.screening_identifier}"
|
|
108
|
-
)
|
|
108
|
+
) from e
|
|
109
109
|
super().save(*args, **kwargs)
|
|
110
110
|
|
|
111
111
|
def __str__(self):
|
|
112
112
|
return f"{self.screening_identifier} {self.gender} {self.age_in_years}"
|
|
113
113
|
|
|
114
114
|
def natural_key(self):
|
|
115
|
-
return (self.screening_identifier,)
|
|
115
|
+
return (self.screening_identifier,)
|
|
116
116
|
|
|
117
117
|
class Meta:
|
|
118
118
|
pass
|
meta_screening/models/signals.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE, NULL_STRING
|
|
1
2
|
from django.db.models.signals import post_save
|
|
2
3
|
from django.dispatch import receiver
|
|
3
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
4
4
|
|
|
5
5
|
from .proxy_models import ScreeningPartThree
|
|
6
6
|
|
|
@@ -11,14 +11,13 @@ from .proxy_models import ScreeningPartThree
|
|
|
11
11
|
sender=ScreeningPartThree,
|
|
12
12
|
dispatch_uid="update_p3_ltfu_on_post_save",
|
|
13
13
|
)
|
|
14
|
-
def update_p3_ltfu_on_post_save(sender, instance, raw, created, **kwargs):
|
|
14
|
+
def update_p3_ltfu_on_post_save(sender, instance, raw, created, **kwargs): # noqa: ARG001
|
|
15
15
|
""" """
|
|
16
|
-
if not raw:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
instance.p3_ltfu_comment
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
instance.save_base(update_fields=["p3_ltfu", "p3_ltfu_date", "p3_ltfu_comment"])
|
|
16
|
+
if not raw and instance.p3_ltfu != NOT_APPLICABLE and instance.part_three_report_datetime:
|
|
17
|
+
msg = "[auto-updated p3 submitted]"
|
|
18
|
+
instance.p3_ltfu = NOT_APPLICABLE
|
|
19
|
+
instance.p3_ltfu_date = None
|
|
20
|
+
instance.p3_ltfu_comment = (
|
|
21
|
+
f"{msg} {instance.p3_ltfu_comment.replace(msg, NULL_STRING) or NULL_STRING}"
|
|
22
|
+
).strip()
|
|
23
|
+
instance.save_base(update_fields=["p3_ltfu", "p3_ltfu_date", "p3_ltfu_comment"])
|
|
@@ -58,7 +58,7 @@ class SubjectRefusal(NonUniqueSubjectIdentifierModelMixin, SiteModelMixin, BaseU
|
|
|
58
58
|
return (self.subject_identifier,)
|
|
59
59
|
|
|
60
60
|
def get_search_slug_fields(self):
|
|
61
|
-
return
|
|
61
|
+
return "screening_identifier", "subject_identifier"
|
|
62
62
|
|
|
63
63
|
class Meta:
|
|
64
64
|
verbose_name = "Subject Refusal"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import PENDING, QUESTION_RETIRED
|
|
1
2
|
from django.contrib.sites.models import Site
|
|
2
3
|
from django.core.validators import RegexValidator
|
|
3
4
|
from django.db import models
|
|
4
5
|
from django_crypto_fields.fields import EncryptedCharField
|
|
5
|
-
from edc_constants.constants import PENDING, QUESTION_RETIRED
|
|
6
6
|
from edc_model.models import BaseUuidModel
|
|
7
7
|
from edc_screening.model_mixins import ScreeningModelMixin
|
|
8
8
|
from edc_screening.screening_identifier import (
|
|
@@ -10,8 +10,6 @@ from edc_screening.screening_identifier import (
|
|
|
10
10
|
)
|
|
11
11
|
from edc_utils import get_utcnow
|
|
12
12
|
|
|
13
|
-
from meta_consent.consents import consent_v1
|
|
14
|
-
|
|
15
13
|
from ..model_mixins import (
|
|
16
14
|
CalculatedModelMixin,
|
|
17
15
|
EligibilityModelMixin,
|
|
@@ -39,7 +37,7 @@ class SubjectScreening(
|
|
|
39
37
|
BaseUuidModel,
|
|
40
38
|
):
|
|
41
39
|
identifier_cls = ScreeningIdentifier
|
|
42
|
-
consent_definitions = [consent_v1]
|
|
40
|
+
# consent_definitions = [consent_v1]
|
|
43
41
|
|
|
44
42
|
contact_number = EncryptedCharField(
|
|
45
43
|
validators=[RegexValidator(r"^[0-9\-\(\)\ ]+$", message="Enter a valid number")],
|
meta_subject/action_items.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
from clinicedc_constants import GRADE3, GRADE4, HIGH_PRIORITY, NEW, NONE, POS, YES
|
|
1
2
|
from django.apps import apps as django_apps
|
|
2
|
-
from edc_action_item import Action
|
|
3
|
-
from edc_action_item.
|
|
3
|
+
from edc_action_item.action import Action
|
|
4
|
+
from edc_action_item.action_with_notification import ActionWithNotification
|
|
5
|
+
from edc_action_item.site_action_items import AlreadyRegistered, site_action_items
|
|
4
6
|
from edc_adverse_event.constants import AE_INITIAL_ACTION
|
|
5
|
-
from edc_constants.constants import HIGH_PRIORITY, NEW, NONE, POS, YES
|
|
6
7
|
from edc_egfr.constants import EGFR_DROP_NOTIFICATION_ACTION
|
|
7
8
|
from edc_lab_results.action_items import (
|
|
8
9
|
BloodResultsFbcAction,
|
|
@@ -10,11 +11,13 @@ from edc_lab_results.action_items import (
|
|
|
10
11
|
BloodResultsLftAction,
|
|
11
12
|
BloodResultsLipidsAction,
|
|
12
13
|
)
|
|
14
|
+
from edc_lab_results.action_items import (
|
|
15
|
+
BloodResultsGluAction as BaseBloodResultsGluAction,
|
|
16
|
+
)
|
|
13
17
|
from edc_lab_results.action_items import (
|
|
14
18
|
BloodResultsRftAction as BaseBloodResultsRftAction,
|
|
15
19
|
)
|
|
16
20
|
from edc_ltfu.constants import LTFU_ACTION
|
|
17
|
-
from edc_reportable import GRADE3, GRADE4
|
|
18
21
|
from edc_visit_schedule.constants import OFFSCHEDULE_ACTION
|
|
19
22
|
from edc_visit_schedule.utils import is_baseline
|
|
20
23
|
from edc_visit_tracking.constants import MISSED_VISIT
|
|
@@ -88,8 +91,7 @@ class FollowupExaminationAction(Action):
|
|
|
88
91
|
self.reference_obj.symptoms_g3.exclude(name=NONE).count() > 0
|
|
89
92
|
or self.reference_obj.symptoms_g4.exclude(name=NONE).count() > 0
|
|
90
93
|
or self.reference_obj.any_other_problems_sae_grade in [GRADE3, GRADE4]
|
|
91
|
-
or self.reference_obj.lactic_acidosis
|
|
92
|
-
or self.reference_obj.hepatomegaly == YES
|
|
94
|
+
or YES in (self.reference_obj.lactic_acidosis, self.reference_obj.hepatomegaly)
|
|
93
95
|
) and not is_baseline(instance=self.reference_obj.subject_visit):
|
|
94
96
|
next_actions.append(AE_INITIAL_ACTION)
|
|
95
97
|
return next_actions
|
|
@@ -122,27 +124,30 @@ class BloodResultsRftAction(BaseBloodResultsRftAction):
|
|
|
122
124
|
return next_actions
|
|
123
125
|
|
|
124
126
|
|
|
127
|
+
class BloodResultsGluAction(BaseBloodResultsGluAction):
|
|
128
|
+
reference_model = "meta_subject.bloodresultsgludummy"
|
|
129
|
+
|
|
130
|
+
|
|
125
131
|
class DeliveryAction(ActionWithNotification):
|
|
126
132
|
name = DELIVERY_ACTION
|
|
127
133
|
display_name = "Submit Delivery Form"
|
|
128
134
|
notification_display_name = "Delivery Form"
|
|
129
|
-
parent_action_names =
|
|
135
|
+
parent_action_names = (PREGNANCY_NOTIFICATION_ACTION,)
|
|
130
136
|
reference_model = "meta_subject.delivery"
|
|
131
137
|
show_link_to_changelist = True
|
|
132
|
-
show_link_to_add =
|
|
138
|
+
show_link_to_add = False
|
|
133
139
|
admin_site_name = "meta_subject_admin"
|
|
134
140
|
priority = HIGH_PRIORITY
|
|
135
141
|
|
|
136
142
|
def get_next_actions(self):
|
|
137
|
-
|
|
138
|
-
return next_actions
|
|
143
|
+
return [OFFSCHEDULE_PREGNANCY_ACTION]
|
|
139
144
|
|
|
140
145
|
|
|
141
146
|
class EgfrDropNotificationAction(ActionWithNotification):
|
|
142
147
|
name = EGFR_DROP_NOTIFICATION_ACTION
|
|
143
148
|
display_name = "eGFR drop warning"
|
|
144
149
|
notification_display_name = "eGFR drop warning"
|
|
145
|
-
parent_action_names =
|
|
150
|
+
parent_action_names = ()
|
|
146
151
|
reference_model = "meta_subject.egfrdropnotification"
|
|
147
152
|
show_link_to_changelist = True
|
|
148
153
|
show_link_to_add = True
|
|
@@ -157,7 +162,7 @@ class DmFollowAction(ActionWithNotification):
|
|
|
157
162
|
name = DM_FOLLOWUP_ACTION
|
|
158
163
|
display_name = "Diabetes Followup"
|
|
159
164
|
notification_display_name = "Diabetes Followup"
|
|
160
|
-
parent_action_names =
|
|
165
|
+
parent_action_names = (DM_REFFERAL_ACTION,)
|
|
161
166
|
reference_model = "meta_subject.dmfollowup"
|
|
162
167
|
show_link_to_changelist = True
|
|
163
168
|
show_link_to_add = False
|
|
@@ -168,8 +173,7 @@ class DmFollowAction(ActionWithNotification):
|
|
|
168
173
|
priority = HIGH_PRIORITY
|
|
169
174
|
|
|
170
175
|
def get_next_actions(self):
|
|
171
|
-
|
|
172
|
-
return next_actions
|
|
176
|
+
return [OFFSCHEDULE_DM_REFERRAL_ACTION]
|
|
173
177
|
|
|
174
178
|
|
|
175
179
|
def register_actions():
|
meta_subject/admin/__init__.py
CHANGED
|
@@ -19,9 +19,11 @@ from .glucose_admin import GlucoseAdmin
|
|
|
19
19
|
from .glucose_fbg_admin import GlucoseFbgAdmin
|
|
20
20
|
from .health_economics import HealthEconomicsSimpleAdmin, HealthEconomicsUpdateAdmin
|
|
21
21
|
from .hepatitis_test_admin import HepatitisTestAdmin
|
|
22
|
+
from .hiv_exit_review_admin import HivExitReviewAdmin
|
|
22
23
|
from .malaria_test_admin import MalariaTestAdmin
|
|
23
24
|
from .medication_adherence_admin import MedicationAdherenceAdmin
|
|
24
25
|
from .mnsi_admin import MnsiAdmin
|
|
26
|
+
from .next_appointment_admin import NextAppointmentAdmin
|
|
25
27
|
from .other_arv_regimens_admin import OtherArvRegimensAdmin
|
|
26
28
|
from .patient_history_admin import PatientHistoryAdmin
|
|
27
29
|
from .physical_exam_admin import PhysicalExamAdmin
|
|
@@ -33,3 +35,43 @@ from .subject_visit_admin import SubjectVisitAdmin
|
|
|
33
35
|
from .subject_visit_missed_admin import SubjectVisitMissedAdmin
|
|
34
36
|
from .urine_dipstick_test_admin import UrineDipstickTestAdmin
|
|
35
37
|
from .urine_pregnancy_admin import UrinePregnancyAdmin
|
|
38
|
+
|
|
39
|
+
__all__ = [
|
|
40
|
+
"ArvRegimensAdmin",
|
|
41
|
+
"BirthOutcomesAdmin",
|
|
42
|
+
"BloodResultsFbcAdmin",
|
|
43
|
+
"BloodResultsLftAdmin",
|
|
44
|
+
"BloodResultsLipidsAdmin",
|
|
45
|
+
"BloodResultsRftAdmin",
|
|
46
|
+
"ComplicationsAdmin",
|
|
47
|
+
"ComplicationsGlycemiaAdmin",
|
|
48
|
+
"ConcomitantMedicationAdmin",
|
|
49
|
+
"DeliveryAdmin",
|
|
50
|
+
"DmEndpointAdmin",
|
|
51
|
+
"DmFollowupAdmin",
|
|
52
|
+
"EgfrDropNotificationAdmin",
|
|
53
|
+
"Eq5d3lAdmin",
|
|
54
|
+
"FollowupExaminationAdmin",
|
|
55
|
+
"FollowupVitalsAdmin",
|
|
56
|
+
"GlucoseAdmin",
|
|
57
|
+
"GlucoseFbgAdmin",
|
|
58
|
+
"HealthEconomicsSimpleAdmin",
|
|
59
|
+
"HealthEconomicsUpdateAdmin",
|
|
60
|
+
"HepatitisTestAdmin",
|
|
61
|
+
"HivExitReviewAdmin",
|
|
62
|
+
"MalariaTestAdmin",
|
|
63
|
+
"MedicationAdherenceAdmin",
|
|
64
|
+
"MnsiAdmin",
|
|
65
|
+
"NextAppointmentAdmin",
|
|
66
|
+
"OtherArvRegimensAdmin",
|
|
67
|
+
"PatientHistoryAdmin",
|
|
68
|
+
"PhysicalExamAdmin",
|
|
69
|
+
"PregnancyUpdateAdmin",
|
|
70
|
+
"Sf12Admin",
|
|
71
|
+
"StudyMedicationAdmin",
|
|
72
|
+
"SubjectRequisitionAdmin",
|
|
73
|
+
"SubjectVisitAdmin",
|
|
74
|
+
"SubjectVisitMissedAdmin",
|
|
75
|
+
"UrineDipstickTestAdmin",
|
|
76
|
+
"UrinePregnancyAdmin",
|
|
77
|
+
]
|