meta-edc 1.1.8__py3-none-any.whl → 1.1.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of meta-edc might be problematic. Click here for more details.
- meta_ae/action_items.py +2 -1
- meta_ae/admin/__init__.py +11 -0
- meta_ae/admin/ae_susar_admin.py +1 -1
- meta_ae/admin/death_report_admin.py +1 -1
- meta_ae/admin/modeladmin_mixins.py +10 -12
- meta_ae/baker_recipes.py +3 -3
- meta_ae/forms/__init__.py +13 -0
- meta_ae/forms/modelform_mixins.py +2 -2
- meta_ae/migrations/0001_initial.py +27 -27
- meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
- meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
- meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
- meta_ae/model_mixins/__init__.py +2 -0
- meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
- meta_ae/model_mixins/death_report_model_mixin.py +3 -3
- meta_ae/models/__init__.py +13 -0
- meta_ae/models/hospitalization.py +3 -3
- meta_ae/pdf_reports/__init__.py +2 -0
- meta_analytics/.DS_Store +0 -0
- meta_analytics/dataframes/__init__.py +24 -0
- meta_analytics/dataframes/get_eos_df.py +1 -2
- meta_analytics/dataframes/get_glucose_df.py +6 -7
- meta_analytics/dataframes/get_glucose_fbg_df.py +2 -3
- meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +1 -2
- meta_analytics/dataframes/get_last_imp_visits_df.py +5 -6
- meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
- meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +13 -20
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +9 -10
- meta_analytics/dataframes/screening/__init__.py +2 -0
- meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
- meta_analytics/dataframes/screening/get_screening_df.py +6 -10
- meta_analytics/dataframes/utils.py +3 -8
- meta_analytics/get_tables.py +1 -2
- meta_analytics/tables/__init__.py +2 -0
- meta_consent/action_items.py +2 -1
- meta_consent/admin/__init__.py +6 -0
- meta_consent/admin/actions/__init__.py +2 -0
- meta_consent/admin/actions/create_missing_prescriptions.py +1 -1
- meta_consent/admin/list_filters.py +2 -2
- meta_consent/admin/modeladmin_mixins.py +3 -4
- meta_consent/admin/subject_consent_v1_ext_admin.py +2 -2
- meta_consent/baker_recipes.py +7 -8
- meta_consent/form_validators/__init__.py +2 -0
- meta_consent/forms/__init__.py +7 -0
- meta_consent/forms/subject_consent_v1_ext_form.py +2 -3
- meta_consent/forms/subject_reconsent_form.py +4 -4
- meta_consent/management/commands/create_missing_prescriptions.py +4 -2
- meta_consent/migrations/0001_initial.py +9 -9
- meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
- meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +5 -14
- meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
- meta_consent/models/__init__.py +9 -0
- meta_consent/models/model_mixins.py +1 -2
- meta_consent/models/signals.py +9 -10
- meta_consent/models/subject_consent.py +1 -1
- meta_consent/models/subject_reconsent.py +3 -3
- meta_dashboard/patterns.py +1 -1
- meta_dashboard/templatetags/meta_dashboard_extras.py +1 -1
- meta_dashboard/view_utils/__init__.py +7 -0
- meta_dashboard/view_utils/subject_screening_button.py +9 -16
- meta_dashboard/views/__init__.py +8 -0
- meta_dashboard/views/ae/__init__.py +2 -0
- meta_dashboard/views/ae/ae_listboard_view.py +1 -1
- meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
- meta_dashboard/views/screening/__init__.py +2 -0
- meta_dashboard/views/subject/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/dashboard_view.py +1 -1
- meta_dashboard/views/subject/listboard/__init__.py +2 -0
- meta_edc/__init__.py +5 -9
- meta_edc/celery.py +1 -1
- meta_edc/celery_live.py +1 -1
- meta_edc/celery_uat.py +1 -1
- meta_edc/management/commands/update_forms_reference.py +10 -12
- meta_edc/settings/debug.py +5 -4
- meta_edc/settings/defaults.py +18 -3
- meta_edc/settings/live.py +3 -1
- meta_edc/settings/logging.py +9 -4
- meta_edc/settings/minimal.py +4 -5
- meta_edc/settings/uat.py +3 -1
- meta_edc/views/__init__.py +2 -0
- meta_edc-1.1.12.dist-info/METADATA +174 -0
- {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/RECORD +413 -526
- meta_edc-1.1.12.dist-info/WHEEL +4 -0
- meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
- meta_pharmacy/admin/__init__.py +5 -0
- meta_pharmacy/admin/substitutions_admin.py +2 -2
- meta_pharmacy/forms/__init__.py +2 -0
- meta_pharmacy/forms/substitutions_form.py +6 -4
- meta_pharmacy/labels/__init__.py +4 -2
- meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +1 -2
- meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
- meta_pharmacy/labels/label_data.py +1 -2
- meta_pharmacy/labels/print_sheets.py +4 -6
- meta_pharmacy/migrations/0002_initial.py +7 -20
- meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
- meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
- meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
- meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
- meta_pharmacy/models/__init__.py +7 -0
- meta_pharmacy/models/label_data.py +4 -5
- meta_pharmacy/models/substitutions.py +3 -3
- meta_pharmacy/prepare_meta_pharmacy.py +1 -1
- meta_pharmacy/utils/__init__.py +2 -0
- meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
- meta_prn/admin/__init__.py +16 -0
- meta_prn/admin/dm_referral_admin.py +2 -1
- meta_prn/admin/end_of_study_admin.py +6 -7
- meta_prn/admin/loss_to_followup_admin.py +3 -2
- meta_prn/admin/off_study_medication_admin.py +5 -6
- meta_prn/admin/offschedule_admin.py +5 -6
- meta_prn/admin/offschedule_dm_referral_admin.py +6 -6
- meta_prn/admin/offschedule_postnatal_admin.py +7 -7
- meta_prn/admin/offschedule_pregnancy_admin.py +8 -7
- meta_prn/admin/onschedule_admin.py +7 -8
- meta_prn/admin/onschedule_dm_referral_admin.py +6 -7
- meta_prn/admin/pregnancy_notification_admin.py +5 -6
- meta_prn/admin/protocol_incident_admin.py +1 -1
- meta_prn/admin/subject_transfer_admin.py +1 -1
- meta_prn/baker_recipes.py +4 -4
- meta_prn/form_validators/__init__.py +5 -0
- meta_prn/form_validators/end_of_study.py +2 -2
- meta_prn/forms/__init__.py +13 -0
- meta_prn/migrations/0001_initial.py +25 -25
- meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
- meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
- meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
- meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
- meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
- meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
- meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
- meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
- meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
- meta_prn/models/__init__.py +20 -0
- meta_prn/models/offschedule.py +4 -4
- meta_prn/models/protocol_incident.py +1 -1
- meta_prn/models/subject_transfer.py +8 -0
- meta_rando/migrations/0001_initial.py +5 -5
- meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
- meta_reports/__init__.py +2 -0
- meta_reports/admin/__init__.py +16 -0
- meta_reports/admin/dbviews/__init__.py +13 -0
- meta_reports/admin/dbviews/glucose_summary_admin.py +6 -6
- meta_reports/admin/dbviews/imp_substitutions_admin.py +12 -11
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +6 -6
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
- meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +8 -8
- meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
- meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
- meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
- meta_reports/admin/endpoints_admin.py +1 -1
- meta_reports/admin/last_imp_refill_admin.py +9 -9
- meta_reports/admin/list_filters.py +2 -2
- meta_reports/admin/modeladmin_mixins.py +9 -16
- meta_reports/death_report.py +1 -1
- meta_reports/forms/__init__.py +2 -0
- meta_reports/forms/missing_ogtt_note_form.py +2 -3
- meta_reports/management/commands/generate_endpoints.py +5 -4
- meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
- meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
- meta_reports/models/__init__.py +17 -0
- meta_reports/models/dbviews/__init__.py +14 -0
- meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
- meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +4 -5
- meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
- meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
- meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
- meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +1 -1
- meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
- meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
- meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +18 -0
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
- meta_reports/models/endpoints.py +4 -4
- meta_reports/models/last_imp_refill.py +2 -3
- meta_reports/pdf_report.py +2 -2
- meta_reports/tasks.py +1 -1
- meta_screening/admin/__init__.py +8 -0
- meta_screening/admin/fieldsets.py +13 -14
- meta_screening/admin/list_filters.py +6 -4
- meta_screening/admin/screening_part_one_admin.py +1 -2
- meta_screening/admin/screening_part_three_admin.py +2 -3
- meta_screening/admin/screening_part_two_admin.py +7 -10
- meta_screening/admin/subject_refusal_admin.py +5 -3
- meta_screening/admin/subject_screening_admin.py +4 -4
- meta_screening/baker_recipes.py +9 -9
- meta_screening/eligibility/__init__.py +9 -0
- meta_screening/eligibility/eligibility.py +7 -7
- meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
- meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +8 -8
- meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +13 -14
- meta_screening/form_validators/__init__.py +8 -0
- meta_screening/forms/__init__.py +20 -0
- meta_screening/forms/field_lists.py +16 -17
- meta_screening/forms/screening_part_one_form.py +2 -2
- meta_screening/forms/screening_part_three_form.py +5 -3
- meta_screening/forms/screening_part_two_form.py +1 -5
- meta_screening/forms/subject_refusal_form.py +0 -4
- meta_screening/forms/subject_screening_form.py +0 -4
- meta_screening/migrations/0001_initial.py +15 -15
- meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
- meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
- meta_screening/model_mixins/__init__.py +8 -0
- meta_screening/model_mixins/eligibility_model_mixin.py +5 -3
- meta_screening/model_mixins/part_one_fields_model_mixin.py +5 -9
- meta_screening/model_mixins/part_three_fields_model_mixin.py +5 -6
- meta_screening/model_mixins/part_two_fields_model_mixin.py +18 -16
- meta_screening/models/__init__.py +9 -0
- meta_screening/models/icp_referral.py +5 -5
- meta_screening/models/signals.py +10 -11
- meta_screening/models/subject_refusal.py +1 -1
- meta_screening/models/subject_screening.py +1 -3
- meta_subject/action_items.py +13 -15
- meta_subject/admin/__init__.py +39 -0
- meta_subject/admin/birth_outcome_admin.py +4 -8
- meta_subject/admin/blood_results/__init__.py +9 -0
- meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
- meta_subject/admin/complications_glycemia_admin.py +1 -1
- meta_subject/admin/delivery_admin.py +7 -10
- meta_subject/admin/diabetes/__init__.py +2 -0
- meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
- meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
- meta_subject/admin/egfr_drop_notification_admin.py +1 -1
- meta_subject/admin/followup_examination_admin.py +10 -9
- meta_subject/admin/followup_vitals_admin.py +4 -5
- meta_subject/admin/glucose_admin.py +2 -4
- meta_subject/admin/glucose_fbg_admin.py +1 -3
- meta_subject/admin/health_economics/__init__.py +2 -0
- meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
- meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
- meta_subject/admin/hepatitis_test_admin.py +1 -1
- meta_subject/admin/list_filters.py +1 -1
- meta_subject/admin/mnsi_admin.py +7 -5
- meta_subject/admin/other_arv_regimens_admin.py +3 -3
- meta_subject/admin/patient_history_admin.py +4 -4
- meta_subject/admin/physical_exam_admin.py +1 -1
- meta_subject/admin/pregnancy_update_admin.py +1 -1
- meta_subject/admin/study_medication_admin.py +8 -15
- meta_subject/admin/subject_requisition_admin.py +1 -1
- meta_subject/admin/subject_visit_admin.py +1 -1
- meta_subject/admin/subject_visit_missed_admin.py +1 -1
- meta_subject/admin/urine_dipstick_test_admin.py +1 -1
- meta_subject/admin/urine_pregnancy_admin.py +1 -1
- meta_subject/baker_recipes.py +15 -15
- meta_subject/form_validators/__init__.py +11 -0
- meta_subject/form_validators/delivery_form_validator.py +2 -3
- meta_subject/form_validators/dm_endpoint_form_validator.py +1 -1
- meta_subject/form_validators/dm_followup_form_validator.py +7 -6
- meta_subject/form_validators/glucose_form_validator.py +3 -5
- meta_subject/forms/__init__.py +41 -0
- meta_subject/forms/blood_results/__init__.py +9 -0
- meta_subject/forms/blood_results/blood_results_rft_form.py +1 -2
- meta_subject/forms/diabetes/__init__.py +2 -0
- meta_subject/forms/diabetes/dm_followup_form.py +2 -2
- meta_subject/forms/followup_vitals_form.py +3 -8
- meta_subject/forms/health_economics/__init__.py +2 -0
- meta_subject/forms/next_appointment_form.py +2 -3
- meta_subject/forms/slider_widget.py +1 -1
- meta_subject/forms/study_medication_form.py +11 -8
- meta_subject/management/commands/create_missing_refills.py +3 -3
- meta_subject/management/commands/create_missing_rx.py +1 -1
- meta_subject/management/commands/missed.py +20 -23
- meta_subject/metadata_rules/__init__.py +2 -0
- meta_subject/metadata_rules/predicates.py +25 -32
- meta_subject/migrations/0001_initial.py +61 -61
- meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
- meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
- meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
- meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
- meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
- meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
- meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
- meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
- meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
- meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
- meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
- meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
- meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
- meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
- meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
- meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
- meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
- meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
- meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
- meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
- meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
- meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
- meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
- meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
- meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
- meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
- meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
- meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
- meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
- meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
- meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
- meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
- meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
- meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +5 -6
- meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +5 -14
- meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +9297 -0
- meta_subject/model_mixins/__init__.py +8 -0
- meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
- meta_subject/model_mixins/vitals_fields_model_mixin.py +1 -1
- meta_subject/models/__init__.py +48 -0
- meta_subject/models/birth_outcomes.py +3 -3
- meta_subject/models/blood_results/__init__.py +11 -0
- meta_subject/models/delivery.py +3 -3
- meta_subject/models/diabetes/__init__.py +2 -0
- meta_subject/models/diabetes/dm_endpoint.py +4 -4
- meta_subject/models/diabetes/dm_followup.py +3 -4
- meta_subject/models/diet_and_lifestyle.py +2 -2
- meta_subject/models/followup_examination.py +11 -11
- meta_subject/models/glucose.py +4 -4
- meta_subject/models/glucose_fbg.py +2 -3
- meta_subject/models/health_economics/__init__.py +2 -0
- meta_subject/models/health_economics/health_economics.py +7 -7
- meta_subject/models/health_economics/health_economics_update.py +2 -1
- meta_subject/models/hepatitis_test.py +2 -2
- meta_subject/models/other_arv_regimens_detail.py +1 -1
- meta_subject/models/patient_history.py +5 -6
- meta_subject/models/physical_exam.py +2 -2
- meta_subject/models/pregnancy_update.py +1 -1
- meta_subject/models/signals.py +14 -12
- meta_subject/models/subject_visit.py +1 -1
- meta_subject/models/urine_dipstick_test.py +1 -1
- meta_subject/models/urine_pregnancy.py +1 -1
- meta_visit_schedule/visit_schedules/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/schedule.py +2 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +1 -2
- meta_ae/tests/holidays.csv +0 -15
- meta_ae/tests/tests/test_actions.py +0 -126
- meta_ae/tests/urls.py +0 -10
- meta_analytics/dataframes/glucose_endpoints/utils.py +0 -0
- meta_analytics/notebooks/anu.ipynb +0 -95
- meta_analytics/notebooks/appointment_planning.ipynb +0 -329
- meta_analytics/notebooks/arvs.ipynb +0 -103
- meta_analytics/notebooks/cleaning/__init__.py +0 -0
- meta_analytics/notebooks/cleaning/consent_v1_ext.ipynb +0 -227
- meta_analytics/notebooks/cleaning/offschedule_eos.ipynb +0 -353
- meta_analytics/notebooks/dsmc/renal_dysfunction.ipynb +0 -435
- meta_analytics/notebooks/endpoints/meta_endpoints_by_date.ipynb +0 -656
- meta_analytics/notebooks/followup_examination.ipynb +0 -141
- meta_analytics/notebooks/hba1c.ipynb +0 -136
- meta_analytics/notebooks/hiv_regimens.ipynb +0 -429
- meta_analytics/notebooks/incidence.ipynb +0 -232
- meta_analytics/notebooks/liver.ipynb +0 -389
- meta_analytics/notebooks/magreth.ipynb +0 -645
- meta_analytics/notebooks/monitoring_report.ipynb +0 -1834
- meta_analytics/notebooks/pharmacy.ipynb +0 -1061
- meta_analytics/notebooks/pharmacy_stock_202410.ipynb +0 -306
- meta_analytics/notebooks/qa.ipynb +0 -273
- meta_analytics/notebooks/steering.ipynb +0 -61
- meta_analytics/notebooks/undiagnosed/meta3_screening_consort_chart.ipynb +0 -1176
- meta_analytics/notebooks/undiagnosed/meta3_screening_undiagnosed.ipynb +0 -519
- meta_analytics/notebooks/undiagnosed/meta_screening_table2.ipynb +0 -964
- meta_analytics/notebooks/undiagnosed/screen_undiagnosed_or.ipynb +0 -296
- meta_analytics/notebooks/undiagnosed/screening.ipynb +0 -273
- meta_analytics/notebooks/undiagnosed/screening2.ipynb +0 -958
- meta_analytics/notebooks/undiagnosed/screening_undiagnosed_20241002.ipynb +0 -958
- meta_analytics/notebooks/ven.ipynb +0 -191
- meta_analytics/notebooks/vitals.ipynb +0 -263
- meta_analytics/tests/__init__.py +0 -0
- meta_analytics/tests/test_endpoints_by_date.py +0 -94
- meta_consent/tests/__init__.py +0 -0
- meta_consent/tests/holidays.csv +0 -15
- meta_consent/tests/tests/__init__.py +0 -0
- meta_consent/tests/tests/test_form_validators.py +0 -110
- meta_consent/tests/tests/test_subject_consent.py +0 -10
- meta_consent/tests/urls.py +0 -17
- meta_dashboard/tests/__init__.py +0 -0
- meta_dashboard/tests/admin.py +0 -22
- meta_dashboard/tests/holidays.csv +0 -15
- meta_dashboard/tests/tests/__init__.py +0 -0
- meta_dashboard/tests/urls.py +0 -55
- meta_edc/tests/__init__.py +0 -0
- meta_edc/tests/tests/__init__.py +0 -0
- meta_edc/tests/tests/test_endpoints.py +0 -555
- meta_edc-1.1.8.dist-info/METADATA +0 -767
- meta_edc-1.1.8.dist-info/WHEEL +0 -5
- meta_edc-1.1.8.dist-info/licenses/AUTHORS.rst +0 -8
- meta_edc-1.1.8.dist-info/top_level.txt +0 -20
- meta_labs/tests/__init__.py +0 -0
- meta_labs/tests/test_labs.py +0 -27
- meta_labs/tests/test_reportables.py +0 -70
- meta_labs/tests/urls.py +0 -4
- meta_lists/tests/__init__.py +0 -0
- meta_lists/tests/test_lists.py +0 -8
- meta_pharmacy/notebooks/pharmacy.ipynb +0 -41
- meta_prn/tests/__init__.py +0 -0
- meta_prn/tests/tests/__init__.py +0 -0
- meta_prn/tests/tests/test_actions.py +0 -97
- meta_prn/tests/tests/test_dm_referral.py +0 -203
- meta_prn/tests/tests/test_eos_events.py +0 -134
- meta_prn/tests/tests/test_manager_order.py +0 -14
- meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
- meta_prn/tests/urls.py +0 -10
- meta_rando/tests/__init__.py +0 -0
- meta_rando/tests/tests/__init__.py +0 -0
- meta_rando/tests/tests/test_randomizers.py +0 -57
- meta_reports/tests/__init__.py +0 -0
- meta_reports/tests/test_reports.py +0 -35
- meta_reports/tests/test_sql_gen.py +0 -5
- meta_reports/tests/urls.py +0 -4
- meta_screening/offline_models.py +0 -3
- meta_screening/tests/__init__.py +0 -0
- meta_screening/tests/holidays.csv +0 -15
- meta_screening/tests/meta_test_case_mixin.py +0 -234
- meta_screening/tests/options.py +0 -127
- meta_screening/tests/tests/__init__.py +0 -0
- meta_screening/tests/tests/test_forms.py +0 -404
- meta_screening/tests/tests/test_screening_part_one.py +0 -108
- meta_screening/tests/tests/test_screening_part_three.py +0 -433
- meta_screening/tests/tests/test_screening_part_two.py +0 -84
- meta_sites/tests/__init__.py +0 -0
- meta_sites/tests/test_sites.py +0 -12
- meta_sites/tests/urls.py +0 -4
- meta_stats/__init__.py +0 -0
- meta_stats/incidence.py +0 -16
- meta_stats/models.py +0 -0
- meta_stats/tests/__init__.py +0 -0
- meta_stats/tests/tests/__init__.py +0 -0
- meta_stats/tests/tests/test_incidence.py +0 -10
- meta_subject/tests/__init__.py +0 -0
- meta_subject/tests/holidays.csv +0 -15
- meta_subject/tests/tests/__init__.py +0 -0
- meta_subject/tests/tests/test_egfr.py +0 -234
- meta_subject/tests/tests/test_fixes.py +0 -64
- meta_subject/tests/tests/test_followup.py +0 -52
- meta_subject/tests/tests/test_manager_order.py +0 -11
- meta_subject/tests/tests/test_medication_adherence.py +0 -79
- meta_subject/tests/tests/test_metadata_rules.py +0 -135
- meta_subject/tests/tests/test_mnsi.py +0 -341
- meta_subject/tests/tests/test_next_appointment.py +0 -231
- meta_subject/tests/tests/test_patient_history_form.py +0 -74
- meta_subject/tests/tests/test_physical_exam.py +0 -84
- meta_subject/tests/tests/test_sf12.py +0 -161
- meta_subject/tests/tests/test_study_medication.py +0 -229
- meta_subject/tests/urls.py +0 -24
- meta_visit_schedule/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/test_schedule.py +0 -181
- meta_visit_schedule/tests/urls.py +0 -4
- tests/__init__.py +0 -0
- tests/etc/randomization_list.csv +0 -241
- tests/etc/randomization_list_phase_three.csv +0 -241
- tests/etc/user-aes-local.key +0 -0
- tests/etc/user-aes-restricted.key +0 -1
- tests/etc/user-rsa-local-private.pem +0 -27
- tests/etc/user-rsa-local-public.pem +0 -9
- tests/etc/user-rsa-restricted-private.pem +0 -27
- tests/etc/user-rsa-restricted-public.pem +0 -9
- tests/etc/user-salt-local.key +0 -0
- tests/etc/user-salt-restricted.key +0 -0
- tests/holidays.csv +0 -15
- tests/test_settings.py +0 -185
- {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/licenses/LICENSE +0 -0
- /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
- /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
meta_subject/forms/__init__.py
CHANGED
|
@@ -35,3 +35,44 @@ from .subject_visit_form import SubjectVisitForm
|
|
|
35
35
|
from .subject_visit_missed_form import SubjectVisitMissedForm
|
|
36
36
|
from .urine_dipstick_test_form import UrineDipstickTestForm
|
|
37
37
|
from .urine_pregnancy_form import UrinePregnancyForm
|
|
38
|
+
|
|
39
|
+
__all__ = [
|
|
40
|
+
"BirthOutcomesForm",
|
|
41
|
+
"BloodResultsFbcForm",
|
|
42
|
+
"BloodResultsHba1cForm",
|
|
43
|
+
"BloodResultsInsForm",
|
|
44
|
+
"BloodResultsInsForm",
|
|
45
|
+
"BloodResultsLftForm",
|
|
46
|
+
"BloodResultsLipidsForm",
|
|
47
|
+
"BloodResultsRftForm",
|
|
48
|
+
"ComplicationsGlycemiaForm",
|
|
49
|
+
"ConcomitantMedicationForm",
|
|
50
|
+
"DeliveryForm",
|
|
51
|
+
"DmEndpointForm",
|
|
52
|
+
"DmFollowupForm",
|
|
53
|
+
"EgfrDropNotificationForm",
|
|
54
|
+
"Eq5d3lForm",
|
|
55
|
+
"FollowupExaminationForm",
|
|
56
|
+
"FollowupVitalsForm",
|
|
57
|
+
"GlucoseFbgForm",
|
|
58
|
+
"GlucoseForm",
|
|
59
|
+
"HealthEconomicsSimpleForm",
|
|
60
|
+
"HealthEconomicsUpdateForm",
|
|
61
|
+
"HepatitisTestForm",
|
|
62
|
+
"MalariaTestForm",
|
|
63
|
+
"MedicationAdherenceForm",
|
|
64
|
+
"MnsiForm",
|
|
65
|
+
"NextAppointmentForm",
|
|
66
|
+
"OtherArvRegimensDetailForm",
|
|
67
|
+
"OtherArvRegimensForm",
|
|
68
|
+
"PatientHistoryForm",
|
|
69
|
+
"PhysicalExamForm",
|
|
70
|
+
"PregnancyUpdateForm",
|
|
71
|
+
"Sf12Form",
|
|
72
|
+
"StudyMedicationForm",
|
|
73
|
+
"SubjectRequisitionForm",
|
|
74
|
+
"SubjectVisitForm",
|
|
75
|
+
"SubjectVisitMissedForm",
|
|
76
|
+
"UrineDipstickTestForm",
|
|
77
|
+
"UrinePregnancyForm",
|
|
78
|
+
]
|
|
@@ -4,3 +4,12 @@ from .blood_results_ins_form import BloodResultsInsForm
|
|
|
4
4
|
from .blood_results_lft_form import BloodResultsLftForm
|
|
5
5
|
from .blood_results_lipids_form import BloodResultsLipidsForm
|
|
6
6
|
from .blood_results_rft_form import BloodResultsRftForm
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"BloodResultsFbcForm",
|
|
10
|
+
"BloodResultsHba1cForm",
|
|
11
|
+
"BloodResultsInsForm",
|
|
12
|
+
"BloodResultsLftForm",
|
|
13
|
+
"BloodResultsLipidsForm",
|
|
14
|
+
"BloodResultsRftForm",
|
|
15
|
+
]
|
|
@@ -30,7 +30,6 @@ class BloodResultsRftFormValidator(
|
|
|
30
30
|
if self.cleaned_data.get("creatinine_value") and self.cleaned_data.get(
|
|
31
31
|
"creatinine_units"
|
|
32
32
|
):
|
|
33
|
-
|
|
34
33
|
if is_baseline(self.related_visit):
|
|
35
34
|
baseline_egfr_value = None
|
|
36
35
|
else:
|
|
@@ -83,7 +82,7 @@ class BloodResultsRftForm(ActionItemCrfFormMixin, CrfModelFormMixin, forms.Model
|
|
|
83
82
|
class Meta(ActionItemCrfFormMixin.Meta):
|
|
84
83
|
model = BloodResultsRft
|
|
85
84
|
fields = "__all__"
|
|
86
|
-
help_texts = {
|
|
85
|
+
help_texts = { # noqa: RUF012
|
|
87
86
|
"action_identifier": "(read-only)",
|
|
88
87
|
"egfr_value": mark_safe( # nosec B308
|
|
89
88
|
"Calculated using 2009 CKD-EPI Creatinine. "
|
|
@@ -17,8 +17,8 @@ class DmFollowupForm(CrfModelFormMixin, ActionItemCrfFormMixin, forms.ModelForm)
|
|
|
17
17
|
class Meta:
|
|
18
18
|
model = DmFollowup
|
|
19
19
|
fields = "__all__"
|
|
20
|
-
help_text = {"action_identifier": "(read-only)"}
|
|
21
|
-
widgets = {
|
|
20
|
+
help_text = {"action_identifier": "(read-only)"} # noqa: RUF012
|
|
21
|
+
widgets = { # noqa: RUF012
|
|
22
22
|
"action_identifier": forms.TextInput(
|
|
23
23
|
attrs={"required": False, "readonly": "readonly"}
|
|
24
24
|
),
|
|
@@ -9,7 +9,6 @@ from ..models import FollowupVitals
|
|
|
9
9
|
|
|
10
10
|
class FollowupVitalsFormValidator(CrfFormValidator):
|
|
11
11
|
def clean(self):
|
|
12
|
-
|
|
13
12
|
self.required_if(
|
|
14
13
|
YES, field="waist_circumference_measured", field_required="waist_circumference"
|
|
15
14
|
)
|
|
@@ -17,13 +16,9 @@ class FollowupVitalsFormValidator(CrfFormValidator):
|
|
|
17
16
|
visit_code = (
|
|
18
17
|
f"{self.related_visit.visit_code}.{self.related_visit.visit_code_sequence}"
|
|
19
18
|
)
|
|
20
|
-
require_waist_circumference_comment = (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
visit_code in [f"{MONTH36}.0", f"{MONTH48}.0"]
|
|
24
|
-
or self.cleaned_data.get("waist_circumference_measured") == YES
|
|
25
|
-
)
|
|
26
|
-
else False
|
|
19
|
+
require_waist_circumference_comment = bool(
|
|
20
|
+
visit_code in [f"{MONTH36}.0", f"{MONTH48}.0"]
|
|
21
|
+
or self.cleaned_data.get("waist_circumference_measured") == YES
|
|
27
22
|
)
|
|
28
23
|
|
|
29
24
|
if (
|
|
@@ -18,17 +18,16 @@ class NextAppointmentCrfFormValidator(
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class NextAppointmentForm(CrfModelFormMixin, forms.ModelForm):
|
|
21
|
-
|
|
22
21
|
form_validator_cls = NextAppointmentCrfFormValidator
|
|
23
22
|
|
|
24
23
|
class Meta:
|
|
25
24
|
model = NextAppointment
|
|
26
25
|
fields = "__all__"
|
|
27
|
-
labels = {
|
|
26
|
+
labels = { # noqa: RUF012
|
|
28
27
|
"appt_date": "Next scheduled appointment date",
|
|
29
28
|
"visitschedule": "Next scheduled appointment",
|
|
30
29
|
}
|
|
31
|
-
help_texts = {
|
|
30
|
+
help_texts = { # noqa: RUF012
|
|
32
31
|
"appt_date": (
|
|
33
32
|
"Default recommended. If changed, should be within "
|
|
34
33
|
"the window period of the next appointment"
|
|
@@ -28,14 +28,17 @@ class StudyMedicationFormValidator(BaseStudyMedicationFormValidator):
|
|
|
28
28
|
except AttributeError:
|
|
29
29
|
self.raise_validation_error("Subject visit is required", INVALID_ERROR)
|
|
30
30
|
else:
|
|
31
|
-
if
|
|
32
|
-
|
|
31
|
+
if (
|
|
32
|
+
subject_visit.visit_code == DAY1
|
|
33
|
+
and subject_visit.visit_code_sequence == 0
|
|
34
|
+
and (
|
|
33
35
|
self.cleaned_data.get("dosage_guideline")
|
|
34
36
|
and self.cleaned_data.get("dosage_guideline").dose != 1000
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
)
|
|
38
|
+
):
|
|
39
|
+
raise forms.ValidationError(
|
|
40
|
+
{"dosage_guideline": "Invalid. Expected 1000mg/day at baseline"}
|
|
41
|
+
)
|
|
39
42
|
|
|
40
43
|
def validate_stock_codes_are_dispensed(self):
|
|
41
44
|
if self.cleaned_data.get("stock_codes"):
|
|
@@ -59,7 +62,7 @@ class StudyMedicationFormValidator(BaseStudyMedicationFormValidator):
|
|
|
59
62
|
self.subject_identifier
|
|
60
63
|
),
|
|
61
64
|
)
|
|
62
|
-
except ObjectDoesNotExist:
|
|
65
|
+
except ObjectDoesNotExist as e:
|
|
63
66
|
raise forms.ValidationError(
|
|
64
67
|
{
|
|
65
68
|
"stock_codes": (
|
|
@@ -68,7 +71,7 @@ class StudyMedicationFormValidator(BaseStudyMedicationFormValidator):
|
|
|
68
71
|
"Please check the bottle or check with your pharmacist."
|
|
69
72
|
)
|
|
70
73
|
}
|
|
71
|
-
)
|
|
74
|
+
) from e
|
|
72
75
|
|
|
73
76
|
|
|
74
77
|
class StudyMedicationForm(CrfModelFormMixin, forms.ModelForm):
|
|
@@ -39,14 +39,14 @@ def create_missing_rx_refills():
|
|
|
39
39
|
print_messages(messages)
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
def save_or_raise(obj, messages: list[str] = None):
|
|
42
|
+
def save_or_raise(obj, messages: list[str] | None = None):
|
|
43
43
|
try:
|
|
44
44
|
obj.save()
|
|
45
45
|
except NextStudyMedicationError as e:
|
|
46
46
|
messages.append(f"NextStudyMedicationError: {e}")
|
|
47
47
|
except ObjectDoesNotExist as e:
|
|
48
48
|
messages.append(
|
|
49
|
-
f"ObjectDoesNotExist: {obj.subject_identifier}, {obj.related_visit}, {
|
|
49
|
+
f"ObjectDoesNotExist: {obj.subject_identifier}, {obj.related_visit}, {e!s}"
|
|
50
50
|
)
|
|
51
51
|
except StudyMedicationError as e:
|
|
52
52
|
messages.append(f"StudyMedicationError: {e}")
|
|
@@ -65,5 +65,5 @@ def print_messages(messages: list[str]):
|
|
|
65
65
|
|
|
66
66
|
|
|
67
67
|
class Command(BaseCommand):
|
|
68
|
-
def handle(self, *args, **options):
|
|
68
|
+
def handle(self, *args, **options): # noqa: ARG002
|
|
69
69
|
create_missing_rx_refills()
|
|
@@ -46,21 +46,21 @@ def get_missed_visit_codes(subject_identifier: str) -> list[str]:
|
|
|
46
46
|
"""Return visit codes from SubjectVisitMissed
|
|
47
47
|
reports for this subject.
|
|
48
48
|
"""
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
return [
|
|
50
|
+
missed_obj.subject_visit.visit_code
|
|
51
|
+
for missed_obj in SubjectVisitMissed.objects.filter(
|
|
52
|
+
subject_visit__subject_identifier=subject_identifier
|
|
53
|
+
).order_by("report_datetime")
|
|
54
|
+
]
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
def get_missed_visit_codes_from_subject_visit(subject_identifier: str) -> list[str]:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
58
|
+
return [
|
|
59
|
+
missed_obj.visit_code
|
|
60
|
+
for missed_obj in SubjectVisit.objects.filter(
|
|
61
|
+
subject_identifier=subject_identifier, reason=MISSED_VISIT
|
|
62
|
+
).order_by("report_datetime")
|
|
63
|
+
]
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
def run():
|
|
@@ -70,9 +70,8 @@ def run():
|
|
|
70
70
|
RegisteredSubject.objects.all().order_by("subject_identifier"), total=total
|
|
71
71
|
):
|
|
72
72
|
missed_visit_codes = get_missed_visit_codes(obj.subject_identifier)
|
|
73
|
-
if len(missed_visit_codes) > 2:
|
|
74
|
-
|
|
75
|
-
result.update({obj.subject_identifier: missed_visit_codes})
|
|
73
|
+
if len(missed_visit_codes) > 2 and is_sublist(missed_visit_codes, visit_codes):
|
|
74
|
+
result.update({obj.subject_identifier: missed_visit_codes})
|
|
76
75
|
return result
|
|
77
76
|
|
|
78
77
|
|
|
@@ -83,9 +82,8 @@ def run2():
|
|
|
83
82
|
RegisteredSubject.objects.all().order_by("subject_identifier"), total=total
|
|
84
83
|
):
|
|
85
84
|
missed_visit_codes = get_missed_visit_codes_from_subject_visit(obj.subject_identifier)
|
|
86
|
-
if len(missed_visit_codes) > 2:
|
|
87
|
-
|
|
88
|
-
result.update({obj.subject_identifier: missed_visit_codes})
|
|
85
|
+
if len(missed_visit_codes) > 2 and is_sublist(missed_visit_codes, visit_codes):
|
|
86
|
+
result.update({obj.subject_identifier: missed_visit_codes})
|
|
89
87
|
return result
|
|
90
88
|
|
|
91
89
|
|
|
@@ -102,9 +100,8 @@ def new_appointments():
|
|
|
102
100
|
timepoint_datetime__lte=get_utcnow(),
|
|
103
101
|
).order_by("timepoint_datetime"):
|
|
104
102
|
codes.append(appointment.visit_code)
|
|
105
|
-
if len(codes) >= 2:
|
|
106
|
-
|
|
107
|
-
result.update({obj.subject_identifier: codes})
|
|
103
|
+
if len(codes) >= 2 and is_sublist(codes, visit_codes):
|
|
104
|
+
result.update({obj.subject_identifier: codes})
|
|
108
105
|
return result
|
|
109
106
|
|
|
110
107
|
|
|
@@ -133,7 +130,7 @@ def new_appointments_within(months: int):
|
|
|
133
130
|
class Result:
|
|
134
131
|
"""Used with run3."""
|
|
135
132
|
|
|
136
|
-
def __init__(
|
|
133
|
+
def __init__( # noqa: PLR0913
|
|
137
134
|
self,
|
|
138
135
|
subject_identifier: str,
|
|
139
136
|
sid: str,
|
|
@@ -166,7 +163,7 @@ class Result:
|
|
|
166
163
|
self.visit_codes = codes
|
|
167
164
|
|
|
168
165
|
def __str__(self):
|
|
169
|
-
return self.subject_identifier
|
|
166
|
+
return f"{self.subject_identifier} {self.visit_codes}"
|
|
170
167
|
|
|
171
168
|
def formatted(self) -> str:
|
|
172
169
|
"""Copy/paste output into text file"""
|
|
@@ -71,26 +71,21 @@ class Predicates(PersistantSingletonMixin):
|
|
|
71
71
|
app_label = "meta_subject"
|
|
72
72
|
|
|
73
73
|
@staticmethod
|
|
74
|
-
def next_appt_required(visit, **kwargs):
|
|
75
|
-
|
|
76
|
-
return True
|
|
77
|
-
return False
|
|
74
|
+
def next_appt_required(visit, **kwargs): # noqa: ARG004
|
|
75
|
+
return visit.appointment.next and visit.appointment.next.appt_status == NEW_APPT
|
|
78
76
|
|
|
79
77
|
@staticmethod
|
|
80
|
-
def glucose_required(visit, **kwargs):
|
|
81
|
-
|
|
82
|
-
return True
|
|
83
|
-
return False
|
|
78
|
+
def glucose_required(visit, **kwargs): # noqa: ARG004
|
|
79
|
+
return visit.visit_code in [MONTH12, MONTH24, MONTH36, MONTH48]
|
|
84
80
|
|
|
85
81
|
@staticmethod
|
|
86
|
-
def glucose_fbg_required(visit, **kwargs):
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return False
|
|
82
|
+
def glucose_fbg_required(visit, **kwargs): # noqa: ARG004
|
|
83
|
+
return visit.report_datetime >= datetime(
|
|
84
|
+
2024, 3, 4, tzinfo=ZoneInfo("UTC")
|
|
85
|
+
) and visit.visit_code in [MONTH6, MONTH18, MONTH30, MONTH42]
|
|
91
86
|
|
|
92
87
|
@staticmethod
|
|
93
|
-
def pregnancy_notification_exists(visit, **kwargs):
|
|
88
|
+
def pregnancy_notification_exists(visit, **kwargs): # noqa: ARG004
|
|
94
89
|
model_cls = django_apps.get_model("meta_prn.pregnancynotification")
|
|
95
90
|
try:
|
|
96
91
|
model_cls.objects.get(subject_identifier=visit.subject_identifier, delivered=False)
|
|
@@ -101,7 +96,7 @@ class Predicates(PersistantSingletonMixin):
|
|
|
101
96
|
return required
|
|
102
97
|
|
|
103
98
|
@staticmethod
|
|
104
|
-
def hba1c_crf_required(visit, **kwargs) -> bool:
|
|
99
|
+
def hba1c_crf_required(visit, **kwargs) -> bool: # noqa: ARG004
|
|
105
100
|
"""Require at baseline visit if not recorded on the
|
|
106
101
|
screening form.
|
|
107
102
|
"""
|
|
@@ -117,7 +112,7 @@ class Predicates(PersistantSingletonMixin):
|
|
|
117
112
|
return required
|
|
118
113
|
|
|
119
114
|
@staticmethod
|
|
120
|
-
def hba1c_requisition_required(visit, **kwargs) -> bool:
|
|
115
|
+
def hba1c_requisition_required(visit, **kwargs) -> bool: # noqa: ARG004
|
|
121
116
|
"""Require at baseline visit if not recorded on the
|
|
122
117
|
screening form.
|
|
123
118
|
"""
|
|
@@ -133,7 +128,7 @@ class Predicates(PersistantSingletonMixin):
|
|
|
133
128
|
return required
|
|
134
129
|
|
|
135
130
|
@staticmethod
|
|
136
|
-
def insulin_crf_required(visit, **kwargs) -> bool:
|
|
131
|
+
def insulin_crf_required(visit, **kwargs) -> bool: # noqa: ARG004
|
|
137
132
|
"""Require at baseline visit"""
|
|
138
133
|
required = False
|
|
139
134
|
if (
|
|
@@ -150,7 +145,7 @@ class Predicates(PersistantSingletonMixin):
|
|
|
150
145
|
return required
|
|
151
146
|
|
|
152
147
|
@staticmethod
|
|
153
|
-
def insulin_requisition_required(visit, **kwargs) -> bool:
|
|
148
|
+
def insulin_requisition_required(visit, **kwargs) -> bool: # noqa: ARG004
|
|
154
149
|
"""Require at baseline visit"""
|
|
155
150
|
required = False
|
|
156
151
|
if (
|
|
@@ -166,7 +161,7 @@ class Predicates(PersistantSingletonMixin):
|
|
|
166
161
|
required = True
|
|
167
162
|
return required
|
|
168
163
|
|
|
169
|
-
def health_economics_required(self, visit, **kwargs) -> bool:
|
|
164
|
+
def health_economics_required(self, visit, **kwargs) -> bool: # noqa: ARG002
|
|
170
165
|
"""Returns true if HE was not completed at week 2"""
|
|
171
166
|
|
|
172
167
|
required = False
|
|
@@ -190,7 +185,7 @@ class Predicates(PersistantSingletonMixin):
|
|
|
190
185
|
required = True
|
|
191
186
|
return required
|
|
192
187
|
|
|
193
|
-
def health_economics_update_required(self, visit, **kwargs) -> bool:
|
|
188
|
+
def health_economics_update_required(self, visit, **kwargs) -> bool: # noqa: ARG002
|
|
194
189
|
"""Returns true if `healtheconomicsupdate` was not completed at
|
|
195
190
|
month 3 or ever.
|
|
196
191
|
|
|
@@ -212,7 +207,7 @@ class Predicates(PersistantSingletonMixin):
|
|
|
212
207
|
required = True
|
|
213
208
|
return required
|
|
214
209
|
|
|
215
|
-
def mnsi_required(self, visit, **kwargs) -> bool:
|
|
210
|
+
def mnsi_required(self, visit, **kwargs) -> bool: # noqa: ARG002
|
|
216
211
|
"""Returns True if:
|
|
217
212
|
- MNSI assessment not performed in the 1, 3 or 6M visits
|
|
218
213
|
- MNSI assessment not performed in the 36, 39, 42, 45M visits
|
|
@@ -223,9 +218,7 @@ class Predicates(PersistantSingletonMixin):
|
|
|
223
218
|
|
|
224
219
|
if self.offschedule_today(visit):
|
|
225
220
|
return True
|
|
226
|
-
|
|
227
|
-
required = False
|
|
228
|
-
elif visit.visit_code not in [
|
|
221
|
+
if visit.visit_code_sequence != 0 or visit.visit_code not in [
|
|
229
222
|
MONTH1,
|
|
230
223
|
MONTH3,
|
|
231
224
|
MONTH6,
|
|
@@ -258,21 +251,21 @@ class Predicates(PersistantSingletonMixin):
|
|
|
258
251
|
break
|
|
259
252
|
return required
|
|
260
253
|
|
|
261
|
-
def sf12_required(self, visit, **kwargs):
|
|
254
|
+
def sf12_required(self, visit, **kwargs): # noqa: ARG002
|
|
262
255
|
model = f"{self.app_label}.sf12"
|
|
263
|
-
if self.offschedule_today(visit)
|
|
264
|
-
|
|
265
|
-
|
|
256
|
+
if self.offschedule_today(visit) or (
|
|
257
|
+
visit.visit_code_sequence == 0 and visit.visit_code in [MONTH36, MONTH48]
|
|
258
|
+
):
|
|
266
259
|
return True
|
|
267
260
|
return self.persistant_singleton_required(
|
|
268
261
|
visit, model=model, exclude_visit_codes=[DAY1]
|
|
269
262
|
)
|
|
270
263
|
|
|
271
|
-
def eq5d3l_required(self, visit, **kwargs):
|
|
264
|
+
def eq5d3l_required(self, visit, **kwargs): # noqa: ARG002
|
|
272
265
|
model = f"{self.app_label}.eq5d3l"
|
|
273
|
-
if self.offschedule_today(visit)
|
|
274
|
-
|
|
275
|
-
|
|
266
|
+
if self.offschedule_today(visit) or (
|
|
267
|
+
visit.visit_code_sequence == 0 and visit.visit_code in [MONTH36, MONTH48]
|
|
268
|
+
):
|
|
276
269
|
return True
|
|
277
270
|
return self.persistant_singleton_required(
|
|
278
271
|
visit, model=model, exclude_visit_codes=[DAY1]
|