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_edc-1.1.8.dist-info/WHEEL
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
meta_ae
|
|
2
|
-
meta_analytics
|
|
3
|
-
meta_auth
|
|
4
|
-
meta_consent
|
|
5
|
-
meta_dashboard
|
|
6
|
-
meta_data_manager
|
|
7
|
-
meta_edc
|
|
8
|
-
meta_export
|
|
9
|
-
meta_labs
|
|
10
|
-
meta_lists
|
|
11
|
-
meta_pharmacy
|
|
12
|
-
meta_prn
|
|
13
|
-
meta_rando
|
|
14
|
-
meta_reports
|
|
15
|
-
meta_screening
|
|
16
|
-
meta_sites
|
|
17
|
-
meta_stats
|
|
18
|
-
meta_subject
|
|
19
|
-
meta_visit_schedule
|
|
20
|
-
tests
|
meta_labs/tests/__init__.py
DELETED
|
File without changes
|
meta_labs/tests/test_labs.py
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
from django.test import TestCase
|
|
2
|
-
from edc_lab.models import Panel
|
|
3
|
-
from edc_lab.site_labs import site_labs
|
|
4
|
-
|
|
5
|
-
from ..lab_profiles import subject_lab_profile
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class TestLabs(TestCase):
|
|
9
|
-
def setUp(self):
|
|
10
|
-
site_labs._registry = {}
|
|
11
|
-
site_labs.loaded = False
|
|
12
|
-
site_labs.register(lab_profile=subject_lab_profile)
|
|
13
|
-
|
|
14
|
-
def test_(self):
|
|
15
|
-
obj = site_labs.get(lab_profile_name="subject_lab_profile")
|
|
16
|
-
self.assertEqual(obj, subject_lab_profile)
|
|
17
|
-
|
|
18
|
-
def test_lab_profile_model(self):
|
|
19
|
-
obj = site_labs.get(lab_profile_name="subject_lab_profile")
|
|
20
|
-
self.assertEqual("meta_subject.subjectrequisition", obj.requisition_model)
|
|
21
|
-
|
|
22
|
-
def test_panel_model(self):
|
|
23
|
-
for panel in site_labs.get(lab_profile_name="subject_lab_profile").panels.values():
|
|
24
|
-
self.assertEqual(panel.requisition_model, "meta_subject.subjectrequisition")
|
|
25
|
-
|
|
26
|
-
def test_panels_exist(self):
|
|
27
|
-
self.assertGreater(Panel.objects.all().count(), 0)
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
from django.test import TestCase, tag
|
|
2
|
-
from edc_lab import site_labs
|
|
3
|
-
from edc_reportable.models import GradingData, NormalData, ReferenceRangeCollection
|
|
4
|
-
from edc_reportable.utils import load_reference_ranges
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class TestReportables(TestCase):
|
|
8
|
-
@tag("37")
|
|
9
|
-
def test_load_reference_ranges(self):
|
|
10
|
-
|
|
11
|
-
from meta_labs.reportables import (
|
|
12
|
-
collection_name,
|
|
13
|
-
grading_data,
|
|
14
|
-
normal_data,
|
|
15
|
-
reportable_grades,
|
|
16
|
-
reportable_grades_exceptions,
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
load_reference_ranges(
|
|
20
|
-
collection_name=collection_name,
|
|
21
|
-
grading_data=grading_data,
|
|
22
|
-
normal_data=normal_data,
|
|
23
|
-
reportable_grades=reportable_grades,
|
|
24
|
-
reportable_grades_exceptions=reportable_grades_exceptions,
|
|
25
|
-
)
|
|
26
|
-
self.assertTrue(ReferenceRangeCollection.objects.filter(name=collection_name).exists())
|
|
27
|
-
reference_range_collection = ReferenceRangeCollection.objects.get(name=collection_name)
|
|
28
|
-
|
|
29
|
-
for panel_name, requisition_panel in site_labs.lab_profiles.get(
|
|
30
|
-
"subject_lab_profile"
|
|
31
|
-
).panels.items():
|
|
32
|
-
for utest_id in requisition_panel.utest_ids:
|
|
33
|
-
try:
|
|
34
|
-
utest_id, _ = utest_id
|
|
35
|
-
except ValueError:
|
|
36
|
-
pass
|
|
37
|
-
if not NormalData.objects.filter(label=utest_id).exists():
|
|
38
|
-
print(f"{utest_id} does not exist in NormalData")
|
|
39
|
-
if not GradingData.objects.filter(label=utest_id).exists():
|
|
40
|
-
print(f"{utest_id} does not exist in GradingData")
|
|
41
|
-
|
|
42
|
-
for panel_name, requisition_panel in site_labs.lab_profiles.get(
|
|
43
|
-
"subject_lab_profile"
|
|
44
|
-
).panels.items():
|
|
45
|
-
for utest_id in requisition_panel.utest_ids:
|
|
46
|
-
try:
|
|
47
|
-
utest_id, _ = utest_id
|
|
48
|
-
except ValueError:
|
|
49
|
-
pass
|
|
50
|
-
self.assertTrue(
|
|
51
|
-
NormalData.objects.filter(label=utest_id).exists(),
|
|
52
|
-
msg=f"{utest_id} does not exist in NormalData",
|
|
53
|
-
)
|
|
54
|
-
self.assertTrue(
|
|
55
|
-
GradingData.objects.filter(label=utest_id).exists(),
|
|
56
|
-
msg=f"{utest_id} does not exist in GradingData",
|
|
57
|
-
)
|
|
58
|
-
|
|
59
|
-
self.assertEqual(
|
|
60
|
-
NormalData.objects.filter(
|
|
61
|
-
reference_range_collection=reference_range_collection
|
|
62
|
-
).count(),
|
|
63
|
-
88,
|
|
64
|
-
)
|
|
65
|
-
self.assertEqual(
|
|
66
|
-
GradingData.objects.filter(
|
|
67
|
-
reference_range_collection=reference_range_collection
|
|
68
|
-
).count(),
|
|
69
|
-
180,
|
|
70
|
-
)
|
meta_labs/tests/urls.py
DELETED
meta_lists/tests/__init__.py
DELETED
|
File without changes
|
meta_lists/tests/test_lists.py
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"cells": [
|
|
3
|
-
{
|
|
4
|
-
"cell_type": "code",
|
|
5
|
-
"execution_count": null,
|
|
6
|
-
"id": "0",
|
|
7
|
-
"metadata": {},
|
|
8
|
-
"outputs": [],
|
|
9
|
-
"source": []
|
|
10
|
-
},
|
|
11
|
-
{
|
|
12
|
-
"cell_type": "code",
|
|
13
|
-
"execution_count": null,
|
|
14
|
-
"id": "1",
|
|
15
|
-
"metadata": {},
|
|
16
|
-
"outputs": [],
|
|
17
|
-
"source": []
|
|
18
|
-
}
|
|
19
|
-
],
|
|
20
|
-
"metadata": {
|
|
21
|
-
"kernelspec": {
|
|
22
|
-
"display_name": "Python 3",
|
|
23
|
-
"language": "python",
|
|
24
|
-
"name": "python3"
|
|
25
|
-
},
|
|
26
|
-
"language_info": {
|
|
27
|
-
"codemirror_mode": {
|
|
28
|
-
"name": "ipython",
|
|
29
|
-
"version": 2
|
|
30
|
-
},
|
|
31
|
-
"file_extension": ".py",
|
|
32
|
-
"mimetype": "text/x-python",
|
|
33
|
-
"name": "python",
|
|
34
|
-
"nbconvert_exporter": "python",
|
|
35
|
-
"pygments_lexer": "ipython2",
|
|
36
|
-
"version": "2.7.6"
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
"nbformat": 4,
|
|
40
|
-
"nbformat_minor": 5
|
|
41
|
-
}
|
meta_prn/tests/__init__.py
DELETED
|
File without changes
|
meta_prn/tests/tests/__init__.py
DELETED
|
File without changes
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
from django.core.exceptions import ObjectDoesNotExist
|
|
2
|
-
from django.test import TestCase
|
|
3
|
-
from edc_action_item.models import ActionItem
|
|
4
|
-
from edc_appointment.models import Appointment
|
|
5
|
-
from edc_constants.constants import FEMALE
|
|
6
|
-
from edc_utils import get_utcnow
|
|
7
|
-
from edc_visit_schedule.constants import MONTH1
|
|
8
|
-
from model_bakery.baker import make_recipe
|
|
9
|
-
|
|
10
|
-
from meta_prn.models import OffSchedulePregnancy
|
|
11
|
-
from meta_screening.tests.meta_test_case_mixin import MetaTestCaseMixin
|
|
12
|
-
from meta_visit_schedule.constants import DELIVERY
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class TestMetadataRules(MetaTestCaseMixin, TestCase):
|
|
16
|
-
def setUp(self):
|
|
17
|
-
super().setUp()
|
|
18
|
-
self.subject_screening = self.get_subject_screening(gender=FEMALE)
|
|
19
|
-
self.subject_consent = self.get_subject_consent(self.subject_screening)
|
|
20
|
-
self.subject_visit = self.get_subject_visit(
|
|
21
|
-
subject_screening=self.subject_screening,
|
|
22
|
-
subject_consent=self.subject_consent,
|
|
23
|
-
)
|
|
24
|
-
self.data = dict(
|
|
25
|
-
subject_visit=self.subject_visit.pk,
|
|
26
|
-
report_datetime=self.subject_visit.report_datetime,
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
def test_pregnancy_actions(self):
|
|
30
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
31
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
32
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
33
|
-
|
|
34
|
-
urine_pregnancy = make_recipe(
|
|
35
|
-
"meta_subject.urinepregnancy",
|
|
36
|
-
subject_visit=subject_visit,
|
|
37
|
-
report_datetime=get_utcnow(),
|
|
38
|
-
assay_date=get_utcnow().date(),
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
try:
|
|
42
|
-
ActionItem.objects.get(
|
|
43
|
-
action_identifier=urine_pregnancy.action_identifier,
|
|
44
|
-
action_type__reference_model="meta_subject.urinepregnancy",
|
|
45
|
-
)
|
|
46
|
-
except ObjectDoesNotExist:
|
|
47
|
-
self.fail("ActionItem for urinepregnancy unexpectedly does not exist")
|
|
48
|
-
|
|
49
|
-
try:
|
|
50
|
-
ActionItem.objects.get(
|
|
51
|
-
parent_action_item__action_identifier=urine_pregnancy.action_identifier,
|
|
52
|
-
action_type__reference_model="meta_prn.pregnancynotification",
|
|
53
|
-
)
|
|
54
|
-
except ObjectDoesNotExist:
|
|
55
|
-
self.fail("ActionItem for pregnancynotification unexpectedly does not exist")
|
|
56
|
-
|
|
57
|
-
make_recipe(
|
|
58
|
-
"meta_prn.pregnancynotification",
|
|
59
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
try:
|
|
63
|
-
appointment = Appointment.objects.get(visit_code=DELIVERY)
|
|
64
|
-
except ObjectDoesNotExist:
|
|
65
|
-
self.fail("delivery appointment unexpectedly does not exist")
|
|
66
|
-
|
|
67
|
-
subject_visit = self.get_subject_visit(
|
|
68
|
-
subject_screening=self.subject_screening,
|
|
69
|
-
subject_consent=self.subject_consent,
|
|
70
|
-
visit_code=DELIVERY,
|
|
71
|
-
visit_code_sequence=0,
|
|
72
|
-
appt_datetime=appointment.appt_datetime,
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
delivery = make_recipe(
|
|
76
|
-
"meta_subject.delivery",
|
|
77
|
-
subject_visit=subject_visit,
|
|
78
|
-
)
|
|
79
|
-
|
|
80
|
-
try:
|
|
81
|
-
ActionItem.objects.get(
|
|
82
|
-
parent_action_item__action_identifier=delivery.action_identifier,
|
|
83
|
-
action_type__reference_model="meta_prn.offschedulepregnancy",
|
|
84
|
-
)
|
|
85
|
-
except ObjectDoesNotExist:
|
|
86
|
-
self.fail("ActionItem for offschedulepregnancy unexpectedly does not exist")
|
|
87
|
-
|
|
88
|
-
offschedule_pregancy = OffSchedulePregnancy.objects.get(
|
|
89
|
-
subject_identifier=delivery.subject_visit.subject_identifier
|
|
90
|
-
)
|
|
91
|
-
try:
|
|
92
|
-
ActionItem.objects.get(
|
|
93
|
-
parent_action_item__action_identifier=offschedule_pregancy.action_identifier,
|
|
94
|
-
action_type__reference_model="meta_prn.endofstudy",
|
|
95
|
-
)
|
|
96
|
-
except ObjectDoesNotExist:
|
|
97
|
-
self.fail("ActionItem for endofstudy unexpectedly does not exist")
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
from dateutil.relativedelta import relativedelta
|
|
2
|
-
from django.core.exceptions import ObjectDoesNotExist
|
|
3
|
-
from django.test import TestCase
|
|
4
|
-
from edc_action_item.models import ActionItem
|
|
5
|
-
from edc_appointment.constants import COMPLETE_APPT
|
|
6
|
-
from edc_appointment.models import Appointment
|
|
7
|
-
from edc_constants.constants import CLOSED, FEMALE, NEW, NO, PATIENT, YES
|
|
8
|
-
from edc_pharmacy.constants import IN_PROGRESS_APPT
|
|
9
|
-
from edc_utils import get_utcnow
|
|
10
|
-
from edc_visit_schedule.constants import MONTH1, OFFSCHEDULE_ACTION
|
|
11
|
-
from edc_visit_tracking.constants import SCHEDULED
|
|
12
|
-
|
|
13
|
-
from meta_lists.models import MissedReferralReasons
|
|
14
|
-
from meta_prn.constants import (
|
|
15
|
-
OFFSCHEDULE_DM_REFERRAL_ACTION,
|
|
16
|
-
OFFSTUDY_MEDICATION_ACTION,
|
|
17
|
-
)
|
|
18
|
-
from meta_prn.models import DmReferral, OnScheduleDmReferral
|
|
19
|
-
from meta_screening.tests.meta_test_case_mixin import MetaTestCaseMixin
|
|
20
|
-
from meta_subject.constants import DM_FOLLOWUP_ACTION
|
|
21
|
-
from meta_subject.models import DmEndpoint, DmFollowup, SubjectVisit
|
|
22
|
-
from meta_visit_schedule.constants import DM_BASELINE, DM_FOLLOWUP, SCHEDULE_DM_REFERRAL
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class TestDmReferral(MetaTestCaseMixin, TestCase):
|
|
26
|
-
def setUp(self):
|
|
27
|
-
super().setUp()
|
|
28
|
-
self.subject_visit = self.get_subject_visit(gender=FEMALE)
|
|
29
|
-
|
|
30
|
-
def test_dm_referral_puts_subject_on_dm_followup_schedule(self):
|
|
31
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
32
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
33
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
34
|
-
dm_referral = DmReferral.objects.create(
|
|
35
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
36
|
-
report_datetime=get_utcnow(),
|
|
37
|
-
referral_date=get_utcnow(),
|
|
38
|
-
)
|
|
39
|
-
self.assertIsNotNone(dm_referral.report_datetime)
|
|
40
|
-
self.assertIsNotNone(dm_referral.referral_date)
|
|
41
|
-
self.assertIsNotNone(dm_referral.action_identifier)
|
|
42
|
-
|
|
43
|
-
# verify subject is on DM Followup schedule
|
|
44
|
-
try:
|
|
45
|
-
OnScheduleDmReferral.objects.get(
|
|
46
|
-
subject_identifier=subject_visit.subject_identifier
|
|
47
|
-
)
|
|
48
|
-
except ObjectDoesNotExist:
|
|
49
|
-
self.fail("OnScheduleDmReferral unexpectedly does not exist")
|
|
50
|
-
|
|
51
|
-
def test_dm_referral_action_creates_offschedule_action(self):
|
|
52
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
53
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
54
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
55
|
-
dm_referral = DmReferral.objects.create(
|
|
56
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
57
|
-
report_datetime=get_utcnow(),
|
|
58
|
-
referral_date=get_utcnow(),
|
|
59
|
-
)
|
|
60
|
-
self.assertIsNotNone(dm_referral.report_datetime)
|
|
61
|
-
self.assertIsNotNone(dm_referral.referral_date)
|
|
62
|
-
self.assertIsNotNone(dm_referral.action_identifier)
|
|
63
|
-
|
|
64
|
-
try:
|
|
65
|
-
ActionItem.objects.get(
|
|
66
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
67
|
-
action_type__name=OFFSCHEDULE_ACTION,
|
|
68
|
-
status=CLOSED,
|
|
69
|
-
)
|
|
70
|
-
except ObjectDoesNotExist:
|
|
71
|
-
self.fail(f"{OFFSCHEDULE_ACTION} Action item unexpectedly does not exist")
|
|
72
|
-
|
|
73
|
-
def test_dm_referral_creates_offstudy_med_action(self):
|
|
74
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
75
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
76
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
77
|
-
dm_referral = DmReferral.objects.create(
|
|
78
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
79
|
-
report_datetime=get_utcnow(),
|
|
80
|
-
referral_date=get_utcnow(),
|
|
81
|
-
)
|
|
82
|
-
self.assertIsNotNone(dm_referral.report_datetime)
|
|
83
|
-
self.assertIsNotNone(dm_referral.referral_date)
|
|
84
|
-
self.assertIsNotNone(dm_referral.action_identifier)
|
|
85
|
-
|
|
86
|
-
# verify action items are created
|
|
87
|
-
try:
|
|
88
|
-
ActionItem.objects.get(
|
|
89
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
90
|
-
action_type__name=OFFSTUDY_MEDICATION_ACTION,
|
|
91
|
-
status=NEW,
|
|
92
|
-
)
|
|
93
|
-
except ObjectDoesNotExist:
|
|
94
|
-
self.fail(f"{OFFSTUDY_MEDICATION_ACTION} Action item unexpectedly does not exist")
|
|
95
|
-
|
|
96
|
-
def test_dm_referral_creates_dm_followup_action(self):
|
|
97
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
98
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
99
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
100
|
-
dm_referral = DmReferral.objects.create(
|
|
101
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
102
|
-
report_datetime=get_utcnow(),
|
|
103
|
-
referral_date=get_utcnow(),
|
|
104
|
-
)
|
|
105
|
-
self.assertIsNotNone(dm_referral.report_datetime)
|
|
106
|
-
self.assertIsNotNone(dm_referral.referral_date)
|
|
107
|
-
self.assertIsNotNone(dm_referral.action_identifier)
|
|
108
|
-
|
|
109
|
-
try:
|
|
110
|
-
ActionItem.objects.get(
|
|
111
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
112
|
-
action_type__name=DM_FOLLOWUP_ACTION,
|
|
113
|
-
status=NEW,
|
|
114
|
-
)
|
|
115
|
-
except ObjectDoesNotExist:
|
|
116
|
-
self.fail(f"{DM_FOLLOWUP_ACTION} Action item unexpectedly does not exist")
|
|
117
|
-
|
|
118
|
-
def test_dm_referral2(self):
|
|
119
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
120
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
121
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
122
|
-
referral_datetime = subject_visit.report_datetime
|
|
123
|
-
DmReferral.objects.create(
|
|
124
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
125
|
-
report_datetime=referral_datetime,
|
|
126
|
-
referral_date=referral_datetime.date(),
|
|
127
|
-
)
|
|
128
|
-
|
|
129
|
-
# Add DM Baseline
|
|
130
|
-
appointment = Appointment.objects.get(
|
|
131
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
132
|
-
schedule_name=SCHEDULE_DM_REFERRAL,
|
|
133
|
-
visit_code=DM_BASELINE,
|
|
134
|
-
)
|
|
135
|
-
appointment.appt_status = IN_PROGRESS_APPT
|
|
136
|
-
appointment.save()
|
|
137
|
-
|
|
138
|
-
subject_visit = SubjectVisit.objects.create(
|
|
139
|
-
appointment=appointment,
|
|
140
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
141
|
-
report_datetime=appointment.appt_datetime,
|
|
142
|
-
reason=SCHEDULED,
|
|
143
|
-
info_source=PATIENT,
|
|
144
|
-
)
|
|
145
|
-
|
|
146
|
-
DmEndpoint.objects.create(
|
|
147
|
-
subject_visit=subject_visit,
|
|
148
|
-
report_datetime=get_utcnow(),
|
|
149
|
-
dx_date=referral_datetime.date(),
|
|
150
|
-
dx_initiated_by="fbg_confirmed",
|
|
151
|
-
dx_tmg=YES,
|
|
152
|
-
dx_tmg_date=referral_datetime.date(),
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
# Add DM Followup
|
|
156
|
-
followup_datetime = referral_datetime + relativedelta(months=6)
|
|
157
|
-
appointment = Appointment.objects.get(
|
|
158
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
159
|
-
schedule_name=SCHEDULE_DM_REFERRAL,
|
|
160
|
-
visit_code=DM_FOLLOWUP,
|
|
161
|
-
)
|
|
162
|
-
appointment.appt_status = IN_PROGRESS_APPT
|
|
163
|
-
appointment.save()
|
|
164
|
-
|
|
165
|
-
subject_visit = SubjectVisit.objects.create(
|
|
166
|
-
appointment=appointment,
|
|
167
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
168
|
-
report_datetime=appointment.appt_datetime,
|
|
169
|
-
reason=SCHEDULED,
|
|
170
|
-
info_source=PATIENT,
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
dm_followup = DmFollowup.objects.create(
|
|
174
|
-
subject_visit=subject_visit,
|
|
175
|
-
report_datetime=followup_datetime,
|
|
176
|
-
referral_date=referral_datetime.date(),
|
|
177
|
-
attended=NO,
|
|
178
|
-
on_dm_medications=NO,
|
|
179
|
-
)
|
|
180
|
-
dm_followup.missed_referral_reasons.set([MissedReferralReasons.objects.all()[0]])
|
|
181
|
-
|
|
182
|
-
appointment.appt_status = COMPLETE_APPT
|
|
183
|
-
appointment.save()
|
|
184
|
-
|
|
185
|
-
try:
|
|
186
|
-
ActionItem.objects.get(
|
|
187
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
188
|
-
action_type__name=DM_FOLLOWUP_ACTION,
|
|
189
|
-
status=CLOSED,
|
|
190
|
-
)
|
|
191
|
-
except ObjectDoesNotExist:
|
|
192
|
-
self.fail(f"{DM_FOLLOWUP_ACTION} Action item unexpectedly does not exist")
|
|
193
|
-
|
|
194
|
-
try:
|
|
195
|
-
ActionItem.objects.get(
|
|
196
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
197
|
-
action_type__name=OFFSCHEDULE_DM_REFERRAL_ACTION,
|
|
198
|
-
status=NEW,
|
|
199
|
-
)
|
|
200
|
-
except ObjectDoesNotExist:
|
|
201
|
-
self.fail(
|
|
202
|
-
f"{OFFSCHEDULE_DM_REFERRAL_ACTION} Action item unexpectedly does not exist"
|
|
203
|
-
)
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
from django.test import TestCase
|
|
2
|
-
from edc_action_item.models import ActionItem
|
|
3
|
-
from edc_constants.constants import FEMALE, NEW, PATIENT, YES
|
|
4
|
-
from edc_offstudy.constants import END_OF_STUDY_ACTION
|
|
5
|
-
from edc_pharmacy.models import Medication
|
|
6
|
-
from edc_transfer.constants import SUBJECT_TRANSFER_ACTION, TRANSFERRED
|
|
7
|
-
from edc_utils import get_utcnow
|
|
8
|
-
from edc_visit_schedule.constants import OFFSCHEDULE_ACTION
|
|
9
|
-
|
|
10
|
-
from meta_lists.models import OffstudyReasons, TransferReasons
|
|
11
|
-
from meta_pharmacy.constants import METFORMIN
|
|
12
|
-
from meta_prn.action_items import OffscheduleAction, SubjectTransferAction
|
|
13
|
-
from meta_prn.constants import OFFSTUDY_MEDICATION_ACTION
|
|
14
|
-
from meta_prn.models import EndOfStudy, OffSchedule, OffStudyMedication, SubjectTransfer
|
|
15
|
-
from meta_screening.tests.meta_test_case_mixin import MetaTestCaseMixin
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class TestEosEvents(MetaTestCaseMixin, TestCase):
|
|
19
|
-
def setUp(self):
|
|
20
|
-
super().setUp()
|
|
21
|
-
self.subject_screening = self.get_subject_screening(gender=FEMALE)
|
|
22
|
-
self.subject_consent = self.get_subject_consent(self.subject_screening)
|
|
23
|
-
self.subject_visit = self.get_subject_visit(
|
|
24
|
-
subject_screening=self.subject_screening,
|
|
25
|
-
subject_consent=self.subject_consent,
|
|
26
|
-
)
|
|
27
|
-
self.data = dict(
|
|
28
|
-
subject_visit=self.subject_visit.pk,
|
|
29
|
-
report_datetime=self.subject_visit.report_datetime,
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
def test_transfer_to_offschedule_in_order(self):
|
|
33
|
-
SubjectTransferAction(
|
|
34
|
-
subject_identifier=self.subject_consent.subject_identifier,
|
|
35
|
-
skip_get_current_site=True,
|
|
36
|
-
site_id=self.subject_consent.site_id,
|
|
37
|
-
)
|
|
38
|
-
action_types = [
|
|
39
|
-
obj.action_type.name
|
|
40
|
-
for obj in ActionItem.objects.filter(status=NEW).order_by("action_type__name")
|
|
41
|
-
]
|
|
42
|
-
self.assertEqual(action_types, [SUBJECT_TRANSFER_ACTION])
|
|
43
|
-
|
|
44
|
-
# add a subject transfer object, which triggers next action item
|
|
45
|
-
transfer_reason = TransferReasons.objects.get(name="moved")
|
|
46
|
-
subject_transfer = SubjectTransfer.objects.create(
|
|
47
|
-
subject_identifier=self.subject_consent.subject_identifier,
|
|
48
|
-
initiated_by="patient",
|
|
49
|
-
may_return=YES,
|
|
50
|
-
may_contact=YES,
|
|
51
|
-
)
|
|
52
|
-
subject_transfer.transfer_reason.add(transfer_reason)
|
|
53
|
-
|
|
54
|
-
action_types = [
|
|
55
|
-
obj.action_type.name
|
|
56
|
-
for obj in ActionItem.objects.filter(status=NEW).order_by("action_type__name")
|
|
57
|
-
]
|
|
58
|
-
self.assertEqual(action_types, [OFFSCHEDULE_ACTION, OFFSTUDY_MEDICATION_ACTION])
|
|
59
|
-
|
|
60
|
-
OffSchedule.objects.create(subject_identifier=self.subject_consent.subject_identifier)
|
|
61
|
-
|
|
62
|
-
action_types = [
|
|
63
|
-
obj.action_type.name
|
|
64
|
-
for obj in ActionItem.objects.filter(status=NEW).order_by("action_type__name")
|
|
65
|
-
]
|
|
66
|
-
self.assertEqual(action_types, [OFFSTUDY_MEDICATION_ACTION])
|
|
67
|
-
|
|
68
|
-
offstudy_rx = OffStudyMedication.objects.create(
|
|
69
|
-
subject_identifier=self.subject_consent.subject_identifier,
|
|
70
|
-
stop_date=get_utcnow().date(),
|
|
71
|
-
last_dose_date=get_utcnow().date(),
|
|
72
|
-
reason=PATIENT,
|
|
73
|
-
)
|
|
74
|
-
offstudy_rx.medications.add(Medication.objects.get(name=METFORMIN))
|
|
75
|
-
|
|
76
|
-
action_types = [
|
|
77
|
-
obj.action_type.name
|
|
78
|
-
for obj in ActionItem.objects.filter(status=NEW).order_by("action_type__name")
|
|
79
|
-
]
|
|
80
|
-
self.assertEqual(action_types, [END_OF_STUDY_ACTION])
|
|
81
|
-
|
|
82
|
-
EndOfStudy.objects.create(
|
|
83
|
-
subject_identifier=self.subject_consent.subject_identifier,
|
|
84
|
-
last_seen_date=get_utcnow().date(),
|
|
85
|
-
offstudy_reason=OffstudyReasons.objects.get(name=TRANSFERRED),
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
action_types = [
|
|
89
|
-
obj.action_type.name
|
|
90
|
-
for obj in ActionItem.objects.filter(status=NEW).order_by("action_type__name")
|
|
91
|
-
]
|
|
92
|
-
self.assertEqual(action_types, [])
|
|
93
|
-
|
|
94
|
-
def test_transfer_to_offschedule_raises(self):
|
|
95
|
-
|
|
96
|
-
OffscheduleAction(
|
|
97
|
-
subject_identifier=self.subject_consent.subject_identifier,
|
|
98
|
-
skip_get_current_site=True,
|
|
99
|
-
site_id=self.subject_consent.site_id,
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
OffSchedule.objects.create(subject_identifier=self.subject_consent.subject_identifier)
|
|
103
|
-
|
|
104
|
-
action_types = [
|
|
105
|
-
obj.action_type.name
|
|
106
|
-
for obj in ActionItem.objects.filter(status=NEW).order_by("action_type__name")
|
|
107
|
-
]
|
|
108
|
-
self.assertEqual(action_types, [OFFSTUDY_MEDICATION_ACTION])
|
|
109
|
-
|
|
110
|
-
offstudy_rx = OffStudyMedication.objects.create(
|
|
111
|
-
subject_identifier=self.subject_consent.subject_identifier,
|
|
112
|
-
stop_date=get_utcnow().date(),
|
|
113
|
-
last_dose_date=get_utcnow().date(),
|
|
114
|
-
reason=PATIENT,
|
|
115
|
-
)
|
|
116
|
-
offstudy_rx.medications.add(Medication.objects.get(name=METFORMIN))
|
|
117
|
-
|
|
118
|
-
action_types = [
|
|
119
|
-
obj.action_type.name
|
|
120
|
-
for obj in ActionItem.objects.filter(status=NEW).order_by("action_type__name")
|
|
121
|
-
]
|
|
122
|
-
self.assertEqual(action_types, [END_OF_STUDY_ACTION])
|
|
123
|
-
|
|
124
|
-
EndOfStudy.objects.create(
|
|
125
|
-
subject_identifier=self.subject_consent.subject_identifier,
|
|
126
|
-
last_seen_date=get_utcnow().date(),
|
|
127
|
-
offstudy_reason=OffstudyReasons.objects.get(name=TRANSFERRED),
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
action_types = [
|
|
131
|
-
obj.action_type.name
|
|
132
|
-
for obj in ActionItem.objects.filter(status=NEW).order_by("action_type__name")
|
|
133
|
-
]
|
|
134
|
-
self.assertEqual(action_types, [])
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
from django.apps import apps as django_apps
|
|
2
|
-
from django.test import TestCase
|
|
3
|
-
from edc_sites.managers import CurrentSiteManager
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class TestManagers(TestCase):
|
|
7
|
-
def test_models(self):
|
|
8
|
-
app_config = django_apps.get_app_config("meta_prn")
|
|
9
|
-
for model_cls in app_config.get_models():
|
|
10
|
-
if "historical" not in model_cls._meta.label_lower:
|
|
11
|
-
self.assertFalse(
|
|
12
|
-
isinstance(model_cls._default_manager, (CurrentSiteManager,)),
|
|
13
|
-
msg=model_cls._meta.label_lower,
|
|
14
|
-
)
|