endoreg-db 0.6.4__py3-none-any.whl → 0.8.2__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/admin.py +26 -26
- endoreg_db/api_urls.py +4 -0
- endoreg_db/apps.py +12 -0
- endoreg_db/assets/dummy_model.ckpt +1 -0
- endoreg_db/codemods/readme.md +88 -0
- endoreg_db/codemods/rename_datetime_fields.py +92 -0
- endoreg_db/config/env.py +101 -0
- endoreg_db/data/__init__.py +12 -0
- endoreg_db/data/ai_model/data.yaml +1 -1
- endoreg_db/data/ai_model_label/label/polyp_classification.yaml +52 -0
- endoreg_db/data/ai_model_label/label-set/data.yaml +20 -1
- endoreg_db/data/ai_model_label/label-set/polyp_classifications.yaml +25 -0
- endoreg_db/data/center/data.yaml +13 -12
- endoreg_db/data/center_shift/ukw.yaml +9 -0
- endoreg_db/data/db_summary.csv +58 -0
- endoreg_db/data/db_summary.xlsx +0 -0
- endoreg_db/data/disease/misc.yaml +1 -2
- endoreg_db/data/endoscopy_processor/data.yaml +3 -0
- endoreg_db/data/event/cardiology.yaml +0 -13
- endoreg_db/data/examination/examinations/data.yaml +14 -9
- endoreg_db/data/examination_indication/endoscopy.yaml +30 -30
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +11 -11
- endoreg_db/data/examination_requirement_set/colonoscopy.yaml +15 -0
- endoreg_db/data/finding/anatomy_colon.yaml +128 -0
- endoreg_db/data/finding/colonoscopy.yaml +40 -0
- endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +56 -0
- endoreg_db/data/finding/complication.yaml +16 -0
- endoreg_db/data/finding/data.yaml +3 -46
- endoreg_db/data/finding/examination_setting.yaml +16 -0
- endoreg_db/data/finding/medication_related.yaml +18 -0
- endoreg_db/data/finding/outcome.yaml +12 -0
- endoreg_db/data/finding_classification/colonoscopy_bowel_preparation.yaml +95 -0
- endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +22 -0
- endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +25 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +24 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +68 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_location.yaml +80 -0
- endoreg_db/data/finding_classification/colonoscopy_lst.yaml +21 -0
- endoreg_db/data/finding_classification/colonoscopy_nice.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_paris.yaml +26 -0
- endoreg_db/data/finding_classification/colonoscopy_sano.yaml +22 -0
- endoreg_db/data/finding_classification/colonoscopy_summary.yaml +53 -0
- endoreg_db/data/finding_classification/complication_generic.yaml +25 -0
- endoreg_db/data/finding_classification/examination_setting_generic.yaml +40 -0
- endoreg_db/data/finding_classification/histology_colo.yaml +51 -0
- endoreg_db/data/finding_classification/intervention_required.yaml +26 -0
- endoreg_db/data/finding_classification/medication_related.yaml +23 -0
- endoreg_db/data/finding_classification/visualized.yaml +33 -0
- endoreg_db/data/finding_classification_choice/bowel_preparation.yaml +78 -0
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_circularity_default.yaml +0 -2
- endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +15 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +23 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +15 -0
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_nice.yaml +4 -7
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_paris.yaml +0 -8
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_planarity_default.yaml +6 -13
- endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +14 -0
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_surface_intact_default.yaml +3 -6
- endoreg_db/data/{finding_location_classification_choice/colonoscopy.yaml → finding_classification_choice/colonoscopy_location.yaml} +11 -22
- endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +19 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +82 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +15 -0
- endoreg_db/data/finding_classification_choice/complication_generic_types.yaml +15 -0
- endoreg_db/data/finding_classification_choice/examination_setting_generic_types.yaml +15 -0
- endoreg_db/data/finding_classification_choice/histology.yaml +24 -0
- endoreg_db/data/finding_classification_choice/histology_polyp.yaml +20 -0
- endoreg_db/data/finding_classification_choice/outcome.yaml +19 -0
- endoreg_db/data/finding_classification_choice/yes_no_na.yaml +11 -0
- endoreg_db/data/finding_classification_type/colonoscopy_basic.yaml +48 -0
- endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +8 -3
- endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +6 -6
- endoreg_db/data/finding_type/data.yaml +23 -10
- endoreg_db/data/gender/data.yaml +8 -1
- endoreg_db/data/information_source/annotation.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/misc.yaml +43 -0
- endoreg_db/data/medication/anticoagulation.yaml +5 -5
- endoreg_db/data/medication/tah.yaml +5 -5
- endoreg_db/data/medication_intake_time/base.yaml +4 -4
- endoreg_db/data/names_first/first_names.yaml +3 -0
- endoreg_db/data/pdf_type/data.yaml +26 -2
- 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/report_reader_flag/rkh-histology-generic.yaml +10 -0
- endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +5 -0
- endoreg_db/data/requirement/age.yaml +26 -0
- endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +45 -0
- endoreg_db/data/requirement/disease_cardiovascular.yaml +6 -6
- endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +9 -6
- endoreg_db/data/requirement/disease_hepatology.yaml +1 -1
- endoreg_db/data/requirement/disease_misc.yaml +3 -3
- endoreg_db/data/requirement/disease_renal.yaml +18 -2
- endoreg_db/data/requirement/{colonoscopy_indications.yaml → endoscopy_bleeding_risk.yaml} +6 -3
- endoreg_db/data/requirement/event_cardiology.yaml +17 -17
- endoreg_db/data/requirement/event_requirements.yaml +145 -0
- endoreg_db/data/requirement/finding_colon_polyp.yaml +50 -0
- endoreg_db/data/requirement/gender.yaml +25 -0
- endoreg_db/data/requirement/lab_value.yaml +352 -31
- endoreg_db/data/requirement/medication.yaml +93 -0
- endoreg_db/data/requirement_operator/age.yaml +13 -0
- endoreg_db/data/requirement_operator/lab_operators.yaml +36 -35
- endoreg_db/data/requirement_operator/model_operators.yaml +13 -7
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +48 -0
- endoreg_db/data/requirement_set/colonoscopy_austria_screening.yaml +57 -0
- endoreg_db/data/requirement_set/endoscopy_bleeding_risk.yaml +42 -2
- endoreg_db/data/requirement_type/requirement_types.yaml +82 -0
- endoreg_db/data/shift/endoscopy.yaml +21 -0
- endoreg_db/data/shift_type/base.yaml +35 -0
- endoreg_db/data/tag/requirement_set_tags.yaml +11 -0
- endoreg_db/data/unit/concentration.yaml +23 -0
- endoreg_db/exceptions.py +19 -0
- endoreg_db/forms/patient_finding_intervention_form.py +4 -5
- endoreg_db/forms/patient_form.py +7 -6
- endoreg_db/forms/questionnaires/__init__.py +1 -1
- endoreg_db/forms/questionnaires/tto_questionnaire.py +19 -19
- endoreg_db/helpers/count_db.py +45 -0
- endoreg_db/helpers/data_loader.py +208 -0
- endoreg_db/helpers/default_objects.py +359 -0
- endoreg_db/helpers/download_segmentation_model.py +31 -0
- endoreg_db/helpers/interact.py +6 -0
- endoreg_db/helpers/test_video_helper.py +119 -0
- endoreg_db/logger_conf.py +140 -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 +125 -0
- endoreg_db/management/commands/create_multilabel_model_meta.py +214 -0
- endoreg_db/management/commands/fix_missing_patient_data.py +172 -0
- endoreg_db/management/commands/fix_video_paths.py +165 -0
- endoreg_db/management/commands/import_fallback_video.py +203 -0
- endoreg_db/management/commands/import_report.py +298 -0
- endoreg_db/management/commands/import_video.py +422 -0
- endoreg_db/management/commands/import_video_with_classification.py +367 -0
- endoreg_db/management/commands/init_default_ai_model.py +112 -0
- endoreg_db/management/commands/load_ai_model_data.py +2 -7
- endoreg_db/management/commands/load_base_db_data.py +1 -0
- endoreg_db/management/commands/load_endoscope_data.py +2 -2
- endoreg_db/management/commands/load_examination_indication_data.py +2 -3
- endoreg_db/management/commands/load_finding_data.py +49 -92
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +0 -1
- endoreg_db/management/commands/load_information_source.py +13 -7
- endoreg_db/management/commands/load_name_data.py +37 -0
- endoreg_db/management/commands/load_qualification_data.py +59 -0
- endoreg_db/management/commands/load_requirement_data.py +30 -6
- endoreg_db/management/commands/load_shift_data.py +60 -0
- endoreg_db/management/commands/load_tag_data.py +57 -0
- endoreg_db/management/commands/register_ai_model.py +1 -1
- endoreg_db/management/commands/start_filewatcher.py +106 -0
- endoreg_db/management/commands/storage_management.py +548 -0
- endoreg_db/management/commands/summarize_db_content.py +189 -0
- endoreg_db/management/commands/validate_video.py +204 -0
- endoreg_db/management/commands/validate_video_files.py +161 -0
- endoreg_db/management/commands/video_validation.py +22 -0
- endoreg_db/migrations/0001_initial.py +625 -813
- endoreg_db/migrations/0002_add_video_correction_models.py +52 -0
- endoreg_db/models/__init__.py +270 -307
- endoreg_db/models/administration/__init__.py +116 -0
- endoreg_db/models/{ai_model → administration/ai}/__init__.py +6 -1
- endoreg_db/models/administration/ai/active_model.py +35 -0
- endoreg_db/models/administration/ai/ai_model.py +156 -0
- endoreg_db/models/{ai_model → administration/ai}/model_type.py +6 -1
- endoreg_db/models/administration/case/__init__.py +19 -0
- endoreg_db/models/administration/case/case.py +114 -0
- endoreg_db/models/{case_template → administration/case/case_template}/case_template.py +3 -3
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_rule.py +3 -10
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_rule_value.py +2 -4
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_type.py +1 -3
- endoreg_db/models/{center → administration/center}/__init__.py +3 -1
- endoreg_db/models/administration/center/center.py +61 -0
- endoreg_db/models/administration/center/center_product.py +64 -0
- endoreg_db/models/{center → administration/center}/center_resource.py +19 -3
- endoreg_db/models/administration/center/center_shift.py +88 -0
- endoreg_db/models/administration/center/center_waste.py +30 -0
- endoreg_db/models/administration/permissions/__init__.py +44 -0
- endoreg_db/models/administration/person/__init__.py +24 -0
- endoreg_db/models/administration/person/employee/__init__.py +3 -0
- endoreg_db/models/administration/person/employee/employee.py +35 -0
- endoreg_db/models/administration/person/employee/employee_qualification.py +39 -0
- endoreg_db/models/administration/person/employee/employee_type.py +42 -0
- endoreg_db/models/administration/person/examiner/__init__.py +4 -0
- endoreg_db/models/administration/person/examiner/examiner.py +54 -0
- endoreg_db/models/administration/person/names/__init__.py +0 -0
- endoreg_db/models/{persons → administration/person/names}/first_name.py +1 -1
- endoreg_db/models/{persons → administration/person/names}/last_name.py +2 -3
- endoreg_db/models/administration/person/patient/__init__.py +5 -0
- endoreg_db/models/administration/person/patient/patient.py +460 -0
- endoreg_db/models/administration/person/profession/__init__.py +24 -0
- endoreg_db/models/administration/person/user/__init__.py +5 -0
- endoreg_db/models/administration/person/user/portal_user_information.py +37 -0
- endoreg_db/models/administration/product/product.py +97 -0
- endoreg_db/models/administration/product/product_group.py +39 -0
- endoreg_db/models/administration/product/product_material.py +54 -0
- endoreg_db/models/{product → administration/product}/product_weight.py +9 -0
- endoreg_db/models/{product → administration/product}/reference_product.py +26 -11
- endoreg_db/models/administration/qualification/__init__.py +7 -0
- endoreg_db/models/administration/qualification/qualification.py +37 -0
- endoreg_db/models/administration/qualification/qualification_type.py +35 -0
- endoreg_db/models/administration/shift/__init__.py +9 -0
- endoreg_db/models/administration/shift/scheduled_days.py +69 -0
- endoreg_db/models/administration/shift/shift.py +51 -0
- endoreg_db/models/administration/shift/shift_type.py +108 -0
- endoreg_db/models/label/__init__.py +24 -1
- endoreg_db/models/label/annotation/__init__.py +12 -0
- endoreg_db/models/label/annotation/image_classification.py +84 -0
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +66 -0
- endoreg_db/models/label/label.py +45 -74
- endoreg_db/models/label/label_set.py +53 -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 +41 -0
- endoreg_db/models/label/label_video_segment/label_video_segment.py +511 -0
- endoreg_db/models/label/video_segmentation_label.py +31 -0
- endoreg_db/models/{annotation → label}/video_segmentation_labelset.py +7 -0
- endoreg_db/models/media/__init__.py +14 -0
- endoreg_db/models/media/frame/__init__.py +3 -0
- endoreg_db/models/media/frame/frame.py +111 -0
- endoreg_db/models/media/pdf/__init__.py +11 -0
- endoreg_db/models/media/pdf/raw_pdf.py +608 -0
- endoreg_db/models/media/pdf/report_file.py +162 -0
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +77 -0
- endoreg_db/models/media/video/__init__.py +4 -0
- endoreg_db/models/media/video/create_from_file.py +336 -0
- endoreg_db/models/media/video/pipe_1.py +207 -0
- endoreg_db/models/media/video/pipe_2.py +105 -0
- endoreg_db/models/media/video/refactor_plan.md +0 -0
- endoreg_db/models/media/video/video_file.py +680 -0
- endoreg_db/models/media/video/video_file_ai.py +443 -0
- endoreg_db/models/media/video/video_file_anonymize.py +348 -0
- endoreg_db/models/media/video/video_file_frames/__init__.py +47 -0
- endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +22 -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 +104 -0
- endoreg_db/models/media/video/video_file_frames/_extract_frames.py +174 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame.py +28 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_number.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +20 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +34 -0
- endoreg_db/models/media/video/video_file_frames/_get_frames.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +129 -0
- endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +129 -0
- endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +65 -0
- endoreg_db/models/media/video/video_file_frames.py +0 -0
- endoreg_db/models/media/video/video_file_io.py +166 -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 +45 -0
- endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +39 -0
- endoreg_db/models/media/video/video_file_meta/get_fps.py +147 -0
- endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +143 -0
- endoreg_db/models/media/video/video_file_meta/text_meta.py +134 -0
- endoreg_db/models/media/video/video_file_meta/video_meta.py +70 -0
- endoreg_db/models/media/video/video_file_meta.py +11 -0
- endoreg_db/models/media/video/video_file_segments.py +209 -0
- endoreg_db/models/medical/__init__.py +146 -0
- endoreg_db/models/{contraindication → medical/contraindication}/__init__.py +1 -5
- endoreg_db/models/{disease.py → medical/disease.py} +60 -52
- endoreg_db/models/{event.py → medical/event.py} +31 -54
- endoreg_db/models/{examination → medical/examination}/__init__.py +1 -1
- endoreg_db/models/medical/examination/examination.py +148 -0
- endoreg_db/models/{examination → medical/examination}/examination_indication.py +64 -35
- endoreg_db/models/{examination → medical/examination}/examination_time.py +0 -4
- endoreg_db/models/{examination → medical/examination}/examination_time_type.py +1 -8
- endoreg_db/models/{examination → medical/examination}/examination_type.py +1 -7
- endoreg_db/models/medical/finding/__init__.py +18 -0
- endoreg_db/models/medical/finding/finding.py +96 -0
- endoreg_db/models/medical/finding/finding_classification.py +142 -0
- endoreg_db/models/{finding → medical/finding}/finding_intervention.py +2 -10
- endoreg_db/models/medical/finding/finding_type.py +35 -0
- endoreg_db/models/medical/hardware/__init__.py +8 -0
- endoreg_db/models/{hardware → medical/hardware}/endoscope.py +28 -23
- endoreg_db/models/medical/laboratory/__init__.py +5 -0
- endoreg_db/models/medical/laboratory/lab_value.py +419 -0
- endoreg_db/models/{medication → medical/medication}/medication.py +1 -3
- endoreg_db/models/{medication → medical/medication}/medication_indication_type.py +8 -3
- endoreg_db/models/{medication → medical/medication}/medication_intake_time.py +21 -3
- endoreg_db/models/{medication → medical/medication}/medication_schedule.py +13 -5
- endoreg_db/models/{organ → medical/organ}/__init__.py +3 -6
- endoreg_db/models/medical/patient/__init__.py +56 -0
- endoreg_db/models/medical/patient/medication_examples.py +38 -0
- endoreg_db/models/medical/patient/patient_disease.py +63 -0
- endoreg_db/models/medical/patient/patient_event.py +75 -0
- endoreg_db/models/medical/patient/patient_examination.py +249 -0
- endoreg_db/models/{persons → medical}/patient/patient_examination_indication.py +21 -9
- endoreg_db/models/medical/patient/patient_finding.py +357 -0
- endoreg_db/models/medical/patient/patient_finding_classification.py +207 -0
- endoreg_db/models/{patient → medical/patient}/patient_finding_intervention.py +15 -1
- endoreg_db/models/medical/patient/patient_lab_sample.py +148 -0
- endoreg_db/models/{persons → medical}/patient/patient_lab_value.py +40 -15
- endoreg_db/models/medical/patient/patient_medication.py +104 -0
- endoreg_db/models/medical/patient/patient_medication_schedule.py +136 -0
- endoreg_db/models/{risk → medical/risk}/risk_type.py +0 -4
- endoreg_db/models/{data_file/metadata → metadata}/__init__.py +6 -0
- endoreg_db/models/metadata/frame_ocr_result.py +0 -0
- endoreg_db/models/metadata/model_meta.py +193 -0
- endoreg_db/models/metadata/model_meta_logic.py +236 -0
- endoreg_db/models/{data_file/metadata → metadata}/pdf_meta.py +28 -13
- endoreg_db/models/metadata/sensitive_meta.py +288 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +643 -0
- endoreg_db/models/metadata/video_meta.py +332 -0
- endoreg_db/models/metadata/video_prediction_logic.py +190 -0
- endoreg_db/models/metadata/video_prediction_meta.py +270 -0
- endoreg_db/models/other/__init__.py +17 -0
- endoreg_db/models/other/distribution/date_value_distribution.py +0 -2
- endoreg_db/models/other/distribution/numeric_value_distribution.py +30 -2
- endoreg_db/models/{emission → other/emission}/emission_factor.py +15 -6
- endoreg_db/models/{persons → other}/gender.py +8 -3
- endoreg_db/models/other/information_source.py +159 -0
- endoreg_db/models/other/material.py +10 -2
- endoreg_db/models/other/resource.py +6 -2
- endoreg_db/models/other/tag.py +27 -0
- endoreg_db/models/other/transport_route.py +13 -2
- endoreg_db/models/{unit.py → other/unit.py} +16 -6
- endoreg_db/models/other/waste.py +10 -3
- endoreg_db/models/requirement/requirement.py +556 -114
- endoreg_db/models/requirement/requirement_evaluation/__init__.py +4 -132
- endoreg_db/models/requirement/requirement_evaluation/get_values.py +40 -0
- endoreg_db/models/requirement/requirement_evaluation/operator_evaluation_models.py +9 -0
- endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +80 -87
- endoreg_db/models/requirement/requirement_operator.py +132 -14
- endoreg_db/models/requirement/requirement_set.py +181 -21
- endoreg_db/models/rule/__init__.py +13 -0
- endoreg_db/models/{rules → rule}/rule.py +6 -3
- endoreg_db/models/{rules → rule}/rule_attribute_dtype.py +0 -2
- endoreg_db/models/{rules → rule}/rule_type.py +0 -2
- endoreg_db/models/{rules → rule}/ruleset.py +0 -2
- endoreg_db/models/state/__init__.py +12 -0
- endoreg_db/models/state/abstract.py +11 -0
- endoreg_db/models/state/audit_ledger.py +150 -0
- endoreg_db/models/state/label_video_segment.py +22 -0
- endoreg_db/models/state/raw_pdf.py +187 -0
- endoreg_db/models/state/sensitive_meta.py +46 -0
- endoreg_db/models/state/video.py +232 -0
- endoreg_db/models/upload_job.py +99 -0
- endoreg_db/models/utils.py +135 -0
- endoreg_db/models/video_metadata.py +66 -0
- endoreg_db/models/video_processing.py +153 -0
- endoreg_db/renames.yml +8 -0
- endoreg_db/root_urls.py +9 -0
- endoreg_db/schemas/__init__.py +0 -0
- endoreg_db/schemas/examination_evaluation.py +27 -0
- endoreg_db/serializers/Frames_NICE_and_PARIS_classifications.py +775 -0
- endoreg_db/serializers/__init__.py +147 -10
- endoreg_db/serializers/{raw_pdf_meta_validation.py → _old/raw_pdf_meta_validation.py} +3 -3
- endoreg_db/serializers/{raw_video_meta_validation.py → _old/raw_video_meta_validation.py} +18 -14
- endoreg_db/serializers/_old/video.py +71 -0
- endoreg_db/serializers/administration/__init__.py +14 -0
- endoreg_db/serializers/administration/ai/__init__.py +10 -0
- endoreg_db/serializers/administration/ai/active_model.py +10 -0
- endoreg_db/serializers/administration/ai/ai_model.py +18 -0
- endoreg_db/serializers/administration/ai/model_type.py +10 -0
- endoreg_db/serializers/administration/center.py +9 -0
- endoreg_db/serializers/administration/gender.py +9 -0
- endoreg_db/serializers/anonymization.py +69 -0
- endoreg_db/serializers/evaluation/examination_evaluation.py +1 -0
- endoreg_db/serializers/examination/__init__.py +10 -0
- endoreg_db/serializers/examination/base.py +46 -0
- endoreg_db/serializers/examination/dropdown.py +21 -0
- endoreg_db/serializers/examination_serializer.py +12 -0
- endoreg_db/serializers/finding/__init__.py +5 -0
- endoreg_db/serializers/finding/finding.py +54 -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 +13 -0
- endoreg_db/serializers/label/__init__.py +7 -0
- endoreg_db/serializers/label/image_classification_annotation.py +62 -0
- endoreg_db/serializers/label/label.py +15 -0
- endoreg_db/serializers/label_video_segment/__init__.py +7 -0
- endoreg_db/serializers/label_video_segment/_lvs_create.py +149 -0
- endoreg_db/serializers/label_video_segment/_lvs_update.py +138 -0
- endoreg_db/serializers/label_video_segment/_lvs_validate.py +149 -0
- endoreg_db/serializers/label_video_segment/label_video_segment.py +344 -0
- endoreg_db/serializers/label_video_segment/label_video_segment_annotation.py +99 -0
- endoreg_db/serializers/label_video_segment/label_video_segment_update.py +163 -0
- endoreg_db/serializers/meta/__init__.py +19 -0
- endoreg_db/serializers/meta/pdf_file_meta_extraction.py +115 -0
- endoreg_db/serializers/meta/report_meta.py +53 -0
- endoreg_db/serializers/meta/sensitive_meta_detail.py +162 -0
- endoreg_db/serializers/meta/sensitive_meta_update.py +148 -0
- endoreg_db/serializers/meta/sensitive_meta_verification.py +59 -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 +152 -0
- endoreg_db/serializers/misc/stats.py +33 -0
- endoreg_db/serializers/misc/translatable_field_mix_in.py +44 -0
- endoreg_db/serializers/misc/upload_job.py +71 -0
- endoreg_db/serializers/misc/vop_patient_data.py +120 -0
- endoreg_db/serializers/patient/__init__.py +11 -0
- endoreg_db/serializers/patient/patient.py +86 -0
- endoreg_db/serializers/patient/patient_dropdown.py +27 -0
- endoreg_db/serializers/patient_examination/__init__.py +7 -0
- endoreg_db/serializers/patient_examination/patient_examination.py +141 -0
- endoreg_db/serializers/patient_finding/__init__.py +15 -0
- endoreg_db/serializers/patient_finding/patient_finding.py +31 -0
- endoreg_db/serializers/patient_finding/patient_finding_classification.py +39 -0
- endoreg_db/serializers/patient_finding/patient_finding_detail.py +53 -0
- endoreg_db/serializers/patient_finding/patient_finding_intervention.py +26 -0
- endoreg_db/serializers/patient_finding/patient_finding_list.py +41 -0
- endoreg_db/serializers/patient_finding/patient_finding_write.py +126 -0
- endoreg_db/serializers/pdf/__init__.py +5 -0
- endoreg_db/serializers/pdf/anony_text_validation.py +85 -0
- endoreg_db/serializers/report/__init__.py +9 -0
- endoreg_db/serializers/report/mixins.py +45 -0
- endoreg_db/serializers/report/report.py +105 -0
- endoreg_db/serializers/report/report_list.py +22 -0
- endoreg_db/serializers/report/secure_file_url.py +26 -0
- endoreg_db/serializers/requirements/requirement_schema.py +25 -0
- endoreg_db/serializers/requirements/requirement_sets.py +29 -0
- endoreg_db/serializers/sensitive_meta_serializer.py +282 -0
- endoreg_db/serializers/video/__init__.py +7 -0
- endoreg_db/serializers/video/segmentation.py +263 -0
- endoreg_db/serializers/video/video_file_brief.py +10 -0
- endoreg_db/serializers/video/video_file_detail.py +83 -0
- endoreg_db/serializers/video/video_file_list.py +67 -0
- endoreg_db/serializers/video/video_metadata.py +105 -0
- endoreg_db/serializers/video/video_processing_history.py +153 -0
- endoreg_db/services/__init__.py +5 -0
- endoreg_db/services/anonymization.py +223 -0
- endoreg_db/services/examination_evaluation.py +149 -0
- endoreg_db/services/finding_description_service.py +0 -0
- endoreg_db/services/lookup_service.py +241 -0
- endoreg_db/services/lookup_store.py +122 -0
- endoreg_db/services/ollama_api_docs.py +1528 -0
- endoreg_db/services/pdf_import.py +963 -0
- endoreg_db/services/polling_coordinator.py +288 -0
- endoreg_db/services/pseudonym_service.py +89 -0
- endoreg_db/services/requirements_object.py +147 -0
- endoreg_db/services/segment_sync.py +155 -0
- endoreg_db/services/storage_aware_video_processor.py +344 -0
- endoreg_db/services/video_import.py +1118 -0
- endoreg_db/tasks/upload_tasks.py +207 -0
- endoreg_db/tasks/video_ingest.py +157 -0
- endoreg_db/tasks/video_processing_tasks.py +327 -0
- endoreg_db/urls/__init__.py +70 -0
- endoreg_db/urls/anonymization.py +32 -0
- endoreg_db/urls/auth.py +16 -0
- endoreg_db/urls/classification.py +39 -0
- endoreg_db/urls/examination.py +54 -0
- endoreg_db/urls/files.py +6 -0
- endoreg_db/urls/label_video_segment_validate.py +33 -0
- endoreg_db/urls/label_video_segments.py +44 -0
- endoreg_db/urls/media.py +229 -0
- endoreg_db/urls/patient.py +19 -0
- endoreg_db/urls/report.py +48 -0
- endoreg_db/urls/requirements.py +13 -0
- endoreg_db/urls/stats.py +46 -0
- endoreg_db/urls/upload.py +20 -0
- endoreg_db/urls/video.py +61 -0
- endoreg_db/urls.py +6 -283
- endoreg_db/utils/__init__.py +66 -57
- endoreg_db/utils/ai/__init__.py +9 -0
- endoreg_db/{models/ai_model/utils.py → utils/ai/get.py} +1 -4
- endoreg_db/{models/ai_model/lightning → utils/ai}/inference_dataset.py +0 -1
- endoreg_db/{models/ai_model/lightning → utils/ai}/multilabel_classification_net.py +14 -10
- endoreg_db/{models/ai_model/lightning → utils/ai}/postprocess.py +15 -5
- endoreg_db/utils/ai/predict.py +291 -0
- endoreg_db/{models/ai_model/lightning → utils/ai}/preprocess.py +1 -1
- endoreg_db/utils/calc_duration_seconds.py +24 -0
- endoreg_db/utils/case_generator/__init__.py +0 -0
- endoreg_db/utils/check_video_files.py +148 -0
- endoreg_db/utils/dataloader.py +50 -12
- endoreg_db/utils/dates.py +21 -0
- endoreg_db/utils/env.py +33 -0
- endoreg_db/utils/extract_specific_frames.py +72 -0
- endoreg_db/utils/file_operations.py +29 -1
- endoreg_db/utils/fix_video_path_direct.py +141 -0
- endoreg_db/utils/frame_anonymization_utils.py +463 -0
- endoreg_db/utils/links/__init__.py +0 -0
- endoreg_db/utils/links/requirement_link.py +193 -0
- endoreg_db/utils/mime_types.py +0 -0
- endoreg_db/utils/names.py +2 -0
- endoreg_db/utils/paths.py +100 -82
- endoreg_db/utils/permissions.py +143 -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 +120 -0
- endoreg_db/utils/product/__init__.py +0 -0
- endoreg_db/utils/product/sum_emissions.py +20 -0
- endoreg_db/utils/product/sum_weights.py +18 -0
- endoreg_db/utils/pydantic_models/db_config.py +1 -1
- endoreg_db/utils/requirement_helpers.py +0 -0
- endoreg_db/utils/requirement_operator_logic/__init__.py +0 -0
- endoreg_db/utils/requirement_operator_logic/lab_value_operators.py +578 -0
- endoreg_db/utils/requirement_operator_logic/model_evaluators.py +368 -0
- endoreg_db/utils/translation.py +27 -0
- endoreg_db/utils/validate_video_detailed.py +357 -0
- endoreg_db/utils/video/__init__.py +19 -6
- endoreg_db/utils/video/extract_frames.py +37 -70
- endoreg_db/utils/video/ffmpeg_wrapper.py +772 -0
- endoreg_db/utils/video/names.py +42 -0
- endoreg_db/utils/video/streaming_processor.py +312 -0
- endoreg_db/utils/video/video_splitter.py +94 -0
- endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py +238 -0
- endoreg_db/views/__init__.py +282 -2
- endoreg_db/views/anonymization/__init__.py +27 -0
- endoreg_db/views/anonymization/media_management.py +454 -0
- endoreg_db/views/anonymization/overview.py +216 -0
- endoreg_db/views/anonymization/validate.py +66 -0
- endoreg_db/views/auth/__init__.py +13 -0
- endoreg_db/views/{views.py → auth/keycloak.py} +19 -13
- endoreg_db/views/examination/__init__.py +33 -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 +59 -0
- endoreg_db/views/examination/get_finding_classifications.py +36 -0
- endoreg_db/views/examination/get_findings.py +41 -0
- endoreg_db/views/examination/get_instruments.py +18 -0
- endoreg_db/views/examination/get_interventions.py +14 -0
- endoreg_db/views/finding/__init__.py +9 -0
- endoreg_db/views/finding/finding.py +112 -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 +42 -0
- endoreg_db/views/finding_classification/get_classification_choices.py +55 -0
- endoreg_db/views/label/__init__.py +5 -0
- endoreg_db/views/label/label.py +15 -0
- endoreg_db/views/label_video_segment/__init__.py +16 -0
- endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +44 -0
- endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +50 -0
- endoreg_db/views/label_video_segment/label_video_segment.py +77 -0
- endoreg_db/views/label_video_segment/label_video_segment_by_label.py +174 -0
- endoreg_db/views/label_video_segment/label_video_segment_detail.py +73 -0
- endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +46 -0
- endoreg_db/views/label_video_segment/validate.py +226 -0
- endoreg_db/views/media/__init__.py +45 -0
- endoreg_db/views/media/pdf_media.py +386 -0
- endoreg_db/views/media/segments.py +71 -0
- endoreg_db/views/media/sensitive_metadata.py +314 -0
- endoreg_db/views/media/video_media.py +272 -0
- endoreg_db/views/media/video_segments.py +596 -0
- endoreg_db/views/meta/__init__.py +15 -0
- endoreg_db/views/meta/available_files_list.py +146 -0
- endoreg_db/views/meta/report_meta.py +53 -0
- endoreg_db/views/meta/sensitive_meta_detail.py +148 -0
- endoreg_db/views/meta/sensitive_meta_list.py +104 -0
- endoreg_db/views/meta/sensitive_meta_verification.py +71 -0
- endoreg_db/views/misc/__init__.py +63 -0
- endoreg_db/views/misc/center.py +13 -0
- endoreg_db/views/misc/gender.py +14 -0
- endoreg_db/views/misc/secure_file_serving_view.py +80 -0
- endoreg_db/views/misc/secure_file_url_view.py +84 -0
- endoreg_db/views/misc/secure_url_validate.py +79 -0
- endoreg_db/views/misc/stats.py +220 -0
- endoreg_db/views/misc/translation.py +182 -0
- endoreg_db/views/misc/upload_views.py +240 -0
- endoreg_db/views/patient/__init__.py +5 -0
- endoreg_db/views/patient/patient.py +210 -0
- endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +164 -0
- endoreg_db/views/patient_examination/__init__.py +11 -0
- endoreg_db/views/patient_examination/patient_examination.py +140 -0
- endoreg_db/views/patient_examination/patient_examination_create.py +63 -0
- endoreg_db/views/patient_examination/patient_examination_detail.py +66 -0
- endoreg_db/views/patient_examination/patient_examination_list.py +68 -0
- endoreg_db/views/patient_examination/video.py +194 -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 +64 -0
- endoreg_db/views/patient_finding/patient_finding_optimized.py +259 -0
- endoreg_db/views/patient_finding_classification/__init__.py +5 -0
- endoreg_db/views/patient_finding_classification/pfc_create.py +67 -0
- endoreg_db/views/patient_finding_location/__init__.py +5 -0
- endoreg_db/views/patient_finding_location/pfl_create.py +70 -0
- endoreg_db/views/patient_finding_morphology/__init__.py +5 -0
- endoreg_db/views/patient_finding_morphology/pfm_create.py +70 -0
- endoreg_db/views/pdf/__init__.py +11 -0
- endoreg_db/views/pdf/pdf_media.py +239 -0
- endoreg_db/views/pdf/pdf_stream_views.py +127 -0
- endoreg_db/views/pdf/reimport.py +161 -0
- endoreg_db/views/report/__init__.py +9 -0
- endoreg_db/views/report/report_list.py +112 -0
- endoreg_db/views/report/report_with_secure_url.py +28 -0
- endoreg_db/views/report/start_examination.py +7 -0
- endoreg_db/views/requirement/__init__.py +10 -0
- endoreg_db/views/requirement/evaluate.py +279 -0
- endoreg_db/views/requirement/lookup.py +483 -0
- endoreg_db/views/requirement/lookup_store.py +252 -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 +229 -0
- endoreg_db/views/video/__init__.py +64 -0
- endoreg_db/views/video/correction.py +672 -0
- endoreg_db/views/video/reimport.py +195 -0
- endoreg_db/views/video/segmentation.py +274 -0
- endoreg_db/views/video/task_status.py +49 -0
- endoreg_db/views/{views_for_timeline.py → video/timeline.py} +3 -3
- endoreg_db/views/video/video_analyze.py +52 -0
- endoreg_db/views/video/video_apply_mask.py +48 -0
- endoreg_db/views/video/video_correction.py +21 -0
- endoreg_db/views/video/video_download_processed.py +58 -0
- endoreg_db/views/video/video_examination_viewset.py +329 -0
- endoreg_db/views/video/video_media.py +158 -0
- endoreg_db/views/video/video_meta.py +29 -0
- endoreg_db/views/video/video_processing_history.py +24 -0
- endoreg_db/views/video/video_remove_frames.py +48 -0
- endoreg_db/views/video/video_reprocess.py +40 -0
- endoreg_db/views/video/video_stream.py +306 -0
- endoreg_db-0.8.2.dist-info/METADATA +384 -0
- endoreg_db-0.8.2.dist-info/RECORD +790 -0
- endoreg_db/data/agl_service/data.yaml +0 -19
- endoreg_db/data/finding_location_classification/colonoscopy.yaml +0 -46
- endoreg_db/data/finding_morphology_classification/colonoscopy.yaml +0 -48
- endoreg_db/data/finding_morphology_classification_choice/colonoscopy_size.yaml +0 -57
- endoreg_db/management/commands/_load_model_template.py +0 -41
- endoreg_db/management/commands/delete_all.py +0 -18
- endoreg_db/management/commands/fetch_legacy_image_dataset.py +0 -32
- endoreg_db/management/commands/fix_auth_permission.py +0 -20
- endoreg_db/management/commands/load_active_model_data.py +0 -45
- endoreg_db/management/commands/load_g_play_data.py +0 -113
- endoreg_db/management/commands/load_logging_data.py +0 -39
- endoreg_db/management/commands/load_lx_data.py +0 -64
- endoreg_db/management/commands/load_medication_indication_data.py +0 -63
- endoreg_db/management/commands/load_medication_indication_type_data.py +0 -41
- endoreg_db/management/commands/load_medication_intake_time_data.py +0 -41
- endoreg_db/management/commands/load_medication_schedule_data.py +0 -55
- endoreg_db/management/commands/load_network_data.py +0 -57
- endoreg_db/migrations/0002_alter_frame_image_alter_rawframe_image.py +0 -23
- endoreg_db/migrations/0003_alter_frame_image_alter_rawframe_image.py +0 -23
- endoreg_db/migrations/0004_alter_rawvideofile_file_alter_video_file.py +0 -25
- endoreg_db/migrations/0005_rawvideofile_frame_count_and_more.py +0 -33
- endoreg_db/migrations/0006_frame_extracted_rawframe_extracted.py +0 -23
- endoreg_db/migrations/0007_rename_pseudo_patient_video_patient_and_more.py +0 -24
- endoreg_db/migrations/0008_remove_reportfile_patient_examination_and_more.py +0 -48
- endoreg_db/migrations/0009_requirementoperator_requirementsettype_and_more.py +0 -154
- endoreg_db/models/ai_model/active_model.py +0 -9
- endoreg_db/models/ai_model/ai_model.py +0 -90
- endoreg_db/models/ai_model/lightning/__init__.py +0 -3
- endoreg_db/models/ai_model/lightning/predict.py +0 -172
- endoreg_db/models/ai_model/lightning/prediction_visualizer.py +0 -55
- endoreg_db/models/ai_model/lightning/run_visualizer.py +0 -21
- endoreg_db/models/ai_model/model_meta.py +0 -240
- endoreg_db/models/annotation/__init__.py +0 -32
- endoreg_db/models/annotation/anonymized_image_annotation.py +0 -115
- endoreg_db/models/annotation/binary_classification_annotation_task.py +0 -117
- endoreg_db/models/annotation/image_classification.py +0 -86
- endoreg_db/models/annotation/video_segmentation_annotation.py +0 -52
- endoreg_db/models/case/__init__.py +0 -1
- endoreg_db/models/case/case.py +0 -34
- endoreg_db/models/center/center.py +0 -51
- endoreg_db/models/center/center_product.py +0 -33
- endoreg_db/models/center/center_waste.py +0 -16
- endoreg_db/models/data_file/__init__.py +0 -39
- endoreg_db/models/data_file/base_classes/__init__.py +0 -7
- endoreg_db/models/data_file/base_classes/abstract_frame.py +0 -98
- endoreg_db/models/data_file/base_classes/abstract_pdf.py +0 -127
- endoreg_db/models/data_file/base_classes/abstract_video.py +0 -806
- endoreg_db/models/data_file/base_classes/frame_helpers.py +0 -17
- endoreg_db/models/data_file/base_classes/prepare_bulk_frames.py +0 -19
- endoreg_db/models/data_file/base_classes/utils.py +0 -58
- endoreg_db/models/data_file/frame.py +0 -29
- endoreg_db/models/data_file/import_classes/__init__.py +0 -18
- endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +0 -35
- endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +0 -28
- endoreg_db/models/data_file/import_classes/processing_functions/video.py +0 -260
- endoreg_db/models/data_file/import_classes/raw_pdf.py +0 -254
- endoreg_db/models/data_file/import_classes/raw_video.py +0 -290
- endoreg_db/models/data_file/metadata/sensitive_meta.py +0 -290
- endoreg_db/models/data_file/metadata/video_meta.py +0 -199
- endoreg_db/models/data_file/report_file.py +0 -56
- endoreg_db/models/data_file/video/__init__.py +0 -11
- endoreg_db/models/data_file/video/import_meta.py +0 -25
- endoreg_db/models/data_file/video/video.py +0 -196
- endoreg_db/models/data_file/video_segment.py +0 -214
- endoreg_db/models/examination/examination.py +0 -67
- endoreg_db/models/finding/__init__.py +0 -11
- endoreg_db/models/finding/finding.py +0 -75
- endoreg_db/models/finding/finding_location_classification.py +0 -94
- endoreg_db/models/finding/finding_morphology_classification.py +0 -89
- endoreg_db/models/finding/finding_type.py +0 -22
- endoreg_db/models/hardware/__init__.py +0 -2
- endoreg_db/models/information_source.py +0 -65
- endoreg_db/models/laboratory/__init__.py +0 -1
- endoreg_db/models/laboratory/lab_value.py +0 -162
- endoreg_db/models/logging/__init__.py +0 -11
- endoreg_db/models/logging/agl_service.py +0 -19
- endoreg_db/models/logging/base.py +0 -22
- endoreg_db/models/logging/log_type.py +0 -23
- endoreg_db/models/logging/network_device.py +0 -27
- endoreg_db/models/lx/__init__.py +0 -4
- endoreg_db/models/lx/client.py +0 -57
- endoreg_db/models/lx/identity.py +0 -34
- endoreg_db/models/lx/permission.py +0 -18
- endoreg_db/models/lx/user.py +0 -16
- endoreg_db/models/network/__init__.py +0 -9
- endoreg_db/models/network/agl_service.py +0 -38
- endoreg_db/models/network/network_device.py +0 -58
- endoreg_db/models/network/network_device_type.py +0 -23
- endoreg_db/models/other/distribution.py +0 -5
- endoreg_db/models/patient/__init__.py +0 -24
- endoreg_db/models/patient/patient_examination.py +0 -182
- endoreg_db/models/patient/patient_finding.py +0 -143
- endoreg_db/models/patient/patient_finding_location.py +0 -120
- endoreg_db/models/patient/patient_finding_morphology.py +0 -166
- endoreg_db/models/permissions/__init__.py +0 -44
- endoreg_db/models/persons/__init__.py +0 -34
- endoreg_db/models/persons/examiner/__init__.py +0 -2
- endoreg_db/models/persons/examiner/examiner.py +0 -60
- endoreg_db/models/persons/examiner/examiner_type.py +0 -2
- endoreg_db/models/persons/patient/__init__.py +0 -8
- endoreg_db/models/persons/patient/patient.py +0 -389
- endoreg_db/models/persons/patient/patient_disease.py +0 -22
- endoreg_db/models/persons/patient/patient_event.py +0 -52
- endoreg_db/models/persons/patient/patient_lab_sample.py +0 -108
- endoreg_db/models/persons/patient/patient_medication.py +0 -59
- endoreg_db/models/persons/patient/patient_medication_schedule.py +0 -88
- endoreg_db/models/persons/portal_user_information.py +0 -27
- endoreg_db/models/prediction/__init__.py +0 -8
- endoreg_db/models/prediction/image_classification.py +0 -51
- endoreg_db/models/prediction/video_prediction_meta.py +0 -306
- endoreg_db/models/product/product.py +0 -110
- endoreg_db/models/product/product_group.py +0 -27
- endoreg_db/models/product/product_material.py +0 -28
- endoreg_db/models/questionnaires/__init__.py +0 -114
- endoreg_db/models/quiz/__init__.py +0 -9
- endoreg_db/models/quiz/quiz_answer.py +0 -41
- endoreg_db/models/quiz/quiz_question.py +0 -54
- endoreg_db/models/report_reader/report_reader_config.py +0 -53
- endoreg_db/models/rules/__init__.py +0 -5
- endoreg_db/queries/get/__init__.py +0 -6
- endoreg_db/queries/get/center.py +0 -42
- endoreg_db/queries/get/model.py +0 -13
- endoreg_db/queries/get/patient.py +0 -14
- endoreg_db/queries/get/patient_examination.py +0 -20
- endoreg_db/queries/get/report_file.py +0 -33
- endoreg_db/queries/get/video.py +0 -31
- endoreg_db/serializers/ai_model.py +0 -19
- endoreg_db/serializers/annotation.py +0 -14
- endoreg_db/serializers/center.py +0 -11
- endoreg_db/serializers/examination.py +0 -33
- endoreg_db/serializers/frame.py +0 -9
- endoreg_db/serializers/hardware.py +0 -21
- endoreg_db/serializers/label.py +0 -22
- endoreg_db/serializers/patient.py +0 -33
- endoreg_db/serializers/prediction.py +0 -10
- endoreg_db/serializers/raw_pdf_anony_text_validation.py +0 -137
- endoreg_db/serializers/report_file.py +0 -7
- endoreg_db/serializers/video.py +0 -20
- endoreg_db/serializers/video_segmentation.py +0 -574
- endoreg_db/tests.py +0 -3
- endoreg_db/utils/legacy_ocr.py +0 -201
- endoreg_db/utils/video/transcode_videofile.py +0 -111
- endoreg_db/views/patient_views.py +0 -90
- endoreg_db/views/raw_pdf_anony_text_validation_views.py +0 -95
- endoreg_db/views/raw_pdf_meta_validation_views.py +0 -111
- endoreg_db/views/raw_video_meta_validation_views.py +0 -148
- endoreg_db/views/report_views.py +0 -96
- endoreg_db/views/video_segmentation_views.py +0 -166
- endoreg_db-0.6.4.dist-info/METADATA +0 -161
- endoreg_db-0.6.4.dist-info/RECORD +0 -470
- /endoreg_db/{case_generator/__init__.py → api/serializers/finding_descriptions.py} +0 -0
- /endoreg_db/{queries/get/annotation.py → api/views/finding_descriptions.py} +0 -0
- /endoreg_db/{queries/get/prediction.py → data/shift/m2.yaml} +0 -0
- /endoreg_db/{queries/get/video_import_meta.py → factories/__init__.py} +0 -0
- /endoreg_db/{queries/get/video_prediction_meta.py → helpers/__init__.py} +0 -0
- /endoreg_db/models/{case_template → administration/case/case_template}/__init__.py +0 -0
- /endoreg_db/models/{persons → administration/person}/person.py +0 -0
- /endoreg_db/models/{product → administration/product}/__init__.py +0 -0
- /endoreg_db/models/{report_reader → media/pdf/report_reader}/__init__.py +0 -0
- /endoreg_db/models/{report_reader → media/pdf/report_reader}/report_reader_flag.py +0 -0
- /endoreg_db/models/{hardware → medical/hardware}/endoscopy_processor.py +0 -0
- /endoreg_db/models/{medication → medical/medication}/__init__.py +0 -0
- /endoreg_db/models/{medication → medical/medication}/medication_indication.py +0 -0
- /endoreg_db/models/{risk → medical/risk}/__init__.py +0 -0
- /endoreg_db/models/{risk → medical/risk}/risk.py +0 -0
- /endoreg_db/models/{emission → other/emission}/__init__.py +0 -0
- /endoreg_db/models/{rules → rule}/rule_applicator.py +0 -0
- /endoreg_db/{case_generator → utils/case_generator}/case_generator.py +0 -0
- /endoreg_db/{case_generator → utils/case_generator}/lab_sample_factory.py +0 -0
- /endoreg_db/{case_generator → utils/case_generator}/utils.py +0 -0
- /endoreg_db/views/{csrf.py → misc/csrf.py} +0 -0
- {endoreg_db-0.6.4.dist-info → endoreg_db-0.8.2.dist-info}/WHEEL +0 -0
- {endoreg_db-0.6.4.dist-info → endoreg_db-0.8.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,48 +1,54 @@
|
|
|
1
1
|
from django.db import models
|
|
2
|
-
from typing import List
|
|
2
|
+
from typing import List, TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from .patient import PatientDisease
|
|
3
6
|
|
|
4
7
|
|
|
5
8
|
class DiseaseManager(models.Manager):
|
|
9
|
+
"""Manager for Disease with natural key support."""
|
|
10
|
+
|
|
6
11
|
def get_by_natural_key(self, name):
|
|
7
12
|
"""
|
|
8
|
-
Retrieve a
|
|
9
|
-
|
|
13
|
+
Retrieve a Disease instance by its natural key (name).
|
|
14
|
+
|
|
10
15
|
Args:
|
|
11
16
|
name: The natural key value used to match the model's 'name' field.
|
|
12
|
-
|
|
17
|
+
|
|
13
18
|
Returns:
|
|
14
|
-
The
|
|
19
|
+
The Disease instance corresponding to the provided natural key.
|
|
15
20
|
"""
|
|
16
21
|
return self.get(name=name)
|
|
17
22
|
|
|
18
23
|
|
|
19
24
|
class Disease(models.Model):
|
|
25
|
+
"""
|
|
26
|
+
Represents a specific disease or medical condition.
|
|
27
|
+
|
|
28
|
+
Can define associated subcategories and numerical descriptors applicable to the disease itself.
|
|
29
|
+
"""
|
|
20
30
|
name = models.CharField(max_length=255, unique=True)
|
|
21
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
22
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
23
31
|
subcategories = models.JSONField(default=dict)
|
|
24
32
|
numerical_descriptors = models.JSONField(default=dict)
|
|
25
33
|
|
|
26
34
|
objects = DiseaseManager()
|
|
27
35
|
|
|
36
|
+
if TYPE_CHECKING:
|
|
37
|
+
disease_classifications: models.QuerySet["DiseaseClassification"]
|
|
38
|
+
patient_diseases: models.QuerySet["PatientDisease"]
|
|
39
|
+
|
|
28
40
|
def natural_key(self):
|
|
29
|
-
"""
|
|
30
|
-
Return the natural key for this model instance.
|
|
31
|
-
|
|
32
|
-
The natural key is defined as a tuple containing the instance's name.
|
|
33
|
-
"""
|
|
41
|
+
"""Returns the natural key (name) as a tuple."""
|
|
34
42
|
return (self.name,)
|
|
35
43
|
|
|
36
44
|
def __str__(self):
|
|
37
|
-
"""
|
|
38
|
-
Return the string representation of the instance using its name attribute.
|
|
39
|
-
"""
|
|
45
|
+
"""Returns the name of the disease."""
|
|
40
46
|
return str(self.name)
|
|
41
47
|
|
|
42
48
|
def get_classifications(self) -> List["DiseaseClassification"]:
|
|
43
49
|
"""
|
|
44
|
-
Retrieves all
|
|
45
|
-
|
|
50
|
+
Retrieves all classification systems associated with this disease.
|
|
51
|
+
|
|
46
52
|
Returns:
|
|
47
53
|
List[DiseaseClassification]: A list of related disease classification objects.
|
|
48
54
|
"""
|
|
@@ -53,23 +59,26 @@ class Disease(models.Model):
|
|
|
53
59
|
|
|
54
60
|
|
|
55
61
|
class DiseaseClassificationManager(models.Manager):
|
|
62
|
+
"""Manager for DiseaseClassification with natural key support."""
|
|
63
|
+
|
|
56
64
|
def get_by_natural_key(self, name):
|
|
57
65
|
"""
|
|
58
|
-
|
|
59
|
-
|
|
66
|
+
Retrieve a DiseaseClassification instance by its natural key (name).
|
|
67
|
+
|
|
60
68
|
Args:
|
|
61
69
|
name: A unique identifier representing the natural key of the instance.
|
|
62
|
-
|
|
70
|
+
|
|
63
71
|
Returns:
|
|
64
|
-
The
|
|
72
|
+
The DiseaseClassification instance corresponding to the given natural key.
|
|
65
73
|
"""
|
|
66
74
|
return self.get(name=name)
|
|
67
75
|
|
|
68
76
|
|
|
69
77
|
class DiseaseClassification(models.Model):
|
|
78
|
+
"""
|
|
79
|
+
Represents a classification system applicable to a specific disease (e.g., Forrest classification for ulcers).
|
|
80
|
+
"""
|
|
70
81
|
name = models.CharField(max_length=255, unique=True)
|
|
71
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
72
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
73
82
|
|
|
74
83
|
disease = models.ForeignKey(
|
|
75
84
|
Disease, on_delete=models.CASCADE, related_name="disease_classifications"
|
|
@@ -77,28 +86,22 @@ class DiseaseClassification(models.Model):
|
|
|
77
86
|
|
|
78
87
|
objects = DiseaseClassificationManager()
|
|
79
88
|
|
|
89
|
+
if TYPE_CHECKING:
|
|
90
|
+
disease: "Disease"
|
|
91
|
+
disease_classification_choices: models.QuerySet["DiseaseClassificationChoice"]
|
|
92
|
+
|
|
80
93
|
def natural_key(self):
|
|
81
|
-
"""
|
|
82
|
-
Return the natural key for the instance.
|
|
83
|
-
|
|
84
|
-
Returns a single-element tuple containing the object's name, which is used as a
|
|
85
|
-
unique identifier for natural key-based lookups.
|
|
86
|
-
"""
|
|
94
|
+
"""Returns the natural key (name) as a tuple."""
|
|
87
95
|
return (self.name,)
|
|
88
96
|
|
|
89
97
|
def __str__(self):
|
|
90
|
-
"""
|
|
91
|
-
Return the string representation of the model instance.
|
|
92
|
-
|
|
93
|
-
This method converts the instance's name attribute to a string, ensuring a clear
|
|
94
|
-
and consistent display across Django interfaces.
|
|
95
|
-
"""
|
|
98
|
+
"""Returns the name of the classification."""
|
|
96
99
|
return str(self.name)
|
|
97
100
|
|
|
98
101
|
def get_choices(self) -> List["DiseaseClassificationChoice"]:
|
|
99
102
|
"""
|
|
100
|
-
Retrieves all choices
|
|
101
|
-
|
|
103
|
+
Retrieves all choices within this classification system.
|
|
104
|
+
|
|
102
105
|
Returns:
|
|
103
106
|
List[DiseaseClassificationChoice]: A list of related disease classification choices.
|
|
104
107
|
"""
|
|
@@ -109,18 +112,28 @@ class DiseaseClassification(models.Model):
|
|
|
109
112
|
|
|
110
113
|
|
|
111
114
|
class DiseaseClassificationChoiceManager(models.Manager):
|
|
115
|
+
"""Manager for DiseaseClassificationChoice with natural key support."""
|
|
116
|
+
|
|
112
117
|
def get_by_natural_key(self, name):
|
|
113
|
-
"""
|
|
114
|
-
|
|
118
|
+
"""
|
|
119
|
+
Retrieve a DiseaseClassificationChoice instance by its natural key (name).
|
|
120
|
+
|
|
115
121
|
Queries for and returns the instance whose 'name' attribute matches the provided key.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
name: The natural key value used to match the model's 'name' field.
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
The DiseaseClassificationChoice instance corresponding to the provided natural key.
|
|
116
128
|
"""
|
|
117
129
|
return self.get(name=name)
|
|
118
130
|
|
|
119
131
|
|
|
120
132
|
class DiseaseClassificationChoice(models.Model):
|
|
133
|
+
"""
|
|
134
|
+
Represents a specific choice within a disease classification system (e.g., Forrest IIa).
|
|
135
|
+
"""
|
|
121
136
|
name = models.CharField(max_length=255, unique=True)
|
|
122
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
123
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
124
137
|
|
|
125
138
|
disease_classification = models.ForeignKey(
|
|
126
139
|
DiseaseClassification,
|
|
@@ -130,19 +143,14 @@ class DiseaseClassificationChoice(models.Model):
|
|
|
130
143
|
|
|
131
144
|
objects = DiseaseClassificationChoiceManager()
|
|
132
145
|
|
|
146
|
+
if TYPE_CHECKING:
|
|
147
|
+
disease_classification: "DiseaseClassification"
|
|
148
|
+
patient_diseases: models.QuerySet["PatientDisease"]
|
|
149
|
+
|
|
133
150
|
def natural_key(self):
|
|
134
|
-
"""
|
|
135
|
-
Return a tuple representing the natural key for the instance.
|
|
136
|
-
|
|
137
|
-
The tuple contains the unique name of the model instance, which is used to
|
|
138
|
-
identify it naturally.
|
|
139
|
-
"""
|
|
151
|
+
"""Returns the natural key (name) as a tuple."""
|
|
140
152
|
return (self.name,)
|
|
141
153
|
|
|
142
154
|
def __str__(self):
|
|
143
|
-
"""
|
|
144
|
-
Return the string representation of the object's name.
|
|
145
|
-
|
|
146
|
-
This method converts the model's 'name' attribute to a string for a human-readable display.
|
|
147
|
-
"""
|
|
155
|
+
"""Returns the name of the classification choice."""
|
|
148
156
|
return str(self.name)
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
from django.db import models
|
|
2
|
-
from typing import List
|
|
2
|
+
from typing import List, TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from endoreg_db.models import PatientEvent
|
|
3
6
|
|
|
4
7
|
|
|
5
8
|
class EventManager(models.Manager):
|
|
@@ -30,16 +33,12 @@ class Event(models.Model):
|
|
|
30
33
|
|
|
31
34
|
Attributes:
|
|
32
35
|
name (str): The name of the event.
|
|
33
|
-
name_de (str): The German name of the event.
|
|
34
|
-
name_en (str): The English name of the event.
|
|
35
36
|
description (str): A description of the event.
|
|
36
37
|
"""
|
|
37
38
|
|
|
38
39
|
name = models.CharField(max_length=100, unique=True)
|
|
39
|
-
name_de = models.CharField(max_length=100, blank=True, null=True)
|
|
40
|
-
name_en = models.CharField(max_length=100, blank=True, null=True)
|
|
41
40
|
description = models.TextField(blank=True, null=True)
|
|
42
|
-
event_classification = models.ForeignKey(
|
|
41
|
+
event_classification: models.ForeignKey["EventClassification"] = models.ForeignKey(
|
|
43
42
|
"EventClassification",
|
|
44
43
|
on_delete=models.CASCADE,
|
|
45
44
|
related_name="events",
|
|
@@ -48,11 +47,14 @@ class Event(models.Model):
|
|
|
48
47
|
)
|
|
49
48
|
objects = EventManager()
|
|
50
49
|
|
|
50
|
+
if TYPE_CHECKING:
|
|
51
|
+
patient_events: models.QuerySet["PatientEvent"]
|
|
52
|
+
|
|
51
53
|
def natural_key(self):
|
|
52
54
|
"""
|
|
53
|
-
|
|
55
|
+
Returns a tuple representing the natural key for this instance.
|
|
54
56
|
|
|
55
|
-
The natural key
|
|
57
|
+
The natural key consists of the instance's unique name.
|
|
56
58
|
"""
|
|
57
59
|
return (self.name,)
|
|
58
60
|
|
|
@@ -67,49 +69,32 @@ class Event(models.Model):
|
|
|
67
69
|
|
|
68
70
|
|
|
69
71
|
class EventClassificationManager(models.Manager):
|
|
72
|
+
"""Manager for EventClassification with natural key support."""
|
|
73
|
+
|
|
70
74
|
def get_by_natural_key(self, name):
|
|
71
|
-
"""
|
|
72
|
-
Retrieves an Event instance using its natural key.
|
|
73
|
-
|
|
74
|
-
This method returns the Event whose "name" attribute matches the provided natural key.
|
|
75
|
-
|
|
76
|
-
Args:
|
|
77
|
-
name (str): The natural key representing the Event's name.
|
|
78
|
-
|
|
79
|
-
Returns:
|
|
80
|
-
Event: The Event instance with the specified name.
|
|
81
|
-
"""
|
|
75
|
+
"""Retrieves an EventClassification instance by its natural key (name)."""
|
|
82
76
|
return self.get(name=name)
|
|
83
77
|
|
|
84
78
|
|
|
85
79
|
class EventClassification(models.Model):
|
|
80
|
+
"""
|
|
81
|
+
Represents a classification system for events (e.g., TNM staging for cancer).
|
|
82
|
+
"""
|
|
83
|
+
|
|
86
84
|
name = models.CharField(max_length=255, unique=True)
|
|
87
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
88
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
89
85
|
|
|
90
86
|
objects = EventClassificationManager()
|
|
91
87
|
|
|
92
88
|
def natural_key(self):
|
|
93
|
-
"""
|
|
94
|
-
Return a tuple containing the natural key of the instance.
|
|
95
|
-
|
|
96
|
-
The tuple consists solely of the object's name attribute, serving as its unique identifier for natural key lookups.
|
|
97
|
-
"""
|
|
89
|
+
"""Returns the natural key (name) as a tuple."""
|
|
98
90
|
return (self.name,)
|
|
99
91
|
|
|
100
92
|
def __str__(self):
|
|
101
|
-
"""
|
|
102
|
-
Return the object's name as a string.
|
|
103
|
-
"""
|
|
93
|
+
"""Returns the name of the classification."""
|
|
104
94
|
return str(self.name)
|
|
105
95
|
|
|
106
96
|
def get_choices(self) -> List["EventClassificationChoice"]:
|
|
107
|
-
"""
|
|
108
|
-
Retrieves the event classification choices.
|
|
109
|
-
|
|
110
|
-
Returns:
|
|
111
|
-
List[EventClassificationChoice]: The list of choices associated with this classification.
|
|
112
|
-
"""
|
|
97
|
+
"""Retrieves all choices associated with this classification."""
|
|
113
98
|
choices: List[EventClassificationChoice] = [
|
|
114
99
|
_ for _ in self.event_classification_choices.all()
|
|
115
100
|
]
|
|
@@ -117,23 +102,21 @@ class EventClassification(models.Model):
|
|
|
117
102
|
|
|
118
103
|
|
|
119
104
|
class EventClassificationChoiceManager(models.Manager):
|
|
105
|
+
"""Manager for EventClassificationChoice with natural key support."""
|
|
106
|
+
|
|
120
107
|
def get_by_natural_key(self, name):
|
|
121
|
-
"""
|
|
122
|
-
Retrieves a model instance using its natural key.
|
|
123
|
-
|
|
124
|
-
Args:
|
|
125
|
-
name: The value of the natural key corresponding to the instance's name field.
|
|
126
|
-
|
|
127
|
-
Returns:
|
|
128
|
-
The model instance with a name matching the provided natural key.
|
|
129
|
-
"""
|
|
108
|
+
"""Retrieves an EventClassificationChoice instance by its natural key (name)."""
|
|
130
109
|
return self.get(name=name)
|
|
131
110
|
|
|
132
111
|
|
|
133
112
|
class EventClassificationChoice(models.Model):
|
|
113
|
+
"""
|
|
114
|
+
Represents a specific choice within an event classification system (e.g., T1, N0, M0).
|
|
115
|
+
|
|
116
|
+
Can define associated subcategories and numerical descriptors.
|
|
117
|
+
"""
|
|
118
|
+
|
|
134
119
|
name = models.CharField(max_length=255, unique=True)
|
|
135
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
136
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
137
120
|
subcategories = models.JSONField(default=dict)
|
|
138
121
|
numerical_descriptors = models.JSONField(default=dict)
|
|
139
122
|
|
|
@@ -146,15 +129,9 @@ class EventClassificationChoice(models.Model):
|
|
|
146
129
|
objects = EventClassificationChoiceManager()
|
|
147
130
|
|
|
148
131
|
def natural_key(self):
|
|
149
|
-
"""
|
|
150
|
-
Returns the natural key for the model instance.
|
|
151
|
-
|
|
152
|
-
The natural key is defined as a tuple containing the instance's name, uniquely identifying it.
|
|
153
|
-
"""
|
|
132
|
+
"""Returns the natural key (name) as a tuple."""
|
|
154
133
|
return (self.name,)
|
|
155
134
|
|
|
156
135
|
def __str__(self):
|
|
157
|
-
"""
|
|
158
|
-
Return the string representation of the instance's name.
|
|
159
|
-
"""
|
|
136
|
+
"""Returns the name of the classification choice."""
|
|
160
137
|
return str(self.name)
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
from typing import List
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from endoreg_db.models import Finding
|
|
7
|
+
from endoreg_db.utils.links.requirement_link import RequirementLinks
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ExaminationManager(models.Manager):
|
|
11
|
+
"""
|
|
12
|
+
Manager for Examination with custom query methods.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
def get_by_natural_key(self, name: str) -> "Examination":
|
|
16
|
+
return self.get(name=name)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class Examination(models.Model):
|
|
20
|
+
"""
|
|
21
|
+
Represents an examination with associated details.
|
|
22
|
+
|
|
23
|
+
Attributes:
|
|
24
|
+
name (str): The unique name of the examination.
|
|
25
|
+
examination_types (ManyToManyField): The types associated with the examination.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
name = models.CharField(max_length=100, unique=True)
|
|
29
|
+
examination_types = models.ManyToManyField("ExaminationType", blank=True)
|
|
30
|
+
description = models.TextField(blank=True, null=True)
|
|
31
|
+
|
|
32
|
+
objects = ExaminationManager()
|
|
33
|
+
|
|
34
|
+
if TYPE_CHECKING:
|
|
35
|
+
from endoreg_db.models import ExaminationIndication, Finding, FindingClassification
|
|
36
|
+
finding_classifications: models.QuerySet['FindingClassification']
|
|
37
|
+
indications: models.QuerySet[ExaminationIndication]
|
|
38
|
+
findings: models.QuerySet["Finding"]
|
|
39
|
+
exam_reqset_links: models.QuerySet["ExaminationRequirementSet"]
|
|
40
|
+
|
|
41
|
+
# # Requirement sets associated with the examination.
|
|
42
|
+
# requirement_sets = models.ManyToManyField(
|
|
43
|
+
# "RequirementSet",
|
|
44
|
+
# through="ExaminationRequirementSet",
|
|
45
|
+
# related_name="examinations",
|
|
46
|
+
# blank=True,
|
|
47
|
+
# )
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def links(self) -> "RequirementLinks":
|
|
52
|
+
"""
|
|
53
|
+
Returns a RequirementLinks instance containing all models related to this examination.
|
|
54
|
+
This should include:
|
|
55
|
+
- Examination, Finding, FindingClassification, ExaminationIndication
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
from endoreg_db.utils.links.requirement_link import RequirementLinks
|
|
59
|
+
|
|
60
|
+
return RequirementLinks(
|
|
61
|
+
examinations=[self],
|
|
62
|
+
findings=list(self.findings.all()),
|
|
63
|
+
finding_classifications=list(self.finding_classifications.all()),
|
|
64
|
+
examination_indications=list(self.indications.all())
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
def __str__(self) -> str:
|
|
68
|
+
"""
|
|
69
|
+
String representation of the examination.
|
|
70
|
+
|
|
71
|
+
Returns:
|
|
72
|
+
str: The name of the examination.
|
|
73
|
+
"""
|
|
74
|
+
return str(self.name)
|
|
75
|
+
|
|
76
|
+
def natural_key(self) -> tuple:
|
|
77
|
+
"""
|
|
78
|
+
Returns the natural key for the examination.
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
tuple: The natural key consisting of the name.
|
|
82
|
+
"""
|
|
83
|
+
return (self.name,)
|
|
84
|
+
|
|
85
|
+
def get_available_findings(self) -> List["Finding"]:
|
|
86
|
+
"""
|
|
87
|
+
Retrieves all findings associated with the examination.
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
list: A list of findings related to the examination.
|
|
91
|
+
"""
|
|
92
|
+
from endoreg_db.models import Finding
|
|
93
|
+
|
|
94
|
+
findings: List[Finding] = [_ for _ in self.findings.all()]
|
|
95
|
+
return findings
|
|
96
|
+
|
|
97
|
+
class Meta:
|
|
98
|
+
verbose_name = "Examination"
|
|
99
|
+
verbose_name_plural = "Examinations"
|
|
100
|
+
ordering = ["name"]
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class ExaminationRequirementSetManager(models.Manager):
|
|
104
|
+
"""
|
|
105
|
+
Manager for ExaminationRequirementSet with custom query methods.
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
def get_by_natural_key(self, name: str) -> "ExaminationRequirementSet":
|
|
109
|
+
return self.get(name=name)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
class ExaminationRequirementSet(models.Model):
|
|
113
|
+
"""
|
|
114
|
+
Through table for Examination ↔ RequirementSet link.
|
|
115
|
+
Lets you store per-link metadata (order, default, etc.)
|
|
116
|
+
"""
|
|
117
|
+
examinations = models.ManyToManyField(
|
|
118
|
+
"Examination",
|
|
119
|
+
related_name="exam_reqset_links",
|
|
120
|
+
blank=True,
|
|
121
|
+
)
|
|
122
|
+
# requirement_set = models.ForeignKey(
|
|
123
|
+
# "RequirementSet",
|
|
124
|
+
# on_delete=models.CASCADE,
|
|
125
|
+
# related_name="reqset_exam_links",
|
|
126
|
+
# )
|
|
127
|
+
# Optional metadata
|
|
128
|
+
enabled_by_default = models.BooleanField(default=False)
|
|
129
|
+
|
|
130
|
+
name = models.CharField(max_length=100, unique=True)
|
|
131
|
+
|
|
132
|
+
objects = ExaminationRequirementSetManager()
|
|
133
|
+
|
|
134
|
+
# class Meta:
|
|
135
|
+
# unique_together = ("examination", "requirement_set")
|
|
136
|
+
|
|
137
|
+
# def __str__(self) -> str:
|
|
138
|
+
# return f"{self.examination} ↔ {self.requirement_set} (prio={self.priority})"
|
|
139
|
+
|
|
140
|
+
def natural_key(self) -> tuple:
|
|
141
|
+
"""
|
|
142
|
+
Returns the natural key for the ExaminationRequirementSet.
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
tuple: The natural key consisting of the name.
|
|
146
|
+
"""
|
|
147
|
+
return (self.name,)
|
|
148
|
+
|