endoreg-db 0.8.9.32__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 endoreg-db might be problematic. Click here for more details.
- endoreg_db/__init__.py +0 -0
- endoreg_db/_version.py +34 -0
- endoreg_db/admin.py +97 -0
- endoreg_db/api/serializers/finding_descriptions.py +0 -0
- endoreg_db/api/views/finding_descriptions.py +0 -0
- endoreg_db/api_urls.py +4 -0
- endoreg_db/apps.py +17 -0
- endoreg_db/assets/dummy_model.ckpt +1 -0
- endoreg_db/authz/auth.py +78 -0
- endoreg_db/authz/backends.py +168 -0
- endoreg_db/authz/management/commands/list_routes.py +20 -0
- endoreg_db/authz/middleware.py +84 -0
- endoreg_db/authz/permissions.py +138 -0
- endoreg_db/authz/policy.py +224 -0
- endoreg_db/authz/settings.py +64 -0
- endoreg_db/authz/views_auth.py +70 -0
- endoreg_db/codemods/readme.md +88 -0
- endoreg_db/codemods/rename_datetime_fields.py +99 -0
- endoreg_db/config/__init__.py +0 -0
- endoreg_db/config/env.py +106 -0
- endoreg_db/config/settings/__init__.py +6 -0
- endoreg_db/config/settings/base.py +148 -0
- endoreg_db/config/settings/case_gen.py +32 -0
- endoreg_db/config/settings/dev.py +108 -0
- endoreg_db/config/settings/keycloak.py +177 -0
- endoreg_db/config/settings/prod.py +66 -0
- endoreg_db/config/settings/test.py +72 -0
- endoreg_db/data/__init__.py +135 -0
- endoreg_db/data/ai_model/data.yaml +7 -0
- endoreg_db/data/ai_model_label/label/data.yaml +88 -0
- endoreg_db/data/ai_model_label/label/polyp_classification.yaml +52 -0
- endoreg_db/data/ai_model_label/label-set/data.yaml +40 -0
- endoreg_db/data/ai_model_label/label-set/polyp_classifications.yaml +25 -0
- endoreg_db/data/ai_model_label/label-type/data.yaml +7 -0
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +27 -0
- endoreg_db/data/ai_model_type/data.yaml +7 -0
- endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml +176 -0
- endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml +20 -0
- endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +167 -0
- endoreg_db/data/case_template/rule/01_patient-set-age.yaml +8 -0
- endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +9 -0
- endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +23 -0
- endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +19 -0
- endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +19 -0
- endoreg_db/data/case_template/rule/19_create_patient.yaml +17 -0
- endoreg_db/data/case_template/rule_type/base_types.yaml +35 -0
- endoreg_db/data/case_template/rule_value/.init +0 -0
- endoreg_db/data/case_template/rule_value_type/base_types.yaml +59 -0
- endoreg_db/data/case_template/template/base.yaml +8 -0
- endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +3 -0
- endoreg_db/data/case_template/tmp/_rule_value +13 -0
- endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -0
- endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +10 -0
- endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +7 -0
- endoreg_db/data/center/data.yaml +99 -0
- endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -0
- endoreg_db/data/center_shift/ukw.yaml +9 -0
- endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -0
- endoreg_db/data/contraindication/bleeding.yaml +11 -0
- endoreg_db/data/db_summary.csv +58 -0
- endoreg_db/data/db_summary.xlsx +0 -0
- endoreg_db/data/disease/cardiovascular.yaml +37 -0
- endoreg_db/data/disease/hepatology.yaml +5 -0
- endoreg_db/data/disease/misc.yaml +5 -0
- endoreg_db/data/disease/renal.yaml +5 -0
- endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +6 -0
- endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +6 -0
- endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +41 -0
- endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +20 -0
- endoreg_db/data/distribution/date/patient.yaml +7 -0
- endoreg_db/data/distribution/multiple_categorical/.init +0 -0
- endoreg_db/data/distribution/numeric/data.yaml +14 -0
- endoreg_db/data/distribution/single_categorical/patient.yaml +7 -0
- endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -0
- endoreg_db/data/endoscope/data.yaml +93 -0
- endoreg_db/data/endoscope_type/data.yaml +11 -0
- endoreg_db/data/endoscopy_processor/data.yaml +50 -0
- endoreg_db/data/event/cardiology.yaml +15 -0
- endoreg_db/data/event/neurology.yaml +14 -0
- endoreg_db/data/event/surgery.yaml +13 -0
- endoreg_db/data/event/thrombembolism.yaml +20 -0
- endoreg_db/data/event_classification/data.yaml +4 -0
- endoreg_db/data/event_classification_choice/data.yaml +9 -0
- endoreg_db/data/examination/examinations/data.yaml +172 -0
- endoreg_db/data/examination/time/data.yaml +48 -0
- endoreg_db/data/examination/time-type/data.yaml +5 -0
- endoreg_db/data/examination/type/data.yaml +17 -0
- endoreg_db/data/examination_indication/endoscopy.yaml +359 -0
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +90 -0
- endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +97 -0
- endoreg_db/data/examination_requirement_set/colonoscopy.yaml +15 -0
- endoreg_db/data/finding/00_generic.yaml +35 -0
- endoreg_db/data/finding/00_generic_complication.yaml +9 -0
- endoreg_db/data/finding/01_gastroscopy_baseline.yaml +88 -0
- endoreg_db/data/finding/01_gastroscopy_observation.yaml +113 -0
- endoreg_db/data/finding/02_colonoscopy_baseline.yaml +53 -0
- endoreg_db/data/finding/02_colonoscopy_hidden.yaml +119 -0
- endoreg_db/data/finding/02_colonoscopy_observation.yaml +152 -0
- endoreg_db/data/finding_classification/00_generic.yaml +44 -0
- endoreg_db/data/finding_classification/00_generic_histology.yaml +28 -0
- endoreg_db/data/finding_classification/00_generic_lesion.yaml +52 -0
- endoreg_db/data/finding_classification/02_colonoscopy_baseline.yaml +83 -0
- endoreg_db/data/finding_classification/02_colonoscopy_histology.yaml +13 -0
- endoreg_db/data/finding_classification/02_colonoscopy_other.yaml +12 -0
- endoreg_db/data/finding_classification/02_colonoscopy_polyp.yaml +101 -0
- endoreg_db/data/finding_classification_choice/00_generic.yaml +15 -0
- endoreg_db/data/finding_classification_choice/00_generic_baseline.yaml +23 -0
- endoreg_db/data/finding_classification_choice/00_generic_complication.yaml +15 -0
- endoreg_db/data/finding_classification_choice/00_generic_histology.yaml +21 -0
- endoreg_db/data/finding_classification_choice/00_generic_lesion.yaml +158 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_bowel_preparation.yaml +49 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_generic.yaml +19 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_histology.yaml +20 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_location.yaml +248 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_other.yaml +34 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_advanced_imaging.yaml +76 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_morphology.yaml +75 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_size.yaml +27 -0
- endoreg_db/data/finding_classification_type/00_generic.yaml +53 -0
- endoreg_db/data/finding_classification_type/02_colonoscopy.yaml +9 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy.yaml +59 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_ablation.yaml +44 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_bleeding.yaml +55 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_resection.yaml +85 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stenosis.yaml +17 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stent.yaml +9 -0
- endoreg_db/data/finding_intervention/01_gastroscopy.yaml +19 -0
- endoreg_db/data/finding_intervention/04_eus.yaml +39 -0
- endoreg_db/data/finding_intervention/05_ercp.yaml +3 -0
- endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
- endoreg_db/data/finding_type/data.yaml +39 -0
- endoreg_db/data/gender/data.yaml +42 -0
- endoreg_db/data/information_source/annotation.yaml +6 -0
- endoreg_db/data/information_source/data.yaml +30 -0
- endoreg_db/data/information_source/endoscopy_guidelines.yaml +7 -0
- endoreg_db/data/information_source/medication.yaml +6 -0
- endoreg_db/data/information_source/prediction.yaml +7 -0
- endoreg_db/data/information_source_type/data.yaml +8 -0
- endoreg_db/data/lab_value/cardiac_enzymes.yaml +37 -0
- endoreg_db/data/lab_value/coagulation.yaml +54 -0
- endoreg_db/data/lab_value/electrolytes.yaml +228 -0
- endoreg_db/data/lab_value/gastrointestinal_function.yaml +133 -0
- endoreg_db/data/lab_value/hematology.yaml +184 -0
- endoreg_db/data/lab_value/hormones.yaml +59 -0
- endoreg_db/data/lab_value/lipids.yaml +53 -0
- endoreg_db/data/lab_value/misc.yaml +76 -0
- endoreg_db/data/lab_value/renal_function.yaml +12 -0
- endoreg_db/data/log_type/data.yaml +57 -0
- endoreg_db/data/lx_client_tag/base.yaml +54 -0
- endoreg_db/data/lx_client_type/base.yaml +30 -0
- endoreg_db/data/lx_permission/base.yaml +24 -0
- endoreg_db/data/lx_permission/endoreg.yaml +52 -0
- endoreg_db/data/material/material.yaml +91 -0
- endoreg_db/data/medication/anticoagulation.yaml +65 -0
- endoreg_db/data/medication/tah.yaml +70 -0
- endoreg_db/data/medication_indication/anticoagulation.yaml +115 -0
- endoreg_db/data/medication_indication_type/data.yaml +11 -0
- endoreg_db/data/medication_indication_type/thrombembolism.yaml +41 -0
- endoreg_db/data/medication_intake_time/base.yaml +31 -0
- endoreg_db/data/medication_schedule/apixaban.yaml +95 -0
- endoreg_db/data/medication_schedule/ass.yaml +12 -0
- endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -0
- endoreg_db/data/names_first/first_names.yaml +54 -0
- endoreg_db/data/names_last/last_names.yaml +51 -0
- endoreg_db/data/network_device/data.yaml +59 -0
- endoreg_db/data/network_device_type/data.yaml +12 -0
- endoreg_db/data/organ/data.yaml +29 -0
- endoreg_db/data/patient_lab_sample_type/generic.yaml +6 -0
- endoreg_db/data/pdf_type/data.yaml +46 -0
- endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -0
- endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -0
- endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -0
- endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -0
- endoreg_db/data/profession/data.yaml +70 -0
- endoreg_db/data/qualification/endoscopy.yaml +36 -0
- endoreg_db/data/qualification/m2.yaml +39 -0
- endoreg_db/data/qualification/outpatient_clinic.yaml +35 -0
- endoreg_db/data/qualification/sonography.yaml +36 -0
- endoreg_db/data/qualification_type/base.yaml +29 -0
- endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -0
- endoreg_db/data/report_reader_flag/rkh-histology-generic.yaml +10 -0
- endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +30 -0
- endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +24 -0
- endoreg_db/data/requirement/01_patient_data.yaml +93 -0
- endoreg_db/data/requirement/old/colon_polyp_intervention.yaml +49 -0
- endoreg_db/data/requirement/old/colonoscopy_baseline_austria.yaml +45 -0
- endoreg_db/data/requirement/old/coloreg_colon_polyp.yaml +49 -0
- endoreg_db/data/requirement/old/disease_cardiovascular.yaml +79 -0
- endoreg_db/data/requirement/old/disease_classification_choice_cardiovascular.yaml +41 -0
- endoreg_db/data/requirement/old/disease_hepatology.yaml +12 -0
- endoreg_db/data/requirement/old/disease_misc.yaml +12 -0
- endoreg_db/data/requirement/old/disease_renal.yaml +96 -0
- endoreg_db/data/requirement/old/endoscopy_bleeding_risk.yaml +59 -0
- endoreg_db/data/requirement/old/event_cardiology.yaml +251 -0
- endoreg_db/data/requirement/old/event_requirements.yaml +145 -0
- endoreg_db/data/requirement/old/finding_colon_polyp.yaml +50 -0
- endoreg_db/data/requirement/old/gender.yaml +0 -0
- endoreg_db/data/requirement/old/lab_value.yaml +441 -0
- endoreg_db/data/requirement/old/medication.yaml +93 -0
- endoreg_db/data/requirement_operator/_old/age.yaml +13 -0
- endoreg_db/data/requirement_operator/_old/lab_operators.yaml +129 -0
- endoreg_db/data/requirement_operator/_old/model_operators.yaml +96 -0
- endoreg_db/data/requirement_operator/new_operators.yaml +36 -0
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +65 -0
- endoreg_db/data/requirement_set/01_laboratory.yaml +13 -0
- endoreg_db/data/requirement_set/02_endoscopy_bleeding_risk.yaml +46 -0
- endoreg_db/data/requirement_set/90_coloreg.yaml +190 -0
- endoreg_db/data/requirement_set/_old_ +109 -0
- endoreg_db/data/requirement_set/colonoscopy_austria_screening.yaml +57 -0
- endoreg_db/data/requirement_set_type/data.yaml +41 -0
- endoreg_db/data/requirement_type/requirement_types.yaml +165 -0
- endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -0
- endoreg_db/data/risk/bleeding.yaml +26 -0
- endoreg_db/data/risk/thrombosis.yaml +37 -0
- endoreg_db/data/risk_type/data.yaml +27 -0
- endoreg_db/data/setup_config.yaml +38 -0
- endoreg_db/data/shift/endoscopy.yaml +21 -0
- endoreg_db/data/shift/m2.yaml +0 -0
- endoreg_db/data/shift_type/base.yaml +35 -0
- endoreg_db/data/tag/requirement_set_tags.yaml +32 -0
- endoreg_db/data/tmp/chronic_kidney_disease.yaml +0 -0
- endoreg_db/data/tmp/congestive_heart_failure.yaml +0 -0
- endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -0
- endoreg_db/data/unit/concentration.yaml +115 -0
- endoreg_db/data/unit/data.yaml +17 -0
- endoreg_db/data/unit/length.yaml +31 -0
- endoreg_db/data/unit/misc.yaml +20 -0
- endoreg_db/data/unit/rate.yaml +6 -0
- endoreg_db/data/unit/time.yaml +48 -0
- endoreg_db/data/unit/volume.yaml +35 -0
- endoreg_db/data/unit/weight.yaml +38 -0
- endoreg_db/data/waste/data.yaml +12 -0
- endoreg_db/exceptions.py +24 -0
- endoreg_db/export/frames/export.py +6 -0
- endoreg_db/export/frames/export_frames_with_labels.py +616 -0
- endoreg_db/factories/__init__.py +0 -0
- endoreg_db/forms/__init__.py +4 -0
- endoreg_db/forms/examination_form.py +12 -0
- endoreg_db/forms/patient_finding_intervention_form.py +40 -0
- endoreg_db/forms/patient_form.py +23 -0
- endoreg_db/forms/questionnaires/__init__.py +1 -0
- endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -0
- endoreg_db/forms/settings/__init__.py +11 -0
- endoreg_db/forms/unit.py +7 -0
- endoreg_db/helpers/__init__.py +0 -0
- endoreg_db/helpers/count_db.py +48 -0
- endoreg_db/helpers/data_loader.py +280 -0
- endoreg_db/helpers/default_objects.py +414 -0
- endoreg_db/helpers/download_segmentation_model.py +32 -0
- endoreg_db/helpers/interact.py +1 -0
- endoreg_db/helpers/test_video_helper.py +127 -0
- endoreg_db/import_files/__init__.py +27 -0
- endoreg_db/import_files/context/__init__.py +7 -0
- endoreg_db/import_files/context/default_sensitive_meta.py +83 -0
- endoreg_db/import_files/context/ensure_center.py +17 -0
- endoreg_db/import_files/context/file_lock.py +66 -0
- endoreg_db/import_files/context/import_context.py +42 -0
- endoreg_db/import_files/context/validate_directories.py +57 -0
- endoreg_db/import_files/file_storage/__init__.py +15 -0
- endoreg_db/import_files/file_storage/create_report_file.py +99 -0
- endoreg_db/import_files/file_storage/create_video_file.py +104 -0
- endoreg_db/import_files/file_storage/sensitive_meta_storage.py +42 -0
- endoreg_db/import_files/file_storage/state_management.py +463 -0
- endoreg_db/import_files/file_storage/storage.py +42 -0
- endoreg_db/import_files/import_service.md +26 -0
- endoreg_db/import_files/processing/__init__.py +11 -0
- endoreg_db/import_files/processing/report_processing/report_anonymization.py +99 -0
- endoreg_db/import_files/processing/sensitive_meta_adapter.py +51 -0
- endoreg_db/import_files/processing/video_processing/video_anonymization.py +107 -0
- endoreg_db/import_files/pseudonymization/__init__.py +0 -0
- endoreg_db/import_files/pseudonymization/fake.py +52 -0
- endoreg_db/import_files/pseudonymization/k_anonymity.py +181 -0
- endoreg_db/import_files/pseudonymization/k_pseudonymity.py +139 -0
- endoreg_db/import_files/pseudonymization/pseudonymize.py +0 -0
- endoreg_db/import_files/report_import_service.py +147 -0
- endoreg_db/import_files/video_import_service.py +154 -0
- endoreg_db/logger_conf.py +156 -0
- endoreg_db/management/__init__.py +1 -0
- endoreg_db/management/commands/__init__.py +1 -0
- endoreg_db/management/commands/anonymize_video.py +0 -0
- endoreg_db/management/commands/check_auth.py +132 -0
- endoreg_db/management/commands/create_model_meta_from_huggingface.py +177 -0
- endoreg_db/management/commands/create_multilabel_model_meta.py +419 -0
- endoreg_db/management/commands/export_frame_annot.py +196 -0
- endoreg_db/management/commands/fix_missing_patient_data.py +206 -0
- endoreg_db/management/commands/fix_video_paths.py +186 -0
- endoreg_db/management/commands/import_report.py +361 -0
- endoreg_db/management/commands/list_routes.py +20 -0
- endoreg_db/management/commands/load_ai_model_data.py +83 -0
- endoreg_db/management/commands/load_ai_model_label_data.py +60 -0
- endoreg_db/management/commands/load_base_db_data.py +63 -0
- endoreg_db/management/commands/load_center_data.py +68 -0
- endoreg_db/management/commands/load_contraindication_data.py +39 -0
- endoreg_db/management/commands/load_disease_classification_choices_data.py +38 -0
- endoreg_db/management/commands/load_disease_classification_data.py +38 -0
- endoreg_db/management/commands/load_disease_data.py +59 -0
- endoreg_db/management/commands/load_distribution_data.py +63 -0
- endoreg_db/management/commands/load_endoscope_data.py +58 -0
- endoreg_db/management/commands/load_event_data.py +39 -0
- endoreg_db/management/commands/load_examination_data.py +78 -0
- endoreg_db/management/commands/load_examination_indication_data.py +85 -0
- endoreg_db/management/commands/load_finding_data.py +115 -0
- endoreg_db/management/commands/load_gender_data.py +37 -0
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +142 -0
- endoreg_db/management/commands/load_information_source.py +46 -0
- endoreg_db/management/commands/load_lab_value_data.py +52 -0
- endoreg_db/management/commands/load_legacy_data.py +303 -0
- endoreg_db/management/commands/load_medication_data.py +104 -0
- endoreg_db/management/commands/load_name_data.py +36 -0
- endoreg_db/management/commands/load_organ_data.py +39 -0
- endoreg_db/management/commands/load_pdf_type_data.py +58 -0
- endoreg_db/management/commands/load_profession_data.py +40 -0
- endoreg_db/management/commands/load_qualification_data.py +56 -0
- endoreg_db/management/commands/load_report_reader_flag_data.py +40 -0
- endoreg_db/management/commands/load_requirement_data.py +207 -0
- endoreg_db/management/commands/load_requirement_set_tags.py +95 -0
- endoreg_db/management/commands/load_risk_data.py +57 -0
- endoreg_db/management/commands/load_shift_data.py +57 -0
- endoreg_db/management/commands/load_tag_data.py +54 -0
- endoreg_db/management/commands/load_unit_data.py +40 -0
- endoreg_db/management/commands/load_user_groups.py +26 -0
- endoreg_db/management/commands/model_input.py +169 -0
- endoreg_db/management/commands/register_ai_model.py +70 -0
- endoreg_db/management/commands/setup_endoreg_db.py +459 -0
- endoreg_db/management/commands/start_filewatcher.py +115 -0
- endoreg_db/management/commands/storage_management.py +622 -0
- endoreg_db/management/commands/summarize_db_content.py +280 -0
- endoreg_db/management/commands/train_image_multilabel_model.py +144 -0
- endoreg_db/management/commands/validate_video_files.py +189 -0
- endoreg_db/management/commands/video_validation.py +20 -0
- endoreg_db/mermaid/Overall_flow_patient_finding_intervention.md +10 -0
- endoreg_db/mermaid/anonymized_image_annotation.md +20 -0
- endoreg_db/mermaid/binary_classification_annotation.md +50 -0
- endoreg_db/mermaid/classification.md +8 -0
- endoreg_db/mermaid/examination.md +8 -0
- endoreg_db/mermaid/findings.md +7 -0
- endoreg_db/mermaid/image_classification.md +28 -0
- endoreg_db/mermaid/interventions.md +8 -0
- endoreg_db/mermaid/morphology.md +8 -0
- endoreg_db/mermaid/patient_creation.md +14 -0
- endoreg_db/mermaid/video_segmentation_annotation.md +17 -0
- endoreg_db/migrations/0001_initial.py +1953 -0
- endoreg_db/migrations/__init__.py +0 -0
- endoreg_db/models/__init__.py +322 -0
- endoreg_db/models/administration/__init__.py +95 -0
- endoreg_db/models/administration/ai/__init__.py +9 -0
- endoreg_db/models/administration/ai/active_model.py +35 -0
- endoreg_db/models/administration/ai/ai_model.py +180 -0
- endoreg_db/models/administration/ai/model_type.py +42 -0
- endoreg_db/models/administration/case/__init__.py +5 -0
- endoreg_db/models/administration/case/case.py +114 -0
- endoreg_db/models/administration/case/case_template/__init__.py +3 -0
- endoreg_db/models/administration/case/case_template/case_template.py +3 -0
- endoreg_db/models/administration/case/case_template/case_template_rule.py +3 -0
- endoreg_db/models/administration/case/case_template/case_template_rule_value.py +3 -0
- endoreg_db/models/administration/case/case_template/case_template_type.py +3 -0
- endoreg_db/models/administration/center/__init__.py +13 -0
- endoreg_db/models/administration/center/center.py +85 -0
- endoreg_db/models/administration/center/center_product.py +67 -0
- endoreg_db/models/administration/center/center_resource.py +69 -0
- endoreg_db/models/administration/center/center_shift.py +94 -0
- endoreg_db/models/administration/center/center_waste.py +42 -0
- endoreg_db/models/administration/person/__init__.py +26 -0
- endoreg_db/models/administration/person/employee/__init__.py +3 -0
- endoreg_db/models/administration/person/employee/employee.py +40 -0
- endoreg_db/models/administration/person/employee/employee_qualification.py +44 -0
- endoreg_db/models/administration/person/employee/employee_type.py +50 -0
- endoreg_db/models/administration/person/examiner/__init__.py +4 -0
- endoreg_db/models/administration/person/examiner/examiner.py +64 -0
- endoreg_db/models/administration/person/names/__init__.py +0 -0
- endoreg_db/models/administration/person/names/first_name.py +20 -0
- endoreg_db/models/administration/person/names/last_name.py +20 -0
- endoreg_db/models/administration/person/patient/__init__.py +7 -0
- endoreg_db/models/administration/person/patient/patient.py +488 -0
- endoreg_db/models/administration/person/patient/patient_external_id.py +36 -0
- endoreg_db/models/administration/person/person.py +35 -0
- endoreg_db/models/administration/person/profession/__init__.py +28 -0
- endoreg_db/models/administration/person/user/__init__.py +5 -0
- endoreg_db/models/administration/person/user/portal_user_information.py +41 -0
- endoreg_db/models/administration/product/__init__.py +15 -0
- endoreg_db/models/administration/product/product.py +106 -0
- endoreg_db/models/administration/product/product_group.py +41 -0
- endoreg_db/models/administration/product/product_material.py +60 -0
- endoreg_db/models/administration/product/product_weight.py +51 -0
- endoreg_db/models/administration/product/reference_product.py +147 -0
- endoreg_db/models/administration/qualification/__init__.py +7 -0
- endoreg_db/models/administration/qualification/qualification.py +43 -0
- endoreg_db/models/administration/qualification/qualification_type.py +39 -0
- endoreg_db/models/administration/shift/__init__.py +9 -0
- endoreg_db/models/administration/shift/scheduled_days.py +72 -0
- endoreg_db/models/administration/shift/shift.py +57 -0
- endoreg_db/models/administration/shift/shift_type.py +108 -0
- endoreg_db/models/aidataset/__init__.py +5 -0
- endoreg_db/models/aidataset/aidataset.py +193 -0
- endoreg_db/models/label/__init__.py +23 -0
- endoreg_db/models/label/annotation/__init__.py +12 -0
- endoreg_db/models/label/annotation/image_classification.py +85 -0
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +61 -0
- endoreg_db/models/label/label.py +91 -0
- endoreg_db/models/label/label_set.py +68 -0
- endoreg_db/models/label/label_type.py +29 -0
- endoreg_db/models/label/label_video_segment/__init__.py +3 -0
- endoreg_db/models/label/label_video_segment/_create_from_video.py +42 -0
- endoreg_db/models/label/label_video_segment/label_video_segment.py +611 -0
- endoreg_db/models/label/video_segmentation_label.py +35 -0
- endoreg_db/models/label/video_segmentation_labelset.py +28 -0
- endoreg_db/models/media/__init__.py +23 -0
- endoreg_db/models/media/frame/__init__.py +3 -0
- endoreg_db/models/media/frame/frame.py +137 -0
- endoreg_db/models/media/pdf/__init__.py +12 -0
- endoreg_db/models/media/pdf/raw_pdf.py +764 -0
- endoreg_db/models/media/pdf/report_file.py +162 -0
- endoreg_db/models/media/pdf/report_reader/__init__.py +7 -0
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +85 -0
- endoreg_db/models/media/pdf/report_reader/report_reader_flag.py +46 -0
- endoreg_db/models/media/video/__init__.py +9 -0
- endoreg_db/models/media/video/create_from_file.py +402 -0
- endoreg_db/models/media/video/pipe_1.py +258 -0
- endoreg_db/models/media/video/pipe_2.py +129 -0
- endoreg_db/models/media/video/video_file.py +907 -0
- endoreg_db/models/media/video/video_file_ai.py +828 -0
- endoreg_db/models/media/video/video_file_anonymize.py +524 -0
- endoreg_db/models/media/video/video_file_frames/__init__.py +49 -0
- endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +25 -0
- endoreg_db/models/media/video/video_file_frames/_create_frame_object.py +23 -0
- endoreg_db/models/media/video/video_file_frames/_delete_frames.py +126 -0
- endoreg_db/models/media/video/video_file_frames/_extract_frames.py +233 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame.py +36 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_number.py +13 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +24 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +40 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +44 -0
- endoreg_db/models/media/video/video_file_frames/_get_frames.py +30 -0
- endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +205 -0
- endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +228 -0
- endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +107 -0
- endoreg_db/models/media/video/video_file_io.py +272 -0
- endoreg_db/models/media/video/video_file_meta/__init__.py +22 -0
- endoreg_db/models/media/video/video_file_meta/get_crop_template.py +58 -0
- endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +62 -0
- endoreg_db/models/media/video/video_file_meta/get_fps.py +183 -0
- endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +198 -0
- endoreg_db/models/media/video/video_file_meta/text_meta.py +178 -0
- endoreg_db/models/media/video/video_file_meta/video_meta.py +105 -0
- endoreg_db/models/media/video/video_file_segments.py +317 -0
- endoreg_db/models/media/video/video_metadata.py +67 -0
- endoreg_db/models/media/video/video_processing.py +192 -0
- endoreg_db/models/medical/__init__.py +136 -0
- endoreg_db/models/medical/contraindication/README.md +1 -0
- endoreg_db/models/medical/contraindication/__init__.py +29 -0
- endoreg_db/models/medical/disease.py +174 -0
- endoreg_db/models/medical/event.py +154 -0
- endoreg_db/models/medical/examination/__init__.py +20 -0
- endoreg_db/models/medical/examination/examination.py +183 -0
- endoreg_db/models/medical/examination/examination_indication.py +229 -0
- endoreg_db/models/medical/examination/examination_time.py +68 -0
- endoreg_db/models/medical/examination/examination_time_type.py +44 -0
- endoreg_db/models/medical/examination/examination_type.py +47 -0
- endoreg_db/models/medical/finding/__init__.py +20 -0
- endoreg_db/models/medical/finding/finding.py +113 -0
- endoreg_db/models/medical/finding/finding_classification.py +131 -0
- endoreg_db/models/medical/finding/finding_intervention.py +68 -0
- endoreg_db/models/medical/finding/finding_type.py +38 -0
- endoreg_db/models/medical/hardware/__init__.py +8 -0
- endoreg_db/models/medical/hardware/endoscope.py +77 -0
- endoreg_db/models/medical/hardware/endoscopy_processor.py +182 -0
- endoreg_db/models/medical/laboratory/__init__.py +5 -0
- endoreg_db/models/medical/laboratory/lab_value.py +490 -0
- endoreg_db/models/medical/medication/__init__.py +23 -0
- endoreg_db/models/medical/medication/medication.py +45 -0
- endoreg_db/models/medical/medication/medication_indication.py +78 -0
- endoreg_db/models/medical/medication/medication_indication_type.py +58 -0
- endoreg_db/models/medical/medication/medication_intake_time.py +58 -0
- endoreg_db/models/medical/medication/medication_schedule.py +58 -0
- endoreg_db/models/medical/organ/__init__.py +38 -0
- endoreg_db/models/medical/patient/__init__.py +48 -0
- endoreg_db/models/medical/patient/medication_examples.py +56 -0
- endoreg_db/models/medical/patient/patient_disease.py +72 -0
- endoreg_db/models/medical/patient/patient_event.py +80 -0
- endoreg_db/models/medical/patient/patient_examination.py +280 -0
- endoreg_db/models/medical/patient/patient_examination_indication.py +57 -0
- endoreg_db/models/medical/patient/patient_finding.py +416 -0
- endoreg_db/models/medical/patient/patient_finding_classification.py +231 -0
- endoreg_db/models/medical/patient/patient_finding_intervention.py +37 -0
- endoreg_db/models/medical/patient/patient_lab_sample.py +157 -0
- endoreg_db/models/medical/patient/patient_lab_value.py +247 -0
- endoreg_db/models/medical/patient/patient_medication.py +111 -0
- endoreg_db/models/medical/patient/patient_medication_schedule.py +152 -0
- endoreg_db/models/medical/risk/__init__.py +7 -0
- endoreg_db/models/medical/risk/risk.py +73 -0
- endoreg_db/models/medical/risk/risk_type.py +54 -0
- endoreg_db/models/metadata/__init__.py +19 -0
- endoreg_db/models/metadata/model_meta.py +266 -0
- endoreg_db/models/metadata/model_meta_logic.py +485 -0
- endoreg_db/models/metadata/pdf_meta.py +96 -0
- endoreg_db/models/metadata/sensitive_meta.py +345 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +1161 -0
- endoreg_db/models/metadata/video_meta.py +459 -0
- endoreg_db/models/metadata/video_prediction_logic.py +232 -0
- endoreg_db/models/metadata/video_prediction_meta.py +319 -0
- endoreg_db/models/operation_log.py +63 -0
- endoreg_db/models/other/__init__.py +40 -0
- endoreg_db/models/other/distribution/__init__.py +46 -0
- endoreg_db/models/other/distribution/base_value_distribution.py +22 -0
- endoreg_db/models/other/distribution/date_value_distribution.py +163 -0
- endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +50 -0
- endoreg_db/models/other/distribution/numeric_value_distribution.py +211 -0
- endoreg_db/models/other/distribution/single_categorical_value_distribution.py +23 -0
- endoreg_db/models/other/emission/__init__.py +5 -0
- endoreg_db/models/other/emission/emission_factor.py +110 -0
- endoreg_db/models/other/gender.py +32 -0
- endoreg_db/models/other/information_source.py +190 -0
- endoreg_db/models/other/material.py +34 -0
- endoreg_db/models/other/resource.py +24 -0
- endoreg_db/models/other/tag.py +32 -0
- endoreg_db/models/other/transport_route.py +40 -0
- endoreg_db/models/other/unit.py +40 -0
- endoreg_db/models/other/waste.py +28 -0
- endoreg_db/models/report/__init__.py +0 -0
- endoreg_db/models/report/images.py +0 -0
- endoreg_db/models/report/report.py +5 -0
- endoreg_db/models/requirement/__init__.py +11 -0
- endoreg_db/models/requirement/requirement.py +792 -0
- endoreg_db/models/requirement/requirement_error.py +84 -0
- endoreg_db/models/requirement/requirement_evaluation/__init__.py +6 -0
- endoreg_db/models/requirement/requirement_evaluation/evaluate_with_dependencies.py +268 -0
- endoreg_db/models/requirement/requirement_evaluation/get_values.py +40 -0
- endoreg_db/models/requirement/requirement_evaluation/operator_evaluation_models.py +6 -0
- endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +137 -0
- endoreg_db/models/requirement/requirement_operator.py +187 -0
- endoreg_db/models/requirement/requirement_set.py +327 -0
- endoreg_db/models/state/__init__.py +13 -0
- endoreg_db/models/state/abstract.py +11 -0
- endoreg_db/models/state/anonymization.py +30 -0
- endoreg_db/models/state/audit_ledger.py +155 -0
- endoreg_db/models/state/label_video_segment.py +31 -0
- endoreg_db/models/state/processing_history/__init__.py +3 -0
- endoreg_db/models/state/processing_history/processing_history.py +136 -0
- endoreg_db/models/state/raw_pdf.py +219 -0
- endoreg_db/models/state/sensitive_meta.py +50 -0
- endoreg_db/models/state/video.py +251 -0
- endoreg_db/models/upload_job.py +100 -0
- endoreg_db/models/utils.py +138 -0
- endoreg_db/queries/__init__.py +3 -0
- endoreg_db/queries/annotations/__init__.py +1 -0
- endoreg_db/queries/annotations/legacy.py +169 -0
- endoreg_db/queries/sanity/__init_.py +0 -0
- endoreg_db/root_urls.py +27 -0
- endoreg_db/schemas/__init__.py +0 -0
- endoreg_db/schemas/examination_evaluation.py +30 -0
- endoreg_db/serializers/Frames_NICE_and_PARIS_classifications.py +861 -0
- endoreg_db/serializers/__init__.py +104 -0
- endoreg_db/serializers/administration/__init__.py +13 -0
- endoreg_db/serializers/administration/ai/__init__.py +9 -0
- endoreg_db/serializers/administration/ai/active_model.py +12 -0
- endoreg_db/serializers/administration/ai/ai_model.py +20 -0
- endoreg_db/serializers/administration/ai/model_type.py +12 -0
- endoreg_db/serializers/administration/center.py +14 -0
- endoreg_db/serializers/administration/gender.py +11 -0
- endoreg_db/serializers/anonymization.py +77 -0
- endoreg_db/serializers/evaluation/examination_evaluation.py +0 -0
- endoreg_db/serializers/examination/__init__.py +10 -0
- endoreg_db/serializers/examination/base.py +45 -0
- endoreg_db/serializers/examination/dropdown.py +20 -0
- endoreg_db/serializers/examination_serializer.py +9 -0
- endoreg_db/serializers/finding/__init__.py +5 -0
- endoreg_db/serializers/finding/finding.py +61 -0
- endoreg_db/serializers/finding_classification/__init__.py +7 -0
- endoreg_db/serializers/finding_classification/choice.py +19 -0
- endoreg_db/serializers/finding_classification/classification.py +11 -0
- endoreg_db/serializers/label_video_segment/__init__.py +9 -0
- endoreg_db/serializers/label_video_segment/image_classification_annotation.py +62 -0
- endoreg_db/serializers/label_video_segment/label/__init__.py +6 -0
- endoreg_db/serializers/label_video_segment/label/label.py +15 -0
- endoreg_db/serializers/label_video_segment/label_video_segment.py +427 -0
- endoreg_db/serializers/meta/__init__.py +13 -0
- endoreg_db/serializers/meta/sensitive_meta_detail.py +122 -0
- endoreg_db/serializers/meta/sensitive_meta_update.py +153 -0
- endoreg_db/serializers/meta/sensitive_meta_verification.py +62 -0
- endoreg_db/serializers/meta/video_meta.py +39 -0
- endoreg_db/serializers/misc/__init__.py +14 -0
- endoreg_db/serializers/misc/file_overview.py +72 -0
- endoreg_db/serializers/misc/sensitive_patient_data.py +144 -0
- endoreg_db/serializers/misc/stats.py +35 -0
- endoreg_db/serializers/misc/translatable_field_mix_in.py +44 -0
- endoreg_db/serializers/misc/upload_job.py +74 -0
- endoreg_db/serializers/patient/__init__.py +12 -0
- endoreg_db/serializers/patient/patient.py +103 -0
- endoreg_db/serializers/patient/patient_dropdown.py +35 -0
- endoreg_db/serializers/patient_examination/__init__.py +7 -0
- endoreg_db/serializers/patient_examination/patient_examination.py +168 -0
- endoreg_db/serializers/patient_finding/__init__.py +15 -0
- endoreg_db/serializers/patient_finding/patient_finding.py +32 -0
- endoreg_db/serializers/patient_finding/patient_finding_classification.py +47 -0
- endoreg_db/serializers/patient_finding/patient_finding_detail.py +62 -0
- endoreg_db/serializers/patient_finding/patient_finding_intervention.py +28 -0
- endoreg_db/serializers/patient_finding/patient_finding_list.py +40 -0
- endoreg_db/serializers/patient_finding/patient_finding_write.py +135 -0
- endoreg_db/serializers/pdf/__init__.py +3 -0
- endoreg_db/serializers/pdf/anony_text_validation.py +101 -0
- endoreg_db/serializers/requirements/requirement_schema.py +20 -0
- endoreg_db/serializers/requirements/requirement_sets.py +99 -0
- endoreg_db/serializers/sensitive_meta_serializer.py +301 -0
- endoreg_db/serializers/video/__init__.py +7 -0
- endoreg_db/serializers/video/video_file.py +283 -0
- endoreg_db/serializers/video/video_file_brief.py +14 -0
- endoreg_db/serializers/video/video_file_detail.py +96 -0
- endoreg_db/serializers/video/video_file_list.py +100 -0
- endoreg_db/serializers/video/video_processing_history.py +172 -0
- endoreg_db/serializers/video_examination.py +198 -0
- endoreg_db/services/__init__.py +5 -0
- endoreg_db/services/anonymization.py +274 -0
- endoreg_db/services/examination_evaluation.py +172 -0
- endoreg_db/services/finding_description_service.py +0 -0
- endoreg_db/services/lookup_service.py +424 -0
- endoreg_db/services/lookup_store.py +266 -0
- endoreg_db/services/model_meta_from_hf.py +76 -0
- endoreg_db/services/pdf_import.py +0 -0
- endoreg_db/services/polling_coordinator.py +319 -0
- endoreg_db/services/pseudonym_service.py +94 -0
- endoreg_db/services/report_import.py +13 -0
- endoreg_db/services/segment_sync.py +171 -0
- endoreg_db/services/video_import.py +9 -0
- endoreg_db/templates/admin/patient_finding_intervention.html +253 -0
- endoreg_db/templates/admin/start_examination.html +12 -0
- endoreg_db/templates/timeline.html +176 -0
- endoreg_db/urls/__init__.py +56 -0
- endoreg_db/urls/ai.py +14 -0
- endoreg_db/urls/anonymization.py +78 -0
- endoreg_db/urls/auth.py +16 -0
- endoreg_db/urls/classification.py +34 -0
- endoreg_db/urls/examination.py +63 -0
- endoreg_db/urls/media.py +251 -0
- endoreg_db/urls/patient.py +23 -0
- endoreg_db/urls/requirements.py +15 -0
- endoreg_db/urls/root_urls.py +28 -0
- endoreg_db/urls/stats.py +54 -0
- endoreg_db/urls/upload.py +12 -0
- endoreg_db/urls.py +9 -0
- endoreg_db/utils/__init__.py +97 -0
- endoreg_db/utils/ai/__init__.py +9 -0
- endoreg_db/utils/ai/data_loader_for_model_input.py +262 -0
- endoreg_db/utils/ai/data_loader_for_model_training.py +262 -0
- endoreg_db/utils/ai/get.py +6 -0
- endoreg_db/utils/ai/inference_dataset.py +51 -0
- endoreg_db/utils/ai/model_training/config.py +117 -0
- endoreg_db/utils/ai/model_training/dataset.py +74 -0
- endoreg_db/utils/ai/model_training/losses.py +68 -0
- endoreg_db/utils/ai/model_training/metrics.py +78 -0
- endoreg_db/utils/ai/model_training/model_backbones.py +155 -0
- endoreg_db/utils/ai/model_training/model_gastronet_resnet.py +118 -0
- endoreg_db/utils/ai/model_training/trainer_gastronet_multilabel.py +771 -0
- endoreg_db/utils/ai/multilabel_classification_net.py +270 -0
- endoreg_db/utils/ai/postprocess.py +63 -0
- endoreg_db/utils/ai/predict.py +293 -0
- endoreg_db/utils/ai/preprocess.py +76 -0
- endoreg_db/utils/calc_duration_seconds.py +24 -0
- endoreg_db/utils/case_generator/__init__.py +3 -0
- endoreg_db/utils/case_generator/lab_sample_factory.py +32 -0
- endoreg_db/utils/check_video_files.py +175 -0
- endoreg_db/utils/cropping.py +30 -0
- endoreg_db/utils/dataloader.py +285 -0
- endoreg_db/utils/dates.py +59 -0
- endoreg_db/utils/defaults/set_default_center.py +33 -0
- endoreg_db/utils/env.py +37 -0
- endoreg_db/utils/extract_specific_frames.py +87 -0
- endoreg_db/utils/file_operations.py +70 -0
- endoreg_db/utils/fix_video_path_direct.py +157 -0
- endoreg_db/utils/frame_anonymization_utils.py +463 -0
- endoreg_db/utils/hashs.py +138 -0
- endoreg_db/utils/links/__init__.py +0 -0
- endoreg_db/utils/links/requirement_link.py +237 -0
- endoreg_db/utils/mime_types.py +0 -0
- endoreg_db/utils/names.py +82 -0
- endoreg_db/utils/ocr.py +195 -0
- endoreg_db/utils/operation_log.py +87 -0
- endoreg_db/utils/parse_and_generate_yaml.py +45 -0
- endoreg_db/utils/paths.py +159 -0
- endoreg_db/utils/permissions.py +160 -0
- endoreg_db/utils/pipelines/Readme.md +235 -0
- endoreg_db/utils/pipelines/__init__.py +0 -0
- endoreg_db/utils/pipelines/process_video_dir.py +144 -0
- endoreg_db/utils/product/__init__.py +0 -0
- endoreg_db/utils/product/sum_emissions.py +22 -0
- endoreg_db/utils/product/sum_weights.py +20 -0
- endoreg_db/utils/pydantic_models/__init__.py +5 -0
- endoreg_db/utils/pydantic_models/db_config.py +57 -0
- endoreg_db/utils/requirement_helpers.py +0 -0
- endoreg_db/utils/requirement_operator_logic/__init__.py +0 -0
- endoreg_db/utils/requirement_operator_logic/_old/lab_value_operators.py +678 -0
- endoreg_db/utils/requirement_operator_logic/_old/model_evaluators.py +842 -0
- endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +114 -0
- endoreg_db/utils/setup_config.py +196 -0
- endoreg_db/utils/storage.py +117 -0
- endoreg_db/utils/translation.py +31 -0
- endoreg_db/utils/uuid.py +5 -0
- endoreg_db/utils/validate_endo_roi.py +33 -0
- endoreg_db/utils/validate_subcategory_dict.py +93 -0
- endoreg_db/utils/validate_video_detailed.py +415 -0
- endoreg_db/utils/video/__init__.py +30 -0
- endoreg_db/utils/video/extract_frames.py +100 -0
- endoreg_db/utils/video/ffmpeg_wrapper.py +996 -0
- endoreg_db/utils/video/names.py +47 -0
- endoreg_db/utils/video/streaming_processor.py +386 -0
- endoreg_db/utils/video/video_splitter.py +105 -0
- endoreg_db/versioning.md +79 -0
- endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py +247 -0
- endoreg_db/views/__init__.py +157 -0
- endoreg_db/views/anonymization/__init__.py +31 -0
- endoreg_db/views/anonymization/media_management.py +486 -0
- endoreg_db/views/anonymization/overview.py +307 -0
- endoreg_db/views/anonymization/validate.py +310 -0
- endoreg_db/views/auth/__init__.py +13 -0
- endoreg_db/views/auth/keycloak.py +146 -0
- endoreg_db/views/examination/__init__.py +30 -0
- endoreg_db/views/examination/examination.py +37 -0
- endoreg_db/views/examination/examination_manifest_cache.py +26 -0
- endoreg_db/views/examination/get_finding_classification_choices.py +62 -0
- endoreg_db/views/examination/get_finding_classifications.py +38 -0
- endoreg_db/views/examination/get_findings.py +39 -0
- endoreg_db/views/examination/get_instruments.py +19 -0
- endoreg_db/views/examination/get_interventions.py +14 -0
- endoreg_db/views/finding/__init__.py +9 -0
- endoreg_db/views/finding/finding.py +116 -0
- endoreg_db/views/finding/get_classifications.py +14 -0
- endoreg_db/views/finding/get_interventions.py +17 -0
- endoreg_db/views/finding_classification/__init__.py +13 -0
- endoreg_db/views/finding_classification/base.py +0 -0
- endoreg_db/views/finding_classification/finding_classification.py +41 -0
- endoreg_db/views/finding_classification/get_classification_choices.py +54 -0
- endoreg_db/views/media/__init__.py +32 -0
- endoreg_db/views/media/pdf_media.py +411 -0
- endoreg_db/views/media/sensitive_metadata.py +372 -0
- endoreg_db/views/media/video_media.py +275 -0
- endoreg_db/views/meta/__init__.py +7 -0
- endoreg_db/views/meta/sensitive_meta_list.py +102 -0
- endoreg_db/views/meta/sensitive_meta_verification.py +74 -0
- endoreg_db/views/misc/__init__.py +29 -0
- endoreg_db/views/misc/center.py +14 -0
- endoreg_db/views/misc/csrf.py +8 -0
- endoreg_db/views/misc/gender.py +15 -0
- endoreg_db/views/misc/stats.py +255 -0
- endoreg_db/views/misc/upload_views.py +241 -0
- endoreg_db/views/patient/__init__.py +3 -0
- endoreg_db/views/patient/patient.py +253 -0
- endoreg_db/views/patient_examination/__init__.py +11 -0
- endoreg_db/views/patient_examination/patient_examination.py +141 -0
- endoreg_db/views/patient_examination/patient_examination_create.py +58 -0
- endoreg_db/views/patient_examination/patient_examination_detail.py +63 -0
- endoreg_db/views/patient_examination/patient_examination_list.py +72 -0
- endoreg_db/views/patient_examination/video.py +228 -0
- endoreg_db/views/patient_finding/__init__.py +7 -0
- endoreg_db/views/patient_finding/base.py +0 -0
- endoreg_db/views/patient_finding/patient_finding.py +71 -0
- endoreg_db/views/patient_finding/patient_finding_optimized.py +291 -0
- endoreg_db/views/patient_finding_classification/__init__.py +5 -0
- endoreg_db/views/patient_finding_classification/pfc_create.py +75 -0
- endoreg_db/views/report/__init__.py +7 -0
- endoreg_db/views/report/reimport.py +177 -0
- endoreg_db/views/report/report_stream.py +191 -0
- endoreg_db/views/requirement/__init__.py +11 -0
- endoreg_db/views/requirement/evaluate.py +278 -0
- endoreg_db/views/requirement/lookup.py +380 -0
- endoreg_db/views/requirement/lookup_store.py +183 -0
- endoreg_db/views/requirement/requirement_utils.py +87 -0
- endoreg_db/views/requirement_lookup/lookup.py +0 -0
- endoreg_db/views/requirement_lookup/lookup_store.py +0 -0
- endoreg_db/views/stats/__init__.py +13 -0
- endoreg_db/views/stats/stats_views.py +266 -0
- endoreg_db/views/video/__init__.py +49 -0
- endoreg_db/views/video/ai/__init__.py +8 -0
- endoreg_db/views/video/ai/label.py +159 -0
- endoreg_db/views/video/correction.py +529 -0
- endoreg_db/views/video/reimport.py +230 -0
- endoreg_db/views/video/segments_crud.py +709 -0
- endoreg_db/views/video/video_apply_mask.py +49 -0
- endoreg_db/views/video/video_correction.py +22 -0
- endoreg_db/views/video/video_download_processed.py +58 -0
- endoreg_db/views/video/video_examination_viewset.py +242 -0
- endoreg_db/views/video/video_metadata.py +101 -0
- endoreg_db/views/video/video_processing_history.py +25 -0
- endoreg_db/views/video/video_remove_frames.py +49 -0
- endoreg_db/views/video/video_stream.py +334 -0
- endoreg_db-0.8.9.32.dist-info/METADATA +404 -0
- endoreg_db-0.8.9.32.dist-info/RECORD +787 -0
- endoreg_db-0.8.9.32.dist-info/WHEEL +4 -0
- endoreg_db-0.8.9.32.dist-info/licenses/LICENSE +674 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, cast
|
|
2
|
+
|
|
3
|
+
from django.db import models
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from endoreg_db.models import (
|
|
7
|
+
Examination,
|
|
8
|
+
FindingIntervention,
|
|
9
|
+
InformationSource,
|
|
10
|
+
Requirement,
|
|
11
|
+
)
|
|
12
|
+
from endoreg_db.utils.links.requirement_link import RequirementLinks
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ExaminationIndicationManager(models.Manager):
|
|
16
|
+
"""
|
|
17
|
+
Manager for ExaminationIndication with custom query methods.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
def get_by_natural_key(self, name: str) -> "ExaminationIndication":
|
|
21
|
+
"""
|
|
22
|
+
Retrieves an ExaminationIndication instance by its natural key.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
name: The unique name identifying the examination indication.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
The ExaminationIndication instance corresponding to the specified name.
|
|
29
|
+
"""
|
|
30
|
+
return self.get(name=name)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ExaminationIndication(models.Model):
|
|
34
|
+
"""
|
|
35
|
+
Represents an indication for an examination.
|
|
36
|
+
|
|
37
|
+
Attributes:
|
|
38
|
+
name (str): The unique name of the indication.
|
|
39
|
+
classifications (ManyToManyField): The classifications associated with the indication.
|
|
40
|
+
examinations (ManyToManyField): The examinations associated with the indication.
|
|
41
|
+
expected_interventions (ManyToManyField): Expected interventions for this indication.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
name = models.CharField(max_length=255, unique=True)
|
|
45
|
+
description = models.TextField(blank=True, null=True)
|
|
46
|
+
|
|
47
|
+
classifications = models.ManyToManyField(
|
|
48
|
+
"ExaminationIndicationClassification",
|
|
49
|
+
related_name="indications",
|
|
50
|
+
blank=True,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
expected_interventions = models.ManyToManyField(
|
|
54
|
+
"FindingIntervention",
|
|
55
|
+
related_name="indications",
|
|
56
|
+
blank=True,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
information_sources = models.ManyToManyField(
|
|
60
|
+
"InformationSource",
|
|
61
|
+
related_name="examination_indications",
|
|
62
|
+
blank=True,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
objects = ExaminationIndicationManager()
|
|
66
|
+
|
|
67
|
+
if TYPE_CHECKING:
|
|
68
|
+
classifications = cast(
|
|
69
|
+
models.manager.RelatedManager["ExaminationIndicationClassification"],
|
|
70
|
+
classifications,
|
|
71
|
+
)
|
|
72
|
+
expected_interventions = cast(
|
|
73
|
+
models.manager.RelatedManager["FindingIntervention"], expected_interventions
|
|
74
|
+
)
|
|
75
|
+
information_sources = cast(
|
|
76
|
+
models.manager.RelatedManager["InformationSource"], information_sources
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def related_requirements(
|
|
81
|
+
self,
|
|
82
|
+
) -> "models.manager.RelatedManager[Requirement]": ...
|
|
83
|
+
|
|
84
|
+
@property
|
|
85
|
+
def examinations(self) -> "models.manager.RelatedManager[Examination]": ...
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def links(self) -> "RequirementLinks":
|
|
89
|
+
"""
|
|
90
|
+
Aggregates related requirements, classifications, examination, and interventions into a RequirementLinks object.
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
A RequirementLinks instance representing all entities linked to this examination indication.
|
|
94
|
+
"""
|
|
95
|
+
from endoreg_db.utils.links.requirement_link import RequirementLinks
|
|
96
|
+
|
|
97
|
+
return RequirementLinks(
|
|
98
|
+
examination_indications=[self],
|
|
99
|
+
examinations=list(self.examinations.all()),
|
|
100
|
+
finding_interventions=list(self.expected_interventions.all()),
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
def natural_key(self) -> tuple:
|
|
104
|
+
"""
|
|
105
|
+
Returns a tuple containing the unique name of the indication as its natural key.
|
|
106
|
+
"""
|
|
107
|
+
return (self.name,)
|
|
108
|
+
|
|
109
|
+
def __str__(self) -> str:
|
|
110
|
+
"""
|
|
111
|
+
String representation of the indication.
|
|
112
|
+
|
|
113
|
+
Returns:
|
|
114
|
+
str: The name of the indication.
|
|
115
|
+
"""
|
|
116
|
+
return str(self.name)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class ExaminationIndicationClassificationManager(models.Manager):
|
|
120
|
+
"""
|
|
121
|
+
Manager for ExaminationIndicationClassification with custom query methods.
|
|
122
|
+
"""
|
|
123
|
+
|
|
124
|
+
def get_by_natural_key(self, name: str) -> "ExaminationIndicationClassification":
|
|
125
|
+
"""
|
|
126
|
+
Retrieves an ExaminationIndicationClassification by its natural key.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
name: The unique name identifying the classification.
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
The ExaminationIndicationClassification instance corresponding to the given name.
|
|
133
|
+
"""
|
|
134
|
+
return self.get(name=name)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class ExaminationIndicationClassification(models.Model):
|
|
138
|
+
"""
|
|
139
|
+
Represents a classification for examination indications.
|
|
140
|
+
|
|
141
|
+
Attributes:
|
|
142
|
+
name (str): The unique name of the classification.
|
|
143
|
+
description (str): Optional description of the classification.
|
|
144
|
+
examinations (ManyToManyField): The examinations associated with this classification.
|
|
145
|
+
"""
|
|
146
|
+
|
|
147
|
+
name = models.CharField(max_length=255, unique=True)
|
|
148
|
+
description = models.TextField(blank=True, null=True)
|
|
149
|
+
choices = models.ManyToManyField(
|
|
150
|
+
"ExaminationIndicationClassificationChoice",
|
|
151
|
+
related_name="classifications",
|
|
152
|
+
blank=True,
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
objects = ExaminationIndicationClassificationManager()
|
|
156
|
+
|
|
157
|
+
def natural_key(self) -> tuple:
|
|
158
|
+
"""
|
|
159
|
+
Returns the natural key for the classification.
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
tuple: The natural key consisting of the name.
|
|
163
|
+
"""
|
|
164
|
+
return (self.name,)
|
|
165
|
+
|
|
166
|
+
def __str__(self) -> str:
|
|
167
|
+
"""
|
|
168
|
+
String representation of the classification.
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
str: The name of the classification.
|
|
172
|
+
"""
|
|
173
|
+
return str(self.name)
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
class ExaminationIndicationClassificationChoiceManager(models.Manager):
|
|
177
|
+
"""
|
|
178
|
+
Manager for ExaminationIndicationClassificationChoice with custom query methods.
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
def get_by_natural_key(
|
|
182
|
+
self, name: str
|
|
183
|
+
) -> "ExaminationIndicationClassificationChoice":
|
|
184
|
+
"""
|
|
185
|
+
Retrieves an ExaminationIndicationClassificationChoice instance by its natural key.
|
|
186
|
+
|
|
187
|
+
Args:
|
|
188
|
+
name: The unique name serving as the natural key for the classification choice.
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
An ExaminationIndicationClassificationChoice instance corresponding to the given name.
|
|
192
|
+
"""
|
|
193
|
+
return self.get(name=name)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
class ExaminationIndicationClassificationChoice(models.Model):
|
|
197
|
+
"""
|
|
198
|
+
Represents a choice within an examination indication classification.
|
|
199
|
+
|
|
200
|
+
Attributes:
|
|
201
|
+
name (str): The unique name of the choice.
|
|
202
|
+
subcategories (JSONField): Subcategories associated with the choice.
|
|
203
|
+
numerical_descriptors (JSONField): Numerical descriptors for the choice.
|
|
204
|
+
classification (ForeignKey): The classification to which this choice belongs.
|
|
205
|
+
"""
|
|
206
|
+
|
|
207
|
+
name = models.CharField(max_length=255, unique=True)
|
|
208
|
+
subcategories = models.JSONField(default=dict)
|
|
209
|
+
numerical_descriptors = models.JSONField(default=dict)
|
|
210
|
+
|
|
211
|
+
objects = ExaminationIndicationClassificationChoiceManager()
|
|
212
|
+
|
|
213
|
+
def natural_key(self) -> tuple:
|
|
214
|
+
"""
|
|
215
|
+
Returns the natural key for the classification choice.
|
|
216
|
+
|
|
217
|
+
Returns:
|
|
218
|
+
tuple: The natural key consisting of the name.
|
|
219
|
+
"""
|
|
220
|
+
return (self.name,)
|
|
221
|
+
|
|
222
|
+
def __str__(self) -> str:
|
|
223
|
+
"""
|
|
224
|
+
String representation of the classification choice.
|
|
225
|
+
|
|
226
|
+
Returns:
|
|
227
|
+
str: The name of the classification choice.
|
|
228
|
+
"""
|
|
229
|
+
return str(self.name)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, cast
|
|
2
|
+
|
|
3
|
+
from django.db import models
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from endoreg_db.models import ExaminationTimeType, InformationSource
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class ExaminationTimeManager(models.Manager):
|
|
10
|
+
"""
|
|
11
|
+
Manager for ExaminationTime with custom query methods.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
def get_by_natural_key(self, name: str) -> "ExaminationTime":
|
|
15
|
+
return self.get(name=name)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ExaminationTime(models.Model):
|
|
19
|
+
"""
|
|
20
|
+
Represents a specific time configuration for examinations.
|
|
21
|
+
|
|
22
|
+
Attributes:
|
|
23
|
+
name (str): The unique name of the examination time.
|
|
24
|
+
start_time (TimeField): The starting time for the examination.
|
|
25
|
+
end_time (TimeField): The ending time for the examination.
|
|
26
|
+
time_types (ManyToManyField): The types associated with this examination time.
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
name = models.CharField(max_length=100, unique=True)
|
|
30
|
+
time_types = models.ManyToManyField("ExaminationTimeType", blank=True)
|
|
31
|
+
objects = ExaminationTimeManager()
|
|
32
|
+
|
|
33
|
+
information_sources = models.ManyToManyField(
|
|
34
|
+
"InformationSource",
|
|
35
|
+
related_name="examination_times",
|
|
36
|
+
blank=True,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
if TYPE_CHECKING:
|
|
40
|
+
time_types = cast(
|
|
41
|
+
models.manager.RelatedManager["ExaminationTimeType"], time_types
|
|
42
|
+
)
|
|
43
|
+
information_sources = cast(
|
|
44
|
+
models.manager.RelatedManager["InformationSource"], information_sources
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
def __str__(self) -> str:
|
|
48
|
+
"""
|
|
49
|
+
String representation of the examination time.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
str: The name of the examination time.
|
|
53
|
+
"""
|
|
54
|
+
return self.name
|
|
55
|
+
|
|
56
|
+
def natural_key(self) -> tuple:
|
|
57
|
+
"""
|
|
58
|
+
Returns the natural key for the examination time.
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
tuple: The natural key consisting of the name.
|
|
62
|
+
"""
|
|
63
|
+
return (self.name,)
|
|
64
|
+
|
|
65
|
+
class Meta:
|
|
66
|
+
verbose_name = "Examination Time"
|
|
67
|
+
verbose_name_plural = "Examination Times"
|
|
68
|
+
ordering = ["name"]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ExaminationTimeTypeManager(models.Manager):
|
|
5
|
+
"""
|
|
6
|
+
Manager for ExaminationTimeType with custom query methods.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
def get_by_natural_key(self, name: str) -> "ExaminationTimeType":
|
|
10
|
+
return self.get(name=name)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ExaminationTimeType(models.Model):
|
|
14
|
+
"""
|
|
15
|
+
Represents a type of examination time.
|
|
16
|
+
|
|
17
|
+
Attributes:
|
|
18
|
+
name (str): The unique name of the examination time type.
|
|
19
|
+
examinations: The examinations associated with this type.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
objects = ExaminationTimeTypeManager()
|
|
23
|
+
name = models.CharField(max_length=100, unique=True)
|
|
24
|
+
examinations = models.ManyToManyField("Examination", blank=True)
|
|
25
|
+
|
|
26
|
+
def __str__(self) -> str:
|
|
27
|
+
"""
|
|
28
|
+
Return the name of the examination time type as its string representation.
|
|
29
|
+
"""
|
|
30
|
+
return self.name
|
|
31
|
+
|
|
32
|
+
def natural_key(self) -> tuple:
|
|
33
|
+
"""
|
|
34
|
+
Returns the natural key for the examination time type.
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
tuple: The natural key consisting of the name.
|
|
38
|
+
"""
|
|
39
|
+
return (self.name,)
|
|
40
|
+
|
|
41
|
+
class Meta:
|
|
42
|
+
verbose_name = "Examination Time Type"
|
|
43
|
+
verbose_name_plural = "Examination Time Types"
|
|
44
|
+
ordering = ["name"]
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ExaminationTypeManager(models.Manager):
|
|
5
|
+
"""
|
|
6
|
+
Manager for ExaminationType with custom query methods.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
def get_by_natural_key(self, name: str) -> "ExaminationType":
|
|
10
|
+
"""
|
|
11
|
+
Retrieves an ExaminationType instance using its natural key.
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
name: The natural identifier for the ExaminationType, typically the unique name.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
The ExaminationType instance that matches the given name.
|
|
18
|
+
"""
|
|
19
|
+
return self.get(name=name)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class ExaminationType(models.Model):
|
|
23
|
+
"""
|
|
24
|
+
Represents a type of examination.
|
|
25
|
+
|
|
26
|
+
Attributes:
|
|
27
|
+
name (str): The unique name of the examination type.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
objects = ExaminationTypeManager()
|
|
31
|
+
name = models.CharField(max_length=100, unique=True)
|
|
32
|
+
|
|
33
|
+
def __str__(self) -> str:
|
|
34
|
+
"""
|
|
35
|
+
Return the string representation of the examination type using its name.
|
|
36
|
+
"""
|
|
37
|
+
name = str(self.name)
|
|
38
|
+
return name
|
|
39
|
+
|
|
40
|
+
def natural_key(self) -> tuple:
|
|
41
|
+
"""
|
|
42
|
+
Returns the natural key for the examination type.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
tuple: The natural key consisting of the name.
|
|
46
|
+
"""
|
|
47
|
+
return (self.name,)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from .finding import Finding
|
|
2
|
+
from .finding_type import FindingType
|
|
3
|
+
|
|
4
|
+
from .finding_classification import (
|
|
5
|
+
FindingClassificationType,
|
|
6
|
+
FindingClassification,
|
|
7
|
+
FindingClassificationChoice,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
from .finding_intervention import FindingIntervention, FindingInterventionType
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"Finding",
|
|
14
|
+
"FindingClassificationType",
|
|
15
|
+
"FindingClassification",
|
|
16
|
+
"FindingClassificationChoice",
|
|
17
|
+
"FindingType",
|
|
18
|
+
"FindingIntervention",
|
|
19
|
+
"FindingInterventionType",
|
|
20
|
+
]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Class to represent findings of examinations
|
|
2
|
+
from typing import TYPE_CHECKING, Optional, cast
|
|
3
|
+
|
|
4
|
+
from django.db import models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class FindingManager(models.Manager):
|
|
8
|
+
def get_by_natural_key(self, name):
|
|
9
|
+
return self.get(name=name)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class Finding(models.Model):
|
|
13
|
+
name = models.CharField(max_length=100, unique=True)
|
|
14
|
+
description = models.TextField(blank=True, null=True)
|
|
15
|
+
finding_types = models.ManyToManyField(
|
|
16
|
+
"FindingType", blank=True, related_name="findings"
|
|
17
|
+
)
|
|
18
|
+
finding_interventions = models.ManyToManyField(
|
|
19
|
+
"FindingIntervention", blank=True, related_name="findings"
|
|
20
|
+
)
|
|
21
|
+
caused_by_interventions = models.ManyToManyField(
|
|
22
|
+
"FindingIntervention", blank=True, related_name="causes_findings"
|
|
23
|
+
)
|
|
24
|
+
finding_classifications = models.ManyToManyField(
|
|
25
|
+
"FindingClassification", blank=True, related_name="findings"
|
|
26
|
+
)
|
|
27
|
+
information_sources = models.ManyToManyField(
|
|
28
|
+
"InformationSource", blank=True, related_name="findings"
|
|
29
|
+
)
|
|
30
|
+
objects = FindingManager()
|
|
31
|
+
|
|
32
|
+
if TYPE_CHECKING:
|
|
33
|
+
from endoreg_db.models import (
|
|
34
|
+
Examination,
|
|
35
|
+
FindingClassification,
|
|
36
|
+
FindingClassificationType,
|
|
37
|
+
FindingIntervention,
|
|
38
|
+
FindingType,
|
|
39
|
+
InformationSource,
|
|
40
|
+
PatientFindingClassification,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
finding_types = cast(
|
|
44
|
+
models.manager.RelatedManager["FindingType"], finding_types
|
|
45
|
+
)
|
|
46
|
+
finding_interventions = cast(
|
|
47
|
+
models.manager.RelatedManager["FindingIntervention"], finding_interventions
|
|
48
|
+
)
|
|
49
|
+
finding_classifications = cast(
|
|
50
|
+
models.manager.RelatedManager["FindingClassification"],
|
|
51
|
+
finding_classifications,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
def natural_key(self):
|
|
55
|
+
"""
|
|
56
|
+
Return a tuple containing the unique natural key for this Finding instance.
|
|
57
|
+
|
|
58
|
+
Returns:
|
|
59
|
+
tuple: A single-element tuple with the Finding's name.
|
|
60
|
+
"""
|
|
61
|
+
return (self.name,)
|
|
62
|
+
|
|
63
|
+
def __str__(self):
|
|
64
|
+
return self.name
|
|
65
|
+
|
|
66
|
+
def get_finding_types(self):
|
|
67
|
+
"""
|
|
68
|
+
Return all finding types associated with this finding.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
QuerySet: All related FindingType instances.
|
|
72
|
+
"""
|
|
73
|
+
return self.finding_types.all()
|
|
74
|
+
|
|
75
|
+
def get_classifications(
|
|
76
|
+
self, classification_type: Optional[str] = None
|
|
77
|
+
) -> models.QuerySet["FindingClassification"]:
|
|
78
|
+
"""
|
|
79
|
+
Retrieve all classifications associated with this finding, optionally filtered by classification type.
|
|
80
|
+
|
|
81
|
+
Parameters:
|
|
82
|
+
classification_type (str, optional): If provided, only classifications with a matching type name are returned.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
List[FindingClassification]: List of related classification objects, filtered by type if specified.
|
|
86
|
+
"""
|
|
87
|
+
if classification_type:
|
|
88
|
+
return self.finding_classifications.filter(
|
|
89
|
+
classification_types__name=classification_type
|
|
90
|
+
)
|
|
91
|
+
return self.finding_classifications.all()
|
|
92
|
+
|
|
93
|
+
def get_location_classifications(self):
|
|
94
|
+
"""
|
|
95
|
+
Retrieve all related FindingClassification objects with classification type 'location'.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
QuerySet: All FindingClassification instances linked to this finding where the classification type name is 'location' (case-insensitive).
|
|
99
|
+
"""
|
|
100
|
+
return self.finding_classifications.filter(
|
|
101
|
+
classification_types__name__iexact="location"
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
def get_morphology_classifications(self):
|
|
105
|
+
"""
|
|
106
|
+
Retrieve all related FindingClassification objects with classification type 'morphology'.
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
QuerySet: A queryset of FindingClassification instances associated with this finding and classified as 'morphology'.
|
|
110
|
+
"""
|
|
111
|
+
return self.finding_classifications.filter(
|
|
112
|
+
classification_types__name__iexact="morphology"
|
|
113
|
+
)
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, cast
|
|
2
|
+
|
|
3
|
+
from django.db import models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class FindingClassificationTypeManager(models.Manager):
|
|
7
|
+
def get_by_natural_key(self, name):
|
|
8
|
+
return self.get(name=name)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class FindingClassificationType(models.Model):
|
|
12
|
+
name = models.CharField(max_length=255, unique=True)
|
|
13
|
+
description = models.TextField(blank=True)
|
|
14
|
+
objects = FindingClassificationTypeManager()
|
|
15
|
+
|
|
16
|
+
def natural_key(self):
|
|
17
|
+
return (self.name,)
|
|
18
|
+
|
|
19
|
+
def __str__(self):
|
|
20
|
+
return str(self.name)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class FindingClassificationManager(models.Manager):
|
|
24
|
+
def get_by_natural_key(self, name):
|
|
25
|
+
return self.get(name=name)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class FindingClassification(models.Model):
|
|
29
|
+
name = models.CharField(max_length=255, unique=True)
|
|
30
|
+
description = models.TextField(blank=True)
|
|
31
|
+
finding_types = models.ManyToManyField(
|
|
32
|
+
"FindingType", blank=True, related_name="finding_classifications"
|
|
33
|
+
)
|
|
34
|
+
choices = models.ManyToManyField(
|
|
35
|
+
"FindingClassificationChoice", related_name="classifications", blank=True
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
classification_types = models.ManyToManyField(
|
|
39
|
+
to=FindingClassificationType,
|
|
40
|
+
# on_delete=models.CASCADE
|
|
41
|
+
)
|
|
42
|
+
information_sources = models.ManyToManyField(
|
|
43
|
+
"InformationSource",
|
|
44
|
+
related_name="finding_classifications",
|
|
45
|
+
blank=True,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def examinations(self):
|
|
50
|
+
from endoreg_db.models import Examination
|
|
51
|
+
|
|
52
|
+
return Examination.objects.filter(findings__finding_classifications=self)
|
|
53
|
+
|
|
54
|
+
objects = FindingClassificationManager()
|
|
55
|
+
|
|
56
|
+
if TYPE_CHECKING:
|
|
57
|
+
from endoreg_db.models import (
|
|
58
|
+
Examination,
|
|
59
|
+
Finding,
|
|
60
|
+
FindingType,
|
|
61
|
+
InformationSource,
|
|
62
|
+
PatientFindingClassification,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
classification_types = cast(
|
|
66
|
+
models.manager.RelatedManager["FindingClassificationType"],
|
|
67
|
+
classification_types,
|
|
68
|
+
)
|
|
69
|
+
choices = cast(
|
|
70
|
+
models.manager.RelatedManager["FindingClassificationChoice"], choices
|
|
71
|
+
)
|
|
72
|
+
finding_types = cast(
|
|
73
|
+
models.manager.RelatedManager["FindingType"], finding_types
|
|
74
|
+
)
|
|
75
|
+
information_sources = cast(
|
|
76
|
+
models.manager.RelatedManager["InformationSource"], information_sources
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
@property
|
|
80
|
+
def findings(self) -> "models.manager.RelatedManager[Finding]": ...
|
|
81
|
+
|
|
82
|
+
def natural_key(self):
|
|
83
|
+
return (self.name,)
|
|
84
|
+
|
|
85
|
+
def __str__(self):
|
|
86
|
+
return str(self.name)
|
|
87
|
+
|
|
88
|
+
def get_choices(self):
|
|
89
|
+
"""
|
|
90
|
+
Return all choices associated with this classification.
|
|
91
|
+
|
|
92
|
+
Returns:
|
|
93
|
+
QuerySet: All related FindingClassificationChoice instances.
|
|
94
|
+
"""
|
|
95
|
+
return self.choices.all()
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class FindingClassificationChoiceManager(models.Manager):
|
|
99
|
+
def get_by_natural_key(self, name):
|
|
100
|
+
"""
|
|
101
|
+
Retrieve an instance by its unique name using the natural key.
|
|
102
|
+
|
|
103
|
+
Parameters:
|
|
104
|
+
name (str): The unique name identifying the instance.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
The model instance with the specified name.
|
|
108
|
+
"""
|
|
109
|
+
return self.get(name=name)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class FindingClassificationChoice(models.Model):
|
|
113
|
+
name = models.CharField(max_length=255, unique=True)
|
|
114
|
+
description = models.TextField(blank=True)
|
|
115
|
+
subcategories = models.JSONField(default=dict)
|
|
116
|
+
numerical_descriptors = models.JSONField(default=dict)
|
|
117
|
+
objects = FindingClassificationChoiceManager()
|
|
118
|
+
|
|
119
|
+
if TYPE_CHECKING:
|
|
120
|
+
from endoreg_db.models import PatientFindingClassification
|
|
121
|
+
|
|
122
|
+
classifications: models.QuerySet["FindingClassification"]
|
|
123
|
+
patient_finding_classifications: models.QuerySet["PatientFindingClassification"]
|
|
124
|
+
|
|
125
|
+
def natural_key(self):
|
|
126
|
+
return (self.name,)
|
|
127
|
+
|
|
128
|
+
def __str__(self):
|
|
129
|
+
classifications_names = ", ".join([c.name for c in self.classifications.all()])
|
|
130
|
+
_str = f"{self.name} ({classifications_names})"
|
|
131
|
+
return _str
|