endoreg-db 0.8.6.4__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/admin.py +92 -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 +18 -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/__init__.py +0 -0
- endoreg_db/config/env.py +101 -0
- endoreg_db/data/__init__.py +144 -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 +91 -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/examination/examinations/data.yaml +72 -0
- endoreg_db/data/examination/time/data.yaml +48 -0
- endoreg_db/data/examination/time-type/data.yaml +8 -0
- endoreg_db/data/examination/type/data.yaml +17 -0
- endoreg_db/data/examination_indication/endoscopy.yaml +424 -0
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +160 -0
- endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +101 -0
- 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 +105 -0
- 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_classification_choice/colon_lesion_circularity_default.yaml +32 -0
- 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_classification_choice/colon_lesion_nice.yaml +17 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_paris.yaml +57 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +49 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +14 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +36 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_location.yaml +229 -0
- 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.yaml +43 -0
- endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +168 -0
- endoreg_db/data/finding_intervention/endoscopy_egd.yaml +128 -0
- endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +32 -0
- endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +9 -0
- endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +36 -0
- endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
- endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +79 -0
- endoreg_db/data/finding_type/data.yaml +43 -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/age.yaml +26 -0
- endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +45 -0
- endoreg_db/data/requirement/disease_cardiovascular.yaml +79 -0
- endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +41 -0
- endoreg_db/data/requirement/disease_hepatology.yaml +12 -0
- endoreg_db/data/requirement/disease_misc.yaml +12 -0
- endoreg_db/data/requirement/disease_renal.yaml +96 -0
- endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +59 -0
- endoreg_db/data/requirement/event_cardiology.yaml +251 -0
- 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 +441 -0
- 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 +129 -0
- endoreg_db/data/requirement_operator/model_operators.yaml +96 -0
- 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 +52 -0
- endoreg_db/data/requirement_set_type/data.yaml +20 -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 +11 -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 +19 -0
- endoreg_db/factories/__init__.py +0 -0
- endoreg_db/forms/__init__.py +5 -0
- endoreg_db/forms/examination_form.py +11 -0
- endoreg_db/forms/patient_finding_intervention_form.py +18 -0
- endoreg_db/forms/patient_form.py +27 -0
- endoreg_db/forms/questionnaires/__init__.py +1 -0
- endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -0
- endoreg_db/forms/settings/__init__.py +8 -0
- endoreg_db/forms/unit.py +6 -0
- endoreg_db/helpers/__init__.py +0 -0
- endoreg_db/helpers/count_db.py +45 -0
- endoreg_db/helpers/data_loader.py +208 -0
- endoreg_db/helpers/default_objects.py +378 -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_model_meta_from_huggingface.py +115 -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 +423 -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 +77 -0
- endoreg_db/management/commands/load_ai_model_label_data.py +59 -0
- endoreg_db/management/commands/load_base_db_data.py +192 -0
- endoreg_db/management/commands/load_center_data.py +68 -0
- endoreg_db/management/commands/load_contraindication_data.py +41 -0
- endoreg_db/management/commands/load_disease_classification_choices_data.py +41 -0
- endoreg_db/management/commands/load_disease_classification_data.py +41 -0
- endoreg_db/management/commands/load_disease_data.py +62 -0
- endoreg_db/management/commands/load_distribution_data.py +66 -0
- endoreg_db/management/commands/load_endoscope_data.py +68 -0
- endoreg_db/management/commands/load_event_data.py +41 -0
- endoreg_db/management/commands/load_examination_data.py +75 -0
- endoreg_db/management/commands/load_examination_indication_data.py +86 -0
- endoreg_db/management/commands/load_finding_data.py +128 -0
- endoreg_db/management/commands/load_gender_data.py +44 -0
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +132 -0
- endoreg_db/management/commands/load_information_source.py +51 -0
- endoreg_db/management/commands/load_lab_value_data.py +50 -0
- endoreg_db/management/commands/load_medication_data.py +103 -0
- endoreg_db/management/commands/load_name_data.py +37 -0
- endoreg_db/management/commands/load_organ_data.py +43 -0
- endoreg_db/management/commands/load_pdf_type_data.py +61 -0
- endoreg_db/management/commands/load_profession_data.py +44 -0
- endoreg_db/management/commands/load_qualification_data.py +59 -0
- endoreg_db/management/commands/load_report_reader_flag_data.py +46 -0
- endoreg_db/management/commands/load_requirement_data.py +180 -0
- endoreg_db/management/commands/load_risk_data.py +56 -0
- endoreg_db/management/commands/load_shift_data.py +60 -0
- endoreg_db/management/commands/load_tag_data.py +57 -0
- endoreg_db/management/commands/load_unit_data.py +46 -0
- endoreg_db/management/commands/load_user_groups.py +28 -0
- endoreg_db/management/commands/register_ai_model.py +64 -0
- endoreg_db/management/commands/reset_celery_schedule.py +9 -0
- endoreg_db/management/commands/setup_endoreg_db.py +381 -0
- 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/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 +1857 -0
- endoreg_db/migrations/0002_add_video_correction_models.py +52 -0
- endoreg_db/migrations/0003_add_center_display_name.py +30 -0
- endoreg_db/migrations/__init__.py +0 -0
- endoreg_db/models/__init__.py +359 -0
- endoreg_db/models/administration/__init__.py +116 -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 +156 -0
- endoreg_db/models/administration/ai/model_type.py +41 -0
- endoreg_db/models/administration/case/__init__.py +19 -0
- endoreg_db/models/administration/case/case.py +114 -0
- endoreg_db/models/administration/case/case_template/__init__.py +15 -0
- endoreg_db/models/administration/case/case_template/case_template.py +125 -0
- endoreg_db/models/administration/case/case_template/case_template_rule.py +269 -0
- endoreg_db/models/administration/case/case_template/case_template_rule_value.py +86 -0
- endoreg_db/models/administration/case/case_template/case_template_type.py +26 -0
- endoreg_db/models/administration/center/__init__.py +13 -0
- endoreg_db/models/administration/center/center.py +67 -0
- endoreg_db/models/administration/center/center_product.py +64 -0
- endoreg_db/models/administration/center/center_resource.py +49 -0
- 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/administration/person/names/first_name.py +18 -0
- endoreg_db/models/administration/person/names/last_name.py +19 -0
- 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/person.py +31 -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/__init__.py +14 -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/administration/product/product_weight.py +47 -0
- endoreg_db/models/administration/product/reference_product.py +130 -0
- 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 -0
- 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 +83 -0
- 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/label/video_segmentation_labelset.py +27 -0
- endoreg_db/models/media/__init__.py +16 -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 +757 -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 +77 -0
- endoreg_db/models/media/pdf/report_reader/report_reader_flag.py +20 -0
- endoreg_db/models/media/video/__init__.py +8 -0
- endoreg_db/models/media/video/create_from_file.py +358 -0
- endoreg_db/models/media/video/pipe_1.py +213 -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 +825 -0
- endoreg_db/models/media/video/video_file_ai.py +443 -0
- endoreg_db/models/media/video/video_file_anonymize.py +349 -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 +141 -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 +168 -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_segments.py +209 -0
- endoreg_db/models/media/video/video_metadata.py +65 -0
- endoreg_db/models/media/video/video_processing.py +152 -0
- endoreg_db/models/medical/__init__.py +146 -0
- endoreg_db/models/medical/contraindication/__init__.py +17 -0
- endoreg_db/models/medical/disease.py +156 -0
- endoreg_db/models/medical/event.py +137 -0
- endoreg_db/models/medical/examination/__init__.py +9 -0
- endoreg_db/models/medical/examination/examination.py +148 -0
- endoreg_db/models/medical/examination/examination_indication.py +278 -0
- endoreg_db/models/medical/examination/examination_time.py +49 -0
- endoreg_db/models/medical/examination/examination_time_type.py +41 -0
- endoreg_db/models/medical/examination/examination_type.py +48 -0
- 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/medical/finding/finding_intervention.py +52 -0
- endoreg_db/models/medical/finding/finding_type.py +35 -0
- endoreg_db/models/medical/hardware/__init__.py +8 -0
- endoreg_db/models/medical/hardware/endoscope.py +65 -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 +419 -0
- endoreg_db/models/medical/medication/__init__.py +19 -0
- endoreg_db/models/medical/medication/medication.py +31 -0
- endoreg_db/models/medical/medication/medication_indication.py +50 -0
- endoreg_db/models/medical/medication/medication_indication_type.py +39 -0
- endoreg_db/models/medical/medication/medication_intake_time.py +44 -0
- endoreg_db/models/medical/medication/medication_schedule.py +45 -0
- endoreg_db/models/medical/organ/__init__.py +35 -0
- 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/medical/patient/patient_examination_indication.py +44 -0
- endoreg_db/models/medical/patient/patient_finding.py +357 -0
- endoreg_db/models/medical/patient/patient_finding_classification.py +207 -0
- endoreg_db/models/medical/patient/patient_finding_intervention.py +40 -0
- endoreg_db/models/medical/patient/patient_lab_sample.py +148 -0
- endoreg_db/models/medical/patient/patient_lab_value.py +222 -0
- endoreg_db/models/medical/patient/patient_medication.py +104 -0
- endoreg_db/models/medical/patient/patient_medication_schedule.py +136 -0
- endoreg_db/models/medical/risk/__init__.py +7 -0
- endoreg_db/models/medical/risk/risk.py +72 -0
- endoreg_db/models/medical/risk/risk_type.py +51 -0
- endoreg_db/models/metadata/__init__.py +19 -0
- endoreg_db/models/metadata/frame_ocr_result.py +0 -0
- endoreg_db/models/metadata/model_meta.py +206 -0
- endoreg_db/models/metadata/model_meta_logic.py +343 -0
- endoreg_db/models/metadata/pdf_meta.py +89 -0
- endoreg_db/models/metadata/sensitive_meta.py +288 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +1048 -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 +40 -0
- endoreg_db/models/other/distribution/__init__.py +44 -0
- endoreg_db/models/other/distribution/base_value_distribution.py +20 -0
- endoreg_db/models/other/distribution/date_value_distribution.py +89 -0
- endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +32 -0
- endoreg_db/models/other/distribution/numeric_value_distribution.py +125 -0
- endoreg_db/models/other/distribution/single_categorical_value_distribution.py +22 -0
- endoreg_db/models/other/emission/__init__.py +5 -0
- endoreg_db/models/other/emission/emission_factor.py +94 -0
- endoreg_db/models/other/gender.py +27 -0
- endoreg_db/models/other/information_source.py +159 -0
- endoreg_db/models/other/material.py +28 -0
- endoreg_db/models/other/resource.py +22 -0
- endoreg_db/models/other/tag.py +27 -0
- endoreg_db/models/other/transport_route.py +33 -0
- endoreg_db/models/other/unit.py +32 -0
- endoreg_db/models/other/waste.py +27 -0
- endoreg_db/models/requirement/__init__.py +11 -0
- endoreg_db/models/requirement/requirement.py +767 -0
- endoreg_db/models/requirement/requirement_evaluation/__init__.py +6 -0
- 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 +95 -0
- endoreg_db/models/requirement/requirement_operator.py +176 -0
- endoreg_db/models/requirement/requirement_set.py +287 -0
- endoreg_db/models/rule/__init__.py +13 -0
- endoreg_db/models/rule/rule.py +27 -0
- endoreg_db/models/rule/rule_applicator.py +224 -0
- endoreg_db/models/rule/rule_attribute_dtype.py +17 -0
- endoreg_db/models/rule/rule_type.py +20 -0
- endoreg_db/models/rule/ruleset.py +17 -0
- 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/queries/__init__.py +5 -0
- endoreg_db/queries/annotations/__init__.py +3 -0
- endoreg_db/queries/annotations/legacy.py +158 -0
- endoreg_db/queries/sanity/__init_.py +0 -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 +118 -0
- endoreg_db/serializers/_old/raw_pdf_meta_validation.py +223 -0
- endoreg_db/serializers/_old/raw_video_meta_validation.py +179 -0
- 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 +182 -0
- endoreg_db/serializers/misc/sensitive_patient_data.py +120 -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/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/serializers/video_examination.py +198 -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 +411 -0
- endoreg_db/services/lookup_store.py +266 -0
- endoreg_db/services/pdf_import.py +1382 -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 +1259 -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/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 +83 -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 +46 -0
- endoreg_db/urls/media.py +227 -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/sensitive_meta.py +0 -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 +9 -0
- endoreg_db/utils/__init__.py +88 -0
- endoreg_db/utils/ai/__init__.py +9 -0
- endoreg_db/utils/ai/get.py +5 -0
- endoreg_db/utils/ai/inference_dataset.py +52 -0
- endoreg_db/utils/ai/multilabel_classification_net.py +159 -0
- endoreg_db/utils/ai/postprocess.py +63 -0
- endoreg_db/utils/ai/predict.py +291 -0
- endoreg_db/utils/ai/preprocess.py +68 -0
- endoreg_db/utils/calc_duration_seconds.py +24 -0
- endoreg_db/utils/case_generator/__init__.py +0 -0
- endoreg_db/utils/case_generator/case_generator.py +159 -0
- endoreg_db/utils/case_generator/lab_sample_factory.py +33 -0
- endoreg_db/utils/case_generator/utils.py +30 -0
- endoreg_db/utils/check_video_files.py +148 -0
- endoreg_db/utils/cropping.py +29 -0
- endoreg_db/utils/dataloader.py +175 -0
- endoreg_db/utils/dates.py +60 -0
- endoreg_db/utils/env.py +33 -0
- endoreg_db/utils/extract_specific_frames.py +72 -0
- endoreg_db/utils/file_operations.py +58 -0
- endoreg_db/utils/fix_video_path_direct.py +141 -0
- endoreg_db/utils/frame_anonymization_utils.py +463 -0
- endoreg_db/utils/hashs.py +153 -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 +76 -0
- endoreg_db/utils/ocr.py +190 -0
- endoreg_db/utils/parse_and_generate_yaml.py +46 -0
- endoreg_db/utils/paths.py +95 -0
- 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/__init__.py +6 -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/lab_value_operators.py +578 -0
- endoreg_db/utils/requirement_operator_logic/model_evaluators.py +368 -0
- endoreg_db/utils/setup_config.py +177 -0
- endoreg_db/utils/translation.py +27 -0
- endoreg_db/utils/uuid.py +4 -0
- endoreg_db/utils/validate_endo_roi.py +19 -0
- endoreg_db/utils/validate_subcategory_dict.py +91 -0
- endoreg_db/utils/validate_video_detailed.py +357 -0
- endoreg_db/utils/video/__init__.py +26 -0
- endoreg_db/utils/video/extract_frames.py +88 -0
- endoreg_db/utils/video/ffmpeg_wrapper.py +835 -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 +274 -0
- 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 +107 -0
- endoreg_db/views/auth/__init__.py +13 -0
- endoreg_db/views/auth/keycloak.py +113 -0
- 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 +388 -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 +524 -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/csrf.py +7 -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 +8 -0
- endoreg_db/views/pdf/pdf_stream.py +186 -0
- endoreg_db/views/pdf/reimport.py +177 -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 +367 -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 +59 -0
- endoreg_db/views/video/correction.py +530 -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/video/timeline.py +46 -0
- 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 +242 -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_stream.py +306 -0
- endoreg_db/views.py +0 -0
- endoreg_db-0.8.6.4.dist-info/METADATA +383 -0
- endoreg_db-0.8.6.4.dist-info/RECORD +793 -0
- endoreg_db-0.8.6.4.dist-info/WHEEL +4 -0
- endoreg_db-0.8.6.4.dist-info/licenses/LICENSE +674 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
class CaseTemplateRuleTypeManager(models.Manager):
|
|
4
|
+
def get_by_natural_key(self, name):
|
|
5
|
+
return self.get(name=name)
|
|
6
|
+
|
|
7
|
+
class CaseTemplateRuleType(models.Model):
|
|
8
|
+
"""
|
|
9
|
+
Represents a type of rule for a case template.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
name (str): The name of the rule type.
|
|
13
|
+
description (str): A description of the rule type.
|
|
14
|
+
"""
|
|
15
|
+
name = models.CharField(max_length=255)
|
|
16
|
+
description = models.TextField(blank=True, null=True)
|
|
17
|
+
|
|
18
|
+
objects = CaseTemplateRuleTypeManager()
|
|
19
|
+
|
|
20
|
+
def natural_key(self):
|
|
21
|
+
return (self.name,)
|
|
22
|
+
|
|
23
|
+
def __str__(self):
|
|
24
|
+
return str(self.name)
|
|
25
|
+
|
|
26
|
+
class CaseTemplateRuleManager(models.Manager):
|
|
27
|
+
def get_by_natural_key(self, name):
|
|
28
|
+
return self.get(name=name)
|
|
29
|
+
|
|
30
|
+
def get_default_create_patient_rule(self):
|
|
31
|
+
"""Get the default create patient rule."""
|
|
32
|
+
return self.get(name="create-patient-default")
|
|
33
|
+
|
|
34
|
+
def get_default_create_patient_lab_sample_rules(self):
|
|
35
|
+
"""Get the default create patient lab sample rules."""
|
|
36
|
+
return self.get(name="create-patient_lab_sample-default")
|
|
37
|
+
|
|
38
|
+
def get_default_create_patient_medication_schedule_rule(self):
|
|
39
|
+
"""Get the create patient medication schedule rule."""
|
|
40
|
+
r = self.get(name="create-patient_medication_schedule")
|
|
41
|
+
assert r, "No create patient medication schedule rule found"
|
|
42
|
+
return r
|
|
43
|
+
|
|
44
|
+
class CaseTemplateRule(models.Model):
|
|
45
|
+
"""
|
|
46
|
+
A class representing a case template rule.
|
|
47
|
+
|
|
48
|
+
Attributes:
|
|
49
|
+
name (str): The name of the case template rule.
|
|
50
|
+
description (str): A description of the case template rule.
|
|
51
|
+
rule_type (CaseTemplateRuleType): The type of the rule.
|
|
52
|
+
parent_model (str): The model on which the rule is applied.
|
|
53
|
+
target_field (str): The field of the parent model on which the rule is applied.
|
|
54
|
+
target_model (str): The model to which the foreign key points (used for foreign key and many-to-many rules).
|
|
55
|
+
rule_values (list): A list of string values for the rule.
|
|
56
|
+
extra_parameters (dict): A dictionary of extra parameters for the rule.
|
|
57
|
+
value_type (CaseTemplateRuleValueType): The type of the rule value.
|
|
58
|
+
chained_rules (QuerySet): The chained rules associated with the current rule.
|
|
59
|
+
single_categorical_value_distribution (SingleCategoricalValueDistribution): The single categorical value distribution for the rule.
|
|
60
|
+
numerical_value_distribution (NumericValueDistribution): The numerical value distribution for the rule.
|
|
61
|
+
multiple_categorical_value_distribution (MultipleCategoricalValueDistribution): The multiple categorical value distribution for the rule.
|
|
62
|
+
date_value_distribution (DateValueDistribution): The date value distribution for the rule.
|
|
63
|
+
objects (CaseTemplateRuleManager): The manager for the CaseTemplateRule model.
|
|
64
|
+
|
|
65
|
+
Methods:
|
|
66
|
+
natural_key(): Returns the natural key of the rule.
|
|
67
|
+
__str__(): Returns a string representation of the rule.
|
|
68
|
+
get_rule_type(): Returns the name of the rule type.
|
|
69
|
+
get_chained_rules(): Returns all the chained rules associated with the current rule.
|
|
70
|
+
get_all_downward_chained_rules(): Returns all the chained rules of the current rule, including indirectly chained rules.
|
|
71
|
+
chained_rules_has_self_reference(): Checks if any directly or indirectly chained rules reference this rule, creating a non-terminating loop.
|
|
72
|
+
save(*args, **kwargs): Customizes the save method to check for self-references.
|
|
73
|
+
|
|
74
|
+
"""
|
|
75
|
+
name = models.CharField(max_length=255)
|
|
76
|
+
description = models.TextField(blank=True, null=True)
|
|
77
|
+
rule_type = models.ForeignKey(
|
|
78
|
+
"CaseTemplateRuleType", on_delete=models.CASCADE
|
|
79
|
+
)
|
|
80
|
+
parent_model = models.CharField(max_length=255, blank=True, null=True)
|
|
81
|
+
parent_field = models.CharField(max_length=255, blank=True, null=True)
|
|
82
|
+
target_field = models.CharField(max_length=255, blank=True, null=True)
|
|
83
|
+
target_model = models.CharField(max_length=255, blank=True, null=True)
|
|
84
|
+
rule_values = models.JSONField(blank=True, null=True)
|
|
85
|
+
extra_parameters = models.JSONField(blank=True, null=True)
|
|
86
|
+
value_type = models.ForeignKey("CaseTemplateRuleValueType", on_delete=models.SET_NULL, null=True)
|
|
87
|
+
chained_rules = models.ManyToManyField(
|
|
88
|
+
"CaseTemplateRule",
|
|
89
|
+
related_name="calling_rules"
|
|
90
|
+
)
|
|
91
|
+
single_categorical_value_distribution = models.ForeignKey(
|
|
92
|
+
"SingleCategoricalValueDistribution", on_delete=models.SET_NULL, null=True
|
|
93
|
+
)
|
|
94
|
+
numerical_value_distribution = models.ForeignKey(
|
|
95
|
+
"NumericValueDistribution", on_delete=models.SET_NULL, null=True
|
|
96
|
+
)
|
|
97
|
+
multiple_categorical_value_distribution = models.ForeignKey(
|
|
98
|
+
"MultipleCategoricalValueDistribution", on_delete=models.SET_NULL, null=True
|
|
99
|
+
)
|
|
100
|
+
date_value_distribution = models.ForeignKey(
|
|
101
|
+
"DateValueDistribution", on_delete=models.SET_NULL, null=True
|
|
102
|
+
)
|
|
103
|
+
objects = CaseTemplateRuleManager()
|
|
104
|
+
|
|
105
|
+
def natural_key(self):
|
|
106
|
+
"""
|
|
107
|
+
Returns the natural key of the rule.
|
|
108
|
+
|
|
109
|
+
:return: A tuple representing the natural key of the rule.
|
|
110
|
+
"""
|
|
111
|
+
return (self.name,)
|
|
112
|
+
|
|
113
|
+
def __str__(self):
|
|
114
|
+
"""
|
|
115
|
+
Returns a string representation of the rule.
|
|
116
|
+
|
|
117
|
+
:return: A string representation of the rule.
|
|
118
|
+
"""
|
|
119
|
+
return str(self.name)
|
|
120
|
+
|
|
121
|
+
def get_rule_type(self):
|
|
122
|
+
"""
|
|
123
|
+
Returns the name of the rule type.
|
|
124
|
+
|
|
125
|
+
:return: The name of the rule type.
|
|
126
|
+
"""
|
|
127
|
+
return self.rule_type.name
|
|
128
|
+
|
|
129
|
+
def get_chained_rules(self):
|
|
130
|
+
"""
|
|
131
|
+
Returns all the chained rules associated with the current rule.
|
|
132
|
+
|
|
133
|
+
:return: A queryset of all the chained rules associated with the current rule.
|
|
134
|
+
"""
|
|
135
|
+
return self.chained_rules.all()
|
|
136
|
+
|
|
137
|
+
def get_distribution(self):
|
|
138
|
+
"""
|
|
139
|
+
Returns the value distribution of the rule.
|
|
140
|
+
|
|
141
|
+
:return: The value distribution of the rule.
|
|
142
|
+
"""
|
|
143
|
+
DEBUG = True
|
|
144
|
+
if DEBUG:
|
|
145
|
+
print("Rule: ", self.name)
|
|
146
|
+
print(f"single_categorical_value_distribution: {self.single_categorical_value_distribution}")
|
|
147
|
+
print(f"numerical_value_distribution: {self.numerical_value_distribution}")
|
|
148
|
+
print(f"multiple_categorical_value_distribution: {self.multiple_categorical_value_distribution}")
|
|
149
|
+
print(f"date_value_distribution: {self.date_value_distribution}")
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
if self.single_categorical_value_distribution:
|
|
153
|
+
return self.single_categorical_value_distribution
|
|
154
|
+
elif self.numerical_value_distribution:
|
|
155
|
+
return self.numerical_value_distribution
|
|
156
|
+
elif self.multiple_categorical_value_distribution:
|
|
157
|
+
return self.multiple_categorical_value_distribution
|
|
158
|
+
elif self.date_value_distribution:
|
|
159
|
+
return self.date_value_distribution
|
|
160
|
+
return None
|
|
161
|
+
|
|
162
|
+
def get_all_downward_chained_rules(self):
|
|
163
|
+
"""
|
|
164
|
+
Get all chained rules of the current rule, including indirectly chained rules.
|
|
165
|
+
|
|
166
|
+
:return: A set of all chained rules of the current rule.
|
|
167
|
+
"""
|
|
168
|
+
all_chained_rules = set()
|
|
169
|
+
|
|
170
|
+
def traverse_chained_rules(rule):
|
|
171
|
+
"""
|
|
172
|
+
Helper function to recursively traverse chained rules.
|
|
173
|
+
|
|
174
|
+
:param rule: The current CaseTemplateRule being checked.
|
|
175
|
+
:return: None
|
|
176
|
+
"""
|
|
177
|
+
for chained_rule in rule.chained_rules.all():
|
|
178
|
+
if chained_rule not in all_chained_rules:
|
|
179
|
+
all_chained_rules.add(chained_rule)
|
|
180
|
+
traverse_chained_rules(chained_rule)
|
|
181
|
+
|
|
182
|
+
# Initialize the traversal starting with the current rule
|
|
183
|
+
traverse_chained_rules(self)
|
|
184
|
+
return all_chained_rules
|
|
185
|
+
|
|
186
|
+
def chained_rules_has_self_reference(self):
|
|
187
|
+
"""
|
|
188
|
+
:noindex:
|
|
189
|
+
Check if any directly or indirectly chained rules reference this rule, creating a non-terminating loop.
|
|
190
|
+
Return a list containing a tuple (first_rule, self_referencing_rule) for each self-reference.
|
|
191
|
+
first_rule is the most upward rule in the chain that references the rule.
|
|
192
|
+
self_referencing_rule is the rule that references the current rule itself.
|
|
193
|
+
|
|
194
|
+
:return: A list of tuples representing the self-referencing rules.
|
|
195
|
+
"""
|
|
196
|
+
result_list = []
|
|
197
|
+
|
|
198
|
+
def traverse_chained_rules(rule, visited_rules):
|
|
199
|
+
"""
|
|
200
|
+
Helper function to recursively traverse chained rules and check for self-references.
|
|
201
|
+
|
|
202
|
+
:param rule: The current CaseTemplateRule being checked.
|
|
203
|
+
:param visited_rules: A list of tuples representing the path of rules visited so far.
|
|
204
|
+
:return: None
|
|
205
|
+
"""
|
|
206
|
+
for chained_rule in rule.chained_rules.all():
|
|
207
|
+
if chained_rule == self:
|
|
208
|
+
# A self-reference is detected
|
|
209
|
+
first_rule = visited_rules[0][0]
|
|
210
|
+
self_referencing_rule = visited_rules[-1][1]
|
|
211
|
+
result_list.append((first_rule, self_referencing_rule))
|
|
212
|
+
elif chained_rule not in [r[1] for r in visited_rules]:
|
|
213
|
+
# Continue to check chained rules of the current chained rule
|
|
214
|
+
traverse_chained_rules(chained_rule, visited_rules + [(rule, chained_rule)])
|
|
215
|
+
|
|
216
|
+
# Initialize the traversal starting with the current rule
|
|
217
|
+
traverse_chained_rules(self, [(self, self)])
|
|
218
|
+
return result_list
|
|
219
|
+
|
|
220
|
+
def get_target_model(self):
|
|
221
|
+
"""
|
|
222
|
+
Returns the target model of the rule.
|
|
223
|
+
|
|
224
|
+
:return: The target model of the rule.
|
|
225
|
+
"""
|
|
226
|
+
from django.apps import apps
|
|
227
|
+
|
|
228
|
+
if not self.target_model:
|
|
229
|
+
return None
|
|
230
|
+
|
|
231
|
+
try:
|
|
232
|
+
target_model = apps.get_model("endoreg_db", self.target_model)
|
|
233
|
+
except LookupError:
|
|
234
|
+
raise ValueError(f"Model {self.target_model} not found.")
|
|
235
|
+
return target_model
|
|
236
|
+
|
|
237
|
+
def get_target_field(self):
|
|
238
|
+
"""
|
|
239
|
+
Returns the target field of the rule.
|
|
240
|
+
|
|
241
|
+
:return: The target field of the rule.
|
|
242
|
+
"""
|
|
243
|
+
return self.target_field
|
|
244
|
+
|
|
245
|
+
def get_parent_model(self):
|
|
246
|
+
"""
|
|
247
|
+
Returns the parent model of the rule.
|
|
248
|
+
|
|
249
|
+
:return: The parent model of the rule.
|
|
250
|
+
"""
|
|
251
|
+
from django.apps import apps
|
|
252
|
+
|
|
253
|
+
if not self.parent_model:
|
|
254
|
+
return None
|
|
255
|
+
|
|
256
|
+
try:
|
|
257
|
+
self.parent_model = apps.get_model("endoreg_db", self.parent_model)
|
|
258
|
+
except LookupError:
|
|
259
|
+
raise ValueError(f"Model {self.parent_model} not found.")
|
|
260
|
+
return self.parent_model
|
|
261
|
+
|
|
262
|
+
# customize the save method to check for self-references
|
|
263
|
+
# def save(self, *args, **kwargs):
|
|
264
|
+
# # Check for self-references
|
|
265
|
+
# self_referencing_rules = self.chained_rules_has_self_reference()
|
|
266
|
+
# if self_referencing_rules:
|
|
267
|
+
# raise ValueError(f"Self-references detected: {self_referencing_rules}")
|
|
268
|
+
# super().save(*args, **kwargs)
|
|
269
|
+
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
class CaseTemplateRuleValueTypeManager(models.Manager):
|
|
4
|
+
def get_by_natural_key(self, name):
|
|
5
|
+
return self.get(name=name)
|
|
6
|
+
|
|
7
|
+
class CaseTemplateRuleValueType(models.Model):
|
|
8
|
+
"""
|
|
9
|
+
A class representing a case template rule value type.
|
|
10
|
+
|
|
11
|
+
Attributes:
|
|
12
|
+
name (str): The name of the case template rule value type.
|
|
13
|
+
distribution_type: One of "single_categorical", "multiple_categorical", "numeric"
|
|
14
|
+
description (str): A description of the case template rule value type.
|
|
15
|
+
"""
|
|
16
|
+
DISTRIBUTION_TYPES = [
|
|
17
|
+
("single_categorical", "single_categorical"),
|
|
18
|
+
("multiple_categorical", "multiple_categorical"),
|
|
19
|
+
("numeric", "numeric")
|
|
20
|
+
]
|
|
21
|
+
objects = CaseTemplateRuleValueTypeManager()
|
|
22
|
+
|
|
23
|
+
name = models.CharField(max_length=255)
|
|
24
|
+
description = models.TextField(blank=True, null=True)
|
|
25
|
+
|
|
26
|
+
distribution_type = models.CharField(max_length=255, choices=DISTRIBUTION_TYPES)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def natural_key(self):
|
|
30
|
+
return (self.name,)
|
|
31
|
+
|
|
32
|
+
def __str__(self):
|
|
33
|
+
return str(self.name)
|
|
34
|
+
|
|
35
|
+
class CaseTemplateRuleValueManager(models.Manager):
|
|
36
|
+
def get_by_natural_key(self, name):
|
|
37
|
+
return self.get(name=name)
|
|
38
|
+
|
|
39
|
+
class CaseTemplateRuleValue(models.Model):
|
|
40
|
+
"""
|
|
41
|
+
Represents a case template rule value.
|
|
42
|
+
|
|
43
|
+
Attributes:
|
|
44
|
+
name (str): The name of the rule value.
|
|
45
|
+
description (str): A description of the rule value.
|
|
46
|
+
fk_value (str): Foreign key value stored as a string.
|
|
47
|
+
numeric_value (float): Numeric value for the rule.
|
|
48
|
+
text_value (str): Text value for the rule.
|
|
49
|
+
"""
|
|
50
|
+
objects = CaseTemplateRuleValueManager()
|
|
51
|
+
|
|
52
|
+
name = models.CharField(max_length=255)
|
|
53
|
+
description = models.TextField(blank=True, null=True)
|
|
54
|
+
|
|
55
|
+
fk_value = models.CharField(max_length=255, null=True, blank=True)
|
|
56
|
+
numeric_value = models.FloatField(null=True, blank=True)
|
|
57
|
+
text_value = models.CharField(max_length=255, null=True, blank=True)
|
|
58
|
+
|
|
59
|
+
def natural_key(self):
|
|
60
|
+
"""
|
|
61
|
+
Returns the natural key for the object.
|
|
62
|
+
"""
|
|
63
|
+
return (self.name,)
|
|
64
|
+
|
|
65
|
+
def __str__(self):
|
|
66
|
+
"""
|
|
67
|
+
String representation of the object.
|
|
68
|
+
"""
|
|
69
|
+
return str(self.name)
|
|
70
|
+
|
|
71
|
+
def get_value(self):
|
|
72
|
+
"""
|
|
73
|
+
Retrieves the value based on priority:
|
|
74
|
+
- fk_value > numeric_value > text_value > None.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
str | float | None: The value based on the type hierarchy.
|
|
78
|
+
"""
|
|
79
|
+
if self.fk_value:
|
|
80
|
+
return self.fk_value
|
|
81
|
+
elif self.numeric_value:
|
|
82
|
+
return self.numeric_value
|
|
83
|
+
elif self.text_value:
|
|
84
|
+
return self.text_value
|
|
85
|
+
else:
|
|
86
|
+
return None
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class CaseTemplateTypeManager(models.Manager):
|
|
5
|
+
def get_by_natural_key(self, name):
|
|
6
|
+
return self.get(name=name)
|
|
7
|
+
|
|
8
|
+
class CaseTemplateType(models.Model):
|
|
9
|
+
"""
|
|
10
|
+
A class representing a case template type.
|
|
11
|
+
|
|
12
|
+
Attributes:
|
|
13
|
+
name (str): The name of the case template type.
|
|
14
|
+
description (str): A description of the case template type.
|
|
15
|
+
|
|
16
|
+
"""
|
|
17
|
+
name = models.CharField(max_length=255)
|
|
18
|
+
description = models.TextField(blank=True, null=True)
|
|
19
|
+
|
|
20
|
+
objects = CaseTemplateTypeManager()
|
|
21
|
+
|
|
22
|
+
def natural_key(self):
|
|
23
|
+
return (self.name,)
|
|
24
|
+
|
|
25
|
+
def __str__(self):
|
|
26
|
+
return str(self.name)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from .center import Center
|
|
2
|
+
from .center_product import CenterProduct
|
|
3
|
+
from .center_resource import CenterResource
|
|
4
|
+
from .center_waste import CenterWaste
|
|
5
|
+
from .center_shift import CenterShift
|
|
6
|
+
|
|
7
|
+
__all__ = [
|
|
8
|
+
'Center',
|
|
9
|
+
'CenterProduct',
|
|
10
|
+
'CenterResource',
|
|
11
|
+
'CenterWaste',
|
|
12
|
+
'CenterShift',
|
|
13
|
+
]
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from ...medical import Endoscope, EndoscopyProcessor
|
|
6
|
+
from ...administration import (
|
|
7
|
+
CenterProduct,
|
|
8
|
+
CenterWaste, CenterResource
|
|
9
|
+
)
|
|
10
|
+
from ...media import AnonymExaminationReport, AnonymHistologyReport
|
|
11
|
+
|
|
12
|
+
class CenterManager(models.Manager):
|
|
13
|
+
def get_by_natural_key(self, name) -> "Center":
|
|
14
|
+
return self.get(name=name)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Center(models.Model):
|
|
18
|
+
objects = CenterManager()
|
|
19
|
+
|
|
20
|
+
# import_id = models.IntegerField(primary_key=True)
|
|
21
|
+
name = models.CharField(max_length=255)
|
|
22
|
+
display_name = models.CharField(max_length=255, blank=True, default="")
|
|
23
|
+
|
|
24
|
+
first_names = models.ManyToManyField(
|
|
25
|
+
to="FirstName",
|
|
26
|
+
related_name="centers",
|
|
27
|
+
)
|
|
28
|
+
last_names = models.ManyToManyField("LastName", related_name="centers")
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
# first_names: RelatedManager["FirstName"]
|
|
32
|
+
# last_names: RelatedManager["LastName"]
|
|
33
|
+
center_products: models.QuerySet["CenterProduct"]
|
|
34
|
+
center_resources: models.QuerySet["CenterResource"]
|
|
35
|
+
center_wastes: models.QuerySet["CenterWaste"]
|
|
36
|
+
endoscopy_processors: models.QuerySet["EndoscopyProcessor"]
|
|
37
|
+
endoscopes: models.QuerySet["Endoscope"]
|
|
38
|
+
anonymexaminationreport_set: models.QuerySet["AnonymExaminationReport"]
|
|
39
|
+
anonymhistologyreport_set: models.QuerySet["AnonymHistologyReport"]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@classmethod
|
|
43
|
+
def get_by_name(cls, name):
|
|
44
|
+
return cls.objects.get(name=name)
|
|
45
|
+
|
|
46
|
+
def natural_key(self) -> tuple[str]:
|
|
47
|
+
return (self.name,)
|
|
48
|
+
|
|
49
|
+
def save(self, *args, **kwargs):
|
|
50
|
+
if not self.display_name:
|
|
51
|
+
self.display_name = self.name
|
|
52
|
+
super().save(*args, **kwargs)
|
|
53
|
+
|
|
54
|
+
def __str__(self) -> str:
|
|
55
|
+
return str(object=self.display_name or self.name)
|
|
56
|
+
|
|
57
|
+
def get_first_names(self):
|
|
58
|
+
return self.first_names.all()
|
|
59
|
+
|
|
60
|
+
def get_last_names(self):
|
|
61
|
+
return self.last_names.all()
|
|
62
|
+
|
|
63
|
+
def get_endoscopes(self):
|
|
64
|
+
"""
|
|
65
|
+
Returns all Endoscope instances associated with this center.
|
|
66
|
+
"""
|
|
67
|
+
return self.endoscopes.all()
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from ..product import Product, ProductGroup
|
|
6
|
+
from .center import Center
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class CenterProduct(models.Model):
|
|
10
|
+
"""
|
|
11
|
+
Associates a Product with a Center, indicating its usage on a specific date.
|
|
12
|
+
|
|
13
|
+
Attributes:
|
|
14
|
+
product (Product): The product used.
|
|
15
|
+
date_used (date): The date the product was used.
|
|
16
|
+
center (Center): The center where the product was used.
|
|
17
|
+
"""
|
|
18
|
+
product = models.ForeignKey(
|
|
19
|
+
"Product",
|
|
20
|
+
on_delete=models.CASCADE,
|
|
21
|
+
related_name="center_products" # Changed related_name for clarity
|
|
22
|
+
)
|
|
23
|
+
date_used = models.DateField()
|
|
24
|
+
center = models.ForeignKey(
|
|
25
|
+
"Center",
|
|
26
|
+
on_delete=models.CASCADE,
|
|
27
|
+
related_name="center_products",
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
product: "Product"
|
|
32
|
+
center: "Center"
|
|
33
|
+
|
|
34
|
+
class Meta:
|
|
35
|
+
ordering = ['center', '-date_used', 'product']
|
|
36
|
+
verbose_name = "Center Product Usage"
|
|
37
|
+
verbose_name_plural = "Center Product Usages"
|
|
38
|
+
|
|
39
|
+
def __str__(self) -> str:
|
|
40
|
+
return f"{self.product} - {self.center} - {self.date_used}"
|
|
41
|
+
def get_product_name(self) -> str:
|
|
42
|
+
"""Returns the name of the product."""
|
|
43
|
+
return self.product.name
|
|
44
|
+
|
|
45
|
+
def get_product_group(self) -> "ProductGroup | None":
|
|
46
|
+
"""Returns the ProductGroup associated with this product."""
|
|
47
|
+
return self.product.product_group
|
|
48
|
+
|
|
49
|
+
def get_reference_product(self) -> "Product | None":
|
|
50
|
+
"""Returns the reference Product for this product's group."""
|
|
51
|
+
product_group = self.get_product_group()
|
|
52
|
+
if product_group:
|
|
53
|
+
return product_group.reference_product
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
def get_product_weight(self):
|
|
57
|
+
product = self.product
|
|
58
|
+
|
|
59
|
+
return product.get_product_weight()
|
|
60
|
+
|
|
61
|
+
def get_package_weight(self):
|
|
62
|
+
product = self.product
|
|
63
|
+
|
|
64
|
+
return product.get_package_weight()
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from .center import Center
|
|
6
|
+
from ...other.resource import Resource
|
|
7
|
+
from ...other.unit import Unit
|
|
8
|
+
from ...other.emission import EmissionFactor
|
|
9
|
+
|
|
10
|
+
class CenterResource(models.Model):
|
|
11
|
+
name = models.CharField(max_length=255, null=True)
|
|
12
|
+
center = models.ForeignKey(
|
|
13
|
+
"Center",
|
|
14
|
+
on_delete=models.CASCADE,
|
|
15
|
+
related_name="center_resources",
|
|
16
|
+
)
|
|
17
|
+
quantity = models.FloatField()
|
|
18
|
+
resource = models.ForeignKey("Resource", on_delete=models.CASCADE)
|
|
19
|
+
transport_emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True,
|
|
20
|
+
related_name="center_resource_transport_emission_factor")
|
|
21
|
+
use_emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True,
|
|
22
|
+
related_name="center_resource_use_emission_factor")
|
|
23
|
+
year = models.IntegerField()
|
|
24
|
+
unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
center: "Center"
|
|
28
|
+
resource: "Resource"
|
|
29
|
+
transport_emission_factor: "EmissionFactor"
|
|
30
|
+
use_emission_factor: "EmissionFactor"
|
|
31
|
+
unit: "Unit"
|
|
32
|
+
|
|
33
|
+
def __str__(self):
|
|
34
|
+
result_string = ""
|
|
35
|
+
|
|
36
|
+
if self.name is not None:
|
|
37
|
+
result_string += self.name + ":\n"
|
|
38
|
+
|
|
39
|
+
result_string += "\tCenter\t-\t" + str(self.center) + "\n"
|
|
40
|
+
result_string += "\tResource\t-\t" + str(self.resource) + "\n"
|
|
41
|
+
result_string += "\tQuantity\t-\t" + str(self.quantity) + "\n"
|
|
42
|
+
result_string += "\tYear\t-\t" + str(self.year) + "\n"
|
|
43
|
+
result_string += "\tUnit\t-\t" + str(self.unit) + "\n"
|
|
44
|
+
result_string += "\tTransport Emission Factor\t-\t" + str(self.transport_emission_factor) + "\n"
|
|
45
|
+
result_string += "\tUse Emission Factor\t-\t" + str(self.use_emission_factor) + "\n"
|
|
46
|
+
|
|
47
|
+
result_string += "\n"
|
|
48
|
+
|
|
49
|
+
return result_string
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from endoreg_db.models import (
|
|
6
|
+
Center,
|
|
7
|
+
Shift,
|
|
8
|
+
ScheduledDays,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
class CenterShiftManager(models.Manager):
|
|
12
|
+
def get_by_natural_key(self, name):
|
|
13
|
+
"""
|
|
14
|
+
Retrieves a CenterShift instance by its unique name.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
name: The unique identifier of the CenterShift.
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
The CenterShift instance with the specified name.
|
|
21
|
+
"""
|
|
22
|
+
return self.get(name=name)
|
|
23
|
+
|
|
24
|
+
class CenterShift(models.Model):
|
|
25
|
+
"""
|
|
26
|
+
Model representing a center shift.
|
|
27
|
+
"""
|
|
28
|
+
name = models.CharField(max_length=255, unique=True)
|
|
29
|
+
description = models.TextField(blank=True, null=True)
|
|
30
|
+
|
|
31
|
+
center = models.ForeignKey(
|
|
32
|
+
"Center",
|
|
33
|
+
on_delete=models.CASCADE,
|
|
34
|
+
related_name="center_shifts",
|
|
35
|
+
)
|
|
36
|
+
shift = models.ForeignKey(
|
|
37
|
+
"Shift",
|
|
38
|
+
on_delete=models.CASCADE,
|
|
39
|
+
related_name="center_shifts",
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
start_time = models.TimeField()
|
|
43
|
+
end_time = models.TimeField()
|
|
44
|
+
scheduled_days = models.ManyToManyField(
|
|
45
|
+
"ScheduledDays",
|
|
46
|
+
related_name="center_shifts",
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
#TODO add validator; the value should be between 0 and 1
|
|
50
|
+
estimated_presence_fraction = models.DecimalField(
|
|
51
|
+
max_digits=5,
|
|
52
|
+
decimal_places=4,
|
|
53
|
+
default=0.0,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
if TYPE_CHECKING:
|
|
57
|
+
center: "Center"
|
|
58
|
+
shift: "Shift"
|
|
59
|
+
scheduled_days: models.QuerySet["ScheduledDays"]
|
|
60
|
+
|
|
61
|
+
def __str__(self):
|
|
62
|
+
"""
|
|
63
|
+
Returns a string representation of the center shift, combining the center and shift.
|
|
64
|
+
"""
|
|
65
|
+
return f"{self.center} - {self.shift}"
|
|
66
|
+
|
|
67
|
+
def initialize_scheduled_days(self):
|
|
68
|
+
# shift_types
|
|
69
|
+
"""
|
|
70
|
+
Initializes scheduled days for the center shift.
|
|
71
|
+
|
|
72
|
+
This method is a placeholder and does not perform any actions.
|
|
73
|
+
"""
|
|
74
|
+
pass
|
|
75
|
+
|
|
76
|
+
def get_scheduled_days(self, infer = True):
|
|
77
|
+
"""
|
|
78
|
+
Retrieves the scheduled days associated with this center shift.
|
|
79
|
+
|
|
80
|
+
If no scheduled days are found and `infer` is False, raises a ValueError. Otherwise, returns the queryset of scheduled days, which may be empty.
|
|
81
|
+
"""
|
|
82
|
+
sd = self.scheduled_days.all()
|
|
83
|
+
if not sd.exists():
|
|
84
|
+
if not infer:
|
|
85
|
+
raise ValueError("No scheduled days found for this center shift.")
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
return sd
|