clinicedc 2.0.41__py3-none-any.whl → 2.0.42__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 clinicedc might be problematic. Click here for more details.
- {clinicedc-2.0.41.dist-info → clinicedc-2.0.42.dist-info}/METADATA +3 -1
- {clinicedc-2.0.41.dist-info → clinicedc-2.0.42.dist-info}/RECORD +337 -344
- edc_action_item/action.py +1 -1
- edc_action_item/action_item_notification.py +1 -1
- edc_action_item/choices.py +1 -1
- edc_action_item/data_fixers.py +1 -2
- edc_action_item/delete_action_item.py +1 -2
- edc_action_item/forms/action_item_form.py +1 -1
- edc_action_item/models/action_item.py +1 -1
- edc_action_item/models/action_type.py +1 -1
- edc_action_item/models/signals.py +1 -1
- edc_action_item/templatetags/action_item_extras.py +1 -1
- edc_action_item/utils.py +1 -2
- edc_action_item/view_mixins/action_item_view_mixin.py +1 -1
- edc_adherence/choices.py +1 -1
- edc_adherence/form_validator_mixin.py +1 -2
- edc_adherence/list_data.py +1 -1
- edc_adherence/model_mixins.py +1 -1
- edc_adverse_event/action_items/ae_followup_action.py +9 -9
- edc_adverse_event/action_items/ae_initial_action.py +12 -16
- edc_adverse_event/action_items/ae_susar_action.py +2 -1
- edc_adverse_event/action_items/ae_tmg_action.py +6 -4
- edc_adverse_event/action_items/death_report_action.py +7 -7
- edc_adverse_event/action_items/death_report_tmg_action.py +2 -1
- edc_adverse_event/action_items/death_report_tmg_second_action.py +2 -1
- edc_adverse_event/action_items/hospitalization_action.py +2 -1
- edc_adverse_event/auths.py +3 -1
- edc_adverse_event/choices.py +13 -6
- edc_adverse_event/constants.py +1 -23
- edc_adverse_event/form_validator_mixins/death_report_form_validator.py +1 -1
- edc_adverse_event/form_validator_mixins/requires_death_report_form_validator_mixin.py +1 -2
- edc_adverse_event/form_validators/ae_followup.py +2 -3
- edc_adverse_event/form_validators/ae_initial.py +2 -1
- edc_adverse_event/form_validators/ae_tmg.py +2 -1
- edc_adverse_event/form_validators/death_report_tmg.py +1 -1
- edc_adverse_event/form_validators/hospitalization.py +2 -1
- edc_adverse_event/list_data.py +1 -1
- edc_adverse_event/model_mixins/ae_followup/ae_followup_fields_model_mixin.py +1 -1
- edc_adverse_event/model_mixins/ae_followup/ae_followup_methods_model_mixin.py +1 -2
- edc_adverse_event/model_mixins/ae_initial/ae_initial_fields_model_mixin.py +1 -1
- edc_adverse_event/model_mixins/ae_initial/ae_initial_susar_model_mixin.py +2 -2
- edc_adverse_event/model_mixins/ae_susar/ae_susar_methods_model_mixin.py +1 -2
- edc_adverse_event/model_mixins/ae_tmg/ae_tmg_fields_model_mixin.py +1 -1
- edc_adverse_event/model_mixins/hospitaization/hospitalization_model_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/ae_initial_admin_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/ae_tmg_admin_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/death_report_admin_mixin.py +1 -1
- edc_adverse_event/modeladmin_mixins/death_report_tmg_admin_mixin.py +1 -1
- edc_adverse_event/modelform_mixins/ae_followup_modelform_mixin.py +1 -2
- edc_adverse_event/modelform_mixins/ae_initial_modelform_mixin.py +1 -2
- edc_adverse_event/models/signals.py +2 -2
- edc_adverse_event/pdf_reports/ae_pdf_report.py +3 -2
- edc_adverse_event/pdf_reports/death_pdf_report.py +3 -2
- edc_adverse_event/templatetags/edc_adverse_event_extras.py +2 -3
- edc_adverse_event/urls.py +1 -0
- edc_adverse_event/utils.py +11 -14
- edc_adverse_event/view_mixins/ae/ae_listboard_view_mixin.py +3 -3
- edc_adverse_event/view_mixins/ae/death_report_listboard_view_mixin.py +1 -1
- edc_adverse_event/view_mixins/tmg/tmg_ae_listboard_view_mixin.py +2 -1
- edc_adverse_event/views/home_view.py +1 -0
- edc_adverse_event/views/tmg/home_view.py +1 -1
- edc_adverse_event/views/tmg/status_listboards.py +1 -1
- edc_analytics/custom_tables/age.py +1 -2
- edc_analytics/custom_tables/art.py +1 -2
- edc_analytics/custom_tables/bmi.py +1 -3
- edc_analytics/custom_tables/bp.py +1 -3
- edc_analytics/custom_tables/fasting.py +1 -2
- edc_analytics/custom_tables/fbg.py +1 -2
- edc_analytics/custom_tables/fbg_ogtt.py +1 -2
- edc_analytics/custom_tables/hba1c.py +1 -2
- edc_analytics/custom_tables/ogtt.py +1 -2
- edc_analytics/custom_tables/waist.py +1 -2
- edc_analytics/row/row_statistics_with_gender.py +1 -2
- edc_analytics/table.py +1 -2
- edc_appointment/admin/actions.py +1 -1
- edc_appointment/admin/appointment_admin.py +1 -1
- edc_appointment/appointment_reason_updater.py +1 -1
- edc_appointment/choices.py +1 -2
- edc_appointment/form_validator_mixins/next_appointment_crf_form_validator_mixin.py +1 -1
- edc_appointment/list_data.py +2 -3
- edc_appointment/model_mixins/missed_appointment_model_mixin.py +1 -1
- edc_appointment/model_mixins/next_appointment_crf_model_mixin.py +1 -2
- edc_appointment/modeladmin_mixins/next_appointment_crf_modeladmin_mixin.py +1 -1
- edc_appointment/models/signals.py +1 -1
- edc_appointment/utils.py +4 -2
- edc_auth/constants.py +3 -0
- edc_consent/choices.py +1 -1
- edc_consent/consent_definition.py +1 -1
- edc_consent/consent_definition_extension.py +1 -1
- edc_consent/field_mixins/citizen_fields_mixin.py +3 -3
- edc_consent/model_mixins/consent_model_mixin.py +1 -1
- edc_consent/modelform_mixins/consent_modelform_mixin/consent_modelform_validation_mixin.py +1 -1
- edc_consent/modelform_mixins/consent_modelform_mixin/review_fields_modelform_mixin.py +1 -2
- edc_consent/validators.py +5 -10
- edc_constants/__init__.py +0 -3
- edc_constants/choices.py +2 -3
- edc_constants/context_processor.py +2 -3
- edc_constants/utils.py +2 -3
- edc_crf/model_mixins/crf_status_model_mixin.py +1 -1
- edc_crf/model_mixins/singleton_crf_model_mixin.py +0 -1
- edc_crf/update_crf_status_command.py +1 -2
- edc_crf/update_crf_status_for_instance.py +1 -2
- edc_dashboard/url_config.py +1 -2
- edc_dashboard/views/administration_view.py +1 -0
- edc_data_manager/action_items.py +7 -7
- edc_data_manager/admin/actions.py +1 -1
- edc_data_manager/admin/data_query_admin.py +10 -10
- edc_data_manager/choices.py +1 -1
- edc_data_manager/forms/data_query.py +1 -1
- edc_data_manager/handlers/handlers.py +1 -1
- edc_data_manager/models/data_query.py +1 -1
- edc_data_manager/models/model_mixins.py +1 -2
- edc_data_manager/models/query_rule.py +1 -1
- edc_data_manager/view_mixins/data_manager_view_mixin.py +1 -1
- edc_document_status/model_mixins.py +1 -1
- edc_document_status/models/signals.py +1 -2
- edc_dx/diagnoses.py +2 -3
- edc_dx/form_validators/diagnosis_form_validator_mixin.py +1 -2
- edc_dx_review/choices.py +1 -1
- edc_dx_review/form_validator_mixins/clinical_review_followup_form_validator_mixin.py +2 -1
- edc_dx_review/list_data.py +1 -1
- edc_dx_review/medical_date.py +1 -1
- edc_dx_review/model_mixins/clinical_review_baseline_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_chol_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_dm_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_hiv_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_htn_model_mixin.py +1 -1
- edc_dx_review/model_mixins/clinical_review_followup/clinical_review_followup_model_mixin.py +1 -1
- edc_dx_review/model_mixins/factory/baseline_review_model_mixin_factory.py +1 -1
- edc_dx_review/model_mixins/factory/calculate_date.py +1 -1
- edc_dx_review/model_mixins/factory/dx_initial_review_model_mixin_factory.py +1 -1
- edc_dx_review/model_mixins/factory/followup_review_model_mixin_factory.py +1 -1
- edc_dx_review/model_mixins/factory/rx_initial_review_model_mixin_factory.py +1 -1
- edc_dx_review/model_mixins/followup_review/followup_review_model_mixin.py +1 -1
- edc_dx_review/model_mixins/followup_review/hiv_followup_review_model_mixin.py +1 -1
- edc_dx_review/model_mixins/initial_review/chol_initial_review_model_mixin.py +1 -1
- edc_dx_review/model_mixins/initial_review/hiv_initial_model_mixins.py +2 -3
- edc_dx_review/model_mixins/initial_review/ncd_initial_review_model_mixin.py +1 -1
- edc_dx_review/utils.py +1 -1
- edc_egfr/__init__.py +0 -1
- edc_egfr/egfr.py +23 -15
- edc_egfr/form_validator_mixins/egfr_form_validator_mixins.py +30 -25
- edc_egfr/model_mixins/egfr_drop_notification_model_mixin.py +8 -2
- edc_egfr/model_mixins/egfr_model_mixin.py +2 -2
- edc_export/management/commands/import_receipts.py +1 -2
- edc_export/model_exporter/object_history_helpers.py +1 -2
- edc_export/models/object_history.py +1 -1
- edc_export/models/upload_export_receipt_file.py +1 -1
- edc_facility/list_data.py +1 -1
- edc_fieldsets/fieldsets_modeladmin_mixin.py +1 -2
- edc_form_validators/applicable_field_validator.py +1 -1
- edc_form_validators/date_validator.py +1 -1
- edc_form_validators/many_to_many_field_validator.py +1 -2
- edc_form_validators/other_specify_field_validator.py +1 -2
- edc_form_validators/required_field_validator.py +1 -2
- edc_glucose/form_validators/fasting_form_validator.py +1 -1
- edc_glucose/form_validators/glucose_form_validator.py +3 -3
- edc_glucose/form_validators/glucose_form_validator_mixin.py +1 -2
- edc_glucose/form_validators/ogtt_form_validator_mixin.py +1 -2
- edc_glucose/model_mixin_factories/fasting_model_mixin_factory.py +1 -1
- edc_glucose/model_mixin_factories/fbg_model_mixin_factory.py +1 -2
- edc_glucose/model_mixin_factories/glucose_model_mixin_factory.py +1 -1
- edc_glucose/model_mixin_factories/ogtt_model_mixin_factory.py +1 -2
- edc_glucose/model_mixins/hba1c_model_mixin.py +1 -3
- edc_glucose/utils.py +2 -2
- edc_identifier/model_mixins.py +1 -2
- edc_identifier/models.py +1 -1
- edc_identifier/simple_identifier.py +1 -2
- edc_lab/admin/modeladmin_mixins.py +1 -1
- edc_lab/choices.py +7 -10
- edc_lab/constants.py +0 -2
- edc_lab/form_validators/crf_requisition_form_validator_mixin.py +1 -0
- edc_lab/form_validators/requisition_form_validator_mixin.py +1 -1
- edc_lab/lab/specimen.py +1 -2
- edc_lab/model_mixins/requisition/requisition_identifier_mixin.py +1 -1
- edc_lab/model_mixins/requisition/requisition_model_mixin.py +1 -1
- edc_lab/model_mixins/shipping/manifest_model_mixin.py +1 -1
- edc_lab/model_mixins/shipping/verify_model_mixin.py +1 -2
- edc_lab/models/box.py +1 -1
- edc_lab_dashboard/middleware.py +1 -0
- edc_lab_dashboard/urls.py +1 -0
- edc_lab_dashboard/view_mixins/form_action_view_mixin.py +1 -0
- edc_lab_dashboard/view_mixins/process_requisition_view_mixin.py +1 -1
- edc_lab_dashboard/views/action_views/manage_box_item_view.py +1 -0
- edc_lab_dashboard/views/action_views/receive_view.py +1 -1
- edc_lab_dashboard/views/listboard_views/manage_box_listboard_view.py +1 -0
- edc_lab_dashboard/views/listboard_views/pack_listboard_view.py +1 -1
- edc_lab_dashboard/views/listboard_views/process_listboard_view.py +2 -1
- edc_lab_dashboard/views/listboard_views/receive_listboard_view.py +2 -1
- edc_lab_dashboard/views/listboard_views/requisition_listboard_view.py +1 -2
- edc_lab_dashboard/views/listboard_views/verify_box_listboard_view.py +1 -0
- edc_lab_results/action_items.py +1 -1
- edc_lab_results/form_validator_mixins/blood_results_fbg_form_validator_mixin.py +1 -1
- edc_lab_results/form_validator_mixins/blood_results_form_validator_mixin.py +2 -1
- edc_lab_results/model_mixin_factories/field_attrs.py +1 -1
- edc_lab_results/model_mixins/electrolytes_model_mixins.py +2 -2
- edc_lab_results/model_mixins/fbc_model_mixins.py +9 -8
- edc_lab_results/model_mixins/fbg_model_mixin.py +2 -7
- edc_lab_results/model_mixins/glucose_model_mixin.py +2 -7
- edc_lab_results/model_mixins/insulin_model_mixin.py +2 -1
- edc_lab_results/model_mixins/lft_model_mixins.py +7 -6
- edc_lab_results/model_mixins/lipid_model_mixins.py +1 -2
- edc_lab_results/model_mixins/proteinuria_model_mixin.py +1 -2
- edc_lab_results/model_mixins/rft_model_mixins.py +5 -3
- edc_listboard/views/screen/screening_listboard_view.py +1 -1
- edc_locator/action_items.py +2 -1
- edc_locator/forms/subject_locator_form_validator.py +1 -1
- edc_locator/modeladmin_mixins.py +1 -1
- edc_ltfu/action_items.py +2 -1
- edc_ltfu/choices.py +1 -1
- edc_ltfu/constants.py +0 -2
- edc_ltfu/forms/ltfu_form_validator.py +2 -1
- edc_ltfu/forms/ltfu_form_validator_mixin.py +1 -1
- edc_ltfu/modelform_mixins.py +2 -5
- edc_metadata/admin/modeladmin_mixins.py +4 -4
- edc_model/choices.py +1 -1
- edc_model/models/fields/date_estimated.py +1 -1
- edc_model_admin/context_processors.py +1 -1
- edc_model_admin/list_filters/future_date_list_filter.py +6 -7
- edc_model_admin/list_filters/list_field_with_other_list_filter.py +1 -1
- edc_model_admin/list_filters/past_date_list_filter.py +6 -7
- edc_model_admin/mixins/model_admin_redirect_on_delete_mixin.py +1 -0
- edc_model_admin/templatetags/edc_admin_modify.py +1 -1
- edc_model_fields/fields/date_estimated.py +1 -1
- edc_model_to_dataframe/model_to_dataframe.py +1 -1
- edc_navbar/navbar_item.py +1 -0
- edc_navbar/system_checks.py +3 -0
- edc_offstudy/action_items.py +2 -1
- edc_offstudy/choices.py +2 -1
- edc_pdf_reports/crf_pdf_report.py +9 -7
- edc_pdutils/dataframes/get_subject_consent.py +1 -2
- edc_pdutils/dataframes/get_subject_visit.py +1 -11
- edc_pdutils/helper.py +1 -2
- edc_pdutils/mappings.py +1 -1
- edc_pdutils/tables/crf.py +1 -2
- edc_pdutils/tables/requisition.py +1 -2
- edc_pdutils/utils/__init__.py +1 -0
- edc_pdutils/utils/convert_visit_code_to_float.py +8 -0
- edc_pdutils/utils/decrypt.py +5 -4
- edc_pdutils/utils/missing_subject_identifiers.py +5 -4
- edc_pharmacy/action_items.py +2 -1
- edc_pharmacy/admin/list_filters.py +1 -1
- edc_pharmacy/admin/stock/allocation_admin.py +1 -1
- edc_pharmacy/admin/stock/order_item_admin.py +1 -1
- edc_pharmacy/admin/stock/stock_request_admin.py +1 -1
- edc_pharmacy/admin/stock/stock_transfer_admin.py +1 -1
- edc_pharmacy/admin/stock/stock_transfer_item_admin.py +1 -1
- edc_pharmacy/choices.py +1 -2
- edc_pharmacy/form_validators/crf/study_medication_form_validator.py +1 -1
- edc_pharmacy/list_data.py +1 -1
- edc_pharmacy/model_mixins/study_medication_crf_model_mixin.py +1 -1
- edc_pharmacy/model_mixins/study_medication_refill_model_mixin.py +1 -1
- edc_pharmacy/models/model_mixins.py +1 -2
- edc_pharmacy/models/prescription/rx.py +1 -1
- edc_pharmacy/models/signals.py +1 -1
- edc_pharmacy/models/stock/order.py +1 -1
- edc_pharmacy/models/stock/order_item.py +1 -2
- edc_pharmacy/models/stock/stock_request.py +1 -1
- edc_pharmacy/views/confirm_stock_from_queryset_view.py +2 -1
- edc_pharmacy/views/confirmation_at_site_view.py +1 -1
- edc_prn/models.py +1 -2
- edc_protocol_incident/action_items.py +2 -1
- edc_protocol_incident/choices.py +1 -1
- edc_protocol_incident/form_validators/mixins.py +2 -1
- edc_protocol_incident/form_validators/protocol_deviation_violation_form_validator.py +2 -1
- edc_protocol_incident/form_validators/protocol_incident_form_validator.py +2 -1
- edc_protocol_incident/list_data.py +1 -1
- edc_protocol_incident/model_mixins/protocol_deviation_violation_model_mixin.py +1 -1
- edc_protocol_incident/modeladmin_mixins.py +1 -1
- edc_qareports/choices.py +1 -1
- edc_qareports/migrations/0017_auto_20240816_0256.py +1 -2
- edc_qareports/modeladmin_mixins/list_filters.py +1 -2
- edc_qareports/modeladmin_mixins/qa_report_modeladmin_mixin.py +1 -1
- edc_qareports/sql_generator/requisition_subquery.py +1 -1
- edc_refusal/forms.py +2 -1
- edc_refusal/list_data.py +1 -1
- edc_registration/model_mixins/updates_or_creates_registered_subject_model_mixin.py +1 -1
- edc_registration/models/registered_subject.py +1 -1
- edc_reportable/__init__.py +0 -35
- edc_reportable/choices.py +8 -3
- edc_reportable/constants.py +0 -7
- edc_reportable/data/__init__.py +0 -1
- edc_reportable/data/grading_data/ctcae_v5.py +1 -2
- edc_reportable/data/grading_data/daids_july_2017.py +7 -6
- edc_reportable/data/normal_data/africa.py +6 -5
- edc_reportable/exceptions.py +0 -4
- edc_reportable/forms/reportables_form_validator_mixin.py +2 -1
- edc_reportable/formula.py +1 -1
- edc_reportable/post_migrate_signals.py +1 -1
- edc_reportable/reference_range_evaluator.py +8 -2
- edc_reportable/units.py +2 -23
- edc_reportable/utils/__init__.py +1 -1
- edc_reportable/utils/get_mw.py +20 -0
- edc_reportable/utils/get_normal_data_or_raise.py +1 -1
- edc_review_dashboard/auths.py +1 -1
- edc_review_dashboard/middleware.py +1 -0
- edc_review_dashboard/urls.py +1 -0
- edc_review_dashboard/views/subject_review_listboard_view.py +1 -0
- edc_screening/choices.py +1 -1
- edc_screening/gender_evaluator.py +1 -1
- edc_screening/model_mixins/screening_fields_model_mixin.py +1 -1
- edc_screening/modelform_mixins.py +1 -1
- edc_screening/screening_eligibility.py +1 -2
- edc_sites/models/site_profile.py +1 -2
- edc_sites/site.py +1 -1
- edc_subject_dashboard/requisition_labels.py +1 -1
- edc_subject_dashboard/requisition_report.py +1 -1
- edc_subject_dashboard/requisition_verifier.py +1 -1
- edc_subject_dashboard/urls.py +1 -0
- edc_subject_dashboard/view_utils/go_to_forms_button.py +1 -1
- edc_subject_dashboard/views/requisition_print_actions_view.py +1 -1
- edc_subject_dashboard/views/subject_dashboard_view.py +1 -0
- edc_transfer/action_items.py +2 -1
- edc_transfer/choices.py +1 -1
- edc_transfer/form_validators.py +1 -1
- edc_transfer/list_data.py +1 -1
- edc_unblinding/action_items.py +2 -1
- edc_unblinding/models/unblinding_request.py +1 -1
- edc_unblinding/models/unblinding_review.py +1 -1
- edc_visit_schedule/action_items.py +2 -1
- edc_visit_schedule/admin/subject_schedule_history_admin.py +1 -0
- edc_visit_tracking/action_items.py +2 -1
- edc_visit_tracking/choices.py +1 -1
- edc_visit_tracking/form_validators/visit_form_validator.py +1 -1
- edc_visit_tracking/form_validators/visit_missed_form_validator.py +2 -1
- edc_visit_tracking/managers.py +1 -2
- edc_visit_tracking/model_mixins/subject_visit_missed_model_mixin.py +1 -1
- edc_visit_tracking/model_mixins/visit_model_mixin/caretaker_fields_mixin.py +1 -1
- edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_fields_mixin.py +1 -1
- edc_visit_tracking/model_mixins/visit_model_mixin/visit_model_mixin.py +1 -1
- edc_visit_tracking/modeladmin_mixins/crf_model_admin_mixin.py +2 -1
- edc_visit_tracking/modeladmin_mixins/visit_model_admin_mixin.py +1 -1
- edc_visit_tracking/models/signals.py +1 -1
- edc_visit_tracking/view_utils/related_visit_button.py +1 -1
- edc_vitals/form_validators/blood_pressure_form_validator_mixin.py +1 -2
- edc_constants/constants.py +0 -250
- edc_constants/disease_constants.py +0 -22
- edc_egfr/calculators/__init__.py +0 -4
- edc_egfr/calculators/base_egrfr.py +0 -56
- edc_egfr/calculators/egfr_ckd_epi.py +0 -68
- edc_egfr/calculators/egfr_cockcroft_gault.py +0 -62
- edc_egfr/calculators/percent_change.py +0 -7
- edc_reportable/data/molecular_weights.py +0 -11
- edc_reportable/utils/convert_units.py +0 -163
- {clinicedc-2.0.41.dist-info → clinicedc-2.0.42.dist-info}/WHEEL +0 -0
- {clinicedc-2.0.41.dist-info → clinicedc-2.0.42.dist-info}/licenses/LICENSE +0 -0
edc_action_item/action.py
CHANGED
|
@@ -4,6 +4,7 @@ import logging
|
|
|
4
4
|
from contextlib import suppress
|
|
5
5
|
from typing import TYPE_CHECKING
|
|
6
6
|
|
|
7
|
+
from clinicedc_constants import CLOSED, NEW, OPEN
|
|
7
8
|
from django.apps import apps as django_apps
|
|
8
9
|
from django.conf import settings
|
|
9
10
|
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
|
|
@@ -12,7 +13,6 @@ from django.db import models
|
|
|
12
13
|
from django.utils.formats import localize
|
|
13
14
|
|
|
14
15
|
from edc_action_item.stubs import ActionItemStub
|
|
15
|
-
from edc_constants.constants import CLOSED, NEW, OPEN
|
|
16
16
|
from edc_model.constants import DEFAULT_BASE_FIELDS
|
|
17
17
|
from edc_sites.utils import valid_site_for_subject_or_raise
|
|
18
18
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import CLOSED, NEW, OPEN
|
|
1
2
|
from django.core.exceptions import ObjectDoesNotExist
|
|
2
3
|
from django.utils import timezone
|
|
3
4
|
|
|
4
|
-
from edc_constants.constants import CLOSED, NEW, OPEN
|
|
5
5
|
from edc_notification.notification import Notification
|
|
6
6
|
|
|
7
7
|
NOTIFY_ON_NEW_AND_NO_REFERENCE_OBJ = "notify_on_new_and_no_reference_obj"
|
edc_action_item/choices.py
CHANGED
edc_action_item/data_fixers.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import re
|
|
2
2
|
import sys
|
|
3
3
|
|
|
4
|
+
from clinicedc_constants import CLOSED, NEW, OPEN
|
|
4
5
|
from django.core.exceptions import (
|
|
5
6
|
FieldError,
|
|
6
7
|
MultipleObjectsReturned,
|
|
@@ -9,8 +10,6 @@ from django.core.exceptions import (
|
|
|
9
10
|
from django.db import connection
|
|
10
11
|
from django.db.models.signals import post_delete, post_save, pre_save
|
|
11
12
|
|
|
12
|
-
from edc_constants.constants import CLOSED, NEW, OPEN
|
|
13
|
-
|
|
14
13
|
from .site_action_items import site_action_items
|
|
15
14
|
|
|
16
15
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import CANCELLED, NEW, OPEN
|
|
1
2
|
from django import forms
|
|
2
3
|
from django.apps import apps as django_apps
|
|
3
4
|
|
|
4
|
-
from edc_constants.constants import CANCELLED, NEW, OPEN
|
|
5
5
|
from edc_model_form.mixins import BaseModelFormMixin
|
|
6
6
|
|
|
7
7
|
from ..models import ActionItem
|
|
@@ -3,13 +3,13 @@ from __future__ import annotations
|
|
|
3
3
|
from datetime import datetime
|
|
4
4
|
from typing import TYPE_CHECKING
|
|
5
5
|
|
|
6
|
+
from clinicedc_constants import CANCELLED, NEW
|
|
6
7
|
from django.apps import apps as django_apps
|
|
7
8
|
from django.core.exceptions import ObjectDoesNotExist
|
|
8
9
|
from django.db import models
|
|
9
10
|
from django.db.models.deletion import PROTECT
|
|
10
11
|
from django.utils import timezone
|
|
11
12
|
|
|
12
|
-
from edc_constants.constants import CANCELLED, NEW
|
|
13
13
|
from edc_identifier.model_mixins import NonUniqueSubjectIdentifierFieldMixin
|
|
14
14
|
from edc_model.models import BaseUuidModel, HistoricalRecords
|
|
15
15
|
from edc_notification.model_mixins import NotificationModelMixin
|
|
@@ -2,10 +2,10 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
|
|
5
|
+
from clinicedc_constants import HIGH_PRIORITY
|
|
5
6
|
from django.apps import apps as django_apps
|
|
6
7
|
from django.db import models
|
|
7
8
|
|
|
8
|
-
from edc_constants.constants import HIGH_PRIORITY
|
|
9
9
|
from edc_model.models import BaseUuidModel
|
|
10
10
|
|
|
11
11
|
from ..choices import PRIORITY
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
|
+
from clinicedc_constants import CLOSED, NEW, OPEN
|
|
3
4
|
from django.core.exceptions import ObjectDoesNotExist
|
|
4
5
|
from django.db.models.signals import m2m_changed, post_delete, post_save
|
|
5
6
|
from django.dispatch import receiver
|
|
6
7
|
from simple_history.signals import post_create_historical_record
|
|
7
8
|
|
|
8
|
-
from edc_constants.constants import CLOSED, NEW, OPEN
|
|
9
9
|
from edc_notification.site_notifications import site_notifications
|
|
10
10
|
|
|
11
11
|
from ..utils import reset_and_delete_action_item
|
|
@@ -2,10 +2,10 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import TYPE_CHECKING
|
|
4
4
|
|
|
5
|
+
from clinicedc_constants import CANCELLED, CLOSED, HIGH_PRIORITY, NEW, OPEN
|
|
5
6
|
from django import template
|
|
6
7
|
|
|
7
8
|
from edc_auth.utils import get_user
|
|
8
|
-
from edc_constants.constants import CANCELLED, CLOSED, HIGH_PRIORITY, NEW, OPEN
|
|
9
9
|
from edc_utils.date import to_local
|
|
10
10
|
from edc_utils.text import formatted_date
|
|
11
11
|
|
edc_action_item/utils.py
CHANGED
|
@@ -2,12 +2,11 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import contextlib
|
|
4
4
|
|
|
5
|
+
from clinicedc_constants import CLOSED, NEW
|
|
5
6
|
from django.apps import apps as django_apps
|
|
6
7
|
from django.core.exceptions import ObjectDoesNotExist
|
|
7
8
|
from tqdm import tqdm
|
|
8
9
|
|
|
9
|
-
from edc_constants.constants import CLOSED, NEW
|
|
10
|
-
|
|
11
10
|
from .create_or_update_action_type import create_or_update_action_type
|
|
12
11
|
from .identifiers import ActionIdentifier
|
|
13
12
|
from .models import ActionItem
|
|
@@ -2,9 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from typing import Any
|
|
4
4
|
|
|
5
|
+
from clinicedc_constants import NEW, OPEN
|
|
5
6
|
from django.db.models import QuerySet
|
|
6
7
|
|
|
7
|
-
from edc_constants.constants import NEW, OPEN
|
|
8
8
|
from edc_sites.site import sites
|
|
9
9
|
|
|
10
10
|
from ..models import ActionItem
|
edc_adherence/choices.py
CHANGED
edc_adherence/list_data.py
CHANGED
edc_adherence/model_mixins.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
from clinicedc_constants import YES
|
|
1
2
|
from django.conf import settings
|
|
2
3
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
3
4
|
from django.db import models
|
|
4
5
|
from django.utils.html import format_html
|
|
5
6
|
|
|
6
7
|
from edc_constants.choices import YES_NO
|
|
7
|
-
from edc_constants.constants import YES
|
|
8
8
|
from edc_model import models as edc_models
|
|
9
9
|
|
|
10
10
|
from .choices import MISSED_PILLS
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
+
from clinicedc_constants import DEAD, GRADE5, HIGH_PRIORITY, LTFU, YES
|
|
1
2
|
from django.utils.html import format_html
|
|
2
3
|
from django.utils.safestring import mark_safe
|
|
3
4
|
|
|
4
5
|
from edc_action_item.action_with_notification import ActionWithNotification
|
|
5
6
|
from edc_action_item.site_action_items import site_action_items
|
|
6
|
-
from edc_adverse_event.constants import (
|
|
7
|
-
AE_FOLLOWUP_ACTION,
|
|
8
|
-
AE_INITIAL_ACTION,
|
|
9
|
-
DEATH_REPORT_ACTION,
|
|
10
|
-
)
|
|
11
|
-
from edc_constants.constants import DEAD, GRADE5, HIGH_PRIORITY, YES
|
|
12
|
-
from edc_ltfu.constants import LOST_TO_FOLLOWUP
|
|
13
7
|
from edc_notification.utils import get_email_contacts
|
|
14
8
|
from edc_visit_schedule.utils import (
|
|
15
9
|
OnScheduleError,
|
|
@@ -17,7 +11,13 @@ from edc_visit_schedule.utils import (
|
|
|
17
11
|
get_onschedule_models,
|
|
18
12
|
)
|
|
19
13
|
|
|
20
|
-
from ..constants import
|
|
14
|
+
from ..constants import (
|
|
15
|
+
ADVERSE_EVENT_ADMIN_SITE,
|
|
16
|
+
ADVERSE_EVENT_APP_LABEL,
|
|
17
|
+
AE_FOLLOWUP_ACTION,
|
|
18
|
+
AE_INITIAL_ACTION,
|
|
19
|
+
DEATH_REPORT_ACTION,
|
|
20
|
+
)
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
class AeFollowupAction(ActionWithNotification):
|
|
@@ -88,7 +88,7 @@ class AeFollowupAction(ActionWithNotification):
|
|
|
88
88
|
|
|
89
89
|
def update_next_actions_ltfu(self, next_actions=None):
|
|
90
90
|
"""Add Study termination to next_actions if LTFU."""
|
|
91
|
-
if self.reference_obj.outcome and self.reference_obj.outcome ==
|
|
91
|
+
if self.reference_obj.outcome and self.reference_obj.outcome == LTFU:
|
|
92
92
|
if not self.onschedule_models:
|
|
93
93
|
raise OnScheduleError(
|
|
94
94
|
f"Subject cannot be lost to followup. "
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
from clinicedc_constants import DEAD, GRADE3, GRADE4, GRADE5, HIGH_PRIORITY, NO, YES
|
|
2
|
+
|
|
1
3
|
from edc_action_item.action_with_notification import ActionWithNotification
|
|
2
|
-
|
|
4
|
+
|
|
5
|
+
from ..constants import (
|
|
6
|
+
ADVERSE_EVENT_ADMIN_SITE,
|
|
7
|
+
ADVERSE_EVENT_APP_LABEL,
|
|
3
8
|
AE_FOLLOWUP_ACTION,
|
|
4
9
|
AE_INITIAL_ACTION,
|
|
5
10
|
AE_SUSAR_ACTION,
|
|
6
11
|
AE_TMG_ACTION,
|
|
7
12
|
DEATH_REPORT_ACTION,
|
|
8
13
|
)
|
|
9
|
-
from edc_constants.constants import DEAD, GRADE3, GRADE4, GRADE5, HIGH_PRIORITY, NO, YES
|
|
10
|
-
|
|
11
|
-
from ..constants import ADVERSE_EVENT_ADMIN_SITE, ADVERSE_EVENT_APP_LABEL
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
class AeInitialAction(ActionWithNotification):
|
|
@@ -25,11 +27,9 @@ class AeInitialAction(ActionWithNotification):
|
|
|
25
27
|
|
|
26
28
|
@property
|
|
27
29
|
def deceased(self):
|
|
28
|
-
|
|
30
|
+
return (self.reference_obj.ae_grade and self.reference_obj.ae_grade == GRADE5) or (
|
|
29
31
|
self.reference_obj.sae_reason.name and self.reference_obj.sae_reason.name == DEAD
|
|
30
|
-
)
|
|
31
|
-
return True
|
|
32
|
-
return False
|
|
32
|
+
)
|
|
33
33
|
|
|
34
34
|
def get_next_actions(self):
|
|
35
35
|
"""Returns next actions."""
|
|
@@ -37,19 +37,17 @@ class AeInitialAction(ActionWithNotification):
|
|
|
37
37
|
next_actions = self.append_ae_followup_next_action(next_actions)
|
|
38
38
|
next_actions = self.append_ae_susar_next_action(next_actions)
|
|
39
39
|
next_actions = self.append_ae_tmg_next_action(next_actions)
|
|
40
|
-
|
|
41
|
-
return next_actions
|
|
40
|
+
return self.append_death_report_next_action(next_actions)
|
|
42
41
|
|
|
43
42
|
def append_ae_susar_next_action(self, next_actions=None):
|
|
44
43
|
"""Add next AE_SUSAR_ACTION if SUSAR == YES."""
|
|
45
|
-
|
|
44
|
+
return self.append_to_next_if_required(
|
|
46
45
|
next_actions=next_actions,
|
|
47
46
|
action_name=AE_SUSAR_ACTION,
|
|
48
47
|
required=(
|
|
49
48
|
self.reference_obj.susar == YES and self.reference_obj.susar_reported == NO
|
|
50
49
|
),
|
|
51
50
|
)
|
|
52
|
-
return next_actions
|
|
53
51
|
|
|
54
52
|
def append_ae_followup_next_action(self, next_actions=None):
|
|
55
53
|
"""Add next AeFollowup if not deceased."""
|
|
@@ -72,18 +70,16 @@ class AeInitialAction(ActionWithNotification):
|
|
|
72
70
|
required=self.reference_obj.ae_grade == GRADE4,
|
|
73
71
|
)
|
|
74
72
|
# add next AeTmgAction if G3 and is an SAE
|
|
75
|
-
|
|
73
|
+
return self.append_to_next_if_required(
|
|
76
74
|
next_actions=next_actions,
|
|
77
75
|
action_name=AE_TMG_ACTION,
|
|
78
76
|
required=(self.reference_obj.ae_grade == GRADE3 and self.reference_obj.sae == YES),
|
|
79
77
|
)
|
|
80
|
-
return next_actions
|
|
81
78
|
|
|
82
79
|
def append_death_report_next_action(self, next_actions=None):
|
|
83
80
|
"""Add next Death report if G5/Death."""
|
|
84
|
-
|
|
81
|
+
return self.append_to_next_if_required(
|
|
85
82
|
next_actions=next_actions,
|
|
86
83
|
action_name=DEATH_REPORT_ACTION,
|
|
87
84
|
required=self.deceased,
|
|
88
85
|
)
|
|
89
|
-
return next_actions
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
from clinicedc_constants import CLOSED, HIGH_PRIORITY
|
|
2
|
+
|
|
1
3
|
from edc_action_item.action_with_notification import ActionWithNotification
|
|
2
|
-
|
|
4
|
+
|
|
5
|
+
from ..constants import (
|
|
6
|
+
ADVERSE_EVENT_ADMIN_SITE,
|
|
7
|
+
ADVERSE_EVENT_APP_LABEL,
|
|
3
8
|
AE_FOLLOWUP_ACTION,
|
|
4
9
|
AE_INITIAL_ACTION,
|
|
5
10
|
AE_TMG_ACTION,
|
|
6
11
|
)
|
|
7
|
-
from edc_constants.constants import CLOSED, HIGH_PRIORITY
|
|
8
|
-
|
|
9
|
-
from ..constants import ADVERSE_EVENT_ADMIN_SITE, ADVERSE_EVENT_APP_LABEL
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
class AeTmgAction(ActionWithNotification):
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
from clinicedc_constants import HIGH_PRIORITY
|
|
1
2
|
from django.apps import apps as django_apps
|
|
2
3
|
from django.core.exceptions import ObjectDoesNotExist
|
|
3
4
|
|
|
4
5
|
from edc_action_item.action_with_notification import ActionWithNotification
|
|
5
|
-
from
|
|
6
|
+
from edc_visit_schedule.utils import get_offschedule_models
|
|
7
|
+
|
|
8
|
+
from ..constants import (
|
|
9
|
+
ADVERSE_EVENT_ADMIN_SITE,
|
|
10
|
+
ADVERSE_EVENT_APP_LABEL,
|
|
6
11
|
AE_FOLLOWUP_ACTION,
|
|
7
12
|
AE_INITIAL_ACTION,
|
|
8
13
|
DEATH_REPORT_ACTION,
|
|
9
14
|
)
|
|
10
|
-
from edc_constants.constants import HIGH_PRIORITY
|
|
11
|
-
from edc_visit_schedule.utils import get_offschedule_models
|
|
12
|
-
|
|
13
|
-
from ..constants import ADVERSE_EVENT_ADMIN_SITE, ADVERSE_EVENT_APP_LABEL
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
class DeathReportAction(ActionWithNotification):
|
|
@@ -35,8 +36,7 @@ class DeathReportAction(ActionWithNotification):
|
|
|
35
36
|
next_actions = []
|
|
36
37
|
if self.enable_tmg_workflow:
|
|
37
38
|
next_actions = self.append_next_death_tmg_action(next_actions)
|
|
38
|
-
|
|
39
|
-
return next_actions
|
|
39
|
+
return self.append_next_off_schedule_action(next_actions)
|
|
40
40
|
|
|
41
41
|
def append_next_death_tmg_action(self, next_actions):
|
|
42
42
|
if self.death_report_tmg_model:
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
from clinicedc_constants import CLOSED, HIGH_PRIORITY, NO, YES
|
|
2
|
+
|
|
1
3
|
from edc_action_item.action_with_notification import ActionWithNotification
|
|
2
|
-
from edc_constants.constants import CLOSED, HIGH_PRIORITY, NO, YES
|
|
3
4
|
|
|
4
5
|
from ..constants import (
|
|
5
6
|
ADVERSE_EVENT_ADMIN_SITE,
|
edc_adverse_event/auths.py
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
from clinicedc_constants import AE, AE_REVIEW, AE_ROLE, AE_SUPER, TMG, TMG_REVIEW
|
|
2
|
+
|
|
1
3
|
from edc_auth.constants import (
|
|
2
4
|
AUDITOR_ROLE,
|
|
3
5
|
CLINICIAN_ROLE,
|
|
4
6
|
CLINICIAN_SUPER_ROLE,
|
|
5
7
|
NURSE_ROLE,
|
|
8
|
+
TMG_ROLE,
|
|
6
9
|
)
|
|
7
10
|
from edc_auth.site_auths import site_auths
|
|
8
11
|
from edc_auth.utils import remove_default_model_permissions_from_edc_permissions
|
|
@@ -15,7 +18,6 @@ from .auth_objects import (
|
|
|
15
18
|
tmg_dashboard_tuples,
|
|
16
19
|
tmg_navbar_tuples,
|
|
17
20
|
)
|
|
18
|
-
from .constants import AE, AE_REVIEW, AE_ROLE, AE_SUPER, TMG, TMG_REVIEW, TMG_ROLE
|
|
19
21
|
|
|
20
22
|
|
|
21
23
|
def update_site_auths():
|
edc_adverse_event/choices.py
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
|
-
from
|
|
2
|
-
from edc_ltfu.constants import LOST_TO_FOLLOWUP
|
|
3
|
-
from edc_reportable import MILD, MODERATE, SEVERE, SEVERITY_INCREASED_FROM_G3
|
|
4
|
-
|
|
5
|
-
from .constants import (
|
|
1
|
+
from clinicedc_constants import (
|
|
6
2
|
AE_WITHDRAWN,
|
|
7
3
|
CONTINUING_UPDATE,
|
|
4
|
+
DEAD,
|
|
8
5
|
DEFINITELY_RELATED,
|
|
6
|
+
GRADE3,
|
|
7
|
+
GRADE4,
|
|
8
|
+
GRADE5,
|
|
9
|
+
LTFU,
|
|
10
|
+
MILD,
|
|
11
|
+
MODERATE,
|
|
12
|
+
NOT_APPLICABLE,
|
|
9
13
|
NOT_RECOVERED,
|
|
10
14
|
NOT_RELATED,
|
|
15
|
+
OTHER,
|
|
11
16
|
POSSIBLY_RELATED,
|
|
12
17
|
PROBABLY_RELATED,
|
|
13
18
|
RECOVERED,
|
|
14
19
|
RECOVERED_WITH_SEQUELAE,
|
|
15
20
|
RECOVERING,
|
|
21
|
+
SEVERE,
|
|
22
|
+
SEVERITY_INCREASED_FROM_G3,
|
|
16
23
|
UNLIKELY_RELATED,
|
|
17
24
|
)
|
|
18
25
|
|
|
@@ -43,7 +50,7 @@ AE_OUTCOME = (
|
|
|
43
50
|
(RECOVERED, "Recovered/Resolved"),
|
|
44
51
|
(RECOVERING, "Recovering/Resolving at end of study"),
|
|
45
52
|
(NOT_RECOVERED, "Not Recovered/Resolved at end of study"),
|
|
46
|
-
(
|
|
53
|
+
(LTFU, "Unknown/Lost to follow-up"),
|
|
47
54
|
(RECOVERED_WITH_SEQUELAE, "Recovered with sequelae"),
|
|
48
55
|
(DEAD, "Death"),
|
|
49
56
|
(AE_WITHDRAWN, "Adverse event report withdrawn after TMG review"),
|
edc_adverse_event/constants.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# see clinicedc_constants
|
|
1
2
|
from django.conf import settings
|
|
2
3
|
|
|
3
4
|
ADVERSE_EVENT_APP_LABEL = getattr(settings, "ADVERSE_EVENT_APP_LABEL", "edc_adverse_event")
|
|
@@ -9,31 +10,8 @@ AE_FOLLOWUP_ACTION = "submit-ae-followup-report"
|
|
|
9
10
|
AE_INITIAL_ACTION = "submit-initial-ae-report"
|
|
10
11
|
AE_SUSAR_ACTION = "submit-ae-susar-report"
|
|
11
12
|
AE_TMG_ACTION = "submit-ae-tmg-report"
|
|
12
|
-
AE_WITHDRAWN = "ae_withdrawn"
|
|
13
|
-
CONTINUING_UPDATE = "continuing/update"
|
|
14
13
|
DEATH_REPORT_ACTION = "submit-death-report"
|
|
15
|
-
DEATH_REPORT_NOT_FOUND = "DEATH_REPORT_NOT_FOUND"
|
|
16
14
|
DEATH_REPORT_TMG_ACTION = "submit-death-report-tmg"
|
|
17
15
|
DEATH_REPORT_TMG_SECOND_ACTION = "submit-death-report-tmg-2nd"
|
|
18
|
-
DEFINITELY_RELATED = "definitely_related"
|
|
19
|
-
DISCHARGED = "discharged"
|
|
20
16
|
HOSPITALIZATION_ACTION = "submit-hospitalization-report"
|
|
21
|
-
INPATIENT = "inpatient"
|
|
22
|
-
NOT_RECOVERED = "not_recovered"
|
|
23
|
-
NOT_RELATED = "not_related"
|
|
24
|
-
POSSIBLY_RELATED = "possibly_related"
|
|
25
|
-
PROBABLY_RELATED = "probably_related"
|
|
26
|
-
RECOVERED = "recovered"
|
|
27
|
-
RECOVERED_WITH_SEQUELAE = "recovered_with_sequelae"
|
|
28
|
-
RECOVERING = "recovering"
|
|
29
17
|
STUDY_TERMINATION_CONCLUSION_ACTION = "submit-study-termination-conclusion"
|
|
30
|
-
UNLIKELY_RELATED = "unlikely_related"
|
|
31
|
-
|
|
32
|
-
# roles
|
|
33
|
-
AE = "AE"
|
|
34
|
-
AE_REVIEW = "AE_REVIEW"
|
|
35
|
-
AE_ROLE = "ae_role"
|
|
36
|
-
AE_SUPER = "AE_SUPER"
|
|
37
|
-
TMG = "TMG"
|
|
38
|
-
TMG_REVIEW = "TMG_REVIEW"
|
|
39
|
-
TMG_ROLE = "tmg"
|
|
@@ -3,11 +3,11 @@ from __future__ import annotations
|
|
|
3
3
|
from typing import TYPE_CHECKING, Any
|
|
4
4
|
from zoneinfo import ZoneInfo
|
|
5
5
|
|
|
6
|
+
from clinicedc_constants import CLOSED, OTHER
|
|
6
7
|
from django import forms
|
|
7
8
|
from django.apps import apps as django_apps
|
|
8
9
|
from django.conf import settings
|
|
9
10
|
|
|
10
|
-
from edc_constants.constants import CLOSED, OTHER
|
|
11
11
|
from edc_form_validators.base_form_validator import INVALID_ERROR
|
|
12
12
|
from edc_utils.text import convert_php_dateformat
|
|
13
13
|
|
|
@@ -4,14 +4,13 @@ from datetime import date
|
|
|
4
4
|
from typing import TYPE_CHECKING
|
|
5
5
|
from zoneinfo import ZoneInfo
|
|
6
6
|
|
|
7
|
+
from clinicedc_constants import DEAD, DEATH_REPORT_NOT_FOUND
|
|
7
8
|
from django import forms
|
|
8
9
|
from django.conf import settings
|
|
9
10
|
from django.core.exceptions import ObjectDoesNotExist
|
|
10
11
|
|
|
11
|
-
from edc_constants.constants import DEAD
|
|
12
12
|
from edc_utils.text import convert_php_dateformat
|
|
13
13
|
|
|
14
|
-
from ..constants import DEATH_REPORT_NOT_FOUND
|
|
15
14
|
from ..utils import get_ae_model
|
|
16
15
|
|
|
17
16
|
if TYPE_CHECKING:
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
1
|
+
from clinicedc_constants import AE_WITHDRAWN, SEVERITY_INCREASED_FROM_G3, YES
|
|
2
|
+
|
|
3
3
|
from edc_form_validators import INVALID_ERROR, FormValidator
|
|
4
|
-
from edc_reportable import SEVERITY_INCREASED_FROM_G3
|
|
5
4
|
|
|
6
5
|
|
|
7
6
|
class AeFollowupFormValidator(FormValidator):
|
|
@@ -2,9 +2,9 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from datetime import date
|
|
4
4
|
|
|
5
|
+
from clinicedc_constants import CLOSED, NO, OTHER
|
|
5
6
|
from django.core.exceptions import ObjectDoesNotExist
|
|
6
7
|
|
|
7
|
-
from edc_constants.constants import CLOSED, NO, OTHER
|
|
8
8
|
from edc_form_validators import INVALID_ERROR, FormValidator
|
|
9
9
|
|
|
10
10
|
from ..form_validator_mixins import (
|
edc_adverse_event/list_data.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE, YES
|
|
1
2
|
from django.db import models
|
|
2
3
|
from django.utils import timezone
|
|
3
4
|
|
|
4
5
|
from edc_constants.choices import YES_NO
|
|
5
|
-
from edc_constants.constants import NOT_APPLICABLE, YES
|
|
6
6
|
from edc_model.validators import date_not_future
|
|
7
7
|
|
|
8
8
|
from ...choices import AE_GRADE_SIMPLE, AE_OUTCOME
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import django.utils.timezone
|
|
2
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
2
3
|
from django.db import models
|
|
3
4
|
|
|
4
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
5
5
|
from edc_model.validators import date_not_future
|
|
6
6
|
from edc_model_fields.fields.other_charfield import OtherCharField
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
|
|
3
4
|
from edc_constants.choices import YES_NO, YES_NO_NA
|
|
4
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class AeInitialSusarModelMixin(models.Model):
|
|
@@ -12,7 +12,7 @@ class AeInitialSusarModelMixin(models.Model):
|
|
|
12
12
|
choices=YES_NO,
|
|
13
13
|
max_length=5,
|
|
14
14
|
help_text=(
|
|
15
|
-
"If yes, SUSAR must be reported to Principal
|
|
15
|
+
"If yes, SUSAR must be reported to Principal Investigator and TMG immediately,"
|
|
16
16
|
),
|
|
17
17
|
)
|
|
18
18
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
from clinicedc_constants import NOT_APPLICABLE
|
|
1
2
|
from django.db import models
|
|
2
3
|
from django.utils import timezone
|
|
3
4
|
|
|
4
5
|
from edc_constants.choices import YES_NO, YES_NO_NA
|
|
5
|
-
from edc_constants.constants import NOT_APPLICABLE
|
|
6
6
|
from edc_model.validators import datetime_not_future
|
|
7
7
|
from edc_model_fields.fields import OtherCharField
|
|
8
8
|
|