endoreg-db 0.8.8.0__py3-none-any.whl → 0.8.9.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/data/__init__.py +22 -8
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +0 -1
- endoreg_db/data/examination/examinations/data.yaml +114 -14
- endoreg_db/data/examination/time-type/data.yaml +0 -3
- endoreg_db/data/examination_indication/endoscopy.yaml +108 -173
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +0 -70
- endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +33 -37
- endoreg_db/data/finding/00_generic.yaml +35 -0
- endoreg_db/data/finding/00_generic_complication.yaml +9 -0
- endoreg_db/data/finding/01_gastroscopy_baseline.yaml +88 -0
- endoreg_db/data/finding/01_gastroscopy_observation.yaml +113 -0
- endoreg_db/data/finding/02_colonoscopy_baseline.yaml +53 -0
- endoreg_db/data/finding/02_colonoscopy_hidden.yaml +119 -0
- endoreg_db/data/finding/02_colonoscopy_observation.yaml +152 -0
- endoreg_db/data/finding_classification/00_generic.yaml +44 -0
- endoreg_db/data/finding_classification/00_generic_histology.yaml +28 -0
- endoreg_db/data/finding_classification/00_generic_lesion.yaml +52 -0
- endoreg_db/data/finding_classification/{colonoscopy_bowel_preparation.yaml → 02_colonoscopy_baseline.yaml} +35 -20
- endoreg_db/data/finding_classification/02_colonoscopy_histology.yaml +13 -0
- endoreg_db/data/finding_classification/02_colonoscopy_other.yaml +12 -0
- endoreg_db/data/finding_classification/02_colonoscopy_polyp.yaml +101 -0
- endoreg_db/data/finding_classification_choice/{yes_no_na.yaml → 00_generic.yaml} +5 -1
- endoreg_db/data/finding_classification_choice/{examination_setting_generic_types.yaml → 00_generic_baseline.yaml} +10 -2
- endoreg_db/data/finding_classification_choice/{complication_generic_types.yaml → 00_generic_complication.yaml} +1 -1
- endoreg_db/data/finding_classification_choice/{histology.yaml → 00_generic_histology.yaml} +1 -4
- endoreg_db/data/finding_classification_choice/00_generic_lesion.yaml +158 -0
- endoreg_db/data/finding_classification_choice/{bowel_preparation.yaml → 02_colonoscopy_bowel_preparation.yaml} +1 -30
- endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_not_complete_reason.yaml → finding_classification_choice/02_colonoscopy_generic.yaml} +1 -1
- endoreg_db/data/finding_classification_choice/{histology_polyp.yaml → 02_colonoscopy_histology.yaml} +1 -1
- endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_location.yaml → finding_classification_choice/02_colonoscopy_location.yaml} +23 -4
- endoreg_db/data/finding_classification_choice/02_colonoscopy_other.yaml +34 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_advanced_imaging.yaml +76 -0
- endoreg_db/data/{_examples/finding_classification_choice/colon_lesion_paris.yaml → finding_classification_choice/02_colonoscopy_polyp_morphology.yaml} +26 -8
- endoreg_db/data/finding_classification_choice/02_colonoscopy_size.yaml +27 -0
- endoreg_db/data/finding_classification_type/{colonoscopy_basic.yaml → 00_generic.yaml} +18 -13
- endoreg_db/data/finding_classification_type/02_colonoscopy.yaml +9 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy.yaml +59 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_ablation.yaml +44 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_bleeding.yaml +55 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_resection.yaml +85 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stenosis.yaml +17 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stent.yaml +9 -0
- endoreg_db/data/finding_intervention/01_gastroscopy.yaml +19 -0
- endoreg_db/data/finding_intervention/04_eus.yaml +39 -0
- endoreg_db/data/finding_intervention/05_ercp.yaml +3 -0
- endoreg_db/data/finding_type/data.yaml +8 -12
- endoreg_db/data/requirement/01_patient_data.yaml +93 -0
- endoreg_db/data/requirement_operator/new_operators.yaml +36 -0
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +0 -2
- endoreg_db/data/requirement_set/90_coloreg.yaml +20 -8
- endoreg_db/exceptions.py +0 -1
- endoreg_db/forms/examination_form.py +1 -1
- endoreg_db/helpers/data_loader.py +124 -52
- endoreg_db/helpers/default_objects.py +116 -81
- endoreg_db/import_files/__init__.py +27 -0
- endoreg_db/import_files/context/__init__.py +7 -0
- endoreg_db/import_files/context/default_sensitive_meta.py +81 -0
- endoreg_db/import_files/context/ensure_center.py +17 -0
- endoreg_db/import_files/context/file_lock.py +66 -0
- endoreg_db/import_files/context/import_context.py +43 -0
- endoreg_db/import_files/context/validate_directories.py +56 -0
- endoreg_db/import_files/file_storage/__init__.py +15 -0
- endoreg_db/import_files/file_storage/create_report_file.py +76 -0
- endoreg_db/import_files/file_storage/create_video_file.py +75 -0
- endoreg_db/import_files/file_storage/sensitive_meta_storage.py +39 -0
- endoreg_db/import_files/file_storage/state_management.py +496 -0
- endoreg_db/import_files/file_storage/storage.py +36 -0
- endoreg_db/import_files/import_service.md +26 -0
- endoreg_db/import_files/processing/__init__.py +11 -0
- endoreg_db/import_files/processing/report_processing/report_anonymization.py +94 -0
- endoreg_db/import_files/processing/sensitive_meta_adapter.py +51 -0
- endoreg_db/import_files/processing/video_processing/video_anonymization.py +107 -0
- endoreg_db/import_files/pseudonymization/fake.py +52 -0
- endoreg_db/import_files/pseudonymization/k_anonymity.py +182 -0
- endoreg_db/import_files/pseudonymization/k_pseudonymity.py +128 -0
- endoreg_db/import_files/pseudonymization/pseudonymize.py +0 -0
- endoreg_db/import_files/report_import_service.py +141 -0
- endoreg_db/import_files/video_import_service.py +150 -0
- endoreg_db/management/commands/import_report.py +130 -65
- endoreg_db/management/commands/import_video_with_classification.py +1 -1
- endoreg_db/management/commands/load_ai_model_data.py +5 -5
- endoreg_db/management/commands/load_ai_model_label_data.py +9 -7
- endoreg_db/management/commands/load_base_db_data.py +5 -134
- endoreg_db/management/commands/load_contraindication_data.py +14 -16
- endoreg_db/management/commands/load_disease_classification_choices_data.py +15 -18
- endoreg_db/management/commands/load_disease_classification_data.py +15 -18
- endoreg_db/management/commands/load_disease_data.py +25 -28
- endoreg_db/management/commands/load_endoscope_data.py +20 -27
- endoreg_db/management/commands/load_event_data.py +14 -16
- endoreg_db/management/commands/load_examination_data.py +31 -44
- endoreg_db/management/commands/load_examination_indication_data.py +20 -21
- endoreg_db/management/commands/load_finding_data.py +52 -80
- endoreg_db/management/commands/load_information_source.py +21 -23
- endoreg_db/management/commands/load_lab_value_data.py +17 -26
- endoreg_db/management/commands/load_medication_data.py +13 -12
- endoreg_db/management/commands/load_organ_data.py +15 -19
- endoreg_db/management/commands/load_pdf_type_data.py +19 -18
- endoreg_db/management/commands/load_profession_data.py +14 -17
- endoreg_db/management/commands/load_qualification_data.py +20 -23
- endoreg_db/management/commands/load_report_reader_flag_data.py +17 -19
- endoreg_db/management/commands/load_requirement_data.py +14 -20
- endoreg_db/management/commands/load_risk_data.py +7 -6
- endoreg_db/management/commands/load_shift_data.py +20 -23
- endoreg_db/management/commands/load_tag_data.py +8 -11
- endoreg_db/management/commands/load_unit_data.py +17 -19
- endoreg_db/management/commands/start_filewatcher.py +46 -37
- endoreg_db/management/commands/validate_video_files.py +1 -5
- endoreg_db/migrations/0001_initial.py +1360 -1812
- endoreg_db/models/administration/person/patient/patient.py +72 -46
- endoreg_db/models/label/__init__.py +2 -2
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +18 -26
- endoreg_db/models/label/label_video_segment/label_video_segment.py +23 -1
- endoreg_db/models/media/pdf/raw_pdf.py +136 -64
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +34 -10
- endoreg_db/models/media/processing_history/__init__.py +5 -0
- endoreg_db/models/media/processing_history/processing_history.py +96 -0
- endoreg_db/models/media/video/create_from_file.py +101 -31
- endoreg_db/models/media/video/video_file.py +125 -105
- endoreg_db/models/media/video/video_file_io.py +31 -26
- endoreg_db/models/medical/contraindication/README.md +1 -0
- endoreg_db/models/medical/examination/examination.py +28 -8
- endoreg_db/models/medical/examination/examination_indication.py +13 -79
- endoreg_db/models/medical/examination/examination_time.py +8 -3
- endoreg_db/models/medical/finding/finding.py +5 -12
- endoreg_db/models/medical/finding/finding_classification.py +18 -37
- endoreg_db/models/medical/finding/finding_intervention.py +7 -9
- endoreg_db/models/medical/hardware/endoscope.py +6 -0
- endoreg_db/models/medical/patient/medication_examples.py +5 -1
- endoreg_db/models/medical/patient/patient_finding.py +1 -1
- endoreg_db/models/metadata/pdf_meta.py +22 -10
- endoreg_db/models/metadata/sensitive_meta.py +3 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +200 -124
- endoreg_db/models/other/information_source.py +27 -6
- endoreg_db/models/report/__init__.py +0 -0
- endoreg_db/models/report/images.py +0 -0
- endoreg_db/models/report/report.py +6 -0
- endoreg_db/models/requirement/requirement.py +59 -399
- endoreg_db/models/requirement/requirement_operator.py +86 -98
- endoreg_db/models/state/audit_ledger.py +4 -5
- endoreg_db/models/state/raw_pdf.py +69 -30
- endoreg_db/models/state/video.py +65 -49
- endoreg_db/models/upload_job.py +33 -9
- endoreg_db/models/utils.py +27 -23
- endoreg_db/queries/__init__.py +3 -1
- endoreg_db/schemas/examination_evaluation.py +1 -1
- endoreg_db/serializers/__init__.py +2 -8
- endoreg_db/serializers/label_video_segment/label_video_segment.py +2 -29
- endoreg_db/serializers/meta/__init__.py +1 -6
- endoreg_db/serializers/misc/sensitive_patient_data.py +50 -26
- endoreg_db/serializers/patient_examination/patient_examination.py +3 -3
- endoreg_db/serializers/pdf/anony_text_validation.py +39 -23
- endoreg_db/serializers/video/video_file_list.py +65 -34
- endoreg_db/services/__old/pdf_import.py +1487 -0
- endoreg_db/services/__old/video_import.py +1306 -0
- endoreg_db/services/anonymization.py +63 -26
- endoreg_db/services/lookup_service.py +28 -28
- endoreg_db/services/lookup_store.py +2 -2
- endoreg_db/services/pdf_import.py +0 -1480
- endoreg_db/services/report_import.py +10 -0
- endoreg_db/services/video_import.py +6 -1165
- endoreg_db/tasks/upload_tasks.py +79 -70
- endoreg_db/tasks/video_ingest.py +8 -4
- endoreg_db/urls/__init__.py +0 -14
- endoreg_db/urls/ai.py +32 -0
- endoreg_db/urls/media.py +21 -24
- endoreg_db/utils/dataloader.py +87 -57
- endoreg_db/utils/paths.py +110 -46
- endoreg_db/utils/pipelines/Readme.md +1 -1
- endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +97 -0
- endoreg_db/utils/video/ffmpeg_wrapper.py +217 -52
- endoreg_db/views/__init__.py +85 -173
- endoreg_db/views/ai/__init__.py +8 -0
- endoreg_db/views/ai/label.py +155 -0
- endoreg_db/views/anonymization/media_management.py +8 -7
- endoreg_db/views/anonymization/overview.py +97 -68
- endoreg_db/views/anonymization/validate.py +25 -21
- endoreg_db/views/media/__init__.py +5 -20
- endoreg_db/views/media/pdf_media.py +109 -65
- endoreg_db/views/media/sensitive_metadata.py +163 -148
- endoreg_db/views/meta/__init__.py +0 -8
- endoreg_db/views/misc/__init__.py +1 -7
- endoreg_db/views/misc/upload_views.py +94 -93
- endoreg_db/views/report/__init__.py +7 -0
- endoreg_db/views/{pdf → report}/reimport.py +45 -24
- endoreg_db/views/{pdf/pdf_stream.py → report/report_stream.py} +40 -32
- endoreg_db/views/requirement/lookup_store.py +22 -90
- endoreg_db/views/video/__init__.py +23 -22
- endoreg_db/views/video/correction.py +201 -172
- endoreg_db/views/video/reimport.py +1 -1
- endoreg_db/views/{media/video_segments.py → video/segments_crud.py} +75 -37
- endoreg_db/views/video/{video_meta.py → video_meta_stats.py} +2 -2
- endoreg_db/views/video/video_stream.py +7 -8
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/METADATA +2 -2
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/RECORD +217 -335
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/WHEEL +1 -1
- endoreg_db/data/_examples/disease.yaml +0 -55
- endoreg_db/data/_examples/disease_classification.yaml +0 -13
- endoreg_db/data/_examples/disease_classification_choice.yaml +0 -62
- endoreg_db/data/_examples/event.yaml +0 -64
- endoreg_db/data/_examples/examination.yaml +0 -72
- endoreg_db/data/_examples/finding/anatomy_colon.yaml +0 -128
- endoreg_db/data/_examples/finding/colonoscopy.yaml +0 -40
- endoreg_db/data/_examples/finding/colonoscopy_bowel_prep.yaml +0 -56
- endoreg_db/data/_examples/finding/complication.yaml +0 -16
- endoreg_db/data/_examples/finding/data.yaml +0 -105
- endoreg_db/data/_examples/finding/examination_setting.yaml +0 -16
- endoreg_db/data/_examples/finding/medication_related.yaml +0 -18
- endoreg_db/data/_examples/finding/outcome.yaml +0 -12
- endoreg_db/data/_examples/finding_classification/colonoscopy_bowel_preparation.yaml +0 -68
- endoreg_db/data/_examples/finding_classification/colonoscopy_jnet.yaml +0 -22
- endoreg_db/data/_examples/finding_classification/colonoscopy_kudo.yaml +0 -25
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_size.yaml +0 -68
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_location.yaml +0 -80
- endoreg_db/data/_examples/finding_classification/colonoscopy_lst.yaml +0 -21
- endoreg_db/data/_examples/finding_classification/colonoscopy_nice.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_paris.yaml +0 -26
- endoreg_db/data/_examples/finding_classification/colonoscopy_sano.yaml +0 -22
- endoreg_db/data/_examples/finding_classification/colonoscopy_summary.yaml +0 -53
- endoreg_db/data/_examples/finding_classification/complication_generic.yaml +0 -25
- endoreg_db/data/_examples/finding_classification/examination_setting_generic.yaml +0 -40
- endoreg_db/data/_examples/finding_classification/histology_colo.yaml +0 -51
- endoreg_db/data/_examples/finding_classification/intervention_required.yaml +0 -26
- endoreg_db/data/_examples/finding_classification/medication_related.yaml +0 -23
- endoreg_db/data/_examples/finding_classification/visualized.yaml +0 -33
- endoreg_db/data/_examples/finding_classification_choice/bowel_preparation.yaml +0 -78
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_lst.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_nice.yaml +0 -17
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_sano.yaml +0 -14
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
- endoreg_db/data/_examples/finding_classification_choice/colonoscopy_size.yaml +0 -82
- endoreg_db/data/_examples/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/complication_generic_types.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/examination_setting_generic_types.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/histology.yaml +0 -24
- endoreg_db/data/_examples/finding_classification_choice/histology_polyp.yaml +0 -20
- endoreg_db/data/_examples/finding_classification_choice/outcome.yaml +0 -19
- endoreg_db/data/_examples/finding_classification_choice/yes_no_na.yaml +0 -11
- endoreg_db/data/_examples/finding_classification_type/colonoscopy_basic.yaml +0 -48
- endoreg_db/data/_examples/finding_intervention/endoscopy.yaml +0 -43
- endoreg_db/data/_examples/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
- endoreg_db/data/_examples/finding_intervention/endoscopy_egd.yaml +0 -128
- endoreg_db/data/_examples/finding_intervention/endoscopy_ercp.yaml +0 -32
- endoreg_db/data/_examples/finding_intervention/endoscopy_eus_lower.yaml +0 -9
- endoreg_db/data/_examples/finding_intervention/endoscopy_eus_upper.yaml +0 -36
- endoreg_db/data/_examples/finding_intervention_type/endoscopy.yaml +0 -15
- endoreg_db/data/_examples/finding_type/data.yaml +0 -43
- endoreg_db/data/_examples/requirement/age.yaml +0 -26
- endoreg_db/data/_examples/requirement/gender.yaml +0 -25
- endoreg_db/data/_examples/requirement_set/01_endoscopy_generic.yaml +0 -48
- endoreg_db/data/_examples/requirement_set/colonoscopy_austria_screening.yaml +0 -57
- endoreg_db/data/_examples/requirement_set/endoscopy_bleeding_risk.yaml +0 -52
- endoreg_db/data/_examples/yaml_examples.xlsx +0 -0
- endoreg_db/data/finding/anatomy_colon.yaml +0 -128
- endoreg_db/data/finding/colonoscopy.yaml +0 -40
- endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +0 -56
- endoreg_db/data/finding/complication.yaml +0 -16
- endoreg_db/data/finding/data.yaml +0 -105
- endoreg_db/data/finding/examination_setting.yaml +0 -16
- endoreg_db/data/finding/medication_related.yaml +0 -18
- endoreg_db/data/finding/outcome.yaml +0 -12
- endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +0 -22
- endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +0 -25
- endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
- endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +0 -38
- endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_location.yaml +0 -49
- endoreg_db/data/finding_classification/colonoscopy_lst.yaml +0 -21
- endoreg_db/data/finding_classification/colonoscopy_nice.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_paris.yaml +0 -26
- endoreg_db/data/finding_classification/colonoscopy_sano.yaml +0 -22
- endoreg_db/data/finding_classification/colonoscopy_summary.yaml +0 -53
- endoreg_db/data/finding_classification/complication_generic.yaml +0 -25
- endoreg_db/data/finding_classification/examination_setting_generic.yaml +0 -40
- endoreg_db/data/finding_classification/histology_colo.yaml +0 -43
- endoreg_db/data/finding_classification/intervention_required.yaml +0 -26
- endoreg_db/data/finding_classification/medication_related.yaml +0 -23
- endoreg_db/data/finding_classification/visualized.yaml +0 -33
- endoreg_db/data/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
- endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
- endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
- endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +0 -15
- endoreg_db/data/finding_classification_choice/colon_lesion_nice.yaml +0 -17
- endoreg_db/data/finding_classification_choice/colon_lesion_paris.yaml +0 -57
- endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
- endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +0 -14
- endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
- endoreg_db/data/finding_classification_choice/colonoscopy_location.yaml +0 -229
- endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +0 -19
- endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +0 -82
- endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
- endoreg_db/data/finding_classification_choice/outcome.yaml +0 -19
- endoreg_db/data/finding_intervention/endoscopy.yaml +0 -43
- endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
- endoreg_db/data/finding_intervention/endoscopy_egd.yaml +0 -128
- endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +0 -32
- endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +0 -9
- endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +0 -36
- endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +0 -79
- endoreg_db/data/requirement/age.yaml +0 -26
- endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +0 -45
- endoreg_db/data/requirement/disease_cardiovascular.yaml +0 -79
- endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +0 -41
- endoreg_db/data/requirement/disease_hepatology.yaml +0 -12
- endoreg_db/data/requirement/disease_misc.yaml +0 -12
- endoreg_db/data/requirement/disease_renal.yaml +0 -96
- endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +0 -59
- endoreg_db/data/requirement/event_cardiology.yaml +0 -251
- endoreg_db/data/requirement/event_requirements.yaml +0 -145
- endoreg_db/data/requirement/finding_colon_polyp.yaml +0 -50
- endoreg_db/data/requirement/gender.yaml +0 -25
- endoreg_db/data/requirement/lab_value.yaml +0 -441
- endoreg_db/data/requirement/medication.yaml +0 -93
- endoreg_db/data/requirement_operator/age.yaml +0 -13
- endoreg_db/data/requirement_operator/lab_operators.yaml +0 -129
- endoreg_db/data/requirement_operator/model_operators.yaml +0 -96
- endoreg_db/management/commands/init_default_ai_model.py +0 -112
- endoreg_db/management/commands/reset_celery_schedule.py +0 -9
- endoreg_db/management/commands/validate_video.py +0 -204
- endoreg_db/migrations/0002_requirementset_depends_on.py +0 -18
- endoreg_db/migrations/_old/0001_initial.py +0 -1857
- endoreg_db/migrations/_old/0002_add_video_correction_models.py +0 -52
- endoreg_db/migrations/_old/0003_add_center_display_name.py +0 -30
- endoreg_db/migrations/_old/0004_employee_city_employee_post_code_employee_street_and_more.py +0 -68
- endoreg_db/migrations/_old/0004_remove_casetemplate_rules_and_more.py +0 -77
- endoreg_db/migrations/_old/0005_merge_20251111_1003.py +0 -14
- endoreg_db/migrations/_old/0006_sensitivemeta_anonymized_text_and_more.py +0 -68
- endoreg_db/migrations/_old/0007_remove_rule_attribute_dtype_remove_rule_rule_type_and_more.py +0 -89
- endoreg_db/migrations/_old/0008_remove_event_event_classification_and_more.py +0 -27
- endoreg_db/migrations/_old/0009_alter_modelmeta_options_and_more.py +0 -21
- endoreg_db/renames.yml +0 -8
- endoreg_db/serializers/_old/raw_pdf_meta_validation.py +0 -223
- endoreg_db/serializers/_old/raw_video_meta_validation.py +0 -179
- endoreg_db/serializers/_old/video.py +0 -71
- endoreg_db/serializers/meta/pdf_file_meta_extraction.py +0 -115
- endoreg_db/serializers/meta/report_meta.py +0 -53
- endoreg_db/serializers/report/__init__.py +0 -9
- endoreg_db/serializers/report/mixins.py +0 -45
- endoreg_db/serializers/report/report.py +0 -105
- endoreg_db/serializers/report/report_list.py +0 -22
- endoreg_db/serializers/report/secure_file_url.py +0 -26
- endoreg_db/services/requirements_object.py +0 -147
- endoreg_db/services/storage_aware_video_processor.py +0 -370
- endoreg_db/urls/files.py +0 -6
- endoreg_db/urls/label_video_segment_validate.py +0 -33
- endoreg_db/urls/label_video_segments.py +0 -46
- endoreg_db/views/label/__init__.py +0 -5
- endoreg_db/views/label/label.py +0 -15
- endoreg_db/views/label_video_segment/__init__.py +0 -16
- endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +0 -44
- endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +0 -50
- endoreg_db/views/label_video_segment/label_video_segment.py +0 -77
- endoreg_db/views/label_video_segment/label_video_segment_by_label.py +0 -174
- endoreg_db/views/label_video_segment/label_video_segment_detail.py +0 -73
- endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +0 -46
- endoreg_db/views/label_video_segment/validate.py +0 -226
- endoreg_db/views/media/segments.py +0 -71
- endoreg_db/views/meta/available_files_list.py +0 -146
- endoreg_db/views/meta/report_meta.py +0 -53
- endoreg_db/views/meta/sensitive_meta_detail.py +0 -85
- endoreg_db/views/misc/secure_file_serving_view.py +0 -80
- endoreg_db/views/misc/secure_file_url_view.py +0 -84
- endoreg_db/views/misc/secure_url_validate.py +0 -79
- endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +0 -164
- endoreg_db/views/patient_finding_location/__init__.py +0 -5
- endoreg_db/views/patient_finding_location/pfl_create.py +0 -70
- endoreg_db/views/patient_finding_morphology/__init__.py +0 -5
- endoreg_db/views/patient_finding_morphology/pfm_create.py +0 -70
- endoreg_db/views/pdf/__init__.py +0 -8
- endoreg_db/views/video/segmentation.py +0 -274
- endoreg_db/views/video/task_status.py +0 -49
- endoreg_db/views/video/timeline.py +0 -46
- endoreg_db/views/video/video_analyze.py +0 -52
- /endoreg_db/data/requirement/{colon_polyp_intervention.yaml → old/colon_polyp_intervention.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/colonoscopy_baseline_austria.yaml +0 -0
- /endoreg_db/data/requirement/{coloreg_colon_polyp.yaml → old/coloreg_colon_polyp.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_cardiovascular.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_classification_choice_cardiovascular.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_hepatology.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_misc.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_renal.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/endoscopy_bleeding_risk.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/event_cardiology.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/event_requirements.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/finding_colon_polyp.yaml +0 -0
- /endoreg_db/{urls/sensitive_meta.py → data/requirement/old/gender.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/lab_value.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/medication.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/age.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/lab_operators.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/model_operators.yaml +0 -0
- /endoreg_db/{views/pdf/pdf_stream_views.py → import_files/pseudonymization/__init__.py} +0 -0
- /endoreg_db/utils/requirement_operator_logic/{lab_value_operators.py → _old/lab_value_operators.py} +0 -0
- /endoreg_db/utils/requirement_operator_logic/{model_evaluators.py → _old/model_evaluators.py} +0 -0
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -6,8 +6,8 @@ from typing import Optional
|
|
|
6
6
|
from django.db import transaction
|
|
7
7
|
|
|
8
8
|
from endoreg_db.models import RawPdfFile, VideoFile
|
|
9
|
-
from endoreg_db.services.
|
|
10
|
-
from endoreg_db.services.
|
|
9
|
+
from endoreg_db.services.__old.video_import import VideoImportService
|
|
10
|
+
from endoreg_db.services.report_import import ReportImportService
|
|
11
11
|
from endoreg_db.utils.paths import STORAGE_DIR
|
|
12
12
|
from endoreg_db.utils.storage import ensure_local_file, file_exists
|
|
13
13
|
|
|
@@ -29,7 +29,7 @@ class AnonymizationService:
|
|
|
29
29
|
"""
|
|
30
30
|
self.project_root: Path = project_root or STORAGE_DIR
|
|
31
31
|
self.video_service = VideoImportService()
|
|
32
|
-
self.pdf_service =
|
|
32
|
+
self.pdf_service = ReportImportService()
|
|
33
33
|
|
|
34
34
|
# ---------- READ ----------------------------------------------------
|
|
35
35
|
@staticmethod
|
|
@@ -40,20 +40,32 @@ class AnonymizationService:
|
|
|
40
40
|
Returns:
|
|
41
41
|
dict or None: A dictionary containing the file's media type and anonymization status if found, or None if no matching file exists.
|
|
42
42
|
"""
|
|
43
|
-
vf =
|
|
43
|
+
vf = (
|
|
44
|
+
VideoFile.objects.select_related("state", "sensitive_meta")
|
|
45
|
+
.filter(pk=file_id)
|
|
46
|
+
.first()
|
|
47
|
+
)
|
|
44
48
|
if vf:
|
|
45
49
|
return {
|
|
46
50
|
"mediaType": "video",
|
|
47
|
-
"anonymizationStatus": vf.state.anonymization_status
|
|
51
|
+
"anonymizationStatus": vf.state.anonymization_status
|
|
52
|
+
if vf.state
|
|
53
|
+
else "not_started",
|
|
48
54
|
"fileExists": file_exists(vf.raw_file),
|
|
49
55
|
"uuid": str(vf.uuid) if vf.uuid else None,
|
|
50
56
|
}
|
|
51
57
|
|
|
52
|
-
pdf =
|
|
58
|
+
pdf = (
|
|
59
|
+
RawPdfFile.objects.select_related("state", "sensitive_meta")
|
|
60
|
+
.filter(pk=file_id)
|
|
61
|
+
.first()
|
|
62
|
+
)
|
|
53
63
|
if pdf:
|
|
54
64
|
return {
|
|
55
65
|
"mediaType": "pdf",
|
|
56
|
-
"anonymizationStatus": pdf.state.anonymization_status
|
|
66
|
+
"anonymizationStatus": pdf.state.anonymization_status
|
|
67
|
+
if pdf.state
|
|
68
|
+
else "not_started",
|
|
57
69
|
"fileExists": file_exists(pdf.file),
|
|
58
70
|
"hash": pdf.pdf_hash,
|
|
59
71
|
}
|
|
@@ -72,7 +84,13 @@ class AnonymizationService:
|
|
|
72
84
|
str or None: Media type if successful, None if file not found
|
|
73
85
|
"""
|
|
74
86
|
# Try VideoFile first
|
|
75
|
-
vf =
|
|
87
|
+
vf = (
|
|
88
|
+
VideoFile.objects.select_related(
|
|
89
|
+
"state", "sensitive_meta", "center", "video_meta__processor"
|
|
90
|
+
)
|
|
91
|
+
.filter(pk=file_id)
|
|
92
|
+
.first()
|
|
93
|
+
)
|
|
76
94
|
if vf:
|
|
77
95
|
try:
|
|
78
96
|
logger.info(f"Starting video anonymization for VideoFile ID: {file_id}")
|
|
@@ -85,7 +103,9 @@ class AnonymizationService:
|
|
|
85
103
|
# Get file path
|
|
86
104
|
file_path = vf.get_raw_file_path()
|
|
87
105
|
if not file_path or not Path(file_path).exists():
|
|
88
|
-
logger.error(
|
|
106
|
+
logger.error(
|
|
107
|
+
f"Raw file not found for VideoFile {file_id}: {file_path}"
|
|
108
|
+
)
|
|
89
109
|
return None
|
|
90
110
|
|
|
91
111
|
# Get processor name
|
|
@@ -106,25 +126,37 @@ class AnonymizationService:
|
|
|
106
126
|
# Use VideoImportService for anonymization
|
|
107
127
|
safe_processor_name = processor_name or "unknown_processor"
|
|
108
128
|
self.video_service.import_and_anonymize(
|
|
109
|
-
file_path=file_path,
|
|
129
|
+
file_path=file_path,
|
|
130
|
+
center_name=center_name,
|
|
131
|
+
processor_name=safe_processor_name,
|
|
132
|
+
save_video=True,
|
|
133
|
+
delete_source=False,
|
|
110
134
|
)
|
|
111
135
|
|
|
112
|
-
logger.info(
|
|
136
|
+
logger.info(
|
|
137
|
+
f"Video anonymization completed for VideoFile ID: {file_id}"
|
|
138
|
+
)
|
|
113
139
|
return "video"
|
|
114
140
|
|
|
115
141
|
except Exception as e:
|
|
116
142
|
logger.error(f"Failed to anonymize VideoFile {file_id}: {e}")
|
|
117
143
|
# Mark as failed if state exists
|
|
118
144
|
if vf.state:
|
|
119
|
-
vf.state.processing_started =
|
|
145
|
+
vf.state.processing_started = (
|
|
146
|
+
False # Mark processing as not started due to failure
|
|
147
|
+
)
|
|
120
148
|
vf.state.save(update_fields=["processing_started"])
|
|
121
149
|
raise
|
|
122
150
|
|
|
123
151
|
# Try RawPdfFile
|
|
124
|
-
pdf =
|
|
152
|
+
pdf = (
|
|
153
|
+
RawPdfFile.objects.select_related("state", "sensitive_meta", "center")
|
|
154
|
+
.filter(pk=file_id)
|
|
155
|
+
.first()
|
|
156
|
+
)
|
|
125
157
|
if pdf:
|
|
126
158
|
try:
|
|
127
|
-
logger.info(f"Starting
|
|
159
|
+
logger.info(f"Starting report processing for RawPdfFile ID: {file_id}")
|
|
128
160
|
|
|
129
161
|
# Check if already processed
|
|
130
162
|
if pdf.state and getattr(pdf.state, "anonymized", False):
|
|
@@ -133,11 +165,13 @@ class AnonymizationService:
|
|
|
133
165
|
|
|
134
166
|
file_field = pdf.file
|
|
135
167
|
if not file_field or not file_field.name:
|
|
136
|
-
logger.error(f"
|
|
168
|
+
logger.error(f"report file not found for RawPdfFile {file_id}")
|
|
137
169
|
return None
|
|
138
170
|
|
|
139
171
|
if not file_exists(file_field):
|
|
140
|
-
logger.error(
|
|
172
|
+
logger.error(
|
|
173
|
+
"report file missing from storage for RawPdfFile %s", file_id
|
|
174
|
+
)
|
|
141
175
|
return None
|
|
142
176
|
|
|
143
177
|
# Get center name
|
|
@@ -147,9 +181,6 @@ class AnonymizationService:
|
|
|
147
181
|
if pdf.state:
|
|
148
182
|
pdf.state.processing_started = True
|
|
149
183
|
pdf.state.save(update_fields=["processing_started"])
|
|
150
|
-
elif pdf.sensitive_meta and hasattr(pdf.sensitive_meta, "anonymization_started"):
|
|
151
|
-
pdf.sensitive_meta.anonymization_started = True
|
|
152
|
-
pdf.sensitive_meta.save(update_fields=["anonymization_started"])
|
|
153
184
|
|
|
154
185
|
with ensure_local_file(file_field) as local_path:
|
|
155
186
|
self.pdf_service.import_and_anonymize(
|
|
@@ -157,17 +188,17 @@ class AnonymizationService:
|
|
|
157
188
|
center_name=center_name,
|
|
158
189
|
)
|
|
159
190
|
|
|
160
|
-
logger.info(f"
|
|
191
|
+
logger.info(f"report processing completed for RawPdfFile ID: {file_id}")
|
|
161
192
|
return "pdf"
|
|
162
193
|
|
|
163
194
|
except Exception as e:
|
|
164
195
|
logger.error(f"Failed to process RawPdfFile {file_id}: {e}")
|
|
165
196
|
# Mark as failed if state exists
|
|
166
197
|
if pdf.state and hasattr(pdf.state, "processing_failed"):
|
|
167
|
-
pdf.state.processing_failed = True
|
|
168
198
|
pdf.state.save(update_fields=["processing_failed"])
|
|
169
|
-
elif pdf.sensitive_meta and hasattr(
|
|
170
|
-
pdf.sensitive_meta
|
|
199
|
+
elif pdf.sensitive_meta and hasattr(
|
|
200
|
+
pdf.sensitive_meta, "processing_failed"
|
|
201
|
+
):
|
|
171
202
|
pdf.sensitive_meta.save(update_fields=["processing_failed"])
|
|
172
203
|
raise
|
|
173
204
|
|
|
@@ -196,7 +227,9 @@ class AnonymizationService:
|
|
|
196
227
|
@staticmethod
|
|
197
228
|
def list_items():
|
|
198
229
|
video_files = VideoFile.objects.select_related("state").all()
|
|
199
|
-
pdf_files = RawPdfFile.objects.select_related(
|
|
230
|
+
pdf_files = RawPdfFile.objects.select_related(
|
|
231
|
+
"state"
|
|
232
|
+
).all() # was sensitive_meta
|
|
200
233
|
|
|
201
234
|
data = []
|
|
202
235
|
for vf in video_files:
|
|
@@ -204,7 +237,9 @@ class AnonymizationService:
|
|
|
204
237
|
{
|
|
205
238
|
"id": vf.pk,
|
|
206
239
|
"mediaType": "video",
|
|
207
|
-
"anonymizationStatus": vf.state.anonymization_status
|
|
240
|
+
"anonymizationStatus": vf.state.anonymization_status
|
|
241
|
+
if vf.state
|
|
242
|
+
else "not_started",
|
|
208
243
|
"createdAt": vf.date_created,
|
|
209
244
|
"updatedAt": vf.date_modified,
|
|
210
245
|
}
|
|
@@ -215,7 +250,9 @@ class AnonymizationService:
|
|
|
215
250
|
{
|
|
216
251
|
"id": pdf.pk,
|
|
217
252
|
"mediaType": "pdf",
|
|
218
|
-
"anonymizationStatus": pdf.state.anonymization_status
|
|
253
|
+
"anonymizationStatus": pdf.state.anonymization_status
|
|
254
|
+
if pdf.state
|
|
255
|
+
else "not_started",
|
|
219
256
|
"createdAt": pdf.date_created,
|
|
220
257
|
"updatedAt": pdf.date_modified,
|
|
221
258
|
}
|
|
@@ -148,14 +148,14 @@ def build_initial_lookup(
|
|
|
148
148
|
Dictionary containing initial lookup data with the following keys:
|
|
149
149
|
- patient_examination_id: ID of the patient examination
|
|
150
150
|
- requirement_sets: List of available requirement sets with metadata
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
151
|
+
- available_findings: List of finding IDs available for the examination
|
|
152
|
+
- required_findings: List of finding IDs that are required by defaults
|
|
153
|
+
- requirement_defaults: Default findings per requirement
|
|
154
|
+
- classification_choices: Available classification choices per requirement
|
|
155
|
+
- requirements_by_set: Empty dict (populated on selection)
|
|
156
|
+
- requirement_status: Empty dict (computed on evaluation)
|
|
157
|
+
- requirement_set_status: Empty dict (computed on evaluation)
|
|
158
|
+
- suggested_actions: Empty dict (computed on evaluation)
|
|
159
159
|
"""
|
|
160
160
|
# Available + required findings
|
|
161
161
|
available_findings = (
|
|
@@ -202,15 +202,15 @@ def build_initial_lookup(
|
|
|
202
202
|
return {
|
|
203
203
|
"patient_examination_id": pe.id,
|
|
204
204
|
"requirement_sets": requirement_sets,
|
|
205
|
-
"
|
|
206
|
-
"
|
|
207
|
-
"
|
|
208
|
-
"
|
|
205
|
+
"available_findings": available_findings,
|
|
206
|
+
"required_findings": required_findings,
|
|
207
|
+
"requirement_defaults": req_defaults,
|
|
208
|
+
"classification_choices": cls_choices,
|
|
209
209
|
# New fields for expanded lookup payload
|
|
210
|
-
"
|
|
211
|
-
"
|
|
212
|
-
"
|
|
213
|
-
"
|
|
210
|
+
"requirements_by_set": {}, # Will be populated when requirement sets are selected
|
|
211
|
+
"requirement_status": {}, # Status of each requirement (satisfied/unsatisfied)
|
|
212
|
+
"requirement_set_status": {}, # Status of each requirement set
|
|
213
|
+
"suggested_actions": {}, # Suggested actions to satisfy requirements
|
|
214
214
|
# You can add "selectedRequirementSetIds" as the user makes choices
|
|
215
215
|
}
|
|
216
216
|
|
|
@@ -260,12 +260,12 @@ def recompute_lookup(token: str) -> Dict[str, Any]:
|
|
|
260
260
|
|
|
261
261
|
Returns:
|
|
262
262
|
Dictionary of updates containing:
|
|
263
|
-
-
|
|
264
|
-
-
|
|
265
|
-
-
|
|
266
|
-
-
|
|
267
|
-
-
|
|
268
|
-
-
|
|
263
|
+
- requirements_by_set: Requirements grouped by selected requirement sets
|
|
264
|
+
- requirement_status: Boolean status for each requirement
|
|
265
|
+
- requirement_set_status: Boolean status for each requirement set
|
|
266
|
+
- requirement_defaults: Default findings per requirement
|
|
267
|
+
- classification_choices: Available choices per requirement
|
|
268
|
+
- suggested_actions: UI actions to satisfy unsatisfied requirements
|
|
269
269
|
|
|
270
270
|
Raises:
|
|
271
271
|
ValueError: If lookup data is invalid or patient examination not found
|
|
@@ -396,12 +396,12 @@ def recompute_lookup(token: str) -> Dict[str, Any]:
|
|
|
396
396
|
# if you implement server-side simulation later, adjust requirement_status with staged result here
|
|
397
397
|
|
|
398
398
|
updates = {
|
|
399
|
-
"
|
|
400
|
-
"
|
|
401
|
-
"
|
|
402
|
-
"
|
|
403
|
-
"
|
|
404
|
-
"
|
|
399
|
+
"requirements_by_set": requirements_by_set,
|
|
400
|
+
"requirement_status": requirement_status,
|
|
401
|
+
"requirement_set_status": set_status,
|
|
402
|
+
"requirement_defaults": req_defaults, # keep your existing key
|
|
403
|
+
"classification_choices": cls_choices, # keep your existing key
|
|
404
|
+
"suggested_actions": suggested_actions, # new
|
|
405
405
|
}
|
|
406
406
|
|
|
407
407
|
logger.debug(
|
|
@@ -173,8 +173,8 @@ class LookupStore:
|
|
|
173
173
|
# Check if required fields are present
|
|
174
174
|
required_fields = [
|
|
175
175
|
"patient_examination_id",
|
|
176
|
-
"
|
|
177
|
-
"
|
|
176
|
+
"requirements_by_set",
|
|
177
|
+
"requirement_status",
|
|
178
178
|
]
|
|
179
179
|
missing_fields = [field for field in required_fields if field not in data]
|
|
180
180
|
|