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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
from django.db.models import PROTECT
|
|
3
4
|
from django.utils.safestring import mark_safe
|
|
4
5
|
from edc_constants.choices import YES_NO, YES_NO_NA, YES_NO_NOT_EVALUATED
|
|
5
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
6
6
|
from edc_model.models import BaseUuidModel
|
|
7
7
|
from edc_model_fields.fields import OtherCharField
|
|
8
8
|
|
|
@@ -16,8 +16,6 @@ from ..model_mixins import CrfWithActionModelMixin
|
|
|
16
16
|
class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
17
17
|
action_name = FOLLOWUP_EXAMINATION_ACTION
|
|
18
18
|
|
|
19
|
-
tracking_identifier_prefix = "FU"
|
|
20
|
-
|
|
21
19
|
# 4a
|
|
22
20
|
symptoms = models.ManyToManyField(
|
|
23
21
|
Symptoms,
|
|
@@ -42,12 +40,12 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
42
40
|
related_name="symptoms_g3",
|
|
43
41
|
verbose_name="For these symptoms, were any grade 3 events",
|
|
44
42
|
help_text=(
|
|
45
|
-
"Refer to DAIDS toxicity table.
|
|
43
|
+
"Refer to DAIDS toxicity table. Please complete Serious Adverse Event form"
|
|
46
44
|
),
|
|
47
45
|
)
|
|
48
46
|
symptoms_g3_detail = models.TextField(
|
|
49
47
|
verbose_name="Please provide details on any of the Grade 3 symptoms above.",
|
|
50
|
-
|
|
48
|
+
default="",
|
|
51
49
|
blank=True,
|
|
52
50
|
)
|
|
53
51
|
|
|
@@ -57,19 +55,19 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
57
55
|
related_name="symptoms_g4",
|
|
58
56
|
verbose_name="For these symptoms, were any grade 4 events",
|
|
59
57
|
help_text=(
|
|
60
|
-
"Refer to DAIDS toxicity table.
|
|
58
|
+
"Refer to DAIDS toxicity table. Please complete Serious Adverse Event form"
|
|
61
59
|
),
|
|
62
60
|
)
|
|
63
61
|
symptoms_g4_detail = models.TextField(
|
|
64
62
|
verbose_name="Please provide details on any of the Grade 4 symptoms above.",
|
|
65
|
-
|
|
63
|
+
default="",
|
|
66
64
|
blank=True,
|
|
67
65
|
)
|
|
68
66
|
|
|
69
67
|
# 4c
|
|
70
68
|
symptoms_detail = models.TextField(
|
|
71
69
|
verbose_name="Please provide details on any of the symptoms above.",
|
|
72
|
-
|
|
70
|
+
default="",
|
|
73
71
|
blank=True,
|
|
74
72
|
)
|
|
75
73
|
|
|
@@ -91,7 +89,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
91
89
|
"If the participant was given a referral letter or "
|
|
92
90
|
"discharge summary record details here"
|
|
93
91
|
),
|
|
94
|
-
|
|
92
|
+
default="",
|
|
95
93
|
blank=True,
|
|
96
94
|
)
|
|
97
95
|
|
|
@@ -126,9 +124,9 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
126
124
|
# 5d
|
|
127
125
|
prescribed_medication_detail = models.TextField(
|
|
128
126
|
verbose_name=(
|
|
129
|
-
"If YES, prescribed any other medication,
|
|
127
|
+
"If YES, prescribed any other medication, please provide details of this visit"
|
|
130
128
|
),
|
|
131
|
-
|
|
129
|
+
default="",
|
|
132
130
|
blank=True,
|
|
133
131
|
)
|
|
134
132
|
|
|
@@ -147,7 +145,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
147
145
|
# 6a
|
|
148
146
|
any_other_problems_detail = models.TextField(
|
|
149
147
|
verbose_name="If YES, please provide details of the event",
|
|
150
|
-
|
|
148
|
+
default="",
|
|
151
149
|
blank=True,
|
|
152
150
|
)
|
|
153
151
|
|
|
@@ -178,7 +176,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
178
176
|
|
|
179
177
|
# 7b
|
|
180
178
|
art_change_reason = models.TextField(
|
|
181
|
-
verbose_name="If YES, please provide reason for change",
|
|
179
|
+
verbose_name="If YES, please provide reason for change", default="", blank=True
|
|
182
180
|
)
|
|
183
181
|
|
|
184
182
|
# 7c
|
|
@@ -243,7 +241,7 @@ class FollowupExamination(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
243
241
|
|
|
244
242
|
referral_reason = models.TextField(
|
|
245
243
|
verbose_name="If YES, where are they being referred to",
|
|
246
|
-
|
|
244
|
+
default="",
|
|
247
245
|
blank=True,
|
|
248
246
|
help_text=(
|
|
249
247
|
"Note: remind participant that admission or discharge information "
|
meta_subject/models/glucose.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
from edc_constants.choices import YES_NO
|
|
3
|
-
from
|
|
4
|
-
from edc_glucose.model_mixins import (
|
|
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,12 +1,15 @@
|
|
|
1
|
+
from clinicedc_constants import NO, NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
from edc_constants.choices import YES_NO
|
|
3
|
-
from
|
|
4
|
-
from edc_glucose.model_mixins import (
|
|
4
|
+
from edc_glucose.model_mixin_factories import (
|
|
5
5
|
fasting_model_mixin_factory,
|
|
6
6
|
fbg_model_mixin_factory,
|
|
7
7
|
)
|
|
8
8
|
from edc_model.models import BaseUuidModel
|
|
9
|
+
from edc_utils import formatted_date
|
|
9
10
|
|
|
11
|
+
from ..choices import ENDPOINT_CHOICES
|
|
12
|
+
from ..constants import AMENDMENT_DATE
|
|
10
13
|
from ..model_mixins import CrfModelMixin
|
|
11
14
|
|
|
12
15
|
|
|
@@ -26,7 +29,6 @@ class GlucoseFbg(
|
|
|
26
29
|
fbg_model_mixin_factory("fbg"),
|
|
27
30
|
BaseUuidModel,
|
|
28
31
|
):
|
|
29
|
-
|
|
30
32
|
fbg_performed = models.CharField(
|
|
31
33
|
verbose_name="Was the FBG test performed?",
|
|
32
34
|
max_length=15,
|
|
@@ -36,7 +38,7 @@ class GlucoseFbg(
|
|
|
36
38
|
fbg_not_performed_reason = models.CharField(
|
|
37
39
|
verbose_name="If NO, provide reason",
|
|
38
40
|
max_length=150,
|
|
39
|
-
|
|
41
|
+
default="",
|
|
40
42
|
blank=True,
|
|
41
43
|
)
|
|
42
44
|
|
|
@@ -50,6 +52,17 @@ class GlucoseFbg(
|
|
|
50
52
|
),
|
|
51
53
|
)
|
|
52
54
|
|
|
55
|
+
endpoint_today = models.CharField(
|
|
56
|
+
verbose_name="Has the participant reached a study endpoint today?",
|
|
57
|
+
max_length=25,
|
|
58
|
+
choices=ENDPOINT_CHOICES,
|
|
59
|
+
default=NOT_APPLICABLE,
|
|
60
|
+
help_text=(
|
|
61
|
+
f"Response is applicable if reporting after {formatted_date(AMENDMENT_DATE)} "
|
|
62
|
+
"and both the FBG and OGTT were performed"
|
|
63
|
+
),
|
|
64
|
+
)
|
|
65
|
+
|
|
53
66
|
repeat_fbg_date = models.DateField(
|
|
54
67
|
null=True,
|
|
55
68
|
blank=True,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
2
3
|
from django.db import models
|
|
3
4
|
from edc_constants.choices import YES_NO, YES_NO_NA
|
|
4
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
5
5
|
from edc_model.models import BaseUuidModel
|
|
6
6
|
|
|
7
7
|
from ...choices import (
|
|
@@ -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(
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
from edc_constants.choices import MARITAL_STATUS
|
|
3
|
-
from edc_he.model_mixins import
|
|
3
|
+
from edc_he.model_mixins import EducationModelMixin
|
|
4
4
|
from edc_model.models import BaseUuidModel
|
|
5
5
|
|
|
6
6
|
from ...model_mixins import CrfModelMixin
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class HealthEconomicsSimple(
|
|
9
|
+
class HealthEconomicsSimple(EducationModelMixin, CrfModelMixin, BaseUuidModel):
|
|
10
10
|
occupation = models.CharField(
|
|
11
11
|
verbose_name="What is your occupation/profession?", max_length=50
|
|
12
12
|
)
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
2
3
|
from django.db import models
|
|
3
4
|
from django.utils.translation import gettext as _
|
|
4
5
|
from edc_constants.choices import YES_NO
|
|
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
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from clinicedc_constants import NULL_STRING, YES
|
|
2
|
+
from django.db import models
|
|
3
|
+
from edc_constants.choices import YES_NO
|
|
4
|
+
from edc_crf.model_mixins import SingletonCrfModelMixin
|
|
5
|
+
from edc_model.models import BaseUuidModel
|
|
6
|
+
|
|
7
|
+
from meta_lists.models import ArvRegimens
|
|
8
|
+
|
|
9
|
+
from ..model_mixins import ArvReviewModelMixin, CrfModelMixin
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class HivExitReview(SingletonCrfModelMixin, ArvReviewModelMixin, CrfModelMixin, BaseUuidModel):
|
|
13
|
+
available = models.CharField(
|
|
14
|
+
verbose_name="Are HIV test result and treatment information available?",
|
|
15
|
+
max_length=25,
|
|
16
|
+
default=YES,
|
|
17
|
+
choices=YES_NO,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
not_available_reason = models.TextField(
|
|
21
|
+
verbose_name="If not available, please explain ...",
|
|
22
|
+
default=NULL_STRING,
|
|
23
|
+
blank=True,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
current_arv_regimen = models.ForeignKey(
|
|
27
|
+
ArvRegimens,
|
|
28
|
+
on_delete=models.PROTECT,
|
|
29
|
+
related_name="last_arv_regimen",
|
|
30
|
+
verbose_name="Which antiretroviral therapy regimen is the patient currently on?",
|
|
31
|
+
null=True,
|
|
32
|
+
blank=True,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
comment = models.TextField(
|
|
36
|
+
verbose_name="Any other comment?",
|
|
37
|
+
default=NULL_STRING,
|
|
38
|
+
blank=True,
|
|
39
|
+
help_text="May be left blank.",
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
|
|
43
|
+
verbose_name = "HIV Exit Review"
|
|
44
|
+
verbose_name_plural = "HIV Exit Review"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from edc_appointment.model_mixins import NextAppointmentCrfModelMixin
|
|
4
|
+
from edc_model.models import BaseUuidModel
|
|
5
|
+
|
|
6
|
+
from ..model_mixins import CrfModelMixin
|
|
7
|
+
|
|
8
|
+
__all__ = ["NextAppointment"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class NextAppointment(NextAppointmentCrfModelMixin, CrfModelMixin, BaseUuidModel):
|
|
12
|
+
class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
|
|
13
|
+
verbose_name = "Next Appointment"
|
|
14
|
+
verbose_name_plural = "Next Appointments"
|
|
15
|
+
indexes = CrfModelMixin.Meta.indexes + BaseUuidModel.Meta.indexes
|
|
@@ -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()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
from django.utils.safestring import mark_safe
|
|
3
4
|
from edc_constants.choices import YES_NO, YES_NO_NA
|
|
4
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
5
5
|
from edc_model.models import BaseUuidModel
|
|
6
6
|
from edc_model_fields.fields import OtherCharField
|
|
7
7
|
|
|
@@ -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,16 +37,14 @@ 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,
|
|
42
44
|
randomizer_name=get_meta_version(),
|
|
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]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import NO, NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
from edc_consent.model_mixins import RequiresConsentFieldsModelMixin
|
|
3
4
|
from edc_constants.choices import YES_NO
|
|
4
|
-
from edc_constants.constants import NO, NOT_APPLICABLE
|
|
5
5
|
from edc_metadata.model_mixins.creates import CreatesMetadataModelMixin
|
|
6
6
|
from edc_model.models import BaseUuidModel, HistoricalRecords
|
|
7
7
|
from edc_sites.model_mixins import SiteModelMixin
|
|
@@ -48,7 +48,7 @@ class SubjectVisit(
|
|
|
48
48
|
|
|
49
49
|
unschedule_detail = models.TextField(
|
|
50
50
|
verbose_name="If 'unschedule', please provide further details, if any",
|
|
51
|
-
|
|
51
|
+
default="",
|
|
52
52
|
blank=True,
|
|
53
53
|
)
|
|
54
54
|
|
meta_subject/models/todo.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
from edc_constants.choices import PRESENT_ABSENT_NA, YES_NO
|
|
3
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
4
4
|
from edc_model import models as edc_models
|
|
5
5
|
|
|
6
6
|
from ..model_mixins import CrfModelMixin
|
|
@@ -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(
|
|
@@ -17,7 +17,7 @@ class UrinePregnancy(CrfWithActionModelMixin, edc_models.BaseUuidModel):
|
|
|
17
17
|
)
|
|
18
18
|
|
|
19
19
|
not_performed_reason = models.CharField(
|
|
20
|
-
verbose_name="If NO, provide reason", max_length=150,
|
|
20
|
+
verbose_name="If NO, provide reason", max_length=150, default="", blank=True
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
assay_date = models.DateField(verbose_name="Urine βhCG date", blank=True, null=True)
|