meta-edc 0.3.39__py3-none-any.whl → 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- meta_ae/action_items.py +38 -27
- meta_ae/admin/__init__.py +11 -0
- meta_ae/admin/ae_initial_admin.py +5 -2
- meta_ae/admin/ae_susar_admin.py +1 -1
- meta_ae/admin/death_report_admin.py +1 -1
- meta_ae/admin/modeladmin_mixins.py +14 -15
- meta_ae/baker_recipes.py +4 -6
- meta_ae/choices.py +1 -1
- meta_ae/forms/__init__.py +13 -0
- meta_ae/forms/death_report_form.py +1 -1
- meta_ae/forms/modelform_mixins.py +2 -2
- meta_ae/list_data.py +1 -1
- meta_ae/migrations/0001_initial.py +27 -27
- meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
- meta_ae/migrations/0017_auto_20221130_2257.py +1 -1
- meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
- meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
- meta_ae/model_mixins/__init__.py +2 -0
- meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
- meta_ae/model_mixins/death_report_model_mixin.py +3 -3
- meta_ae/models/__init__.py +13 -0
- meta_ae/models/hospitalization.py +3 -3
- meta_ae/pdf_reports/__init__.py +2 -0
- meta_ae/templatetags/meta_ae_extras.py +4 -6
- meta_analytics/.DS_Store +0 -0
- meta_analytics/README.rst +1 -2
- meta_analytics/dataframes/__init__.py +27 -0
- meta_analytics/dataframes/constants.py +5 -2
- meta_analytics/dataframes/get_eos_df.py +16 -4
- meta_analytics/dataframes/get_glucose_df.py +166 -0
- meta_analytics/dataframes/get_glucose_fbg_df.py +26 -0
- meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +21 -0
- meta_analytics/dataframes/get_last_imp_visits_df.py +12 -10
- meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
- meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +125 -124
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +111 -235
- meta_analytics/dataframes/screening/__init__.py +2 -0
- meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
- meta_analytics/dataframes/screening/get_screening_df.py +9 -15
- meta_analytics/dataframes/utils.py +21 -12
- meta_analytics/get_tables.py +1 -2
- meta_analytics/tables/__init__.py +2 -0
- meta_analytics/tables/enrolled/glucose.py +2 -1
- meta_analytics/utils.py +81 -0
- meta_auth/auths.py +1 -1
- meta_consent/action_items.py +22 -3
- meta_consent/admin/__init__.py +7 -0
- meta_consent/admin/actions/__init__.py +2 -0
- meta_consent/admin/actions/create_missing_prescriptions.py +2 -2
- meta_consent/admin/list_filters.py +22 -0
- meta_consent/admin/modeladmin_mixins.py +4 -5
- meta_consent/admin/subject_consent_v1_ext_admin.py +93 -0
- meta_consent/baker_recipes.py +7 -7
- meta_consent/consents.py +15 -2
- meta_consent/constants.py +1 -0
- meta_consent/form_validators/__init__.py +2 -0
- meta_consent/forms/__init__.py +8 -0
- meta_consent/forms/subject_consent_v1_ext_form.py +47 -0
- meta_consent/forms/subject_reconsent_form.py +4 -4
- meta_consent/management/commands/create_missing_prescriptions.py +5 -3
- meta_consent/migrations/0001_initial.py +9 -9
- meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
- meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +535 -0
- meta_consent/migrations/0027_auto_20250111_0344.py +30 -0
- meta_consent/migrations/0028_historicalsubjectconsentv1ext_assessment_score_and_more.py +162 -0
- meta_consent/migrations/0029_alter_historicalsubjectconsentv1ext_agrees_to_extension_and_more.py +33 -0
- meta_consent/migrations/0030_auto_20250120_2114.py +40 -0
- meta_consent/migrations/0031_alter_historicalsubjectconsent_guardian_name_and_more.py +124 -0
- meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
- meta_consent/migrations/0033_historicalsubjectconsentspfq_subjectconsentspfq.py +615 -0
- meta_consent/migrations/0034_remove_subjectconsentspfq_site_and_more.py +23 -0
- meta_consent/migrations/0035_alter_historicalsubjectconsent_consent_definition_name_and_more.py +43 -0
- meta_consent/models/__init__.py +10 -0
- meta_consent/models/model_mixins.py +1 -2
- meta_consent/models/signals.py +25 -11
- meta_consent/models/subject_consent.py +2 -2
- meta_consent/models/subject_consent_v1.py +0 -1
- meta_consent/models/subject_consent_v1_ext.py +34 -0
- meta_consent/models/subject_reconsent.py +4 -4
- meta_dashboard/navbars.py +2 -6
- meta_dashboard/patterns.py +1 -1
- meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/eligibility_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/screening_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/subject/dashboard/sidebar.html +24 -0
- meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/top_bar.html +1 -1
- meta_dashboard/templates/meta_dashboard/subject/dashboard.html +14 -0
- meta_dashboard/templatetags/meta_dashboard_extras.py +9 -14
- meta_dashboard/urls.py +5 -5
- meta_dashboard/view_utils/__init__.py +13 -0
- meta_dashboard/view_utils/subject_screening_button.py +13 -20
- meta_dashboard/views/__init__.py +8 -0
- meta_dashboard/views/ae/__init__.py +2 -0
- meta_dashboard/views/ae/ae_listboard_view.py +1 -1
- meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
- meta_dashboard/views/screening/__init__.py +2 -0
- meta_dashboard/views/screening/listboard_view.py +2 -3
- meta_dashboard/views/subject/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/dashboard_view.py +19 -8
- meta_dashboard/views/subject/listboard/__init__.py +2 -0
- meta_dashboard/views/subject/listboard/listboard_view.py +2 -3
- meta_edc/__init__.py +5 -9
- meta_edc/admin.py +3 -4
- meta_edc/celery.py +2 -2
- meta_edc/celery_live.py +19 -0
- meta_edc/celery_uat.py +25 -0
- meta_edc/management/commands/update_forms_reference.py +16 -14
- meta_edc/meta_version.py +2 -2
- meta_edc/navbars.py +7 -5
- meta_edc/settings/debug.py +13 -4
- meta_edc/settings/defaults.py +55 -18
- meta_edc/settings/live.py +4 -1
- meta_edc/settings/logging.py +9 -4
- meta_edc/settings/minimal.py +4 -5
- meta_edc/settings/uat.py +3 -1
- meta_edc/templates/meta_edc/{bootstrap3/base.html → base.html} +1 -1
- meta_edc/templates/meta_edc/{bootstrap3/home.html → home.html} +2 -2
- meta_edc/urls.py +3 -1
- meta_edc/utils.py +3 -1
- meta_edc/views/__init__.py +2 -0
- meta_edc/views/home_view.py +1 -2
- meta_edc-1.4.0.dist-info/METADATA +174 -0
- {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info}/RECORD +578 -586
- meta_edc-1.4.0.dist-info/WHEEL +4 -0
- meta_labs/list_data.py +2 -2
- meta_labs/reportables.py +80 -11
- meta_lists/list_data.py +13 -4
- meta_lists/migrations/0008_auto_20200528_1517.py +2 -2
- meta_lists/migrations/0019_auto_20250128_0143.py +48 -0
- meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
- meta_pharmacy/admin/__init__.py +5 -0
- meta_pharmacy/admin/rx_admin.py +1 -0
- meta_pharmacy/admin/substitutions_admin.py +3 -3
- meta_pharmacy/constants.py +1 -1
- meta_pharmacy/forms/__init__.py +2 -0
- meta_pharmacy/forms/rx_form.py +0 -1
- meta_pharmacy/forms/substitutions_form.py +6 -4
- meta_pharmacy/labels/__init__.py +5 -2
- meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +4 -1
- meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
- meta_pharmacy/labels/label_data.py +1 -2
- meta_pharmacy/labels/print_sheets.py +4 -6
- meta_pharmacy/management/commands/update_initial_pharmacy_data.py +4 -3
- meta_pharmacy/migrations/0002_initial.py +7 -20
- meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
- meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
- meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
- meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
- meta_pharmacy/models/__init__.py +7 -0
- meta_pharmacy/models/label_data.py +4 -5
- meta_pharmacy/models/rx_label.py +0 -1
- meta_pharmacy/models/substitutions.py +4 -4
- meta_pharmacy/prepare_meta_pharmacy.py +1 -1
- meta_pharmacy/utils/__init__.py +2 -0
- meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
- meta_prn/action_items.py +44 -45
- meta_prn/admin/__init__.py +16 -0
- meta_prn/admin/dm_referral_admin.py +2 -1
- meta_prn/admin/end_of_study_admin.py +26 -15
- meta_prn/admin/loss_to_followup_admin.py +3 -2
- meta_prn/admin/off_study_medication_admin.py +5 -6
- meta_prn/admin/offschedule_admin.py +12 -11
- meta_prn/admin/offschedule_dm_referral_admin.py +11 -10
- meta_prn/admin/offschedule_postnatal_admin.py +15 -7
- meta_prn/admin/offschedule_pregnancy_admin.py +18 -9
- meta_prn/admin/onschedule_admin.py +7 -8
- meta_prn/admin/onschedule_dm_referral_admin.py +11 -12
- meta_prn/admin/pregnancy_notification_admin.py +5 -6
- meta_prn/admin/protocol_incident_admin.py +1 -1
- meta_prn/admin/subject_transfer_admin.py +1 -1
- meta_prn/baker_recipes.py +10 -10
- meta_prn/choices.py +11 -7
- meta_prn/constants.py +1 -0
- meta_prn/form_validators/__init__.py +5 -0
- meta_prn/form_validators/end_of_study.py +65 -20
- meta_prn/form_validators/protocol_incident.py +1 -1
- meta_prn/forms/__init__.py +13 -0
- meta_prn/forms/dm_referral_form.py +2 -8
- meta_prn/forms/end_of_study_form.py +1 -1
- meta_prn/forms/loss_to_followup_form.py +1 -1
- meta_prn/forms/off_study_medication_form.py +2 -2
- meta_prn/forms/offschedule_form.py +25 -0
- meta_prn/forms/pregnancy_notification_form.py +15 -17
- meta_prn/list_data.py +3 -3
- meta_prn/migrations/0001_initial.py +25 -25
- meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
- meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
- meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
- meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
- meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
- meta_prn/migrations/0034_auto_20220630_1110.py +1 -1
- meta_prn/migrations/0035_auto_20220630_1140.py +1 -1
- meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
- meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
- meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
- meta_prn/migrations/0060_alter_onschedule_managers_and_more.py +55 -0
- meta_prn/migrations/0061_auto_20250115_2025.py +56 -0
- meta_prn/migrations/0062_alter_endofstudy_offstudy_reason_and_more.py +72 -0
- meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/migrations/0064_auto_20250602_2143.py +18 -0
- meta_prn/migrations/0065_alter_historicaloffstudymedication_subject_identifier_and_more.py +23 -0
- meta_prn/migrations/0066_alter_historicallosstofollowup_subject_identifier_and_more.py +23 -0
- meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
- meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
- meta_prn/migrations/0069_alter_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/models/__init__.py +20 -0
- meta_prn/models/dm_referral.py +2 -2
- meta_prn/models/end_of_study.py +28 -23
- meta_prn/models/loss_to_followup.py +8 -10
- meta_prn/models/off_study_medication.py +7 -4
- meta_prn/models/offschedule.py +4 -4
- meta_prn/models/pregnancy_notification.py +3 -5
- meta_prn/models/protocol_incident.py +5 -2
- meta_prn/models/signals.py +16 -14
- meta_prn/models/subject_transfer.py +7 -0
- meta_prn/templates/meta_prn/eos/additional_instructions.html +3 -0
- meta_prn/templates/meta_prn/offschedule/additional_instructions.html +2 -0
- meta_rando/migrations/0001_initial.py +5 -5
- meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
- meta_rando/migrations/0007_spfqlist.py +197 -0
- meta_rando/migrations/0008_delete_spfqlist.py +16 -0
- meta_rando/models/__init__.py +1 -0
- meta_rando/{models.py → models/randomization_list.py} +3 -3
- meta_rando/randomizers.py +2 -2
- meta_reports/__init__.py +2 -0
- meta_reports/admin/__init__.py +16 -0
- meta_reports/admin/dbviews/__init__.py +13 -0
- meta_reports/admin/dbviews/glucose_summary_admin.py +7 -7
- meta_reports/admin/dbviews/imp_substitutions_admin.py +14 -13
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +7 -7
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
- meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/on_study_missing_values_admin/unmanaged_model_admin.py +0 -1
- meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +9 -9
- meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
- meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
- meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
- meta_reports/admin/endpoints_admin.py +1 -1
- meta_reports/admin/endpoints_all_admin.py +0 -1
- meta_reports/admin/last_imp_refill_admin.py +33 -36
- meta_reports/admin/list_filters.py +3 -3
- meta_reports/admin/modeladmin_mixins.py +10 -17
- meta_reports/death_report.py +2 -2
- meta_reports/forms/__init__.py +2 -0
- meta_reports/forms/missing_ogtt_note_form.py +3 -4
- meta_reports/management/commands/generate_endpoints.py +5 -4
- meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
- meta_reports/migrations/0054_auto_20250422_2003.py +81 -0
- meta_reports/migrations/0055_alter_glucosesummary_table.py +17 -0
- meta_reports/migrations/0056_auto_20250422_2214.py +54 -0
- meta_reports/migrations/0057_auto_20250422_2224.py +54 -0
- meta_reports/migrations/0058_auto_20250422_2232.py +54 -0
- meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
- meta_reports/migrations/0060_auto_20250926_0242.py +366 -0
- meta_reports/migrations/0061_auto_20251004_0043.py +21 -0
- meta_reports/migrations/0062_auto_20251004_0106.py +21 -0
- meta_reports/models/__init__.py +17 -0
- meta_reports/models/dbviews/__init__.py +14 -0
- meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
- meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +15 -3
- meta_reports/models/dbviews/glucose_summary/view_definition.py +8 -5
- meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
- meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +1 -2
- meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
- meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
- meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +2 -2
- meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
- meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
- meta_reports/models/dbviews/on_study_missing_lab_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +19 -1
- meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +0 -1
- meta_reports/models/endpoints.py +8 -4
- meta_reports/models/last_imp_refill.py +2 -3
- meta_reports/pdf_report.py +2 -2
- meta_reports/tasks.py +4 -3
- meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -1
- meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/endpoints_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/last_imp_refill/changelist_note.html +13 -0
- meta_screening/admin/__init__.py +8 -0
- meta_screening/admin/fieldsets.py +13 -15
- meta_screening/admin/list_filters.py +7 -5
- meta_screening/admin/screening_part_one_admin.py +1 -3
- meta_screening/admin/screening_part_three_admin.py +2 -3
- meta_screening/admin/screening_part_two_admin.py +7 -10
- meta_screening/admin/subject_refusal_admin.py +5 -3
- meta_screening/admin/subject_screening_admin.py +21 -10
- meta_screening/baker_recipes.py +18 -10
- meta_screening/calculators.py +1 -1
- meta_screening/choices.py +1 -1
- meta_screening/constants.py +1 -1
- meta_screening/eligibility/__init__.py +9 -0
- meta_screening/eligibility/eligibility.py +21 -14
- meta_screening/eligibility/eligibility_part_one.py +1 -1
- meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
- meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +68 -49
- meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +14 -15
- meta_screening/eligibility/eligibility_part_two.py +1 -1
- meta_screening/form_validators/__init__.py +8 -0
- meta_screening/form_validators/screening_part_one.py +1 -1
- meta_screening/form_validators/screening_part_three.py +6 -2
- meta_screening/form_validators/screening_part_two.py +1 -1
- meta_screening/form_validators/subject_refusal.py +1 -1
- meta_screening/forms/__init__.py +20 -0
- meta_screening/forms/field_lists.py +16 -18
- meta_screening/forms/screening_part_one_form.py +2 -2
- meta_screening/forms/screening_part_three_form.py +5 -3
- meta_screening/forms/screening_part_two_form.py +1 -5
- meta_screening/forms/subject_refusal_form.py +0 -4
- meta_screening/forms/subject_screening_form.py +0 -4
- meta_screening/migrations/0001_initial.py +15 -15
- meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
- meta_screening/migrations/0012_auto_20191107_0427.py +1 -1
- meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
- meta_screening/model_mixins/__init__.py +8 -0
- meta_screening/model_mixins/calculated_model_mixin.py +2 -2
- meta_screening/model_mixins/creatinine_fields_model_mixin.py +1 -1
- meta_screening/model_mixins/eligibility_model_mixin.py +6 -4
- meta_screening/model_mixins/part_one_fields_model_mixin.py +16 -19
- meta_screening/model_mixins/part_three_fields_model_mixin.py +6 -7
- meta_screening/model_mixins/part_two_fields_model_mixin.py +19 -17
- meta_screening/models/__init__.py +9 -0
- meta_screening/models/icp_referral.py +5 -5
- meta_screening/models/proxy_models.py +1 -1
- meta_screening/models/signals.py +10 -11
- meta_screening/models/subject_refusal.py +1 -1
- meta_screening/models/subject_screening.py +2 -4
- meta_subject/action_items.py +18 -14
- meta_subject/admin/__init__.py +42 -0
- meta_subject/admin/birth_outcome_admin.py +7 -9
- meta_subject/admin/blood_results/__init__.py +9 -0
- meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
- meta_subject/admin/complications_glycemia_admin.py +1 -1
- meta_subject/admin/delivery_admin.py +8 -11
- meta_subject/admin/diabetes/__init__.py +2 -0
- meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
- meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
- meta_subject/admin/egfr_drop_notification_admin.py +1 -1
- meta_subject/admin/fields.py +5 -5
- meta_subject/admin/fieldsets.py +5 -5
- meta_subject/admin/followup_examination_admin.py +11 -9
- meta_subject/admin/followup_vitals_admin.py +31 -6
- meta_subject/admin/glucose_admin.py +4 -8
- meta_subject/admin/glucose_fbg_admin.py +18 -11
- meta_subject/admin/health_economics/__init__.py +2 -0
- meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
- meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
- meta_subject/admin/hepatitis_test_admin.py +1 -1
- meta_subject/admin/hiv_exit_review_admin.py +55 -0
- meta_subject/admin/list_filters.py +5 -5
- meta_subject/admin/mnsi_admin.py +7 -5
- meta_subject/admin/next_appointment_admin.py +19 -0
- meta_subject/admin/other_arv_regimens_admin.py +3 -3
- meta_subject/admin/patient_history_admin.py +4 -4
- meta_subject/admin/physical_exam_admin.py +1 -1
- meta_subject/admin/pregnancy_update_admin.py +1 -1
- meta_subject/admin/study_medication_admin.py +8 -15
- meta_subject/admin/subject_requisition_admin.py +2 -2
- meta_subject/admin/subject_visit_admin.py +1 -1
- meta_subject/admin/subject_visit_missed_admin.py +1 -1
- meta_subject/admin/urine_dipstick_test_admin.py +1 -1
- meta_subject/admin/urine_pregnancy_admin.py +1 -1
- meta_subject/baker_recipes.py +15 -15
- meta_subject/choices.py +4 -3
- meta_subject/form_validators/__init__.py +15 -0
- meta_subject/form_validators/delivery_form_validator.py +3 -3
- meta_subject/form_validators/dm_endpoint_form_validator.py +3 -1
- meta_subject/form_validators/dm_followup_form_validator.py +8 -7
- meta_subject/form_validators/egfr_drop_notification_form_validator.py +1 -1
- meta_subject/form_validators/followup_examination_form_validator.py +1 -1
- meta_subject/form_validators/glucose_fbg_form_validator.py +76 -0
- meta_subject/form_validators/glucose_form_validator.py +10 -67
- meta_subject/form_validators/hiv_exit_review_form_validator.py +18 -0
- meta_subject/form_validators/mixins.py +95 -0
- meta_subject/forms/__init__.py +44 -0
- meta_subject/forms/blood_results/__init__.py +9 -0
- meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -1
- meta_subject/forms/blood_results/blood_results_rft_form.py +60 -4
- meta_subject/forms/delivery_form.py +2 -0
- meta_subject/forms/diabetes/__init__.py +2 -0
- meta_subject/forms/diabetes/dm_followup_form.py +2 -2
- meta_subject/forms/followup_vitals_form.py +27 -1
- meta_subject/forms/glucose_fbg_form.py +1 -46
- meta_subject/forms/health_economics/__init__.py +2 -0
- meta_subject/forms/hepatitis_test_form.py +1 -1
- meta_subject/forms/hiv_exit_review_form.py +13 -0
- meta_subject/forms/mixins.py +1 -1
- meta_subject/forms/next_appointment_form.py +36 -0
- meta_subject/forms/other_arv_regimens_form.py +1 -1
- meta_subject/forms/patient_history_form.py +1 -1
- meta_subject/forms/physical_exam_form.py +1 -1
- meta_subject/forms/pregnancy_update_form.py +1 -1
- meta_subject/forms/slider_widget.py +1 -1
- meta_subject/forms/study_medication_form.py +18 -12
- meta_subject/forms/subject_requisition_form.py +1 -1
- meta_subject/forms/subject_visit_missed_form.py +1 -1
- meta_subject/forms/urine_dipstick_test_form.py +1 -1
- meta_subject/forms/urine_pregnancy_form.py +1 -1
- meta_subject/management/commands/create_missing_refills.py +3 -3
- meta_subject/management/commands/create_missing_rx.py +2 -2
- meta_subject/management/commands/missed.py +20 -23
- meta_subject/metadata_rules/__init__.py +2 -0
- meta_subject/metadata_rules/metadata_rules.py +14 -0
- meta_subject/metadata_rules/predicates.py +44 -25
- meta_subject/migrations/0001_initial.py +61 -61
- meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
- meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
- meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
- meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
- meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
- meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
- meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
- meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
- meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
- meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
- meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
- meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
- meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
- meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
- meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
- meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
- meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
- meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
- meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
- meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
- meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
- meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
- meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
- meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
- meta_subject/migrations/0107_auto_20220415_0043.py +1 -1
- meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
- meta_subject/migrations/0128_auto_20220720_0055.py +1 -1
- meta_subject/migrations/0131_auto_20220722_0411.py +1 -1
- meta_subject/migrations/0135_auto_20220722_2212.py +2 -1
- meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
- meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
- meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
- meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
- meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
- meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
- meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
- meta_subject/migrations/0199_auto_20240516_0247.py +1 -1
- meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
- meta_subject/migrations/0212_auto_20240827_2222.py +1 -1
- meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +553 -0
- meta_subject/migrations/0217_alter_historicalnextappointment_appt_datetime_and_more.py +42 -0
- meta_subject/migrations/0218_alter_historicalnextappointment_appt_date_and_more.py +53 -0
- meta_subject/migrations/0219_remove_historicalnextappointment_allow_create_interim_and_more.py +92 -0
- meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +825 -0
- meta_subject/migrations/0221_auto_20250402_1913.py +42 -0
- meta_subject/migrations/0222_alter_historicalstudymedication_stock_codes_and_more.py +46 -0
- meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py +83 -0
- meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py +153 -0
- meta_subject/migrations/0225_followupvitals_waist_circumference_and_more.py +46 -0
- meta_subject/migrations/0226_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +2518 -0
- meta_subject/migrations/0229_alter_glucosefbg_consent_model_and_more.py +1918 -0
- meta_subject/migrations/0230_alter_historicaldelivery_action_identifier_and_more.py +1733 -0
- meta_subject/migrations/0231_alter_historicalmedicationadherence_consent_model_and_more.py +2054 -0
- meta_subject/migrations/0232_alter_patienthistory_concomitant_conditions_and_more.py +1170 -0
- meta_subject/migrations/0233_historicalspfq_spfq.py +1066 -0
- meta_subject/migrations/0234_remove_spfq_site_remove_spfq_subject_visit_and_more.py +27 -0
- meta_subject/migrations/0235_glucosefbg_endpoint_today_and_more.py +606 -0
- meta_subject/migrations/0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more.py +58 -0
- meta_subject/migrations/0237_historicalhivexitreview_singleton_field_and_more.py +68 -0
- meta_subject/migrations/0238_historicalhivexitreview_available_and_more.py +88 -0
- meta_subject/model_mixins/__init__.py +10 -0
- meta_subject/model_mixins/arv_history_model_mixin.py +3 -44
- meta_subject/model_mixins/arv_review_model_mixin.py +53 -0
- meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
- meta_subject/model_mixins/vitals_fields_model_mixin.py +33 -0
- meta_subject/models/__init__.py +52 -0
- meta_subject/models/birth_outcomes.py +3 -3
- meta_subject/models/blood_results/__init__.py +11 -0
- meta_subject/models/blood_results/blood_results_glu.py +29 -0
- meta_subject/models/blood_results/blood_results_hba1c.py +0 -1
- meta_subject/models/blood_results/blood_results_ins.py +0 -1
- meta_subject/models/blood_results/blood_results_lft.py +0 -1
- meta_subject/models/delivery.py +4 -6
- meta_subject/models/diabetes/__init__.py +2 -0
- meta_subject/models/diabetes/dm_endpoint.py +5 -5
- meta_subject/models/diabetes/dm_followup.py +7 -8
- meta_subject/models/diet_and_lifestyle.py +2 -2
- meta_subject/models/followup_examination.py +12 -14
- meta_subject/models/glucose.py +5 -5
- meta_subject/models/glucose_fbg.py +17 -4
- meta_subject/models/health_economics/__init__.py +2 -0
- meta_subject/models/health_economics/health_economics.py +8 -8
- meta_subject/models/health_economics/health_economics_simple.py +2 -2
- meta_subject/models/health_economics/health_economics_update.py +3 -2
- meta_subject/models/hepatitis_test.py +2 -2
- meta_subject/models/hiv_exit_review.py +44 -0
- meta_subject/models/next_appointment.py +15 -0
- meta_subject/models/other_arv_regimens_detail.py +1 -1
- meta_subject/models/patient_history.py +6 -7
- meta_subject/models/physical_exam.py +2 -2
- meta_subject/models/pregnancy_update.py +1 -1
- meta_subject/models/signals.py +15 -13
- meta_subject/models/subject_visit.py +2 -2
- meta_subject/models/todo.txt +1 -1
- meta_subject/models/urine_dipstick_test.py +2 -2
- meta_subject/models/urine_pregnancy.py +1 -1
- meta_subject/static/meta_subject/slider.css +1 -1
- meta_subject/templates/meta_subject/endpoint_review_instructions.html +1 -1
- meta_subject/templates/meta_subject/widgets/slider.html +0 -1
- meta_visit_schedule/visit_schedules/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/crfs.py +34 -1
- meta_visit_schedule/visit_schedules/phase_three/schedule.py +4 -4
- meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +2 -3
- meta_ae/tests/holidays.csv +0 -15
- meta_ae/tests/tests/test_actions.py +0 -127
- meta_ae/tests/urls.py +0 -10
- meta_analytics/dataframes/enrolled/__init__.py +0 -1
- meta_analytics/dataframes/enrolled/get_glucose_df.py +0 -122
- meta_analytics/tests/__init__.py +0 -0
- meta_analytics/tests/test_endpoints_by_date.py +0 -94
- meta_consent/tests/__init__.py +0 -0
- meta_consent/tests/holidays.csv +0 -15
- meta_consent/tests/tests/__init__.py +0 -0
- meta_consent/tests/tests/test_form_validators.py +0 -110
- meta_consent/tests/tests/test_subject_consent.py +0 -10
- meta_consent/tests/urls.py +0 -17
- meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard.html +0 -11
- meta_dashboard/tests/__init__.py +0 -0
- meta_dashboard/tests/admin.py +0 -22
- meta_dashboard/tests/holidays.csv +0 -15
- meta_dashboard/tests/tests/__init__.py +0 -0
- meta_dashboard/tests/urls.py +0 -55
- meta_edc/tests/__init__.py +0 -0
- meta_edc/tests/tests/__init__.py +0 -0
- meta_edc/tests/tests/test_endpoints.py +0 -554
- meta_edc-0.3.39.dist-info/AUTHORS +0 -0
- meta_edc-0.3.39.dist-info/METADATA +0 -766
- meta_edc-0.3.39.dist-info/WHEEL +0 -5
- meta_edc-0.3.39.dist-info/top_level.txt +0 -20
- meta_labs/tests/__init__.py +0 -0
- meta_labs/tests/test_labs.py +0 -27
- meta_labs/tests/test_reportables.py +0 -16
- meta_labs/tests/urls.py +0 -4
- meta_lists/tests/__init__.py +0 -0
- meta_lists/tests/test_lists.py +0 -8
- meta_pharmacy/admin/actions.py +0 -38
- meta_prn/tests/__init__.py +0 -0
- meta_prn/tests/tests/__init__.py +0 -0
- meta_prn/tests/tests/test_actions.py +0 -97
- meta_prn/tests/tests/test_dm_referral.py +0 -206
- meta_prn/tests/tests/test_manager_order.py +0 -14
- meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
- meta_prn/tests/urls.py +0 -10
- meta_rando/tests/__init__.py +0 -0
- meta_rando/tests/tests/__init__.py +0 -0
- meta_rando/tests/tests/test_randomizers.py +0 -57
- meta_reports/tests/__init__.py +0 -0
- meta_reports/tests/test_reports.py +0 -35
- meta_reports/tests/test_sql_gen.py +0 -5
- meta_reports/tests/urls.py +0 -4
- meta_screening/offline_models.py +0 -3
- meta_screening/tests/__init__.py +0 -0
- meta_screening/tests/holidays.csv +0 -15
- meta_screening/tests/meta_test_case_mixin.py +0 -216
- meta_screening/tests/options.py +0 -127
- meta_screening/tests/tests/__init__.py +0 -0
- meta_screening/tests/tests/test_forms.py +0 -397
- meta_screening/tests/tests/test_screening_part_one.py +0 -108
- meta_screening/tests/tests/test_screening_part_three.py +0 -436
- meta_screening/tests/tests/test_screening_part_two.py +0 -84
- meta_sites/tests/__init__.py +0 -0
- meta_sites/tests/test_sites.py +0 -12
- meta_sites/tests/urls.py +0 -4
- meta_stats/__init__.py +0 -0
- meta_stats/incidence.py +0 -16
- meta_stats/models.py +0 -0
- meta_stats/tests/__init__.py +0 -0
- meta_stats/tests/tests/__init__.py +0 -0
- meta_stats/tests/tests/test_incidence.py +0 -10
- meta_subject/tests/__init__.py +0 -0
- meta_subject/tests/holidays.csv +0 -15
- meta_subject/tests/tests/__init__.py +0 -0
- meta_subject/tests/tests/test_egfr.py +0 -234
- meta_subject/tests/tests/test_fixes.py +0 -64
- meta_subject/tests/tests/test_followup.py +0 -52
- meta_subject/tests/tests/test_manager_order.py +0 -11
- meta_subject/tests/tests/test_medication_adherence.py +0 -75
- meta_subject/tests/tests/test_metadata_rules.py +0 -135
- meta_subject/tests/tests/test_mnsi.py +0 -317
- meta_subject/tests/tests/test_patient_history_form.py +0 -74
- meta_subject/tests/tests/test_physical_exam.py +0 -84
- meta_subject/tests/tests/test_sf12.py +0 -173
- meta_subject/tests/tests/test_study_medication.py +0 -230
- meta_subject/tests/urls.py +0 -24
- meta_visit_schedule/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/test_schedule.py +0 -181
- meta_visit_schedule/tests/urls.py +0 -4
- tests/__init__.py +0 -0
- tests/etc/randomization_list.csv +0 -241
- tests/etc/randomization_list_phase_three.csv +0 -241
- tests/etc/user-aes-local.key +0 -0
- tests/etc/user-aes-restricted.key +0 -1
- tests/etc/user-rsa-local-private.pem +0 -27
- tests/etc/user-rsa-local-public.pem +0 -9
- tests/etc/user-rsa-restricted-private.pem +0 -27
- tests/etc/user-rsa-restricted-public.pem +0 -9
- tests/etc/user-salt-local.key +0 -0
- tests/etc/user-salt-restricted.key +0 -0
- tests/holidays.csv +0 -15
- tests/test_settings.py +0 -186
- /meta_ae/templates/meta_ae/{bootstrap3/ae_initial_description.html → aeinitial_description.html} +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/add_consent_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/dashboard_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/refusal_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/screening → screening}/listboard.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/listboard.html +0 -0
- {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info/licenses}/LICENSE +0 -0
- /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
- /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
meta_edc-0.3.39.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,16 +0,0 @@
|
|
|
1
|
-
from tempfile import mkdtemp
|
|
2
|
-
|
|
3
|
-
from django.test import TestCase
|
|
4
|
-
from edc_reportable import ParserError, site_reportables
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class TestReportables(TestCase):
|
|
8
|
-
def test(self):
|
|
9
|
-
try:
|
|
10
|
-
from meta_labs import reportables # noqa
|
|
11
|
-
except ParserError:
|
|
12
|
-
self.fail("ParserError unexpectedly raised.")
|
|
13
|
-
self.assertIsNotNone(site_reportables.get("meta"))
|
|
14
|
-
filename1, filename2 = site_reportables.to_csv("meta", path=mkdtemp())
|
|
15
|
-
print(filename1)
|
|
16
|
-
print(filename2)
|
meta_labs/tests/urls.py
DELETED
meta_lists/tests/__init__.py
DELETED
|
File without changes
|
meta_lists/tests/test_lists.py
DELETED
meta_pharmacy/admin/actions.py
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import random
|
|
2
|
-
|
|
3
|
-
from django.contrib import messages
|
|
4
|
-
from django.http import FileResponse
|
|
5
|
-
from django.utils.translation import gettext as _
|
|
6
|
-
from django_pylabels.models import LabelSpecification
|
|
7
|
-
from edc_utils import get_utcnow
|
|
8
|
-
from pylabels import Sheet, Specification
|
|
9
|
-
|
|
10
|
-
from ..labels import draw_label_with_code39
|
|
11
|
-
from ..models import LabelData
|
|
12
|
-
|
|
13
|
-
random.seed(7825541)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def print_label_sheet(modeladmin, request, queryset):
|
|
17
|
-
label_data = [obj for obj in queryset]
|
|
18
|
-
obj = LabelSpecification.objects.get(name="meta3")
|
|
19
|
-
specs = Specification(**obj.as_dict)
|
|
20
|
-
sheet = Sheet(specs, draw_label_with_code39, border=obj.border)
|
|
21
|
-
sheet.add_labels(label_data)
|
|
22
|
-
buffer = sheet.save_to_buffer()
|
|
23
|
-
now = get_utcnow()
|
|
24
|
-
queryset.update(printed=True, printed_datetime=now)
|
|
25
|
-
return FileResponse(
|
|
26
|
-
buffer, as_attachment=True, filename=f"{obj.name}_{now.strftime("%Y-%m-%d %H:%M")}.pdf"
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def print_label_sheet_from_batch(modeladmin, request, queryset):
|
|
31
|
-
if queryset.count() > 1 or queryset.count() == 0:
|
|
32
|
-
messages.add_message(
|
|
33
|
-
request,
|
|
34
|
-
messages.ERROR,
|
|
35
|
-
_("Select one and only one existing label specification"),
|
|
36
|
-
)
|
|
37
|
-
queryset = LabelData.objects.filter(label_batch=queryset.first())
|
|
38
|
-
return print_label_sheet(modeladmin, request, queryset)
|
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,206 +0,0 @@
|
|
|
1
|
-
from dateutil.relativedelta import relativedelta
|
|
2
|
-
from django.core.exceptions import ObjectDoesNotExist
|
|
3
|
-
from django.test import TestCase, tag
|
|
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
|
-
@tag("1")
|
|
26
|
-
class TestDmReferral(MetaTestCaseMixin, TestCase):
|
|
27
|
-
def setUp(self):
|
|
28
|
-
super().setUp()
|
|
29
|
-
self.subject_visit = self.get_subject_visit(gender=FEMALE)
|
|
30
|
-
|
|
31
|
-
def test_dm_referral_puts_subject_on_dm_followup_schedule(self):
|
|
32
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
33
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
34
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
35
|
-
dm_referral = DmReferral.objects.create(
|
|
36
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
37
|
-
report_datetime=get_utcnow(),
|
|
38
|
-
referral_date=get_utcnow(),
|
|
39
|
-
)
|
|
40
|
-
self.assertIsNotNone(dm_referral.report_datetime)
|
|
41
|
-
self.assertIsNotNone(dm_referral.referral_date)
|
|
42
|
-
self.assertIsNotNone(dm_referral.action_identifier)
|
|
43
|
-
|
|
44
|
-
# verify subject is on DM Followup schedule
|
|
45
|
-
try:
|
|
46
|
-
OnScheduleDmReferral.objects.get(
|
|
47
|
-
subject_identifier=subject_visit.subject_identifier
|
|
48
|
-
)
|
|
49
|
-
except ObjectDoesNotExist:
|
|
50
|
-
self.fail("OnScheduleDmReferral unexpectedly does not exist")
|
|
51
|
-
|
|
52
|
-
@tag("1")
|
|
53
|
-
def test_dm_referral_action_creates_offschedule_action(self):
|
|
54
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
55
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
56
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
57
|
-
dm_referral = DmReferral.objects.create(
|
|
58
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
59
|
-
report_datetime=get_utcnow(),
|
|
60
|
-
referral_date=get_utcnow(),
|
|
61
|
-
)
|
|
62
|
-
self.assertIsNotNone(dm_referral.report_datetime)
|
|
63
|
-
self.assertIsNotNone(dm_referral.referral_date)
|
|
64
|
-
self.assertIsNotNone(dm_referral.action_identifier)
|
|
65
|
-
|
|
66
|
-
try:
|
|
67
|
-
ActionItem.objects.get(
|
|
68
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
69
|
-
action_type__name=OFFSCHEDULE_ACTION,
|
|
70
|
-
status=CLOSED,
|
|
71
|
-
)
|
|
72
|
-
except ObjectDoesNotExist:
|
|
73
|
-
self.fail(f"{OFFSCHEDULE_ACTION} Action item unexpectedly does not exist")
|
|
74
|
-
|
|
75
|
-
def test_dm_referral_creates_offstudy_med_action(self):
|
|
76
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
77
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
78
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
79
|
-
dm_referral = DmReferral.objects.create(
|
|
80
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
81
|
-
report_datetime=get_utcnow(),
|
|
82
|
-
referral_date=get_utcnow(),
|
|
83
|
-
)
|
|
84
|
-
self.assertIsNotNone(dm_referral.report_datetime)
|
|
85
|
-
self.assertIsNotNone(dm_referral.referral_date)
|
|
86
|
-
self.assertIsNotNone(dm_referral.action_identifier)
|
|
87
|
-
|
|
88
|
-
# verify action items are created
|
|
89
|
-
try:
|
|
90
|
-
ActionItem.objects.get(
|
|
91
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
92
|
-
action_type__name=OFFSTUDY_MEDICATION_ACTION,
|
|
93
|
-
status=NEW,
|
|
94
|
-
)
|
|
95
|
-
except ObjectDoesNotExist:
|
|
96
|
-
self.fail(f"{OFFSTUDY_MEDICATION_ACTION} Action item unexpectedly does not exist")
|
|
97
|
-
|
|
98
|
-
def test_dm_referral_creates_dm_followup_action(self):
|
|
99
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
100
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
101
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
102
|
-
dm_referral = DmReferral.objects.create(
|
|
103
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
104
|
-
report_datetime=get_utcnow(),
|
|
105
|
-
referral_date=get_utcnow(),
|
|
106
|
-
)
|
|
107
|
-
self.assertIsNotNone(dm_referral.report_datetime)
|
|
108
|
-
self.assertIsNotNone(dm_referral.referral_date)
|
|
109
|
-
self.assertIsNotNone(dm_referral.action_identifier)
|
|
110
|
-
|
|
111
|
-
try:
|
|
112
|
-
ActionItem.objects.get(
|
|
113
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
114
|
-
action_type__name=DM_FOLLOWUP_ACTION,
|
|
115
|
-
status=NEW,
|
|
116
|
-
)
|
|
117
|
-
except ObjectDoesNotExist:
|
|
118
|
-
self.fail(f"{DM_FOLLOWUP_ACTION} Action item unexpectedly does not exist")
|
|
119
|
-
|
|
120
|
-
@tag("1")
|
|
121
|
-
def test_dm_referral2(self):
|
|
122
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
123
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
124
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
125
|
-
referral_datetime = subject_visit.report_datetime
|
|
126
|
-
DmReferral.objects.create(
|
|
127
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
128
|
-
report_datetime=referral_datetime,
|
|
129
|
-
referral_date=referral_datetime.date(),
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
# Add DM Baseline
|
|
133
|
-
appointment = Appointment.objects.get(
|
|
134
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
135
|
-
schedule_name=SCHEDULE_DM_REFERRAL,
|
|
136
|
-
visit_code=DM_BASELINE,
|
|
137
|
-
)
|
|
138
|
-
appointment.appt_status = IN_PROGRESS_APPT
|
|
139
|
-
appointment.save()
|
|
140
|
-
|
|
141
|
-
subject_visit = SubjectVisit.objects.create(
|
|
142
|
-
appointment=appointment,
|
|
143
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
144
|
-
report_datetime=appointment.appt_datetime,
|
|
145
|
-
reason=SCHEDULED,
|
|
146
|
-
info_source=PATIENT,
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
DmEndpoint.objects.create(
|
|
150
|
-
subject_visit=subject_visit,
|
|
151
|
-
report_datetime=get_utcnow(),
|
|
152
|
-
dx_date=referral_datetime.date(),
|
|
153
|
-
dx_initiated_by="fbg_confirmed",
|
|
154
|
-
dx_tmg=YES,
|
|
155
|
-
dx_tmg_date=referral_datetime.date(),
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
# Add DM Followup
|
|
159
|
-
followup_datetime = referral_datetime + relativedelta(months=6)
|
|
160
|
-
appointment = Appointment.objects.get(
|
|
161
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
162
|
-
schedule_name=SCHEDULE_DM_REFERRAL,
|
|
163
|
-
visit_code=DM_FOLLOWUP,
|
|
164
|
-
)
|
|
165
|
-
appointment.appt_status = IN_PROGRESS_APPT
|
|
166
|
-
appointment.save()
|
|
167
|
-
|
|
168
|
-
subject_visit = SubjectVisit.objects.create(
|
|
169
|
-
appointment=appointment,
|
|
170
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
171
|
-
report_datetime=appointment.appt_datetime,
|
|
172
|
-
reason=SCHEDULED,
|
|
173
|
-
info_source=PATIENT,
|
|
174
|
-
)
|
|
175
|
-
|
|
176
|
-
dm_followup = DmFollowup.objects.create(
|
|
177
|
-
subject_visit=subject_visit,
|
|
178
|
-
report_datetime=followup_datetime,
|
|
179
|
-
referral_date=referral_datetime.date(),
|
|
180
|
-
attended=NO,
|
|
181
|
-
on_dm_medications=NO,
|
|
182
|
-
)
|
|
183
|
-
dm_followup.missed_referral_reasons.set([MissedReferralReasons.objects.all()[0]])
|
|
184
|
-
|
|
185
|
-
appointment.appt_status = COMPLETE_APPT
|
|
186
|
-
appointment.save()
|
|
187
|
-
|
|
188
|
-
try:
|
|
189
|
-
ActionItem.objects.get(
|
|
190
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
191
|
-
action_type__name=DM_FOLLOWUP_ACTION,
|
|
192
|
-
status=CLOSED,
|
|
193
|
-
)
|
|
194
|
-
except ObjectDoesNotExist:
|
|
195
|
-
self.fail(f"{DM_FOLLOWUP_ACTION} Action item unexpectedly does not exist")
|
|
196
|
-
|
|
197
|
-
try:
|
|
198
|
-
ActionItem.objects.get(
|
|
199
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
200
|
-
action_type__name=OFFSCHEDULE_DM_REFERRAL_ACTION,
|
|
201
|
-
status=NEW,
|
|
202
|
-
)
|
|
203
|
-
except ObjectDoesNotExist:
|
|
204
|
-
self.fail(
|
|
205
|
-
f"{OFFSCHEDULE_DM_REFERRAL_ACTION} Action item unexpectedly does not exist"
|
|
206
|
-
)
|
|
@@ -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
|
-
)
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
from dateutil.relativedelta import relativedelta
|
|
2
|
-
from django.core.exceptions import ObjectDoesNotExist
|
|
3
|
-
from django.test import TestCase
|
|
4
|
-
from edc_appointment.models import Appointment
|
|
5
|
-
from edc_constants.constants import FEMALE, NO, YES
|
|
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 OffSchedule
|
|
11
|
-
from meta_prn.models.pregnancy_notification import PregnancyNotificationError
|
|
12
|
-
from meta_screening.tests.meta_test_case_mixin import MetaTestCaseMixin
|
|
13
|
-
from meta_visit_schedule.constants import SCHEDULE, SCHEDULE_PREGNANCY
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class TestPregnancyNotification(MetaTestCaseMixin, TestCase):
|
|
17
|
-
def setUp(self):
|
|
18
|
-
super().setUp()
|
|
19
|
-
self.subject_visit = self.get_subject_visit(gender=FEMALE)
|
|
20
|
-
|
|
21
|
-
def test_pregnancy_notification_updates_urine_pregnancy(self):
|
|
22
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
23
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
24
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
25
|
-
urine_pregnancy = make_recipe(
|
|
26
|
-
"meta_subject.urinepregnancy",
|
|
27
|
-
subject_visit=subject_visit,
|
|
28
|
-
report_datetime=get_utcnow(),
|
|
29
|
-
assay_date=get_utcnow().date(),
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
self.assertFalse(urine_pregnancy.notified)
|
|
33
|
-
self.assertIsNotNone(urine_pregnancy.assay_date)
|
|
34
|
-
make_recipe(
|
|
35
|
-
"meta_prn.pregnancynotification",
|
|
36
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
37
|
-
report_datetime=get_utcnow(),
|
|
38
|
-
)
|
|
39
|
-
urine_pregnancy.refresh_from_db()
|
|
40
|
-
self.assertTrue(urine_pregnancy.notified)
|
|
41
|
-
self.assertIsNotNone(urine_pregnancy.notified_datetime)
|
|
42
|
-
|
|
43
|
-
def test_pregnancy_notification_unconfirmed_ok(self):
|
|
44
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
45
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
46
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
47
|
-
make_recipe(
|
|
48
|
-
"meta_prn.pregnancynotification",
|
|
49
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
50
|
-
report_datetime=get_utcnow(),
|
|
51
|
-
bhcg_confirmed=NO,
|
|
52
|
-
unconfirmed_details="blah blah",
|
|
53
|
-
)
|
|
54
|
-
|
|
55
|
-
def test_pregnancy_notification_confirmed_raises(self):
|
|
56
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
57
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
58
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
59
|
-
try:
|
|
60
|
-
make_recipe(
|
|
61
|
-
"meta_prn.pregnancynotification",
|
|
62
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
63
|
-
report_datetime=get_utcnow(),
|
|
64
|
-
bhcg_confirmed=YES,
|
|
65
|
-
unconfirmed_details="blah blah",
|
|
66
|
-
)
|
|
67
|
-
except PregnancyNotificationError:
|
|
68
|
-
pass
|
|
69
|
-
else:
|
|
70
|
-
self.fail("PregnancyNotificationError unexpectedly NOT raised")
|
|
71
|
-
|
|
72
|
-
def test_pregnancy_notification_takes_off_schedule(self):
|
|
73
|
-
subject_visit = self.get_next_subject_visit(self.subject_visit)
|
|
74
|
-
subject_visit = self.get_next_subject_visit(subject_visit)
|
|
75
|
-
self.assertEqual(subject_visit.visit_code, MONTH1)
|
|
76
|
-
make_recipe(
|
|
77
|
-
"meta_prn.pregnancynotification",
|
|
78
|
-
subject_identifier=subject_visit.subject_identifier,
|
|
79
|
-
report_datetime=subject_visit.report_datetime,
|
|
80
|
-
bhcg_confirmed=NO,
|
|
81
|
-
unconfirmed_details="blah blah",
|
|
82
|
-
edd=subject_visit.report_datetime + relativedelta(months=6),
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
try:
|
|
86
|
-
OffSchedule.objects.get(subject_identifier=subject_visit.subject_identifier)
|
|
87
|
-
except ObjectDoesNotExist:
|
|
88
|
-
self.fail("OffSchedule unexpectedly does not exist")
|
|
89
|
-
|
|
90
|
-
self.assertEqual(Appointment.objects.filter(schedule_name=SCHEDULE).count(), 3)
|
|
91
|
-
self.assertEqual(
|
|
92
|
-
Appointment.objects.filter(schedule_name=SCHEDULE_PREGNANCY).count(), 1
|
|
93
|
-
)
|
meta_prn/tests/urls.py
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from django.contrib import admin
|
|
2
|
-
from django.urls.conf import include, path
|
|
3
|
-
|
|
4
|
-
from meta_prn.admin_site import meta_prn_admin
|
|
5
|
-
|
|
6
|
-
urlpatterns = [
|
|
7
|
-
path("meta_prn/", include("meta_prn.urls")),
|
|
8
|
-
path("admin/", meta_prn_admin.urls),
|
|
9
|
-
path("admin/", admin.site.urls),
|
|
10
|
-
]
|
meta_rando/tests/__init__.py
DELETED
|
File without changes
|
|
File without changes
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
from django.core.exceptions import ObjectDoesNotExist
|
|
2
|
-
from django.test import TestCase, override_settings
|
|
3
|
-
from edc_constants.constants import FEMALE, MALE
|
|
4
|
-
from edc_randomization.site_randomizers import site_randomizers
|
|
5
|
-
from edc_registration.models import RegisteredSubject
|
|
6
|
-
|
|
7
|
-
from meta_edc.meta_version import PHASE_THREE, get_meta_version
|
|
8
|
-
from meta_rando.randomizers import RandomizerPhaseThree
|
|
9
|
-
from meta_screening.tests.meta_test_case_mixin import MetaTestCaseMixin
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class TestRandomizers(MetaTestCaseMixin, TestCase):
|
|
13
|
-
import_randomization_list = False
|
|
14
|
-
|
|
15
|
-
def test_import(self):
|
|
16
|
-
RandomizerPhaseThree.import_list(sid_count_for_tests=10)
|
|
17
|
-
obj = RandomizerPhaseThree.model_cls().objects.all().order_by("sid")[0]
|
|
18
|
-
self.assertEqual(
|
|
19
|
-
[1001, "active", "hindu_mandal", "F"],
|
|
20
|
-
[obj.sid, obj.assignment, obj.site_name, obj.gender],
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
@override_settings(META_PHASE=PHASE_THREE)
|
|
24
|
-
def test_randomize_phase_three(self):
|
|
25
|
-
self.assertEqual(get_meta_version(), 3)
|
|
26
|
-
site_randomizers._registry = {}
|
|
27
|
-
site_randomizers.loaded = False
|
|
28
|
-
site_randomizers.register(RandomizerPhaseThree)
|
|
29
|
-
self.subject_visit = self.get_subject_visit(gender=FEMALE)
|
|
30
|
-
try:
|
|
31
|
-
RegisteredSubject.objects.get(
|
|
32
|
-
sid=1001,
|
|
33
|
-
subject_identifier=self.subject_visit.subject_identifier,
|
|
34
|
-
gender=FEMALE,
|
|
35
|
-
)
|
|
36
|
-
except ObjectDoesNotExist:
|
|
37
|
-
self.fail("RegisteredSubject unexpectedly does not exist")
|
|
38
|
-
|
|
39
|
-
self.subject_visit = self.get_subject_visit(gender=MALE)
|
|
40
|
-
try:
|
|
41
|
-
RegisteredSubject.objects.get(
|
|
42
|
-
sid=1003,
|
|
43
|
-
subject_identifier=self.subject_visit.subject_identifier,
|
|
44
|
-
gender=MALE,
|
|
45
|
-
)
|
|
46
|
-
except ObjectDoesNotExist:
|
|
47
|
-
self.fail("RegisteredSubject unexpectedly does not exist")
|
|
48
|
-
|
|
49
|
-
self.subject_visit = self.get_subject_visit(gender=FEMALE)
|
|
50
|
-
try:
|
|
51
|
-
RegisteredSubject.objects.get(
|
|
52
|
-
sid=1002,
|
|
53
|
-
subject_identifier=self.subject_visit.subject_identifier,
|
|
54
|
-
gender=FEMALE,
|
|
55
|
-
)
|
|
56
|
-
except ObjectDoesNotExist:
|
|
57
|
-
self.fail("RegisteredSubject unexpectedly does not exist")
|
meta_reports/tests/__init__.py
DELETED
|
File without changes
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
from django.contrib.auth.models import User
|
|
2
|
-
from django.test import TestCase
|
|
3
|
-
from django.test.client import RequestFactory
|
|
4
|
-
from edc_adverse_event.models import AeClassification
|
|
5
|
-
from model_bakery import baker
|
|
6
|
-
|
|
7
|
-
from meta_reports.ae_report import AeReport
|
|
8
|
-
from meta_screening.tests.meta_test_case_mixin import MetaTestCaseMixin
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class TestReports(MetaTestCaseMixin, TestCase):
|
|
12
|
-
def setUp(self):
|
|
13
|
-
self.user = User.objects.create(username="erikvw", is_staff=True, is_active=True)
|
|
14
|
-
subject_screening = self.get_subject_screening()
|
|
15
|
-
subject_consent = self.get_subject_consent(subject_screening)
|
|
16
|
-
self.subject_identifier = subject_consent.subject_identifier
|
|
17
|
-
|
|
18
|
-
def test_aereport(self):
|
|
19
|
-
rf = RequestFactory()
|
|
20
|
-
request = rf.get("/")
|
|
21
|
-
request.user = self.user
|
|
22
|
-
ae_classification = AeClassification.objects.all()[0]
|
|
23
|
-
ae_initial = baker.make_recipe(
|
|
24
|
-
"meta_ae.aeinitial",
|
|
25
|
-
subject_identifier=self.subject_identifier,
|
|
26
|
-
ae_classification=ae_classification,
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
report = AeReport(
|
|
30
|
-
ae_initial=ae_initial,
|
|
31
|
-
subject_identifier=ae_initial.subject_identifier,
|
|
32
|
-
user=request.user,
|
|
33
|
-
request=request,
|
|
34
|
-
)
|
|
35
|
-
return report.render_to_response()
|
meta_reports/tests/urls.py
DELETED