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
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Generated by Django 5.2.7 on 2025-10-14 00:32
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
(
|
|
10
|
+
"meta_subject",
|
|
11
|
+
"0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more",
|
|
12
|
+
),
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
operations = [
|
|
16
|
+
migrations.AddField(
|
|
17
|
+
model_name="historicalhivexitreview",
|
|
18
|
+
name="singleton_field",
|
|
19
|
+
field=models.CharField(
|
|
20
|
+
db_index=True,
|
|
21
|
+
default="",
|
|
22
|
+
editable=False,
|
|
23
|
+
help_text="auto updated for unique constraint",
|
|
24
|
+
max_length=50,
|
|
25
|
+
verbose_name="subject identifier",
|
|
26
|
+
),
|
|
27
|
+
preserve_default=False,
|
|
28
|
+
),
|
|
29
|
+
migrations.AddField(
|
|
30
|
+
model_name="hivexitreview",
|
|
31
|
+
name="singleton_field",
|
|
32
|
+
field=models.CharField(
|
|
33
|
+
default="",
|
|
34
|
+
editable=False,
|
|
35
|
+
help_text="auto updated for unique constraint",
|
|
36
|
+
max_length=50,
|
|
37
|
+
unique=True,
|
|
38
|
+
verbose_name="subject identifier",
|
|
39
|
+
),
|
|
40
|
+
preserve_default=False,
|
|
41
|
+
),
|
|
42
|
+
migrations.AlterField(
|
|
43
|
+
model_name="healtheconomicsupdate",
|
|
44
|
+
name="singleton_field",
|
|
45
|
+
field=models.CharField(
|
|
46
|
+
default="",
|
|
47
|
+
editable=False,
|
|
48
|
+
help_text="auto updated for unique constraint",
|
|
49
|
+
max_length=50,
|
|
50
|
+
unique=True,
|
|
51
|
+
verbose_name="subject identifier",
|
|
52
|
+
),
|
|
53
|
+
preserve_default=False,
|
|
54
|
+
),
|
|
55
|
+
migrations.AlterField(
|
|
56
|
+
model_name="historicalhealtheconomicsupdate",
|
|
57
|
+
name="singleton_field",
|
|
58
|
+
field=models.CharField(
|
|
59
|
+
db_index=True,
|
|
60
|
+
default="",
|
|
61
|
+
editable=False,
|
|
62
|
+
help_text="auto updated for unique constraint",
|
|
63
|
+
max_length=50,
|
|
64
|
+
verbose_name="subject identifier",
|
|
65
|
+
),
|
|
66
|
+
preserve_default=False,
|
|
67
|
+
),
|
|
68
|
+
]
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Generated by Django 5.2.7 on 2025-10-14 12:56
|
|
2
|
+
|
|
3
|
+
import django.db.models.deletion
|
|
4
|
+
from django.db import migrations, models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
(
|
|
11
|
+
"meta_lists",
|
|
12
|
+
"0020_alter_abnormalfootappearanceobservations_extra_value_and_more",
|
|
13
|
+
),
|
|
14
|
+
("meta_subject", "0237_historicalhivexitreview_singleton_field_and_more"),
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
operations = [
|
|
18
|
+
migrations.AddField(
|
|
19
|
+
model_name="historicalhivexitreview",
|
|
20
|
+
name="available",
|
|
21
|
+
field=models.CharField(
|
|
22
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
23
|
+
default="Yes",
|
|
24
|
+
max_length=25,
|
|
25
|
+
verbose_name="Are HIV test result and treatment information available?",
|
|
26
|
+
),
|
|
27
|
+
),
|
|
28
|
+
migrations.AddField(
|
|
29
|
+
model_name="historicalhivexitreview",
|
|
30
|
+
name="comment",
|
|
31
|
+
field=models.TextField(
|
|
32
|
+
blank=True,
|
|
33
|
+
default="",
|
|
34
|
+
help_text="May be left blank.",
|
|
35
|
+
verbose_name="Any other comment?",
|
|
36
|
+
),
|
|
37
|
+
),
|
|
38
|
+
migrations.AddField(
|
|
39
|
+
model_name="historicalhivexitreview",
|
|
40
|
+
name="not_available_reason",
|
|
41
|
+
field=models.TextField(
|
|
42
|
+
blank=True,
|
|
43
|
+
default="",
|
|
44
|
+
verbose_name="If not available, please explain ...",
|
|
45
|
+
),
|
|
46
|
+
),
|
|
47
|
+
migrations.AddField(
|
|
48
|
+
model_name="hivexitreview",
|
|
49
|
+
name="available",
|
|
50
|
+
field=models.CharField(
|
|
51
|
+
choices=[("Yes", "Yes"), ("No", "No")],
|
|
52
|
+
default="Yes",
|
|
53
|
+
max_length=25,
|
|
54
|
+
verbose_name="Are HIV test result and treatment information available?",
|
|
55
|
+
),
|
|
56
|
+
),
|
|
57
|
+
migrations.AddField(
|
|
58
|
+
model_name="hivexitreview",
|
|
59
|
+
name="comment",
|
|
60
|
+
field=models.TextField(
|
|
61
|
+
blank=True,
|
|
62
|
+
default="",
|
|
63
|
+
help_text="May be left blank.",
|
|
64
|
+
verbose_name="Any other comment?",
|
|
65
|
+
),
|
|
66
|
+
),
|
|
67
|
+
migrations.AddField(
|
|
68
|
+
model_name="hivexitreview",
|
|
69
|
+
name="not_available_reason",
|
|
70
|
+
field=models.TextField(
|
|
71
|
+
blank=True,
|
|
72
|
+
default="",
|
|
73
|
+
verbose_name="If not available, please explain ...",
|
|
74
|
+
),
|
|
75
|
+
),
|
|
76
|
+
migrations.AlterField(
|
|
77
|
+
model_name="hivexitreview",
|
|
78
|
+
name="current_arv_regimen",
|
|
79
|
+
field=models.ForeignKey(
|
|
80
|
+
blank=True,
|
|
81
|
+
null=True,
|
|
82
|
+
on_delete=django.db.models.deletion.PROTECT,
|
|
83
|
+
related_name="last_arv_regimen",
|
|
84
|
+
to="meta_lists.arvregimens",
|
|
85
|
+
verbose_name="Which antiretroviral therapy regimen is the patient currently on?",
|
|
86
|
+
),
|
|
87
|
+
),
|
|
88
|
+
]
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
from .arv_history_model_mixin import ArvHistoryModelMixin
|
|
2
|
+
from .arv_review_model_mixin import ArvReviewModelMixin
|
|
2
3
|
from .crf_model_mixin import CrfModelMixin
|
|
3
4
|
from .crf_with_action_model_mixin import CrfWithActionModelMixin
|
|
4
5
|
from .search_slug_model_mixin import SearchSlugModelMixin
|
|
5
6
|
from .vitals_fields_model_mixin import VitalsFieldsModelMixin
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"ArvHistoryModelMixin",
|
|
10
|
+
"ArvReviewModelMixin",
|
|
11
|
+
"CrfModelMixin",
|
|
12
|
+
"CrfWithActionModelMixin",
|
|
13
|
+
"SearchSlugModelMixin",
|
|
14
|
+
"VitalsFieldsModelMixin",
|
|
15
|
+
]
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
2
1
|
from django.db import models
|
|
3
2
|
from edc_constants.choices import YES_NO
|
|
4
3
|
from edc_model.models import OtherCharField
|
|
5
|
-
from edc_reportable import CELLS_PER_MILLIMETER_CUBED_DISPLAY, COPIES_PER_MILLILITER
|
|
6
4
|
|
|
7
5
|
from meta_lists.models import ArvRegimens, OiProphylaxis
|
|
8
6
|
|
|
7
|
+
from .arv_review_model_mixin import ArvReviewModelMixin
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
|
|
10
|
+
class ArvHistoryModelMixin(ArvReviewModelMixin, models.Model):
|
|
11
11
|
hiv_diagnosis_date = models.DateField(
|
|
12
12
|
verbose_name="When was the diagnosis of HIV made?", null=True, blank=True
|
|
13
13
|
)
|
|
@@ -18,47 +18,6 @@ class ArvHistoryModelMixin(models.Model):
|
|
|
18
18
|
blank=True,
|
|
19
19
|
)
|
|
20
20
|
|
|
21
|
-
viral_load = models.IntegerField(
|
|
22
|
-
verbose_name="Last viral load",
|
|
23
|
-
validators=[MinValueValidator(0), MaxValueValidator(999999)],
|
|
24
|
-
null=True,
|
|
25
|
-
blank=True,
|
|
26
|
-
help_text=COPIES_PER_MILLILITER,
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
viral_load_date = models.DateField(
|
|
30
|
-
verbose_name="Date of last viral load", null=True, blank=True
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
cd4 = models.IntegerField(
|
|
34
|
-
verbose_name="Last CD4",
|
|
35
|
-
validators=[MinValueValidator(0), MaxValueValidator(3000)],
|
|
36
|
-
null=True,
|
|
37
|
-
blank=True,
|
|
38
|
-
help_text=CELLS_PER_MILLIMETER_CUBED_DISPLAY,
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
cd4_date = models.DateField(verbose_name="Date of last CD4", null=True, blank=True)
|
|
42
|
-
|
|
43
|
-
current_arv_regimen = models.ForeignKey(
|
|
44
|
-
ArvRegimens,
|
|
45
|
-
on_delete=models.PROTECT,
|
|
46
|
-
related_name="current_arv_regimen",
|
|
47
|
-
verbose_name="Which antiretroviral therapy regimen is the patient currently on?",
|
|
48
|
-
null=True,
|
|
49
|
-
blank=False,
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
other_current_arv_regimen = OtherCharField(null=True, blank=True)
|
|
53
|
-
|
|
54
|
-
current_arv_regimen_start_date = models.DateField(
|
|
55
|
-
verbose_name=(
|
|
56
|
-
"When did the patient start this current antiretroviral therapy regimen?"
|
|
57
|
-
),
|
|
58
|
-
null=True,
|
|
59
|
-
blank=True,
|
|
60
|
-
)
|
|
61
|
-
|
|
62
21
|
has_previous_arv_regimen = models.CharField(
|
|
63
22
|
verbose_name="Has the patient been on any previous regimen?",
|
|
64
23
|
max_length=15,
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
from clinicedc_constants import COPIES_PER_MILLILITER, NULL_STRING
|
|
2
|
+
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
3
|
+
from django.db import models
|
|
4
|
+
from edc_model.models import OtherCharField
|
|
5
|
+
from edc_reportable.units import CELLS_PER_MILLIMETER_CUBED_DISPLAY
|
|
6
|
+
|
|
7
|
+
from meta_lists.models import ArvRegimens
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ArvReviewModelMixin(models.Model):
|
|
11
|
+
viral_load = models.IntegerField(
|
|
12
|
+
verbose_name="Last viral load",
|
|
13
|
+
validators=[MinValueValidator(0), MaxValueValidator(999999)],
|
|
14
|
+
null=True,
|
|
15
|
+
blank=True,
|
|
16
|
+
help_text=COPIES_PER_MILLILITER,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
viral_load_date = models.DateField(
|
|
20
|
+
verbose_name="Date of last viral load", null=True, blank=True
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
cd4 = models.IntegerField(
|
|
24
|
+
verbose_name="Last CD4",
|
|
25
|
+
validators=[MinValueValidator(0), MaxValueValidator(3000)],
|
|
26
|
+
null=True,
|
|
27
|
+
blank=True,
|
|
28
|
+
help_text=CELLS_PER_MILLIMETER_CUBED_DISPLAY,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
cd4_date = models.DateField(verbose_name="Date of last CD4", null=True, blank=True)
|
|
32
|
+
|
|
33
|
+
current_arv_regimen = models.ForeignKey(
|
|
34
|
+
ArvRegimens,
|
|
35
|
+
on_delete=models.PROTECT,
|
|
36
|
+
related_name="current_arv_regimen",
|
|
37
|
+
verbose_name="Which antiretroviral therapy regimen is the patient currently on?",
|
|
38
|
+
null=True,
|
|
39
|
+
blank=False,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
other_current_arv_regimen = OtherCharField(default=NULL_STRING, blank=True)
|
|
43
|
+
|
|
44
|
+
current_arv_regimen_start_date = models.DateField(
|
|
45
|
+
verbose_name=(
|
|
46
|
+
"When did the patient start this current antiretroviral therapy regimen?"
|
|
47
|
+
),
|
|
48
|
+
null=True,
|
|
49
|
+
blank=True,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
class Meta:
|
|
53
|
+
abstract = True
|
|
@@ -4,8 +4,7 @@ from edc_search.model_mixins import SearchSlugModelMixin as Base
|
|
|
4
4
|
class SearchSlugModelMixin(Base):
|
|
5
5
|
def get_search_slug_fields(self):
|
|
6
6
|
fields = super().get_search_slug_fields()
|
|
7
|
-
fields
|
|
8
|
-
return fields
|
|
7
|
+
return *fields, "subject_identifier"
|
|
9
8
|
|
|
10
9
|
class Meta:
|
|
11
10
|
abstract = True
|
|
@@ -1,11 +1,44 @@
|
|
|
1
|
+
from clinicedc_constants import NO
|
|
1
2
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
2
3
|
from django.db import models
|
|
4
|
+
from edc_constants.choices import YES_NO
|
|
3
5
|
from edc_vitals.models import WeightField
|
|
4
6
|
|
|
5
7
|
|
|
6
8
|
class VitalsFieldsModelMixin(models.Model):
|
|
7
9
|
weight = WeightField(null=True)
|
|
8
10
|
|
|
11
|
+
waist_circumference_measured = models.CharField(
|
|
12
|
+
verbose_name="Was the patient's waist circumference measured today?",
|
|
13
|
+
max_length=15,
|
|
14
|
+
choices=YES_NO,
|
|
15
|
+
help_text=(
|
|
16
|
+
"Waist circumference may be provided at anytime "
|
|
17
|
+
"but is required at 36 and 48 months"
|
|
18
|
+
),
|
|
19
|
+
default=NO,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
waist_circumference = models.DecimalField(
|
|
23
|
+
verbose_name="Waist circumference",
|
|
24
|
+
max_digits=5,
|
|
25
|
+
decimal_places=1,
|
|
26
|
+
validators=[MinValueValidator(50.0), MaxValueValidator(175.0)],
|
|
27
|
+
help_text="in centimeters",
|
|
28
|
+
null=True,
|
|
29
|
+
blank=True,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
waist_circumference_comment = models.TextField(
|
|
33
|
+
verbose_name="If waist circumference not measured, please explain ...",
|
|
34
|
+
help_text=(
|
|
35
|
+
"A reason not measured may be provided at anytime "
|
|
36
|
+
"but is required at 36 and 48 months"
|
|
37
|
+
),
|
|
38
|
+
default="",
|
|
39
|
+
blank=True,
|
|
40
|
+
)
|
|
41
|
+
|
|
9
42
|
# 10
|
|
10
43
|
heart_rate = models.IntegerField(
|
|
11
44
|
verbose_name="Heart rate:",
|
meta_subject/models/__init__.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from .birth_outcomes import BirthOutcomes
|
|
2
2
|
from .blood_results import (
|
|
3
3
|
BloodResultsFbc,
|
|
4
|
+
BloodResultsGluDummy,
|
|
4
5
|
BloodResultsHba1c,
|
|
5
6
|
BloodResultsIns,
|
|
6
7
|
BloodResultsLft,
|
|
@@ -25,9 +26,11 @@ from .health_economics import (
|
|
|
25
26
|
HealthEconomicsUpdate,
|
|
26
27
|
)
|
|
27
28
|
from .hepatitis_test import HepatitisTest
|
|
29
|
+
from .hiv_exit_review import HivExitReview
|
|
28
30
|
from .malaria_test import MalariaTest
|
|
29
31
|
from .medication_adherence import MedicationAdherence
|
|
30
32
|
from .mnsi import Mnsi
|
|
33
|
+
from .next_appointment import NextAppointment
|
|
31
34
|
from .other_arv_regimens import OtherArvRegimens
|
|
32
35
|
from .other_arv_regimens_detail import OtherArvRegimensDetail
|
|
33
36
|
from .patient_history import PatientHistory
|
|
@@ -46,3 +49,52 @@ from .subject_visit import SubjectVisit
|
|
|
46
49
|
from .subject_visit_missed import SubjectVisitMissed
|
|
47
50
|
from .urine_dipstick_test import UrineDipstickTest
|
|
48
51
|
from .urine_pregnancy import UrinePregnancy
|
|
52
|
+
|
|
53
|
+
__all__ = [
|
|
54
|
+
"BirthOutcomes",
|
|
55
|
+
"BloodResultsFbc",
|
|
56
|
+
"BloodResultsGluDummy",
|
|
57
|
+
"BloodResultsHba1c",
|
|
58
|
+
"BloodResultsIns",
|
|
59
|
+
"BloodResultsLft",
|
|
60
|
+
"BloodResultsLipids",
|
|
61
|
+
"BloodResultsRft",
|
|
62
|
+
"Complications",
|
|
63
|
+
"ComplicationsGlycemia",
|
|
64
|
+
"ConcomitantMedication",
|
|
65
|
+
"Delivery",
|
|
66
|
+
"DietAndLifestyle",
|
|
67
|
+
"DmEndpoint",
|
|
68
|
+
"DmFollowup",
|
|
69
|
+
"EgfrDropNotification",
|
|
70
|
+
"Eq5d3l",
|
|
71
|
+
"FollowupExamination",
|
|
72
|
+
"FollowupVitals",
|
|
73
|
+
"Glucose",
|
|
74
|
+
"GlucoseFbg",
|
|
75
|
+
"HealthEconomics",
|
|
76
|
+
"HealthEconomicsSimple",
|
|
77
|
+
"HealthEconomicsUpdate",
|
|
78
|
+
"HepatitisTest",
|
|
79
|
+
"HivExitReview",
|
|
80
|
+
"MalariaTest",
|
|
81
|
+
"MedicationAdherence",
|
|
82
|
+
"Mnsi",
|
|
83
|
+
"NextAppointment",
|
|
84
|
+
"OtherArvRegimens",
|
|
85
|
+
"OtherArvRegimensDetail",
|
|
86
|
+
"PatientHistory",
|
|
87
|
+
"PhysicalExam",
|
|
88
|
+
"PregnancyUpdate",
|
|
89
|
+
"Sf12",
|
|
90
|
+
"StudyMedication",
|
|
91
|
+
"SubjectRequisition",
|
|
92
|
+
"SubjectVisit",
|
|
93
|
+
"SubjectVisitMissed",
|
|
94
|
+
"UrineDipstickTest",
|
|
95
|
+
"UrinePregnancy",
|
|
96
|
+
"study_medication_on_pre_save",
|
|
97
|
+
"update_glucose_endpoints_for_subject_on_post_save",
|
|
98
|
+
"update_pregnancy_notification_on_delivery_post_save",
|
|
99
|
+
"update_schedule_on_delivery_post_save",
|
|
100
|
+
]
|
|
@@ -15,7 +15,7 @@ from .delivery import Delivery
|
|
|
15
15
|
class Manager(models.Manager):
|
|
16
16
|
use_in_migrations = True
|
|
17
17
|
|
|
18
|
-
def get_by_natural_key(
|
|
18
|
+
def get_by_natural_key( # noqa: PLR0913
|
|
19
19
|
self,
|
|
20
20
|
birth_order,
|
|
21
21
|
subject_identifier,
|
|
@@ -97,5 +97,5 @@ class BirthOutcomes(
|
|
|
97
97
|
class Meta(BaseUuidModel.Meta):
|
|
98
98
|
verbose_name = "Birth Outcomes"
|
|
99
99
|
verbose_name_plural = "Birth Outcomes"
|
|
100
|
-
indexes =
|
|
101
|
-
unique_together =
|
|
100
|
+
indexes = (Index(fields=["delivery", "birth_order"]),)
|
|
101
|
+
unique_together = ("delivery", "birth_order")
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
from .blood_results_fbc import BloodResultsFbc
|
|
2
|
+
from .blood_results_glu import BloodResultsGluDummy
|
|
2
3
|
from .blood_results_hba1c import BloodResultsHba1c
|
|
3
4
|
from .blood_results_ins import BloodResultsIns
|
|
4
5
|
from .blood_results_lft import BloodResultsLft
|
|
5
6
|
from .blood_results_lipids import BloodResultsLipids
|
|
6
7
|
from .blood_results_rft import BloodResultsRft
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"BloodResultsFbc",
|
|
11
|
+
"BloodResultsGluDummy",
|
|
12
|
+
"BloodResultsHba1c",
|
|
13
|
+
"BloodResultsIns",
|
|
14
|
+
"BloodResultsLft",
|
|
15
|
+
"BloodResultsLipids",
|
|
16
|
+
"BloodResultsRft",
|
|
17
|
+
]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
from edc_lab.model_mixins import CrfWithRequisitionModelMixin, requisition_fk_options
|
|
3
|
+
from edc_lab_panel.panels import blood_glucose_panel
|
|
4
|
+
from edc_lab_results import BLOOD_RESULTS_GLU_ACTION
|
|
5
|
+
from edc_lab_results.model_mixins import BloodResultsModelMixin, GlucoseModelMixin
|
|
6
|
+
from edc_model.models import BaseUuidModel
|
|
7
|
+
|
|
8
|
+
from ...model_mixins import CrfWithActionModelMixin
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# TODO: this is a IFG!!
|
|
12
|
+
class BloodResultsGluDummy(
|
|
13
|
+
CrfWithActionModelMixin,
|
|
14
|
+
GlucoseModelMixin,
|
|
15
|
+
CrfWithRequisitionModelMixin,
|
|
16
|
+
BloodResultsModelMixin,
|
|
17
|
+
BaseUuidModel,
|
|
18
|
+
):
|
|
19
|
+
action_name = BLOOD_RESULTS_GLU_ACTION
|
|
20
|
+
tracking_identifier_prefix = "GL"
|
|
21
|
+
lab_panel = blood_glucose_panel
|
|
22
|
+
|
|
23
|
+
requisition = models.ForeignKey(
|
|
24
|
+
limit_choices_to={"panel__name": blood_glucose_panel.name}, **requisition_fk_options
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
class Meta(CrfWithActionModelMixin.Meta, BaseUuidModel.Meta):
|
|
28
|
+
verbose_name = "Blood Result: Glucose (DUMMY)"
|
|
29
|
+
verbose_name_plural = "Blood Results: Glucose (DUMMY)"
|
meta_subject/models/delivery.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# TODO: urine_bhcg form (probably not necessary)
|
|
2
2
|
# TODO: if pos, take of study drug and estimate
|
|
3
3
|
# delivery date for the pregnancy outcomes form. See Form 25/26
|
|
4
|
+
from clinicedc_constants import NOT_APPLICABLE, PATIENT, YES
|
|
4
5
|
from django.apps import apps as django_apps
|
|
5
6
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
6
7
|
from django.db import models
|
|
7
8
|
from django_crypto_fields.fields import EncryptedTextField
|
|
8
9
|
from edc_constants.choices import YES_NO, YES_NO_NA
|
|
9
|
-
from edc_constants.constants import NOT_APPLICABLE, PATIENT, YES
|
|
10
10
|
from edc_model.models import BaseUuidModel
|
|
11
11
|
from edc_model.validators import datetime_not_future
|
|
12
12
|
from edc_model_fields.fields import OtherCharField
|
|
@@ -38,8 +38,6 @@ class Delivery(
|
|
|
38
38
|
|
|
39
39
|
action_name = DELIVERY_ACTION
|
|
40
40
|
|
|
41
|
-
tracking_identifier_prefix = "DL"
|
|
42
|
-
|
|
43
41
|
report_datetime = models.DateTimeField(
|
|
44
42
|
verbose_name="Report Date and Time", default=get_utcnow
|
|
45
43
|
)
|
|
@@ -54,7 +52,7 @@ class Delivery(
|
|
|
54
52
|
|
|
55
53
|
info_not_available_reason = models.TextField(
|
|
56
54
|
verbose_name="If the report was not available, please explain?",
|
|
57
|
-
|
|
55
|
+
default="",
|
|
58
56
|
blank=True,
|
|
59
57
|
)
|
|
60
58
|
|
|
@@ -112,7 +110,7 @@ class Delivery(
|
|
|
112
110
|
"please give name of the facility"
|
|
113
111
|
),
|
|
114
112
|
max_length=150,
|
|
115
|
-
|
|
113
|
+
default="",
|
|
116
114
|
blank=True,
|
|
117
115
|
)
|
|
118
116
|
|
|
@@ -162,4 +160,4 @@ class Delivery(
|
|
|
162
160
|
class Meta(CrfWithActionModelMixin.Meta, BaseUuidModel.Meta):
|
|
163
161
|
verbose_name = "Delivery"
|
|
164
162
|
verbose_name_plural = "Delivery"
|
|
165
|
-
unique_together =
|
|
163
|
+
unique_together = ("subject_visit", "delivery_datetime")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
from clinicedc_constants import QUESTION_RETIRED
|
|
1
2
|
from django.db import models
|
|
2
3
|
from edc_constants.choices import YES_NO, YES_NO_RETIRED
|
|
3
|
-
from edc_constants.constants import QUESTION_RETIRED
|
|
4
4
|
from edc_model.models import BaseUuidModel
|
|
5
5
|
from edc_model_fields.fields import OtherCharField
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ class DmEndpoint(CrfModelMixin, BaseUuidModel):
|
|
|
16
16
|
verbose_name="Was the patient referred because the diabetes endpoint was reached?",
|
|
17
17
|
max_length=15,
|
|
18
18
|
choices=YES_NO,
|
|
19
|
-
|
|
19
|
+
default="",
|
|
20
20
|
blank=False,
|
|
21
21
|
help_text="If YES, the EDC will check for the patient on the Endpoints report.",
|
|
22
22
|
)
|
|
@@ -32,7 +32,7 @@ class DmEndpoint(CrfModelMixin, BaseUuidModel):
|
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
# retired
|
|
35
|
-
dx_initiated_by_other = OtherCharField(
|
|
35
|
+
dx_initiated_by_other = OtherCharField(blank=True)
|
|
36
36
|
|
|
37
37
|
# retired
|
|
38
38
|
dx_tmg = models.CharField(
|
|
@@ -50,11 +50,11 @@ class DmEndpoint(CrfModelMixin, BaseUuidModel):
|
|
|
50
50
|
# retired
|
|
51
51
|
dx_no_tmg_reason = models.TextField(
|
|
52
52
|
verbose_name="If NO, please explain why this case was not discussed with the TMG",
|
|
53
|
-
|
|
53
|
+
default="",
|
|
54
54
|
blank=True,
|
|
55
55
|
)
|
|
56
56
|
|
|
57
|
-
comments = models.TextField(verbose_name="Any other comments",
|
|
57
|
+
comments = models.TextField(verbose_name="Any other comments", default="", blank=True)
|
|
58
58
|
|
|
59
59
|
class Meta(CrfModelMixin.Meta, BaseUuidModel.Meta):
|
|
60
60
|
verbose_name = "Diabetes endpoint"
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE, QUESTION_RETIRED
|
|
1
2
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
2
3
|
from django.db import models
|
|
3
|
-
from django.utils.
|
|
4
|
+
from django.utils.safestring import mark_safe
|
|
4
5
|
from edc_action_item.models import ActionItem
|
|
5
6
|
from edc_adherence.choices import MISSED_PILLS
|
|
6
7
|
from edc_constants.choices import YES_NO, YES_NO_NA
|
|
7
|
-
from edc_constants.constants import NOT_APPLICABLE, QUESTION_RETIRED
|
|
8
8
|
from edc_model.models import BaseUuidModel
|
|
9
9
|
from edc_model_fields.fields import OtherCharField
|
|
10
10
|
|
|
@@ -22,7 +22,6 @@ from ...model_mixins import CrfWithActionModelMixin
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
|
|
25
|
-
|
|
26
25
|
action_name = DM_FOLLOWUP_ACTION
|
|
27
26
|
|
|
28
27
|
referral_date = models.DateField(
|
|
@@ -63,7 +62,7 @@ class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
63
62
|
facility_attended = models.CharField(
|
|
64
63
|
verbose_name="If 'Yes', please give the name of the facility you attended",
|
|
65
64
|
max_length=50,
|
|
66
|
-
|
|
65
|
+
default="",
|
|
67
66
|
blank=True,
|
|
68
67
|
)
|
|
69
68
|
|
|
@@ -181,15 +180,15 @@ class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
181
180
|
verbose_name="Visual score",
|
|
182
181
|
max_length=3,
|
|
183
182
|
help_text="%",
|
|
184
|
-
|
|
183
|
+
default="",
|
|
185
184
|
blank=True,
|
|
186
185
|
)
|
|
187
186
|
|
|
188
187
|
visual_score_confirmed = models.IntegerField(
|
|
189
|
-
verbose_name=
|
|
188
|
+
verbose_name=mark_safe(
|
|
190
189
|
"<B><font color='orange'>Interviewer</font></B>: "
|
|
191
190
|
"please transcribe the score indicated from above."
|
|
192
|
-
),
|
|
191
|
+
), # nosec B308
|
|
193
192
|
validators=[MinValueValidator(0), MaxValueValidator(100)],
|
|
194
193
|
help_text="%",
|
|
195
194
|
null=True,
|
|
@@ -200,7 +199,7 @@ class DmFollowup(CrfWithActionModelMixin, BaseUuidModel):
|
|
|
200
199
|
verbose_name="When was the last time you missed your study pill?",
|
|
201
200
|
max_length=25,
|
|
202
201
|
choices=MISSED_PILLS,
|
|
203
|
-
|
|
202
|
+
default="",
|
|
204
203
|
blank=True,
|
|
205
204
|
)
|
|
206
205
|
|
|
@@ -8,11 +8,11 @@ from ..model_mixins import CrfModelMixin
|
|
|
8
8
|
class DietAndLifestyle(CrfModelMixin, BaseUuidModel):
|
|
9
9
|
diet_and_lifestyle = models.CharField(
|
|
10
10
|
verbose_name=(
|
|
11
|
-
"Has the participant received the META3
|
|
11
|
+
"Has the participant received the META3 approved diet and lifetsyle counseling?"
|
|
12
12
|
),
|
|
13
13
|
max_length=15,
|
|
14
14
|
choices=YES_NO,
|
|
15
|
-
|
|
15
|
+
default="",
|
|
16
16
|
blank=False,
|
|
17
17
|
help_text="This response is not criteria for eligibility",
|
|
18
18
|
)
|