endoreg-db 0.5.2__py3-none-any.whl → 0.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of endoreg-db might be problematic. Click here for more details.
- endoreg_db/admin.py +90 -1
- endoreg_db/urls.py +173 -0
- endoreg_db/views.py +0 -3
- endoreg_db-0.6.0.dist-info/METADATA +151 -0
- endoreg_db-0.6.0.dist-info/RECORD +11 -0
- {endoreg_db-0.5.2.dist-info → endoreg_db-0.6.0.dist-info}/WHEEL +2 -1
- endoreg_db-0.6.0.dist-info/top_level.txt +1 -0
- endoreg_db/data/__init__.py +0 -72
- endoreg_db/data/active_model/data.yaml +0 -3
- endoreg_db/data/agl_service/data.yaml +0 -19
- endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +0 -167
- endoreg_db/data/case_template/rule/01_patient-set-age.yaml +0 -8
- endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +0 -9
- endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +0 -23
- endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +0 -19
- endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +0 -19
- endoreg_db/data/case_template/rule/19_create_patient.yaml +0 -17
- endoreg_db/data/case_template/rule_type/base_types.yaml +0 -35
- endoreg_db/data/case_template/rule_value/.init +0 -0
- endoreg_db/data/case_template/rule_value_type/base_types.yaml +0 -59
- endoreg_db/data/case_template/template/base.yaml +0 -8
- endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +0 -3
- endoreg_db/data/case_template/tmp/_rule_value +0 -13
- endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +0 -21
- endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +0 -10
- endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +0 -7
- endoreg_db/data/center/data.yaml +0 -60
- endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +0 -144
- endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +0 -48
- endoreg_db/data/disease/cardiovascular.yaml +0 -37
- endoreg_db/data/disease/hepatology.yaml +0 -5
- endoreg_db/data/disease/misc.yaml +0 -6
- endoreg_db/data/disease/renal.yaml +0 -5
- endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +0 -6
- endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +0 -6
- endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +0 -41
- endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +0 -20
- endoreg_db/data/distribution/date/patient.yaml +0 -7
- endoreg_db/data/distribution/multiple_categorical/.init +0 -0
- endoreg_db/data/distribution/numeric/.init +0 -0
- endoreg_db/data/distribution/single_categorical/patient.yaml +0 -7
- endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +0 -132
- endoreg_db/data/endoscope_type/data.yaml +0 -11
- endoreg_db/data/endoscopy_processor/data.yaml +0 -47
- endoreg_db/data/event/cardiology.yaml +0 -28
- endoreg_db/data/event/neurology.yaml +0 -14
- endoreg_db/data/event/surgery.yaml +0 -13
- endoreg_db/data/event/thrombembolism.yaml +0 -20
- endoreg_db/data/examination/examinations/data.yaml +0 -66
- endoreg_db/data/examination/time/data.yaml +0 -48
- endoreg_db/data/examination/time-type/data.yaml +0 -8
- endoreg_db/data/examination/type/data.yaml +0 -5
- endoreg_db/data/gender/data.yaml +0 -18
- endoreg_db/data/information_source/data.yaml +0 -30
- endoreg_db/data/information_source/medication.yaml +0 -6
- endoreg_db/data/lab_value/cardiac_enzymes.yaml +0 -31
- endoreg_db/data/lab_value/coagulation.yaml +0 -49
- endoreg_db/data/lab_value/electrolytes.yaml +0 -190
- endoreg_db/data/lab_value/gastrointestinal_function.yaml +0 -121
- endoreg_db/data/lab_value/hematology.yaml +0 -169
- endoreg_db/data/lab_value/hormones.yaml +0 -53
- endoreg_db/data/lab_value/lipids.yaml +0 -44
- endoreg_db/data/lab_value/misc.yaml +0 -30
- endoreg_db/data/lab_value/renal_function.yaml +0 -11
- endoreg_db/data/label/label/data.yaml +0 -62
- endoreg_db/data/label/label-set/data.yaml +0 -18
- endoreg_db/data/label/label-type/data.yaml +0 -7
- endoreg_db/data/log_type/data.yaml +0 -57
- endoreg_db/data/material/material.yaml +0 -91
- endoreg_db/data/medication/anticoagulation.yaml +0 -65
- endoreg_db/data/medication/tah.yaml +0 -70
- endoreg_db/data/medication_indication/anticoagulation.yaml +0 -120
- endoreg_db/data/medication_indication_type/data.yaml +0 -11
- endoreg_db/data/medication_indication_type/thrombembolism.yaml +0 -41
- endoreg_db/data/medication_intake_time/base.yaml +0 -31
- endoreg_db/data/medication_schedule/apixaban.yaml +0 -95
- endoreg_db/data/medication_schedule/ass.yaml +0 -12
- endoreg_db/data/medication_schedule/enoxaparin.yaml +0 -26
- endoreg_db/data/model_type/data.yaml +0 -7
- endoreg_db/data/network_device/data.yaml +0 -29
- endoreg_db/data/network_device_type/data.yaml +0 -12
- endoreg_db/data/patient_lab_sample_type/generic.yaml +0 -6
- endoreg_db/data/pdf_type/data.yaml +0 -28
- endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +0 -66
- endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +0 -33
- endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +0 -308
- endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +0 -88
- endoreg_db/data/profession/data.yaml +0 -70
- endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +0 -55
- endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +0 -26
- endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +0 -19
- endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +0 -15
- 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 +0 -12
- endoreg_db/data/unit/concentration.yaml +0 -92
- endoreg_db/data/unit/data.yaml +0 -17
- endoreg_db/data/unit/length.yaml +0 -31
- endoreg_db/data/unit/misc.yaml +0 -20
- endoreg_db/data/unit/rate.yaml +0 -6
- endoreg_db/data/unit/time.yaml +0 -13
- endoreg_db/data/unit/volume.yaml +0 -35
- endoreg_db/data/unit/weight.yaml +0 -38
- endoreg_db/data/waste/data.yaml +0 -12
- endoreg_db/forms/__init__.py +0 -3
- endoreg_db/forms/questionnaires/__init__.py +0 -1
- endoreg_db/forms/questionnaires/tto_questionnaire.py +0 -23
- endoreg_db/forms/settings/__init__.py +0 -8
- endoreg_db/forms/unit.py +0 -6
- endoreg_db/management/commands/_load_model_template.py +0 -41
- endoreg_db/management/commands/delete_all.py +0 -18
- endoreg_db/management/commands/delete_legacy_images.py +0 -19
- endoreg_db/management/commands/delete_legacy_videos.py +0 -17
- endoreg_db/management/commands/extract_legacy_video_frames.py +0 -18
- endoreg_db/management/commands/fetch_legacy_image_dataset.py +0 -32
- endoreg_db/management/commands/fix_auth_permission.py +0 -20
- endoreg_db/management/commands/import_legacy_images.py +0 -94
- endoreg_db/management/commands/import_legacy_videos.py +0 -76
- endoreg_db/management/commands/load_active_model_data.py +0 -45
- endoreg_db/management/commands/load_ai_model_data.py +0 -45
- endoreg_db/management/commands/load_base_db_data.py +0 -136
- endoreg_db/management/commands/load_center_data.py +0 -43
- endoreg_db/management/commands/load_disease_classification_choices_data.py +0 -41
- endoreg_db/management/commands/load_disease_classification_data.py +0 -41
- endoreg_db/management/commands/load_disease_data.py +0 -40
- endoreg_db/management/commands/load_distribution_data.py +0 -66
- endoreg_db/management/commands/load_endoscope_type_data.py +0 -45
- endoreg_db/management/commands/load_endoscopy_processor_data.py +0 -45
- endoreg_db/management/commands/load_event_data.py +0 -41
- endoreg_db/management/commands/load_examination_data.py +0 -75
- endoreg_db/management/commands/load_g_play_data.py +0 -113
- endoreg_db/management/commands/load_gender_data.py +0 -44
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +0 -133
- endoreg_db/management/commands/load_information_source.py +0 -45
- endoreg_db/management/commands/load_lab_value_data.py +0 -50
- endoreg_db/management/commands/load_label_data.py +0 -67
- endoreg_db/management/commands/load_logging_data.py +0 -39
- endoreg_db/management/commands/load_medication_data.py +0 -41
- endoreg_db/management/commands/load_medication_indication_data.py +0 -63
- endoreg_db/management/commands/load_medication_indication_type_data.py +0 -41
- endoreg_db/management/commands/load_medication_intake_time_data.py +0 -41
- endoreg_db/management/commands/load_medication_schedule_data.py +0 -55
- endoreg_db/management/commands/load_network_data.py +0 -57
- endoreg_db/management/commands/load_pdf_type_data.py +0 -61
- endoreg_db/management/commands/load_profession_data.py +0 -44
- endoreg_db/management/commands/load_report_reader_flag.py +0 -46
- endoreg_db/management/commands/load_unit_data.py +0 -46
- endoreg_db/management/commands/load_user_groups.py +0 -28
- endoreg_db/management/commands/register_ai_model.py +0 -64
- endoreg_db/management/commands/reset_celery_schedule.py +0 -9
- endoreg_db/migrations/0001_initial.py +0 -1567
- endoreg_db/migrations/0002_anonymizedimagelabel_anonymousimageannotation_and_more.py +0 -55
- endoreg_db/migrations/0003_anonymousimageannotation_original_image_url_and_more.py +0 -39
- endoreg_db/migrations/0004_alter_rawpdffile_file.py +0 -20
- endoreg_db/migrations/0005_uploadedfile_alter_rawpdffile_file_anonymizedfile.py +0 -40
- endoreg_db/migrations/0006_alter_rawpdffile_file.py +0 -20
- endoreg_db/migrations/0007_networkdevicelogentry_datetime_and_more.py +0 -43
- endoreg_db/migrations/0008_networkdevicelogentry_aglnet_ip_and_more.py +0 -28
- endoreg_db/migrations/0009_alter_networkdevicelogentry_vpn_service_status.py +0 -18
- endoreg_db/migrations/0010_remove_networkdevicelogentry_hostname.py +0 -17
- endoreg_db/migrations/__init__.py +0 -0
- endoreg_db/models/__init__.py +0 -73
- endoreg_db/models/ai_model/__init__.py +0 -3
- endoreg_db/models/ai_model/active_model.py +0 -9
- endoreg_db/models/ai_model/model_meta.py +0 -24
- endoreg_db/models/ai_model/model_type.py +0 -26
- endoreg_db/models/ai_model/utils.py +0 -8
- endoreg_db/models/annotation/__init__.py +0 -3
- endoreg_db/models/annotation/anonymized_image_annotation.py +0 -60
- endoreg_db/models/annotation/binary_classification_annotation_task.py +0 -80
- endoreg_db/models/annotation/image_classification.py +0 -27
- endoreg_db/models/case_template/__init__.py +0 -6
- endoreg_db/models/case_template/case_template.py +0 -81
- endoreg_db/models/case_template/case_template_rule.py +0 -276
- endoreg_db/models/case_template/case_template_rule_value.py +0 -73
- endoreg_db/models/case_template/case_template_type.py +0 -28
- endoreg_db/models/center/__init__.py +0 -4
- endoreg_db/models/center/center.py +0 -25
- endoreg_db/models/center/center_product.py +0 -34
- endoreg_db/models/center/center_resource.py +0 -19
- endoreg_db/models/center/center_waste.py +0 -11
- endoreg_db/models/data_file/__init__.py +0 -6
- endoreg_db/models/data_file/base_classes/__init__.py +0 -2
- endoreg_db/models/data_file/base_classes/abstract_frame.py +0 -51
- endoreg_db/models/data_file/base_classes/abstract_video.py +0 -201
- endoreg_db/models/data_file/frame.py +0 -45
- endoreg_db/models/data_file/import_classes/__init__.py +0 -32
- endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +0 -35
- endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +0 -28
- endoreg_db/models/data_file/import_classes/processing_functions/video.py +0 -260
- endoreg_db/models/data_file/import_classes/raw_pdf.py +0 -188
- endoreg_db/models/data_file/import_classes/raw_video.py +0 -343
- endoreg_db/models/data_file/metadata/__init__.py +0 -3
- endoreg_db/models/data_file/metadata/pdf_meta.py +0 -70
- endoreg_db/models/data_file/metadata/sensitive_meta.py +0 -31
- endoreg_db/models/data_file/metadata/video_meta.py +0 -133
- endoreg_db/models/data_file/report_file.py +0 -89
- endoreg_db/models/data_file/video/__init__.py +0 -7
- endoreg_db/models/data_file/video/import_meta.py +0 -25
- endoreg_db/models/data_file/video/video.py +0 -25
- endoreg_db/models/data_file/video_segment.py +0 -107
- endoreg_db/models/disease.py +0 -56
- endoreg_db/models/emission/__init__.py +0 -1
- endoreg_db/models/emission/emission_factor.py +0 -20
- endoreg_db/models/event.py +0 -22
- endoreg_db/models/examination/__init__.py +0 -4
- endoreg_db/models/examination/examination.py +0 -26
- endoreg_db/models/examination/examination_time.py +0 -27
- endoreg_db/models/examination/examination_time_type.py +0 -24
- endoreg_db/models/examination/examination_type.py +0 -18
- endoreg_db/models/hardware/__init__.py +0 -2
- endoreg_db/models/hardware/endoscope.py +0 -44
- endoreg_db/models/hardware/endoscopy_processor.py +0 -143
- endoreg_db/models/information_source.py +0 -29
- endoreg_db/models/label/__init__.py +0 -1
- endoreg_db/models/label/label.py +0 -84
- endoreg_db/models/laboratory/__init__.py +0 -1
- endoreg_db/models/laboratory/lab_value.py +0 -102
- endoreg_db/models/legacy_data/__init__.py +0 -3
- endoreg_db/models/legacy_data/image.py +0 -34
- endoreg_db/models/logging/__init__.py +0 -4
- endoreg_db/models/logging/agl_service.py +0 -19
- endoreg_db/models/logging/base.py +0 -22
- endoreg_db/models/logging/log_type.py +0 -23
- endoreg_db/models/logging/network_device.py +0 -27
- endoreg_db/models/medication/__init__.py +0 -1
- endoreg_db/models/medication/medication.py +0 -148
- endoreg_db/models/network/__init__.py +0 -3
- endoreg_db/models/network/agl_service.py +0 -38
- endoreg_db/models/network/network_device.py +0 -53
- endoreg_db/models/network/network_device_type.py +0 -23
- endoreg_db/models/other/__init__.py +0 -5
- endoreg_db/models/other/distribution.py +0 -215
- endoreg_db/models/other/material.py +0 -16
- endoreg_db/models/other/resource.py +0 -18
- endoreg_db/models/other/transport_route.py +0 -21
- endoreg_db/models/other/waste.py +0 -20
- endoreg_db/models/patient_examination/__init__.py +0 -35
- endoreg_db/models/permissions/__init__.py +0 -44
- endoreg_db/models/persons/__init__.py +0 -7
- endoreg_db/models/persons/examiner/__init__.py +0 -2
- endoreg_db/models/persons/examiner/examiner.py +0 -16
- endoreg_db/models/persons/examiner/examiner_type.py +0 -2
- endoreg_db/models/persons/first_name.py +0 -18
- endoreg_db/models/persons/gender.py +0 -22
- endoreg_db/models/persons/last_name.py +0 -20
- endoreg_db/models/persons/patient/__init__.py +0 -8
- endoreg_db/models/persons/patient/case/__init__.py +0 -0
- endoreg_db/models/persons/patient/case/case.py +0 -30
- endoreg_db/models/persons/patient/patient.py +0 -216
- endoreg_db/models/persons/patient/patient_disease.py +0 -16
- endoreg_db/models/persons/patient/patient_event.py +0 -22
- endoreg_db/models/persons/patient/patient_lab_sample.py +0 -106
- endoreg_db/models/persons/patient/patient_lab_value.py +0 -176
- endoreg_db/models/persons/patient/patient_medication.py +0 -44
- endoreg_db/models/persons/patient/patient_medication_schedule.py +0 -28
- endoreg_db/models/persons/person.py +0 -31
- endoreg_db/models/persons/portal_user_information.py +0 -27
- endoreg_db/models/prediction/__init__.py +0 -2
- endoreg_db/models/prediction/image_classification.py +0 -37
- endoreg_db/models/prediction/video_prediction_meta.py +0 -244
- endoreg_db/models/product/__init__.py +0 -5
- endoreg_db/models/product/product.py +0 -97
- endoreg_db/models/product/product_group.py +0 -19
- endoreg_db/models/product/product_material.py +0 -24
- endoreg_db/models/product/product_weight.py +0 -26
- endoreg_db/models/product/reference_product.py +0 -99
- endoreg_db/models/questionnaires/__init__.py +0 -114
- endoreg_db/models/quiz/__init__.py +0 -2
- endoreg_db/models/quiz/quiz_answer.py +0 -41
- endoreg_db/models/quiz/quiz_question.py +0 -54
- endoreg_db/models/report_reader/__init__.py +0 -2
- endoreg_db/models/report_reader/report_reader_config.py +0 -53
- endoreg_db/models/report_reader/report_reader_flag.py +0 -20
- endoreg_db/models/rules/__init__.py +0 -5
- endoreg_db/models/rules/rule.py +0 -24
- endoreg_db/models/rules/rule_applicator.py +0 -224
- endoreg_db/models/rules/rule_attribute_dtype.py +0 -19
- endoreg_db/models/rules/rule_type.py +0 -22
- endoreg_db/models/rules/ruleset.py +0 -19
- endoreg_db/models/unit.py +0 -22
- endoreg_db/queries/__init__.py +0 -5
- endoreg_db/queries/annotations/__init__.py +0 -3
- endoreg_db/queries/annotations/legacy.py +0 -158
- endoreg_db/queries/get/__init__.py +0 -6
- endoreg_db/queries/get/annotation.py +0 -0
- endoreg_db/queries/get/center.py +0 -42
- endoreg_db/queries/get/model.py +0 -13
- endoreg_db/queries/get/patient.py +0 -14
- endoreg_db/queries/get/patient_examination.py +0 -20
- endoreg_db/queries/get/prediction.py +0 -0
- endoreg_db/queries/get/report_file.py +0 -33
- endoreg_db/queries/get/video.py +0 -31
- endoreg_db/queries/get/video_import_meta.py +0 -0
- endoreg_db/queries/get/video_prediction_meta.py +0 -0
- endoreg_db/queries/sanity/__init_.py +0 -0
- endoreg_db/serializers/__init__.py +0 -10
- endoreg_db/serializers/ai_model.py +0 -19
- endoreg_db/serializers/annotation.py +0 -17
- endoreg_db/serializers/center.py +0 -11
- endoreg_db/serializers/examination.py +0 -33
- endoreg_db/serializers/frame.py +0 -13
- endoreg_db/serializers/hardware.py +0 -21
- endoreg_db/serializers/label.py +0 -22
- endoreg_db/serializers/patient.py +0 -10
- endoreg_db/serializers/prediction.py +0 -15
- endoreg_db/serializers/report_file.py +0 -7
- endoreg_db/serializers/video.py +0 -27
- endoreg_db/utils/__init__.py +0 -1
- endoreg_db/utils/cropping.py +0 -29
- endoreg_db/utils/dataloader.py +0 -92
- endoreg_db/utils/file_operations.py +0 -30
- endoreg_db/utils/hashs.py +0 -34
- endoreg_db/utils/legacy_ocr.py +0 -201
- endoreg_db/utils/ocr.py +0 -190
- endoreg_db/utils/uuid.py +0 -4
- endoreg_db/utils/video_metadata.py +0 -87
- endoreg_db-0.5.2.dist-info/METADATA +0 -27
- endoreg_db-0.5.2.dist-info/RECORD +0 -319
- {endoreg_db-0.5.2.dist-info/licenses → endoreg_db-0.6.0.dist-info}/LICENSE +0 -0
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
class EndoscopyProcessorManager(models.Manager):
|
|
4
|
-
def get_by_natural_key(self, name):
|
|
5
|
-
return self.get(name=name)
|
|
6
|
-
|
|
7
|
-
class EndoscopyProcessor(models.Model):
|
|
8
|
-
objects = EndoscopyProcessorManager()
|
|
9
|
-
|
|
10
|
-
name = models.CharField(max_length=255)
|
|
11
|
-
image_width = models.IntegerField()
|
|
12
|
-
image_height = models.IntegerField()
|
|
13
|
-
# image_fps = models.IntegerField()
|
|
14
|
-
|
|
15
|
-
# Roi for endoscope image
|
|
16
|
-
endoscope_image_x = models.IntegerField()
|
|
17
|
-
endoscope_image_y = models.IntegerField()
|
|
18
|
-
endoscope_image_width = models.IntegerField()
|
|
19
|
-
endoscope_image_height = models.IntegerField()
|
|
20
|
-
|
|
21
|
-
# Roi for examination date
|
|
22
|
-
examination_date_x = models.IntegerField()
|
|
23
|
-
examination_date_y = models.IntegerField()
|
|
24
|
-
examination_date_width = models.IntegerField()
|
|
25
|
-
examination_date_height = models.IntegerField()
|
|
26
|
-
|
|
27
|
-
# Roi for examination time
|
|
28
|
-
examination_time_x = models.IntegerField(blank=True, null=True)
|
|
29
|
-
examination_time_y = models.IntegerField(blank=True, null=True)
|
|
30
|
-
examination_time_width = models.IntegerField(blank=True, null=True)
|
|
31
|
-
examination_time_height = models.IntegerField(blank=True, null=True)
|
|
32
|
-
|
|
33
|
-
# Roi for patient first name
|
|
34
|
-
patient_first_name_x = models.IntegerField()
|
|
35
|
-
patient_first_name_y = models.IntegerField()
|
|
36
|
-
patient_first_name_width = models.IntegerField()
|
|
37
|
-
patient_first_name_height = models.IntegerField()
|
|
38
|
-
|
|
39
|
-
# Roi for patient name
|
|
40
|
-
patient_last_name_x = models.IntegerField()
|
|
41
|
-
patient_last_name_y = models.IntegerField()
|
|
42
|
-
patient_last_name_width = models.IntegerField()
|
|
43
|
-
patient_last_name_height = models.IntegerField()
|
|
44
|
-
|
|
45
|
-
# Roi for patient dob
|
|
46
|
-
patient_dob_x = models.IntegerField()
|
|
47
|
-
patient_dob_y = models.IntegerField()
|
|
48
|
-
patient_dob_width = models.IntegerField()
|
|
49
|
-
patient_dob_height = models.IntegerField()
|
|
50
|
-
|
|
51
|
-
# Roi for endoscope type
|
|
52
|
-
endoscope_type_x = models.IntegerField(blank=True, null=True)
|
|
53
|
-
endoscope_type_y = models.IntegerField(blank=True, null=True)
|
|
54
|
-
endoscope_type_width = models.IntegerField(blank=True, null=True)
|
|
55
|
-
endoscope_type_height = models.IntegerField(blank=True, null=True)
|
|
56
|
-
|
|
57
|
-
# Roi for endoscopy sn
|
|
58
|
-
endoscope_sn_x = models.IntegerField(blank=True, null=True)
|
|
59
|
-
endoscope_sn_y = models.IntegerField(blank=True, null=True)
|
|
60
|
-
endoscope_sn_width = models.IntegerField(blank=True, null=True)
|
|
61
|
-
endoscope_sn_height = models.IntegerField(blank=True, null=True)
|
|
62
|
-
|
|
63
|
-
def natural_key(self):
|
|
64
|
-
return (self.name,)
|
|
65
|
-
|
|
66
|
-
def __str__(self):
|
|
67
|
-
return self.name
|
|
68
|
-
|
|
69
|
-
def get_roi_endoscope_image(self):
|
|
70
|
-
return {
|
|
71
|
-
"x": self.endoscope_image_x,
|
|
72
|
-
"y": self.endoscope_image_y,
|
|
73
|
-
"width": self.endoscope_image_width,
|
|
74
|
-
"height": self.endoscope_image_height
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
def get_roi_examination_date(self):
|
|
78
|
-
return {
|
|
79
|
-
"x": self.examination_date_x,
|
|
80
|
-
"y": self.examination_date_y,
|
|
81
|
-
"width": self.examination_date_width,
|
|
82
|
-
"height": self.examination_date_height
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
def get_roi_examination_time(self):
|
|
86
|
-
return {
|
|
87
|
-
"x": self.examination_time_x,
|
|
88
|
-
"y": self.examination_time_y,
|
|
89
|
-
"width": self.examination_time_width,
|
|
90
|
-
"height": self.examination_time_height
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
def get_roi_patient_last_name(self):
|
|
94
|
-
return {
|
|
95
|
-
"x": self.patient_last_name_x,
|
|
96
|
-
"y": self.patient_last_name_y,
|
|
97
|
-
"width": self.patient_last_name_width,
|
|
98
|
-
"height": self.patient_last_name_height
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
def get_roi_patient_first_name(self):
|
|
102
|
-
return {
|
|
103
|
-
"x": self.patient_first_name_x,
|
|
104
|
-
"y": self.patient_first_name_y,
|
|
105
|
-
"width": self.patient_first_name_width,
|
|
106
|
-
"height": self.patient_first_name_height
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
def get_roi_patient_dob(self):
|
|
110
|
-
return {
|
|
111
|
-
"x": self.patient_dob_x,
|
|
112
|
-
"y": self.patient_dob_y,
|
|
113
|
-
"width": self.patient_dob_width,
|
|
114
|
-
"height": self.patient_dob_height
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
def get_roi_endoscope_type(self):
|
|
118
|
-
return {
|
|
119
|
-
"x": self.endoscope_type_x,
|
|
120
|
-
"y": self.endoscope_type_y,
|
|
121
|
-
"width": self.endoscope_type_width,
|
|
122
|
-
"height": self.endoscope_type_height
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
def get_roi_endoscopy_sn(self):
|
|
126
|
-
return {
|
|
127
|
-
"x": self.endoscope_sn_x,
|
|
128
|
-
"y": self.endoscope_sn_y,
|
|
129
|
-
"width": self.endoscope_sn_width,
|
|
130
|
-
"height": self.endoscope_sn_height
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
def get_rois(self):
|
|
134
|
-
return {
|
|
135
|
-
"endoscope_image": self.get_roi_endoscope_image(),
|
|
136
|
-
"examination_date": self.get_roi_examination_date(),
|
|
137
|
-
"examination_time": self.get_roi_examination_time(),
|
|
138
|
-
"patient_first_name": self.get_roi_patient_first_name(),
|
|
139
|
-
"patient_last_name": self.get_roi_patient_last_name(),
|
|
140
|
-
"patient_dob": self.get_roi_patient_dob(),
|
|
141
|
-
"endoscope_type": self.get_roi_endoscope_type(),
|
|
142
|
-
"endoscope_sn": self.get_roi_endoscopy_sn()
|
|
143
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
def get_prediction_information_source():
|
|
4
|
-
_source = InformationSource.objects.get(name="prediction")
|
|
5
|
-
|
|
6
|
-
# make sure to return only one object
|
|
7
|
-
assert _source, "No prediction information source found"
|
|
8
|
-
return _source
|
|
9
|
-
|
|
10
|
-
class InformationSourceManager(models.Manager):
|
|
11
|
-
def get_by_natural_key(self, name):
|
|
12
|
-
return self.get(name=name)
|
|
13
|
-
|
|
14
|
-
class InformationSource(models.Model):
|
|
15
|
-
objects = InformationSourceManager()
|
|
16
|
-
|
|
17
|
-
name = models.CharField(max_length=100)
|
|
18
|
-
name_de = models.CharField(max_length=100, blank=True, null=True)
|
|
19
|
-
name_en = models.CharField(max_length=100, blank=True, null=True)
|
|
20
|
-
|
|
21
|
-
url = models.URLField(blank=True, null=True)
|
|
22
|
-
description = models.TextField(blank=True, null=True)
|
|
23
|
-
date = models.DateField(blank=True, null=True)
|
|
24
|
-
|
|
25
|
-
def natural_key(self):
|
|
26
|
-
return (self.name,)
|
|
27
|
-
|
|
28
|
-
def __str__(self):
|
|
29
|
-
return self.name
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .label import Label, LabelType, LabelSet
|
endoreg_db/models/label/label.py
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
class LabelTypeManager(models.Manager):
|
|
4
|
-
def get_by_natural_key(self, name):
|
|
5
|
-
return self.get(name=name)
|
|
6
|
-
|
|
7
|
-
class LabelType(models.Model):
|
|
8
|
-
"""
|
|
9
|
-
A class representing a label type.
|
|
10
|
-
|
|
11
|
-
Attributes:
|
|
12
|
-
name (str): The name of the label type.
|
|
13
|
-
description (str): A description of the label type.
|
|
14
|
-
|
|
15
|
-
"""
|
|
16
|
-
name = models.CharField(max_length=255)
|
|
17
|
-
description = models.TextField(blank=True, null=True)
|
|
18
|
-
|
|
19
|
-
objects = LabelTypeManager()
|
|
20
|
-
|
|
21
|
-
def natural_key(self):
|
|
22
|
-
return (self.name,)
|
|
23
|
-
|
|
24
|
-
def __str__(self):
|
|
25
|
-
return self.name
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class LabelManager(models.Manager):
|
|
29
|
-
def get_by_natural_key(self, name):
|
|
30
|
-
return self.get(name=name)
|
|
31
|
-
|
|
32
|
-
class Label(models.Model):
|
|
33
|
-
"""
|
|
34
|
-
A class representing a label.
|
|
35
|
-
|
|
36
|
-
Attributes:
|
|
37
|
-
name (str): The name of the label.
|
|
38
|
-
label_type (LabelType): The type of the label.
|
|
39
|
-
description (str): A description of the label.
|
|
40
|
-
|
|
41
|
-
"""
|
|
42
|
-
name = models.CharField(max_length=255)
|
|
43
|
-
label_type = models.ForeignKey("LabelType", on_delete=models.CASCADE, related_name="labels")
|
|
44
|
-
description = models.TextField(blank=True, null=True)
|
|
45
|
-
|
|
46
|
-
objects = LabelManager()
|
|
47
|
-
|
|
48
|
-
def natural_key(self):
|
|
49
|
-
return (self.name,)
|
|
50
|
-
|
|
51
|
-
def __str__(self):
|
|
52
|
-
return self.name
|
|
53
|
-
|
|
54
|
-
class LabelSetManager(models.Manager):
|
|
55
|
-
def get_by_natural_key(self, name):
|
|
56
|
-
return self.get(name=name)
|
|
57
|
-
|
|
58
|
-
class LabelSet(models.Model):
|
|
59
|
-
"""
|
|
60
|
-
A class representing a label set.
|
|
61
|
-
|
|
62
|
-
Attributes:
|
|
63
|
-
name (str): The name of the label set.
|
|
64
|
-
description (str): A description of the label set.
|
|
65
|
-
|
|
66
|
-
"""
|
|
67
|
-
name = models.CharField(max_length=255)
|
|
68
|
-
description = models.TextField(blank=True, null=True)
|
|
69
|
-
version = models.IntegerField()
|
|
70
|
-
labels = models.ManyToManyField("Label", related_name="labels")
|
|
71
|
-
|
|
72
|
-
objects = LabelSetManager()
|
|
73
|
-
|
|
74
|
-
def natural_key(self):
|
|
75
|
-
return (self.name,)
|
|
76
|
-
|
|
77
|
-
def __str__(self):
|
|
78
|
-
return self.name
|
|
79
|
-
|
|
80
|
-
def get_labels_in_order(self):
|
|
81
|
-
"""
|
|
82
|
-
Get all labels in this label set as list in the correct order.
|
|
83
|
-
"""
|
|
84
|
-
return list(self.labels.all().order_by('id'))
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .lab_value import LabValue
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
import warnings
|
|
3
|
-
|
|
4
|
-
LANG = "de"
|
|
5
|
-
|
|
6
|
-
class LabValueManager(models.Manager):
|
|
7
|
-
def get_by_natural_key(self, name):
|
|
8
|
-
return self.get(name=name)
|
|
9
|
-
|
|
10
|
-
class LabValue(models.Model):
|
|
11
|
-
name = models.CharField(max_length=255, unique=True)
|
|
12
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
13
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
14
|
-
abbreviation = models.CharField(max_length=10, blank=True, null=True)
|
|
15
|
-
default_unit = models.ForeignKey('Unit', on_delete=models.CASCADE, blank=True, null=True)
|
|
16
|
-
numeric_precision = models.IntegerField(default=3)
|
|
17
|
-
default_single_categorical_value_distribution = models.ForeignKey(
|
|
18
|
-
'SingleCategoricalValueDistribution',
|
|
19
|
-
on_delete=models.CASCADE,
|
|
20
|
-
blank=True, null=True,
|
|
21
|
-
related_name='default_single_categorical_value_distribution'
|
|
22
|
-
)
|
|
23
|
-
default_numerical_value_distribution = models.ForeignKey(
|
|
24
|
-
'NumericValueDistribution',
|
|
25
|
-
on_delete=models.CASCADE,
|
|
26
|
-
blank=True, null=True,
|
|
27
|
-
related_name='default_numerical_value_distribution'
|
|
28
|
-
)
|
|
29
|
-
default_multiple_categorical_value_distribution = models.ForeignKey(
|
|
30
|
-
'MultipleCategoricalValueDistribution',
|
|
31
|
-
on_delete=models.CASCADE,
|
|
32
|
-
blank=True, null=True,
|
|
33
|
-
related_name='default_multiple_categorical_value_distribution'
|
|
34
|
-
)
|
|
35
|
-
default_date_value_distribution = models.ForeignKey(
|
|
36
|
-
'DateValueDistribution',
|
|
37
|
-
on_delete=models.CASCADE,
|
|
38
|
-
blank=True, null=True,
|
|
39
|
-
related_name='default_date_value_distribution'
|
|
40
|
-
)
|
|
41
|
-
default_normal_range = models.JSONField(blank=True, null=True)
|
|
42
|
-
normal_range_age_dependent = models.BooleanField(default=False)
|
|
43
|
-
normal_range_gender_dependent = models.BooleanField(default=False)
|
|
44
|
-
normal_range_special_case = models.BooleanField(default=False)
|
|
45
|
-
objects = LabValueManager()
|
|
46
|
-
|
|
47
|
-
def natural_key(self):
|
|
48
|
-
return (self.name,)
|
|
49
|
-
|
|
50
|
-
def __str__(self):
|
|
51
|
-
return self.name
|
|
52
|
-
|
|
53
|
-
def get_default_default_distribution(self):
|
|
54
|
-
if self.default_single_categorical_value_distribution:
|
|
55
|
-
return self.default_single_categorical_value_distribution
|
|
56
|
-
elif self.default_numerical_value_distribution:
|
|
57
|
-
return self.default_numerical_value_distribution
|
|
58
|
-
elif self.default_multiple_categorical_value_distribution:
|
|
59
|
-
return self.default_multiple_categorical_value_distribution
|
|
60
|
-
elif self.default_date_value_distribution:
|
|
61
|
-
return self.default_date_value_distribution
|
|
62
|
-
else:
|
|
63
|
-
warnings.warn("No default distribution set for lab value")
|
|
64
|
-
return None
|
|
65
|
-
|
|
66
|
-
def get_normal_range(self, age=None, gender=None):
|
|
67
|
-
age_dependent = self.normal_range_age_dependent
|
|
68
|
-
gender_dependent = self.normal_range_gender_dependent
|
|
69
|
-
special_case = self.normal_range_special_case
|
|
70
|
-
|
|
71
|
-
min_value = None
|
|
72
|
-
max_value = None
|
|
73
|
-
|
|
74
|
-
if not age_dependent and \
|
|
75
|
-
not gender_dependent and \
|
|
76
|
-
not special_case:
|
|
77
|
-
min_value = self.default_normal_range.get('min', None)
|
|
78
|
-
max_value = self.default_normal_range.get('max', None)
|
|
79
|
-
|
|
80
|
-
if age_dependent:
|
|
81
|
-
# get normal range for age)
|
|
82
|
-
warnings.warn("Age dependent normal range not implemented yet")
|
|
83
|
-
pass
|
|
84
|
-
|
|
85
|
-
if gender_dependent:
|
|
86
|
-
if not gender:
|
|
87
|
-
warnings.warn("Calling get_normal_range with gender_dependent=True requires gender to be set, choosing by random")
|
|
88
|
-
# set gender to either "male" or "female"
|
|
89
|
-
from random import choice
|
|
90
|
-
choices = ["male", "female"]
|
|
91
|
-
gender = choice(choices)
|
|
92
|
-
|
|
93
|
-
default_range_dict = self.default_normal_range.get(gender, {})
|
|
94
|
-
min_value = default_range_dict.get('min', None)
|
|
95
|
-
max_value = default_range_dict.get('max', None)
|
|
96
|
-
|
|
97
|
-
if special_case:
|
|
98
|
-
# get normal range for special case
|
|
99
|
-
warnings.warn("Special case normal range not implemented yet")
|
|
100
|
-
|
|
101
|
-
return min_value, max_value
|
|
102
|
-
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
from ..label.label import Label
|
|
3
|
-
from ..annotation.image_classification import ImageClassificationAnnotation
|
|
4
|
-
|
|
5
|
-
class LegacyImage(models.Model):
|
|
6
|
-
# Add any other fields you need to store frame-related information
|
|
7
|
-
image = models.ImageField(upload_to="legacy_images") # Or some other field type, depending on how you're storing the frame
|
|
8
|
-
suffix = models.CharField(max_length=255)
|
|
9
|
-
# ImageClassificationAnnotation has a foreign key to this model (related name: image_classification_annotations)
|
|
10
|
-
|
|
11
|
-
def get_classification_annotations(self):
|
|
12
|
-
"""
|
|
13
|
-
Get all image classification annotations for this image.
|
|
14
|
-
"""
|
|
15
|
-
return ImageClassificationAnnotation.objects.filter(legacy_image=self)
|
|
16
|
-
|
|
17
|
-
def get_classification_annotations_by_label(self, label:Label):
|
|
18
|
-
"""
|
|
19
|
-
Get all image classification annotations for this image with the given label.
|
|
20
|
-
"""
|
|
21
|
-
return ImageClassificationAnnotation.objects.filter(legacy_image=self, label=label)
|
|
22
|
-
|
|
23
|
-
def get_classification_annotations_by_value(self, value:bool):
|
|
24
|
-
"""
|
|
25
|
-
Get all image classification annotations for this image with the given value.
|
|
26
|
-
"""
|
|
27
|
-
return ImageClassificationAnnotation.objects.filter(legacy_image=self, value=value)
|
|
28
|
-
|
|
29
|
-
def get_classification_annotations_by_label_and_value(self, label:Label, value:bool):
|
|
30
|
-
"""
|
|
31
|
-
Get all image classification annotations for this image with the given label and value.
|
|
32
|
-
"""
|
|
33
|
-
return ImageClassificationAnnotation.objects.filter(legacy_image=self, label=label, value=value)
|
|
34
|
-
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
from .base import AbstractLogEntry
|
|
3
|
-
|
|
4
|
-
class AglServiceLogEntry(AbstractLogEntry):
|
|
5
|
-
"""
|
|
6
|
-
Model for log entries related to AGL services.
|
|
7
|
-
"""
|
|
8
|
-
service = models.ForeignKey("AglService", on_delete=models.CASCADE)
|
|
9
|
-
device = models.ForeignKey(
|
|
10
|
-
"NetworkDevice", on_delete=models.CASCADE, null=True, blank=True
|
|
11
|
-
)
|
|
12
|
-
log_type = models.ForeignKey("LogType", on_delete=models.CASCADE, null=True, blank=True)
|
|
13
|
-
|
|
14
|
-
class Meta:
|
|
15
|
-
verbose_name = "AGL Service Log Entry"
|
|
16
|
-
verbose_name_plural = "AGL Service Log Entries"
|
|
17
|
-
|
|
18
|
-
def __str__(self):
|
|
19
|
-
return f"{self.timestamp} - {self.user} - {self.ip_address} - {self.service} - {self.message}"
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# django model for logging, first define an abstract base model
|
|
2
|
-
from django.db import models
|
|
3
|
-
from django.conf import settings
|
|
4
|
-
|
|
5
|
-
class AbstractLogEntry(models.Model):
|
|
6
|
-
"""
|
|
7
|
-
Abstract base model for log entries.
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
class Meta:
|
|
11
|
-
abstract = True
|
|
12
|
-
|
|
13
|
-
timestamp = models.DateTimeField(auto_now_add=True)
|
|
14
|
-
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, null=True, blank=True)
|
|
15
|
-
ip_address = models.GenericIPAddressField(null=True, blank=True)
|
|
16
|
-
user_agent = models.CharField(max_length=256, null=True, blank=True)
|
|
17
|
-
message = models.TextField()
|
|
18
|
-
json_content = models.JSONField(null=True, blank=True)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def __str__(self):
|
|
22
|
-
return f"{self.timestamp} - {self.user} - {self.ip_address} - {self.message}"
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
class LogTypeManager(models.Manager):
|
|
4
|
-
# Custom manager for LogType; defines name as natural key
|
|
5
|
-
def get_by_natural_key(self, name):
|
|
6
|
-
return self.get(name=name)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class LogType(models.Model):
|
|
10
|
-
name = models.CharField(max_length=255)
|
|
11
|
-
description = models.CharField(max_length=255)
|
|
12
|
-
created = models.DateTimeField(auto_now_add=True)
|
|
13
|
-
updated = models.DateTimeField(auto_now=True)
|
|
14
|
-
objects = LogTypeManager()
|
|
15
|
-
|
|
16
|
-
def __str__(self):
|
|
17
|
-
return self.name
|
|
18
|
-
|
|
19
|
-
class Meta:
|
|
20
|
-
ordering = ['name']
|
|
21
|
-
|
|
22
|
-
def natural_key(self):
|
|
23
|
-
return (self.name,)
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
from .base import AbstractLogEntry
|
|
3
|
-
|
|
4
|
-
class NetworkDeviceLogEntry(AbstractLogEntry):
|
|
5
|
-
"""
|
|
6
|
-
Model for log entries related to network devices.
|
|
7
|
-
"""
|
|
8
|
-
device = models.ForeignKey("NetworkDevice", on_delete=models.CASCADE)
|
|
9
|
-
log_type = models.ForeignKey("LogType", on_delete=models.CASCADE, null=True, blank=True)
|
|
10
|
-
|
|
11
|
-
datetime = models.DateTimeField(default=None, null=True, blank=True)
|
|
12
|
-
# hostname = models.CharField(max_length=255, null=True, blank=True)
|
|
13
|
-
aglnet_ip = models.GenericIPAddressField(null=True, blank=True)
|
|
14
|
-
vpn_service_status = models.CharField(max_length=255, null=True, blank=True)
|
|
15
|
-
vpn_service_restart_attempt = models.BooleanField(default=False)
|
|
16
|
-
vpn_service_restart_success = models.BooleanField(null=True, blank=True)
|
|
17
|
-
ping_vpn = models.BooleanField(default=False)
|
|
18
|
-
ping_www = models.BooleanField(default=False)
|
|
19
|
-
transferred_to_host = models.BooleanField(default=False)
|
|
20
|
-
|
|
21
|
-
class Meta:
|
|
22
|
-
verbose_name = "Network Device Log Entry"
|
|
23
|
-
verbose_name_plural = "Network Device Log Entries"
|
|
24
|
-
|
|
25
|
-
def __str__(self):
|
|
26
|
-
return f"{self.timestamp} - {self.user} - {self.ip_address} - {self.device} - {self.message}"
|
|
27
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .medication import *
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
from django.db import models
|
|
2
|
-
|
|
3
|
-
class MedicationManager(models.Manager):
|
|
4
|
-
def get_by_natural_key(self, name):
|
|
5
|
-
return self.get(name=name)
|
|
6
|
-
|
|
7
|
-
class Medication(models.Model):
|
|
8
|
-
name = models.CharField(max_length=255, unique=True)
|
|
9
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
10
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
11
|
-
adapt_to_renal_function = models.BooleanField(default = False)
|
|
12
|
-
adapt_to_hepatic_function = models.BooleanField(default=False)
|
|
13
|
-
adapt_to_indication = models.BooleanField(default=False)
|
|
14
|
-
adapt_to_age = models.BooleanField(default=False)
|
|
15
|
-
adapt_to_weight = models.BooleanField(default=False)
|
|
16
|
-
adapt_to_risk = models.BooleanField(default=False)
|
|
17
|
-
default_unit = models.ForeignKey('Unit', on_delete=models.CASCADE)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
objects = MedicationManager()
|
|
21
|
-
|
|
22
|
-
def natural_key(self):
|
|
23
|
-
return (self.name,)
|
|
24
|
-
|
|
25
|
-
def __str__(self):
|
|
26
|
-
return self.name
|
|
27
|
-
|
|
28
|
-
class MedicationScheduleManager(models.Manager):
|
|
29
|
-
def get_by_natural_key(self, name):
|
|
30
|
-
return self.get(name=name)
|
|
31
|
-
|
|
32
|
-
class MedicationSchedule(models.Model):
|
|
33
|
-
name = models.CharField(max_length=255)
|
|
34
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
35
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
36
|
-
description = models.TextField(blank=True, null=True)
|
|
37
|
-
medication = models.ForeignKey("Medication", on_delete=models.CASCADE)
|
|
38
|
-
unit = models.ForeignKey("Unit", on_delete=models.CASCADE)
|
|
39
|
-
therapy_duration_d = models.FloatField(blank=True, null=True)
|
|
40
|
-
dose = models.FloatField()
|
|
41
|
-
intake_times = models.ManyToManyField(
|
|
42
|
-
"MedicationIntakeTime",
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
objects = MedicationScheduleManager()
|
|
46
|
-
|
|
47
|
-
def natural_key(self):
|
|
48
|
-
return (self.name,)
|
|
49
|
-
|
|
50
|
-
def __str__(self):
|
|
51
|
-
return self.name
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
class MedicationIntakeTimeManager(models.Manager):
|
|
55
|
-
def get_by_natural_key(self, name):
|
|
56
|
-
return self.get(name=name)
|
|
57
|
-
|
|
58
|
-
class MedicationIntakeTime(models.Model):
|
|
59
|
-
name = models.CharField(max_length=255)
|
|
60
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
61
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
62
|
-
repeats = models.CharField(max_length=20, default = "daily")
|
|
63
|
-
time = models.TimeField()
|
|
64
|
-
|
|
65
|
-
objects = MedicationIntakeTimeManager()
|
|
66
|
-
|
|
67
|
-
def natural_key(self):
|
|
68
|
-
return (self.name,)
|
|
69
|
-
|
|
70
|
-
def __str__(self):
|
|
71
|
-
return self.name
|
|
72
|
-
|
|
73
|
-
# IMPLEMENT MEDICATION INDICATION TYPE
|
|
74
|
-
class MedicationIndicationTypeManager(models.Manager):
|
|
75
|
-
def get_by_natural_key(self, name):
|
|
76
|
-
return self.get(name=name)
|
|
77
|
-
|
|
78
|
-
class MedicationIndicationType(models.Model):
|
|
79
|
-
name = models.CharField(max_length=255, unique=True)
|
|
80
|
-
name_de = models.CharField(max_length=255, blank=True, null=True)
|
|
81
|
-
name_en = models.CharField(max_length=255, blank=True, null=True)
|
|
82
|
-
|
|
83
|
-
objects = MedicationIndicationTypeManager()
|
|
84
|
-
|
|
85
|
-
def natural_key(self):
|
|
86
|
-
return (self.name,)
|
|
87
|
-
|
|
88
|
-
def __str__(self):
|
|
89
|
-
return self.name
|
|
90
|
-
|
|
91
|
-
@classmethod
|
|
92
|
-
def get_random_indication_by_type(cls, name) -> "MedicationIndication":
|
|
93
|
-
return cls.objects.get(name=name).medication_indications.order_by('?').first()
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
def get_random_medication_indication(self):
|
|
97
|
-
from endoreg_db.models import MedicationIndication
|
|
98
|
-
return MedicationIndication.objects.filter(indication_type=self).order_by('?').first()
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
class MedicationIndicationManager(models.Manager):
|
|
102
|
-
def get_by_natural_key(self, name):
|
|
103
|
-
return self.get(name=name)
|
|
104
|
-
|
|
105
|
-
class MedicationIndication(models.Model):
|
|
106
|
-
name = models.CharField(max_length=255, unique=True)
|
|
107
|
-
indication_type = models.ForeignKey(
|
|
108
|
-
"MedicationIndicationType", on_delete=models.CASCADE, related_name="medication_indications"
|
|
109
|
-
)
|
|
110
|
-
medication_schedules = models.ManyToManyField(
|
|
111
|
-
"MedicationSchedule"
|
|
112
|
-
)
|
|
113
|
-
diseases = models.ManyToManyField(
|
|
114
|
-
"Disease"
|
|
115
|
-
)
|
|
116
|
-
events = models.ManyToManyField(
|
|
117
|
-
"Event"
|
|
118
|
-
)
|
|
119
|
-
classification_choices = models.ManyToManyField(
|
|
120
|
-
"DiseaseClassificationChoice"
|
|
121
|
-
)
|
|
122
|
-
sources = models.ManyToManyField(
|
|
123
|
-
"InformationSource"
|
|
124
|
-
)
|
|
125
|
-
|
|
126
|
-
def get_indication_links(self):
|
|
127
|
-
links = {
|
|
128
|
-
"medication_schedules": self.medication_schedules,
|
|
129
|
-
"diseases": self.diseases,
|
|
130
|
-
"events": self.events,
|
|
131
|
-
"classification_choices": self.classification_choices
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
objects = MedicationIndicationManager()
|
|
135
|
-
|
|
136
|
-
def natural_key(self):
|
|
137
|
-
return (self.name,)
|
|
138
|
-
|
|
139
|
-
def __str__(self):
|
|
140
|
-
return self.name
|
|
141
|
-
|
|
142
|
-
def create_patient_medication_schedules(self, patient):
|
|
143
|
-
from endoreg_db.models import PatientMedicationSchedule
|
|
144
|
-
for medication_schedule in self.medication_schedules.all():
|
|
145
|
-
PatientMedicationSchedule.objects.create(
|
|
146
|
-
patient=patient,
|
|
147
|
-
medication_schedule=medication_schedule
|
|
148
|
-
)
|