endoreg-db 0.5.3__py3-none-any.whl → 0.6.1__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.

Files changed (268) hide show
  1. endoreg_db/admin.py +90 -1
  2. endoreg_db/case_generator/case_generator.py +159 -0
  3. endoreg_db/case_generator/lab_sample_factory.py +33 -0
  4. endoreg_db/case_generator/utils.py +30 -0
  5. endoreg_db/data/__init__.py +50 -4
  6. endoreg_db/data/ai_model/data.yaml +7 -0
  7. endoreg_db/data/{label → ai_model_label}/label/data.yaml +27 -1
  8. endoreg_db/data/ai_model_label/label-set/data.yaml +21 -0
  9. endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +5 -0
  10. endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml +176 -0
  11. endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml +20 -0
  12. endoreg_db/data/center/data.yaml +35 -5
  13. endoreg_db/data/contraindication/bleeding.yaml +11 -0
  14. endoreg_db/data/distribution/numeric/data.yaml +14 -0
  15. endoreg_db/data/endoscope/data.yaml +93 -0
  16. endoreg_db/data/examination_indication/endoscopy.yaml +8 -0
  17. endoreg_db/data/examination_indication_classification/endoscopy.yaml +8 -0
  18. endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +101 -0
  19. endoreg_db/data/finding/data.yaml +141 -0
  20. endoreg_db/data/finding_intervention/endoscopy.yaml +138 -0
  21. endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
  22. endoreg_db/data/finding_location_classification/colonoscopy.yaml +46 -0
  23. endoreg_db/data/finding_location_classification_choice/colonoscopy.yaml +240 -0
  24. endoreg_db/data/finding_morphology_classification/colonoscopy.yaml +48 -0
  25. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_circularity_default.yaml +34 -0
  26. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_nice.yaml +20 -0
  27. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_paris.yaml +65 -0
  28. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_planarity_default.yaml +56 -0
  29. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_surface_intact_default.yaml +39 -0
  30. endoreg_db/data/finding_morphology_classification_choice/colonoscopy_size.yaml +57 -0
  31. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +79 -0
  32. endoreg_db/data/finding_type/data.yaml +30 -0
  33. endoreg_db/data/gender/data.yaml +17 -0
  34. endoreg_db/data/lab_value/cardiac_enzymes.yaml +7 -1
  35. endoreg_db/data/lab_value/coagulation.yaml +6 -1
  36. endoreg_db/data/lab_value/electrolytes.yaml +39 -1
  37. endoreg_db/data/lab_value/gastrointestinal_function.yaml +12 -0
  38. endoreg_db/data/lab_value/hematology.yaml +17 -2
  39. endoreg_db/data/lab_value/hormones.yaml +6 -0
  40. endoreg_db/data/lab_value/lipids.yaml +12 -3
  41. endoreg_db/data/lab_value/misc.yaml +5 -2
  42. endoreg_db/data/lab_value/renal_function.yaml +2 -1
  43. endoreg_db/data/lx_client_tag/base.yaml +54 -0
  44. endoreg_db/data/lx_client_type/base.yaml +30 -0
  45. endoreg_db/data/lx_permission/base.yaml +24 -0
  46. endoreg_db/data/lx_permission/endoreg.yaml +52 -0
  47. endoreg_db/data/medication_indication/anticoagulation.yaml +44 -49
  48. endoreg_db/data/names_first/first_names.yaml +51 -0
  49. endoreg_db/data/names_last/last_names.yaml +51 -0
  50. endoreg_db/data/network_device/data.yaml +30 -0
  51. endoreg_db/data/organ/data.yaml +29 -0
  52. endoreg_db/data/pdf_type/data.yaml +2 -1
  53. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +4 -0
  54. endoreg_db/forms/__init__.py +3 -1
  55. endoreg_db/forms/examination_form.py +11 -0
  56. endoreg_db/forms/patient_finding_intervention_form.py +19 -0
  57. endoreg_db/forms/patient_form.py +26 -0
  58. endoreg_db/management/commands/__init__.py +0 -0
  59. endoreg_db/management/commands/load_ai_model_data.py +57 -23
  60. endoreg_db/management/commands/load_ai_model_label_data.py +59 -0
  61. endoreg_db/management/commands/load_base_db_data.py +160 -118
  62. endoreg_db/management/commands/{load_endoscope_type_data.py → load_contraindication_data.py} +3 -7
  63. endoreg_db/management/commands/load_disease_data.py +29 -7
  64. endoreg_db/management/commands/load_endoscope_data.py +68 -0
  65. endoreg_db/management/commands/load_examination_indication_data.py +65 -0
  66. endoreg_db/management/commands/load_finding_data.py +171 -0
  67. endoreg_db/management/commands/load_lab_value_data.py +3 -3
  68. endoreg_db/management/commands/load_lx_data.py +64 -0
  69. endoreg_db/management/commands/load_medication_data.py +83 -21
  70. endoreg_db/management/commands/load_name_data.py +37 -0
  71. endoreg_db/management/commands/{load_endoscopy_processor_data.py → load_organ_data.py} +7 -9
  72. endoreg_db/migrations/0001_initial.py +1206 -728
  73. endoreg_db/migrations/0002_alter_frame_image_alter_rawframe_image.py +23 -0
  74. endoreg_db/migrations/0003_alter_frame_image_alter_rawframe_image.py +23 -0
  75. endoreg_db/migrations/0004_alter_rawvideofile_file_alter_video_file.py +25 -0
  76. endoreg_db/migrations/0005_rawvideofile_frame_count_and_more.py +33 -0
  77. endoreg_db/migrations/0006_frame_extracted_rawframe_extracted.py +23 -0
  78. endoreg_db/migrations/0007_rename_pseudo_patient_video_patient_and_more.py +24 -0
  79. endoreg_db/migrations/0008_remove_reportfile_patient_examination_and_more.py +48 -0
  80. endoreg_db/models/__init__.py +331 -28
  81. endoreg_db/models/ai_model/__init__.py +1 -0
  82. endoreg_db/models/ai_model/ai_model.py +103 -0
  83. endoreg_db/models/ai_model/lightning/__init__.py +3 -0
  84. endoreg_db/models/ai_model/lightning/inference_dataset.py +53 -0
  85. endoreg_db/models/ai_model/lightning/multilabel_classification_net.py +155 -0
  86. endoreg_db/models/ai_model/lightning/postprocess.py +53 -0
  87. endoreg_db/models/ai_model/lightning/predict.py +172 -0
  88. endoreg_db/models/ai_model/lightning/prediction_visualizer.py +55 -0
  89. endoreg_db/models/ai_model/lightning/preprocess.py +68 -0
  90. endoreg_db/models/ai_model/lightning/run_visualizer.py +21 -0
  91. endoreg_db/models/ai_model/model_meta.py +232 -6
  92. endoreg_db/models/ai_model/model_type.py +13 -3
  93. endoreg_db/models/annotation/__init__.py +31 -2
  94. endoreg_db/models/annotation/anonymized_image_annotation.py +73 -18
  95. endoreg_db/models/annotation/binary_classification_annotation_task.py +94 -57
  96. endoreg_db/models/annotation/image_classification.py +73 -14
  97. endoreg_db/models/annotation/video_segmentation_annotation.py +52 -0
  98. endoreg_db/models/annotation/video_segmentation_labelset.py +20 -0
  99. endoreg_db/models/case/__init__.py +1 -0
  100. endoreg_db/models/{persons/patient/case → case}/case.py +4 -0
  101. endoreg_db/models/case_template/__init__.py +10 -1
  102. endoreg_db/models/case_template/case_template.py +57 -13
  103. endoreg_db/models/case_template/case_template_rule.py +5 -5
  104. endoreg_db/models/case_template/case_template_rule_value.py +19 -4
  105. endoreg_db/models/center/__init__.py +7 -0
  106. endoreg_db/models/center/center.py +31 -5
  107. endoreg_db/models/center/center_product.py +0 -1
  108. endoreg_db/models/center/center_resource.py +16 -2
  109. endoreg_db/models/center/center_waste.py +6 -1
  110. endoreg_db/models/contraindication/__init__.py +21 -0
  111. endoreg_db/models/data_file/__init__.py +38 -5
  112. endoreg_db/models/data_file/base_classes/__init__.py +6 -1
  113. endoreg_db/models/data_file/base_classes/abstract_frame.py +64 -15
  114. endoreg_db/models/data_file/base_classes/abstract_pdf.py +136 -0
  115. endoreg_db/models/data_file/base_classes/abstract_video.py +744 -138
  116. endoreg_db/models/data_file/base_classes/frame_helpers.py +17 -0
  117. endoreg_db/models/data_file/base_classes/prepare_bulk_frames.py +19 -0
  118. endoreg_db/models/data_file/base_classes/utils.py +80 -0
  119. endoreg_db/models/data_file/frame.py +22 -38
  120. endoreg_db/models/data_file/import_classes/__init__.py +4 -18
  121. endoreg_db/models/data_file/import_classes/raw_pdf.py +162 -90
  122. endoreg_db/models/data_file/import_classes/raw_video.py +239 -294
  123. endoreg_db/models/data_file/metadata/__init__.py +10 -0
  124. endoreg_db/models/data_file/metadata/pdf_meta.py +4 -0
  125. endoreg_db/models/data_file/metadata/sensitive_meta.py +265 -6
  126. endoreg_db/models/data_file/metadata/video_meta.py +116 -50
  127. endoreg_db/models/data_file/report_file.py +30 -63
  128. endoreg_db/models/data_file/video/__init__.py +6 -2
  129. endoreg_db/models/data_file/video/video.py +187 -16
  130. endoreg_db/models/data_file/video_segment.py +162 -55
  131. endoreg_db/models/disease.py +25 -2
  132. endoreg_db/models/emission/__init__.py +5 -1
  133. endoreg_db/models/emission/emission_factor.py +71 -6
  134. endoreg_db/models/event.py +51 -0
  135. endoreg_db/models/examination/__init__.py +6 -1
  136. endoreg_db/models/examination/examination.py +53 -12
  137. endoreg_db/models/examination/examination_indication.py +170 -0
  138. endoreg_db/models/examination/examination_time.py +31 -5
  139. endoreg_db/models/examination/examination_time_type.py +28 -4
  140. endoreg_db/models/examination/examination_type.py +28 -6
  141. endoreg_db/models/finding/__init__.py +11 -0
  142. endoreg_db/models/finding/finding.py +75 -0
  143. endoreg_db/models/finding/finding_intervention.py +60 -0
  144. endoreg_db/models/finding/finding_location_classification.py +94 -0
  145. endoreg_db/models/finding/finding_morphology_classification.py +89 -0
  146. endoreg_db/models/finding/finding_type.py +22 -0
  147. endoreg_db/models/hardware/endoscope.py +16 -0
  148. endoreg_db/models/hardware/endoscopy_processor.py +31 -19
  149. endoreg_db/models/label/label.py +35 -7
  150. endoreg_db/models/laboratory/lab_value.py +12 -3
  151. endoreg_db/models/logging/__init__.py +8 -1
  152. endoreg_db/models/lx/__init__.py +4 -0
  153. endoreg_db/models/lx/client.py +57 -0
  154. endoreg_db/models/lx/identity.py +34 -0
  155. endoreg_db/models/lx/permission.py +18 -0
  156. endoreg_db/models/lx/user.py +16 -0
  157. endoreg_db/models/medication/__init__.py +19 -1
  158. endoreg_db/models/medication/medication.py +7 -122
  159. endoreg_db/models/medication/medication_indication.py +50 -0
  160. endoreg_db/models/medication/medication_indication_type.py +34 -0
  161. endoreg_db/models/medication/medication_intake_time.py +26 -0
  162. endoreg_db/models/medication/medication_schedule.py +37 -0
  163. endoreg_db/models/network/__init__.py +7 -1
  164. endoreg_db/models/network/network_device.py +13 -8
  165. endoreg_db/models/organ/__init__.py +38 -0
  166. endoreg_db/models/other/__init__.py +19 -1
  167. endoreg_db/models/other/distribution/__init__.py +44 -0
  168. endoreg_db/models/other/distribution/base_value_distribution.py +20 -0
  169. endoreg_db/models/other/distribution/date_value_distribution.py +91 -0
  170. endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +32 -0
  171. endoreg_db/models/other/distribution/numeric_value_distribution.py +97 -0
  172. endoreg_db/models/other/distribution/single_categorical_value_distribution.py +22 -0
  173. endoreg_db/models/other/distribution.py +1 -211
  174. endoreg_db/models/other/material.py +4 -0
  175. endoreg_db/models/other/transport_route.py +2 -1
  176. endoreg_db/models/patient/__init__.py +24 -0
  177. endoreg_db/models/patient/patient_examination.py +182 -0
  178. endoreg_db/models/patient/patient_finding.py +143 -0
  179. endoreg_db/models/patient/patient_finding_intervention.py +26 -0
  180. endoreg_db/models/patient/patient_finding_location.py +120 -0
  181. endoreg_db/models/patient/patient_finding_morphology.py +166 -0
  182. endoreg_db/models/persons/__init__.py +29 -2
  183. endoreg_db/models/persons/examiner/examiner.py +48 -4
  184. endoreg_db/models/persons/patient/__init__.py +1 -1
  185. endoreg_db/models/persons/patient/patient.py +227 -54
  186. endoreg_db/models/persons/patient/patient_disease.py +6 -0
  187. endoreg_db/models/persons/patient/patient_event.py +31 -1
  188. endoreg_db/models/persons/patient/patient_examination_indication.py +32 -0
  189. endoreg_db/models/persons/patient/patient_lab_sample.py +4 -2
  190. endoreg_db/models/persons/patient/patient_lab_value.py +37 -16
  191. endoreg_db/models/persons/patient/patient_medication.py +27 -12
  192. endoreg_db/models/persons/patient/patient_medication_schedule.py +62 -2
  193. endoreg_db/models/prediction/__init__.py +7 -1
  194. endoreg_db/models/prediction/image_classification.py +20 -6
  195. endoreg_db/models/prediction/video_prediction_meta.py +151 -89
  196. endoreg_db/models/product/__init__.py +10 -1
  197. endoreg_db/models/product/product.py +15 -2
  198. endoreg_db/models/product/product_group.py +8 -0
  199. endoreg_db/models/product/product_material.py +4 -0
  200. endoreg_db/models/product/product_weight.py +12 -0
  201. endoreg_db/models/product/reference_product.py +19 -3
  202. endoreg_db/models/quiz/__init__.py +8 -1
  203. endoreg_db/models/report_reader/__init__.py +6 -1
  204. endoreg_db/serializers/__init__.py +1 -1
  205. endoreg_db/serializers/annotation.py +2 -5
  206. endoreg_db/serializers/frame.py +1 -5
  207. endoreg_db/serializers/patient.py +26 -3
  208. endoreg_db/serializers/prediction.py +2 -7
  209. endoreg_db/serializers/raw_video_meta_validation.py +13 -0
  210. endoreg_db/serializers/video.py +6 -13
  211. endoreg_db/serializers/video_segmentation.py +492 -0
  212. endoreg_db/templates/admin/patient_finding_intervention.html +253 -0
  213. endoreg_db/templates/admin/start_examination.html +12 -0
  214. endoreg_db/templates/timeline.html +176 -0
  215. endoreg_db/urls.py +173 -0
  216. endoreg_db/utils/__init__.py +36 -1
  217. endoreg_db/utils/dataloader.py +45 -19
  218. endoreg_db/utils/dates.py +39 -0
  219. endoreg_db/utils/hashs.py +122 -4
  220. endoreg_db/utils/names.py +74 -0
  221. endoreg_db/utils/parse_and_generate_yaml.py +46 -0
  222. endoreg_db/utils/pydantic_models/__init__.py +6 -0
  223. endoreg_db/utils/pydantic_models/db_config.py +57 -0
  224. endoreg_db/utils/validate_endo_roi.py +19 -0
  225. endoreg_db/utils/validate_subcategory_dict.py +91 -0
  226. endoreg_db/utils/video/__init__.py +13 -0
  227. endoreg_db/utils/video/extract_frames.py +121 -0
  228. endoreg_db/utils/video/transcode_videofile.py +111 -0
  229. endoreg_db/views/__init__.py +2 -0
  230. endoreg_db/views/csrf.py +7 -0
  231. endoreg_db/views/patient_views.py +90 -0
  232. endoreg_db/views/raw_video_meta_validation_views.py +38 -0
  233. endoreg_db/views/report_views.py +96 -0
  234. endoreg_db/views/video_segmentation_views.py +149 -0
  235. endoreg_db/views/views_for_timeline.py +46 -0
  236. endoreg_db/views.py +0 -3
  237. endoreg_db-0.6.1.dist-info/METADATA +151 -0
  238. endoreg_db-0.6.1.dist-info/RECORD +420 -0
  239. {endoreg_db-0.5.3.dist-info → endoreg_db-0.6.1.dist-info}/WHEEL +1 -1
  240. endoreg_db/data/active_model/data.yaml +0 -3
  241. endoreg_db/data/label/label-set/data.yaml +0 -18
  242. endoreg_db/management/commands/delete_legacy_images.py +0 -19
  243. endoreg_db/management/commands/delete_legacy_videos.py +0 -17
  244. endoreg_db/management/commands/extract_legacy_video_frames.py +0 -18
  245. endoreg_db/management/commands/import_legacy_images.py +0 -94
  246. endoreg_db/management/commands/import_legacy_videos.py +0 -76
  247. endoreg_db/management/commands/load_label_data.py +0 -67
  248. endoreg_db/migrations/0002_anonymizedimagelabel_anonymousimageannotation_and_more.py +0 -55
  249. endoreg_db/migrations/0003_anonymousimageannotation_original_image_url_and_more.py +0 -39
  250. endoreg_db/migrations/0004_alter_rawpdffile_file.py +0 -20
  251. endoreg_db/migrations/0005_uploadedfile_alter_rawpdffile_file_anonymizedfile.py +0 -40
  252. endoreg_db/migrations/0006_alter_rawpdffile_file.py +0 -20
  253. endoreg_db/migrations/0007_networkdevicelogentry_datetime_and_more.py +0 -43
  254. endoreg_db/migrations/0008_networkdevicelogentry_aglnet_ip_and_more.py +0 -28
  255. endoreg_db/migrations/0009_alter_networkdevicelogentry_vpn_service_status.py +0 -18
  256. endoreg_db/migrations/0010_remove_networkdevicelogentry_hostname.py +0 -17
  257. endoreg_db/models/legacy_data/__init__.py +0 -3
  258. endoreg_db/models/legacy_data/image.py +0 -34
  259. endoreg_db/models/patient_examination/__init__.py +0 -35
  260. endoreg_db/utils/video_metadata.py +0 -87
  261. endoreg_db-0.5.3.dist-info/METADATA +0 -28
  262. endoreg_db-0.5.3.dist-info/RECORD +0 -319
  263. /endoreg_db/{models/persons/patient/case → case_generator}/__init__.py +0 -0
  264. /endoreg_db/data/{label → ai_model_label}/label-type/data.yaml +0 -0
  265. /endoreg_db/data/{model_type → ai_model_type}/data.yaml +0 -0
  266. /endoreg_db/{data/distribution/numeric/.init → management/__init__.py} +0 -0
  267. /endoreg_db/management/commands/{load_report_reader_flag.py → load_report_reader_flag_data.py} +0 -0
  268. {endoreg_db-0.5.3.dist-info → endoreg_db-0.6.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,10 +1,11 @@
1
- # Generated by Django 4.2.15 on 2024-08-25 12:09
1
+ # Generated by Django 5.1.6 on 2025-03-08 15:58
2
2
 
3
- from django.conf import settings
4
3
  import django.core.files.storage
5
4
  import django.core.validators
6
- from django.db import migrations, models
7
5
  import django.db.models.deletion
6
+ import django.utils.timezone
7
+ from django.conf import settings
8
+ from django.db import migrations, models
8
9
 
9
10
 
10
11
  class Migration(migrations.Migration):
@@ -33,6 +34,26 @@ class Migration(migrations.Migration):
33
34
  'ordering': ['name'],
34
35
  },
35
36
  ),
37
+ migrations.CreateModel(
38
+ name='AiModel',
39
+ fields=[
40
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
41
+ ('name', models.CharField(max_length=255, unique=True)),
42
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
43
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
44
+ ('description', models.TextField(blank=True, null=True)),
45
+ ('model_type', models.CharField(blank=True, max_length=255, null=True)),
46
+ ('model_subtype', models.CharField(blank=True, max_length=255, null=True)),
47
+ ],
48
+ ),
49
+ migrations.CreateModel(
50
+ name='AnonymizedImageLabel',
51
+ fields=[
52
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
53
+ ('name', models.CharField(max_length=255, unique=True)),
54
+ ('description', models.TextField(blank=True, null=True)),
55
+ ],
56
+ ),
36
57
  migrations.CreateModel(
37
58
  name='CaseTemplateRuleType',
38
59
  fields=[
@@ -84,6 +105,18 @@ class Migration(migrations.Migration):
84
105
  ('name_en', models.CharField(blank=True, max_length=255, null=True)),
85
106
  ],
86
107
  ),
108
+ migrations.CreateModel(
109
+ name='Contraindication',
110
+ fields=[
111
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
112
+ ('name', models.CharField(max_length=100, unique=True)),
113
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
114
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
115
+ ('description', models.TextField(blank=True, null=True)),
116
+ ('description_de', models.TextField(blank=True, null=True)),
117
+ ('description_en', models.TextField(blank=True, null=True)),
118
+ ],
119
+ ),
87
120
  migrations.CreateModel(
88
121
  name='DateValueDistribution',
89
122
  fields=[
@@ -114,169 +147,145 @@ class Migration(migrations.Migration):
114
147
  ('name', models.CharField(max_length=255, unique=True)),
115
148
  ('name_de', models.CharField(blank=True, max_length=255, null=True)),
116
149
  ('name_en', models.CharField(blank=True, max_length=255, null=True)),
150
+ ('subcategories', models.JSONField(default=dict)),
151
+ ('numerical_descriptors', models.JSONField(default=dict)),
117
152
  ],
118
153
  ),
119
154
  migrations.CreateModel(
120
- name='DiseaseClassification',
155
+ name='EmissionFactor',
121
156
  fields=[
122
157
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
123
- ('name', models.CharField(max_length=255, unique=True)),
124
- ('name_de', models.CharField(blank=True, max_length=255, null=True)),
125
- ('name_en', models.CharField(blank=True, max_length=255, null=True)),
126
- ('disease', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.disease')),
158
+ ('name', models.CharField(max_length=255)),
159
+ ('name_de', models.CharField(max_length=255, null=True)),
160
+ ('name_en', models.CharField(max_length=255, null=True)),
161
+ ('value', models.FloatField()),
127
162
  ],
128
163
  ),
129
164
  migrations.CreateModel(
130
- name='DiseaseClassificationChoice',
165
+ name='EndoscopeType',
131
166
  fields=[
132
167
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
133
- ('name', models.CharField(max_length=255, unique=True)),
168
+ ('name', models.CharField(max_length=255)),
134
169
  ('name_de', models.CharField(blank=True, max_length=255, null=True)),
135
170
  ('name_en', models.CharField(blank=True, max_length=255, null=True)),
136
- ('disease_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.diseaseclassification')),
137
171
  ],
172
+ options={
173
+ 'verbose_name': 'Endoscope Type',
174
+ 'verbose_name_plural': 'Endoscope Types',
175
+ 'ordering': ['name'],
176
+ },
138
177
  ),
139
178
  migrations.CreateModel(
140
- name='EmissionFactor',
179
+ name='EventClassification',
141
180
  fields=[
142
181
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
143
- ('name', models.CharField(max_length=255)),
144
- ('name_de', models.CharField(max_length=255, null=True)),
145
- ('name_en', models.CharField(max_length=255, null=True)),
146
- ('value', models.FloatField()),
182
+ ('name', models.CharField(max_length=255, unique=True)),
183
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
184
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
147
185
  ],
148
186
  ),
149
187
  migrations.CreateModel(
150
- name='Endoscope',
188
+ name='Examination',
151
189
  fields=[
152
190
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
153
- ('name', models.CharField(max_length=255)),
154
- ('sn', models.CharField(max_length=255)),
191
+ ('name', models.CharField(max_length=100, unique=True)),
192
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
193
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
155
194
  ],
156
195
  options={
157
- 'verbose_name': 'Endoscope',
158
- 'verbose_name_plural': 'Endoscopes',
196
+ 'verbose_name': 'Examination',
197
+ 'verbose_name_plural': 'Examinations',
159
198
  'ordering': ['name'],
160
199
  },
161
200
  ),
162
201
  migrations.CreateModel(
163
- name='EndoscopeType',
202
+ name='ExaminationIndicationClassification',
164
203
  fields=[
165
204
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
166
- ('name', models.CharField(max_length=255)),
205
+ ('name', models.CharField(max_length=255, unique=True)),
167
206
  ('name_de', models.CharField(blank=True, max_length=255, null=True)),
168
207
  ('name_en', models.CharField(blank=True, max_length=255, null=True)),
169
208
  ],
170
- options={
171
- 'verbose_name': 'Endoscope Type',
172
- 'verbose_name_plural': 'Endoscope Types',
173
- 'ordering': ['name'],
174
- },
175
209
  ),
176
210
  migrations.CreateModel(
177
- name='EndoscopyProcessor',
211
+ name='ExaminationType',
178
212
  fields=[
179
213
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
180
- ('name', models.CharField(max_length=255)),
181
- ('image_width', models.IntegerField()),
182
- ('image_height', models.IntegerField()),
183
- ('endoscope_image_x', models.IntegerField()),
184
- ('endoscope_image_y', models.IntegerField()),
185
- ('endoscope_image_width', models.IntegerField()),
186
- ('endoscope_image_height', models.IntegerField()),
187
- ('examination_date_x', models.IntegerField()),
188
- ('examination_date_y', models.IntegerField()),
189
- ('examination_date_width', models.IntegerField()),
190
- ('examination_date_height', models.IntegerField()),
191
- ('examination_time_x', models.IntegerField(blank=True, null=True)),
192
- ('examination_time_y', models.IntegerField(blank=True, null=True)),
193
- ('examination_time_width', models.IntegerField(blank=True, null=True)),
194
- ('examination_time_height', models.IntegerField(blank=True, null=True)),
195
- ('patient_first_name_x', models.IntegerField()),
196
- ('patient_first_name_y', models.IntegerField()),
197
- ('patient_first_name_width', models.IntegerField()),
198
- ('patient_first_name_height', models.IntegerField()),
199
- ('patient_last_name_x', models.IntegerField()),
200
- ('patient_last_name_y', models.IntegerField()),
201
- ('patient_last_name_width', models.IntegerField()),
202
- ('patient_last_name_height', models.IntegerField()),
203
- ('patient_dob_x', models.IntegerField()),
204
- ('patient_dob_y', models.IntegerField()),
205
- ('patient_dob_width', models.IntegerField()),
206
- ('patient_dob_height', models.IntegerField()),
207
- ('endoscope_type_x', models.IntegerField(blank=True, null=True)),
208
- ('endoscope_type_y', models.IntegerField(blank=True, null=True)),
209
- ('endoscope_type_width', models.IntegerField(blank=True, null=True)),
210
- ('endoscope_type_height', models.IntegerField(blank=True, null=True)),
211
- ('endoscope_sn_x', models.IntegerField(blank=True, null=True)),
212
- ('endoscope_sn_y', models.IntegerField(blank=True, null=True)),
213
- ('endoscope_sn_width', models.IntegerField(blank=True, null=True)),
214
- ('endoscope_sn_height', models.IntegerField(blank=True, null=True)),
214
+ ('name', models.CharField(max_length=100, unique=True)),
215
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
216
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
215
217
  ],
216
218
  ),
217
219
  migrations.CreateModel(
218
- name='Event',
220
+ name='FFMpegMeta',
221
+ fields=[
222
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
223
+ ('duration', models.FloatField(blank=True, null=True)),
224
+ ('width', models.IntegerField(blank=True, null=True)),
225
+ ('height', models.IntegerField(blank=True, null=True)),
226
+ ('frame_rate', models.FloatField(blank=True, null=True)),
227
+ ('video_codec', models.CharField(blank=True, max_length=50, null=True)),
228
+ ('audio_codec', models.CharField(blank=True, max_length=50, null=True)),
229
+ ('audio_channels', models.IntegerField(blank=True, null=True)),
230
+ ('audio_sample_rate', models.IntegerField(blank=True, null=True)),
231
+ ],
232
+ ),
233
+ migrations.CreateModel(
234
+ name='FindingInterventionType',
219
235
  fields=[
220
236
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
221
237
  ('name', models.CharField(max_length=100, unique=True)),
222
238
  ('name_de', models.CharField(blank=True, max_length=100, null=True)),
223
239
  ('name_en', models.CharField(blank=True, max_length=100, null=True)),
224
240
  ('description', models.TextField(blank=True, null=True)),
241
+ ('description_de', models.TextField(blank=True, null=True)),
242
+ ('description_en', models.TextField(blank=True, null=True)),
225
243
  ],
226
244
  ),
227
245
  migrations.CreateModel(
228
- name='Examination',
246
+ name='FindingLocationClassificationChoice',
229
247
  fields=[
230
248
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
231
249
  ('name', models.CharField(max_length=100, unique=True)),
232
250
  ('name_de', models.CharField(blank=True, max_length=100, null=True)),
233
251
  ('name_en', models.CharField(blank=True, max_length=100, null=True)),
234
- ('date', models.DateField(blank=True, null=True)),
235
- ('time', models.TimeField(blank=True, null=True)),
252
+ ('description', models.TextField(blank=True, null=True)),
253
+ ('description_de', models.TextField(blank=True, null=True)),
254
+ ('description_en', models.TextField(blank=True, null=True)),
255
+ ('subcategories', models.JSONField(blank=True, null=True)),
256
+ ('numerical_descriptors', models.JSONField(blank=True, null=True)),
236
257
  ],
237
- options={
238
- 'verbose_name': 'Examination',
239
- 'verbose_name_plural': 'Examinations',
240
- 'ordering': ['name'],
241
- },
242
258
  ),
243
259
  migrations.CreateModel(
244
- name='ExaminationType',
260
+ name='FindingMorphologyClassification',
245
261
  fields=[
246
262
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
247
- ('name', models.CharField(max_length=100, unique=True)),
248
- ('name_de', models.CharField(blank=True, max_length=100, null=True)),
249
- ('name_en', models.CharField(blank=True, max_length=100, null=True)),
263
+ ('name', models.CharField(max_length=255, unique=True)),
264
+ ('name_de', models.CharField(blank=True, max_length=255)),
265
+ ('name_en', models.CharField(blank=True, max_length=255)),
266
+ ('description', models.TextField(blank=True)),
250
267
  ],
251
268
  ),
252
269
  migrations.CreateModel(
253
- name='Examiner',
270
+ name='FindingMorphologyClassificationType',
254
271
  fields=[
255
272
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
256
- ('first_name', models.CharField(max_length=255)),
257
- ('last_name', models.CharField(max_length=255)),
258
- ('dob', models.DateField(blank=True, null=True, verbose_name='Date of Birth')),
259
- ('email', models.EmailField(blank=True, max_length=255, null=True)),
260
- ('phone', models.CharField(blank=True, max_length=255, null=True)),
261
- ('is_real_person', models.BooleanField(default=True)),
262
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
273
+ ('name', models.CharField(max_length=255, unique=True)),
274
+ ('name_de', models.CharField(blank=True, max_length=255)),
275
+ ('name_en', models.CharField(blank=True, max_length=255)),
276
+ ('description', models.TextField(blank=True)),
263
277
  ],
264
- options={
265
- 'abstract': False,
266
- },
267
278
  ),
268
279
  migrations.CreateModel(
269
- name='FFMpegMeta',
280
+ name='FindingType',
270
281
  fields=[
271
282
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
272
- ('duration', models.FloatField(blank=True, null=True)),
273
- ('width', models.IntegerField(blank=True, null=True)),
274
- ('height', models.IntegerField(blank=True, null=True)),
275
- ('frame_rate', models.FloatField(blank=True, null=True)),
276
- ('video_codec', models.CharField(blank=True, max_length=50, null=True)),
277
- ('audio_codec', models.CharField(blank=True, max_length=50, null=True)),
278
- ('audio_channels', models.IntegerField(blank=True, null=True)),
279
- ('audio_sample_rate', models.IntegerField(blank=True, null=True)),
283
+ ('name', models.CharField(max_length=100, unique=True)),
284
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
285
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
286
+ ('description', models.TextField(blank=True, null=True)),
287
+ ('description_de', models.TextField(blank=True, null=True)),
288
+ ('description_en', models.TextField(blank=True, null=True)),
280
289
  ],
281
290
  ),
282
291
  migrations.CreateModel(
@@ -291,8 +300,9 @@ class Migration(migrations.Migration):
291
300
  fields=[
292
301
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
293
302
  ('frame_number', models.IntegerField()),
294
- ('image', models.ImageField(upload_to='frames')),
295
303
  ('suffix', models.CharField(max_length=255)),
304
+ ('image', models.ImageField(blank=True, null=True, upload_to='frames')),
305
+ ('is_raw', models.BooleanField(default=False)),
296
306
  ],
297
307
  options={
298
308
  'abstract': False,
@@ -330,100 +340,72 @@ class Migration(migrations.Migration):
330
340
  ],
331
341
  ),
332
342
  migrations.CreateModel(
333
- name='LabelSet',
343
+ name='LabelType',
334
344
  fields=[
335
345
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
336
346
  ('name', models.CharField(max_length=255)),
337
347
  ('description', models.TextField(blank=True, null=True)),
338
- ('version', models.IntegerField()),
339
- ('labels', models.ManyToManyField(related_name='labels', to='endoreg_db.label')),
340
348
  ],
341
349
  ),
342
350
  migrations.CreateModel(
343
- name='LabelType',
351
+ name='LastName',
344
352
  fields=[
345
353
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
346
- ('name', models.CharField(max_length=255)),
347
- ('description', models.TextField(blank=True, null=True)),
354
+ ('name', models.CharField(max_length=255, unique=True)),
348
355
  ],
349
356
  ),
350
357
  migrations.CreateModel(
351
- name='LabValue',
358
+ name='LogType',
352
359
  fields=[
353
360
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
354
- ('name', models.CharField(max_length=255, unique=True)),
355
- ('name_de', models.CharField(blank=True, max_length=255, null=True)),
356
- ('name_en', models.CharField(blank=True, max_length=255, null=True)),
357
- ('abbreviation', models.CharField(blank=True, max_length=10, null=True)),
358
- ('numeric_precision', models.IntegerField(default=3)),
359
- ('default_normal_range', models.JSONField(blank=True, null=True)),
360
- ('normal_range_age_dependent', models.BooleanField(default=False)),
361
- ('normal_range_gender_dependent', models.BooleanField(default=False)),
362
- ('normal_range_special_case', models.BooleanField(default=False)),
363
- ('default_date_value_distribution', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='default_date_value_distribution', to='endoreg_db.datevaluedistribution')),
361
+ ('name', models.CharField(max_length=255)),
362
+ ('description', models.CharField(max_length=255)),
363
+ ('created', models.DateTimeField(auto_now_add=True)),
364
+ ('updated', models.DateTimeField(auto_now=True)),
364
365
  ],
366
+ options={
367
+ 'ordering': ['name'],
368
+ },
365
369
  ),
366
370
  migrations.CreateModel(
367
- name='LastName',
371
+ name='LxClientTag',
368
372
  fields=[
369
373
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
370
- ('name', models.CharField(max_length=255, unique=True)),
374
+ ('name', models.CharField(max_length=100, unique=True)),
375
+ ('description', models.TextField(blank=True)),
371
376
  ],
372
377
  ),
373
378
  migrations.CreateModel(
374
- name='LegacyImage',
379
+ name='LxClientType',
375
380
  fields=[
376
381
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
377
- ('image', models.ImageField(upload_to='legacy_images')),
378
- ('suffix', models.CharField(max_length=255)),
382
+ ('name', models.CharField(max_length=100, unique=True)),
383
+ ('abbreviation', models.CharField(max_length=10, unique=True)),
384
+ ('description', models.TextField(blank=True)),
379
385
  ],
380
386
  ),
381
387
  migrations.CreateModel(
382
- name='LegacyVideo',
388
+ name='LxIdentityType',
383
389
  fields=[
384
390
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
385
- ('video_hash', models.CharField(max_length=255, unique=True)),
386
- ('date', models.DateField(blank=True, null=True)),
387
- ('suffix', models.CharField(max_length=255)),
388
- ('fps', models.FloatField()),
389
- ('duration', models.FloatField()),
390
- ('width', models.IntegerField()),
391
- ('height', models.IntegerField()),
392
- ('endoscope_image_x', models.IntegerField(blank=True, null=True)),
393
- ('endoscope_image_y', models.IntegerField(blank=True, null=True)),
394
- ('endoscope_image_width', models.IntegerField(blank=True, null=True)),
395
- ('endoscope_image_height', models.IntegerField(blank=True, null=True)),
396
- ('frames_extracted', models.BooleanField(default=False)),
397
- ('meta', models.JSONField(blank=True, null=True)),
398
- ('file', models.FileField(blank=True, null=True, upload_to='legacy_videos')),
399
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
400
- ('endoscopy_processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
391
+ ('name', models.CharField(max_length=100, unique=True)),
392
+ ('description', models.TextField(blank=True)),
401
393
  ],
402
- options={
403
- 'abstract': False,
404
- },
405
394
  ),
406
395
  migrations.CreateModel(
407
- name='LogType',
396
+ name='LxPermission',
408
397
  fields=[
409
398
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
410
- ('name', models.CharField(max_length=255)),
411
- ('description', models.CharField(max_length=255)),
412
- ('created', models.DateTimeField(auto_now_add=True)),
413
- ('updated', models.DateTimeField(auto_now=True)),
399
+ ('name', models.CharField(max_length=100, unique=True)),
400
+ ('description', models.TextField(blank=True)),
414
401
  ],
415
- options={
416
- 'ordering': ['name'],
417
- },
418
402
  ),
419
403
  migrations.CreateModel(
420
- name='Material',
404
+ name='LxUser',
421
405
  fields=[
422
406
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
423
- ('name', models.CharField(max_length=255)),
424
- ('name_de', models.CharField(max_length=255, null=True)),
425
- ('name_en', models.CharField(max_length=255, null=True)),
426
- ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
407
+ ('name', models.CharField(max_length=100, unique=True)),
408
+ ('description', models.TextField(blank=True)),
427
409
  ],
428
410
  ),
429
411
  migrations.CreateModel(
@@ -441,16 +423,6 @@ class Migration(migrations.Migration):
441
423
  ('adapt_to_risk', models.BooleanField(default=False)),
442
424
  ],
443
425
  ),
444
- migrations.CreateModel(
445
- name='MedicationIndication',
446
- fields=[
447
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
448
- ('name', models.CharField(max_length=255, unique=True)),
449
- ('classification_choices', models.ManyToManyField(to='endoreg_db.diseaseclassificationchoice')),
450
- ('diseases', models.ManyToManyField(to='endoreg_db.disease')),
451
- ('events', models.ManyToManyField(to='endoreg_db.event')),
452
- ],
453
- ),
454
426
  migrations.CreateModel(
455
427
  name='MedicationIndicationType',
456
428
  fields=[
@@ -472,41 +444,15 @@ class Migration(migrations.Migration):
472
444
  ],
473
445
  ),
474
446
  migrations.CreateModel(
475
- name='MedicationSchedule',
447
+ name='ModelType',
476
448
  fields=[
477
449
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
478
450
  ('name', models.CharField(max_length=255)),
479
- ('name_de', models.CharField(blank=True, max_length=255, null=True)),
480
- ('name_en', models.CharField(blank=True, max_length=255, null=True)),
481
451
  ('description', models.TextField(blank=True, null=True)),
482
- ('therapy_duration_d', models.FloatField(blank=True, null=True)),
483
- ('dose', models.FloatField()),
484
- ('intake_times', models.ManyToManyField(to='endoreg_db.medicationintaketime')),
485
- ('medication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.medication')),
486
452
  ],
487
453
  ),
488
454
  migrations.CreateModel(
489
- name='ModelMeta',
490
- fields=[
491
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
492
- ('name', models.CharField(max_length=255)),
493
- ('version', models.CharField(max_length=255)),
494
- ('weights', models.FileField(upload_to='weights/')),
495
- ('description', models.TextField(blank=True, null=True)),
496
- ('date_created', models.DateTimeField(auto_now_add=True)),
497
- ('labelset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='models', to='endoreg_db.labelset')),
498
- ],
499
- ),
500
- migrations.CreateModel(
501
- name='ModelType',
502
- fields=[
503
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
504
- ('name', models.CharField(max_length=255)),
505
- ('description', models.TextField(blank=True, null=True)),
506
- ],
507
- ),
508
- migrations.CreateModel(
509
- name='MultipleCategoricalValueDistribution',
455
+ name='MultipleCategoricalValueDistribution',
510
456
  fields=[
511
457
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
512
458
  ('name', models.CharField(max_length=100)),
@@ -557,41 +503,13 @@ class Migration(migrations.Migration):
557
503
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
558
504
  ('name', models.CharField(max_length=100)),
559
505
  ('distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal'), ('skewed_normal', 'Skewed Normal')], max_length=20)),
560
- ('min_value', models.FloatField()),
561
- ('max_value', models.FloatField()),
562
- ('mean', models.FloatField(blank=True, null=True)),
563
- ('std_dev', models.FloatField(blank=True, null=True)),
564
- ('skewness', models.FloatField(blank=True, null=True)),
565
- ],
566
- options={
567
- 'abstract': False,
568
- },
569
- ),
570
- migrations.CreateModel(
571
- name='Patient',
572
- fields=[
573
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
574
- ('first_name', models.CharField(max_length=255)),
575
- ('last_name', models.CharField(max_length=255)),
576
- ('dob', models.DateField(blank=True, null=True, verbose_name='Date of Birth')),
577
- ('email', models.EmailField(blank=True, max_length=255, null=True)),
578
- ('phone', models.CharField(blank=True, max_length=255, null=True)),
579
- ('is_real_person', models.BooleanField(default=True)),
580
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
581
- ('gender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender')),
506
+ ('min_descriptor', models.CharField(max_length=20)),
507
+ ('max_descriptor', models.CharField(max_length=20)),
582
508
  ],
583
509
  options={
584
510
  'abstract': False,
585
511
  },
586
512
  ),
587
- migrations.CreateModel(
588
- name='PatientLabSample',
589
- fields=[
590
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
591
- ('date', models.DateTimeField()),
592
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lab_samples', to='endoreg_db.patient')),
593
- ],
594
- ),
595
513
  migrations.CreateModel(
596
514
  name='PatientLabSampleType',
597
515
  fields=[
@@ -602,21 +520,6 @@ class Migration(migrations.Migration):
602
520
  ('description', models.TextField(blank=True, null=True)),
603
521
  ],
604
522
  ),
605
- migrations.CreateModel(
606
- name='PatientMedication',
607
- fields=[
608
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
609
- ('dosage', models.JSONField()),
610
- ('active', models.BooleanField(default=True)),
611
- ('medication_indication', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='patient_medications', to='endoreg_db.medicationindication')),
612
- ('medication_schedules', models.ManyToManyField(to='endoreg_db.medicationschedule')),
613
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
614
- ],
615
- options={
616
- 'verbose_name': 'Patient Medication',
617
- 'verbose_name_plural': 'Patient Medications',
618
- },
619
- ),
620
523
  migrations.CreateModel(
621
524
  name='PdfType',
622
525
  fields=[
@@ -660,6 +563,14 @@ class Migration(migrations.Migration):
660
563
  ('description', models.TextField(blank=True, null=True)),
661
564
  ],
662
565
  ),
566
+ migrations.CreateModel(
567
+ name='QuizQuestion',
568
+ fields=[
569
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
570
+ ('text', models.TextField()),
571
+ ('description', models.TextField(blank=True, null=True)),
572
+ ],
573
+ ),
663
574
  migrations.CreateModel(
664
575
  name='QuizQuestionType',
665
576
  fields=[
@@ -668,6 +579,19 @@ class Migration(migrations.Migration):
668
579
  ('description', models.TextField(blank=True, null=True)),
669
580
  ],
670
581
  ),
582
+ migrations.CreateModel(
583
+ name='RawFrame',
584
+ fields=[
585
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
586
+ ('frame_number', models.IntegerField()),
587
+ ('suffix', models.CharField(max_length=255)),
588
+ ('image', models.ImageField(blank=True, null=True, upload_to='frames')),
589
+ ('is_raw', models.BooleanField(default=False)),
590
+ ],
591
+ options={
592
+ 'abstract': False,
593
+ },
594
+ ),
671
595
  migrations.CreateModel(
672
596
  name='ReportReaderFlag',
673
597
  fields=[
@@ -685,21 +609,6 @@ class Migration(migrations.Migration):
685
609
  ('name_en', models.CharField(max_length=255, null=True)),
686
610
  ],
687
611
  ),
688
- migrations.CreateModel(
689
- name='Rule',
690
- fields=[
691
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
692
- ('name', models.CharField(max_length=255, unique=True)),
693
- ('name_de', models.CharField(blank=True, max_length=255, null=True)),
694
- ('name_en', models.CharField(blank=True, max_length=255, null=True)),
695
- ('description', models.TextField(blank=True, null=True)),
696
- ('attribute_key', models.CharField(max_length=255)),
697
- ],
698
- options={
699
- 'verbose_name': 'Rule',
700
- 'verbose_name_plural': 'Rules',
701
- },
702
- ),
703
612
  migrations.CreateModel(
704
613
  name='RuleAttributeDType',
705
614
  fields=[
@@ -722,18 +631,6 @@ class Migration(migrations.Migration):
722
631
  'verbose_name_plural': 'Rule Types',
723
632
  },
724
633
  ),
725
- migrations.CreateModel(
726
- name='SensitiveMeta',
727
- fields=[
728
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
729
- ('examination_date', models.DateField(blank=True, null=True)),
730
- ('patient_first_name', models.CharField(blank=True, max_length=255, null=True)),
731
- ('patient_last_name', models.CharField(blank=True, max_length=255, null=True)),
732
- ('patient_dob', models.DateField(blank=True, null=True)),
733
- ('endoscope_type', models.CharField(blank=True, max_length=255, null=True)),
734
- ('endoscope_sn', models.CharField(blank=True, max_length=255, null=True)),
735
- ],
736
- ),
737
634
  migrations.CreateModel(
738
635
  name='SingleCategoricalValueDistribution',
739
636
  fields=[
@@ -797,29 +694,13 @@ class Migration(migrations.Migration):
797
694
  ],
798
695
  ),
799
696
  migrations.CreateModel(
800
- name='Video',
697
+ name='UploadedFile',
801
698
  fields=[
802
699
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
803
- ('file', models.FileField(blank=True, null=True, upload_to='raw_videos')),
804
- ('video_hash', models.CharField(max_length=255, unique=True)),
805
- ('date', models.DateField(blank=True, null=True)),
806
- ('suffix', models.CharField(max_length=255)),
807
- ('fps', models.FloatField()),
808
- ('duration', models.FloatField()),
809
- ('width', models.IntegerField()),
810
- ('height', models.IntegerField()),
811
- ('endoscope_image_x', models.IntegerField(blank=True, null=True)),
812
- ('endoscope_image_y', models.IntegerField(blank=True, null=True)),
813
- ('endoscope_image_width', models.IntegerField(blank=True, null=True)),
814
- ('endoscope_image_height', models.IntegerField(blank=True, null=True)),
815
- ('frames_extracted', models.BooleanField(default=False)),
816
- ('meta', models.JSONField(blank=True, null=True)),
817
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
818
- ('endoscopy_processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
700
+ ('original_file', models.FileField(upload_to='uploads/original/')),
701
+ ('upload_date', models.DateTimeField(default=django.utils.timezone.now)),
702
+ ('description', models.TextField(blank=True, null=True)),
819
703
  ],
820
- options={
821
- 'abstract': False,
822
- },
823
704
  ),
824
705
  migrations.CreateModel(
825
706
  name='VideoImportMeta',
@@ -833,276 +714,736 @@ class Migration(migrations.Migration):
833
714
  ],
834
715
  ),
835
716
  migrations.CreateModel(
836
- name='Waste',
717
+ name='VideoSegmentationLabel',
837
718
  fields=[
838
719
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
839
720
  ('name', models.CharField(max_length=255)),
840
- ('name_de', models.CharField(max_length=255, null=True)),
841
- ('name_en', models.CharField(max_length=255, null=True)),
721
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
722
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
723
+ ('description', models.TextField(blank=True, null=True)),
724
+ ('color', models.CharField(blank=True, max_length=255, null=True)),
725
+ ('order_priority', models.IntegerField(default=0)),
842
726
  ],
843
727
  ),
844
728
  migrations.CreateModel(
845
- name='VideoPredictionMeta',
729
+ name='Waste',
846
730
  fields=[
847
731
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
848
- ('date_created', models.DateTimeField(auto_now_add=True)),
849
- ('date_modified', models.DateTimeField(auto_now=True)),
850
- ('prediction_array', models.BinaryField(blank=True, null=True)),
851
- ('model_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.modelmeta')),
852
- ('video', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='video_prediction_meta', to='endoreg_db.video')),
732
+ ('name', models.CharField(max_length=255)),
733
+ ('name_de', models.CharField(max_length=255, null=True)),
734
+ ('name_en', models.CharField(max_length=255, null=True)),
853
735
  ],
854
- options={
855
- 'abstract': False,
856
- 'unique_together': {('model_meta', 'video')},
857
- },
858
736
  ),
859
737
  migrations.CreateModel(
860
- name='VideoMeta',
738
+ name='AnonymousImageAnnotation',
861
739
  fields=[
862
740
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
863
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
864
- ('endoscope', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscope')),
865
- ('ffmpeg_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ffmpegmeta')),
866
- ('import_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videoimportmeta')),
867
- ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
741
+ ('image_name', models.CharField(max_length=255)),
742
+ ('original_image_url', models.CharField(default='https://example.com/placeholder.jpg', max_length=255)),
743
+ ('slug', models.SlugField(blank=True, null=True, unique=True)),
744
+ ('polyp_count', models.IntegerField()),
745
+ ('comments', models.TextField(blank=True, null=True)),
746
+ ('gender', models.CharField(max_length=255)),
747
+ ('name_image_url', models.CharField(max_length=255)),
748
+ ('date_created', models.DateTimeField(auto_now_add=True)),
749
+ ('processed', models.BooleanField(default=False)),
750
+ ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.anonymizedimagelabel')),
868
751
  ],
869
752
  ),
870
- migrations.AddField(
871
- model_name='video',
872
- name='import_meta',
873
- field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videoimportmeta'),
874
- ),
875
- migrations.AddField(
876
- model_name='video',
877
- name='patient',
878
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient'),
879
- ),
880
753
  migrations.CreateModel(
881
- name='TransportRoute',
754
+ name='CaseTemplateRule',
882
755
  fields=[
883
756
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
884
- ('distance', models.FloatField()),
885
757
  ('name', models.CharField(max_length=255)),
886
758
  ('name_de', models.CharField(max_length=255, null=True)),
887
759
  ('name_en', models.CharField(max_length=255, null=True)),
888
- ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
889
- ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
760
+ ('description', models.TextField(blank=True, null=True)),
761
+ ('parent_model', models.CharField(blank=True, max_length=255, null=True)),
762
+ ('parent_field', models.CharField(blank=True, max_length=255, null=True)),
763
+ ('target_field', models.CharField(blank=True, max_length=255, null=True)),
764
+ ('target_model', models.CharField(blank=True, max_length=255, null=True)),
765
+ ('rule_values', models.JSONField(blank=True, null=True)),
766
+ ('extra_parameters', models.JSONField(blank=True, null=True)),
767
+ ('chained_rules', models.ManyToManyField(related_name='calling_rules', to='endoreg_db.casetemplaterule')),
768
+ ('rule_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.casetemplateruletype')),
769
+ ('value_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.casetemplaterulevaluetype')),
770
+ ('date_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.datevaluedistribution')),
771
+ ('multiple_categorical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.multiplecategoricalvaluedistribution')),
772
+ ('numerical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.numericvaluedistribution')),
773
+ ('single_categorical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.singlecategoricalvaluedistribution')),
890
774
  ],
891
775
  ),
892
776
  migrations.CreateModel(
893
- name='Ruleset',
777
+ name='CaseTemplate',
894
778
  fields=[
895
779
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
896
780
  ('name', models.CharField(max_length=255, unique=True)),
897
- ('name_de', models.CharField(blank=True, max_length=255, null=True)),
898
- ('name_en', models.CharField(blank=True, max_length=255, null=True)),
899
- ('rules', models.ManyToManyField(to='endoreg_db.rule')),
781
+ ('description', models.TextField(blank=True, null=True)),
782
+ ('rules', models.ManyToManyField(to='endoreg_db.casetemplaterule')),
783
+ ('secondary_rules', models.ManyToManyField(related_name='secondary_rules', to='endoreg_db.casetemplaterule')),
784
+ ('template_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='case_templates', to='endoreg_db.casetemplatetype')),
900
785
  ],
901
786
  ),
902
- migrations.AddField(
903
- model_name='rule',
904
- name='attribute_dtype',
905
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ruleattributedtype'),
906
- ),
907
- migrations.AddField(
908
- model_name='rule',
909
- name='rule_type',
910
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ruletype'),
911
- ),
912
787
  migrations.CreateModel(
913
- name='ReportReaderConfig',
788
+ name='DiseaseClassification',
914
789
  fields=[
915
790
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
916
- ('locale', models.CharField(default='de_DE', max_length=10)),
917
- ('text_date_format', models.CharField(default='%d.%m.%Y', max_length=10)),
918
- ('cut_off_above', models.ManyToManyField(related_name='report_reader_configs_cut_off_above', to='endoreg_db.reportreaderflag')),
919
- ('cut_off_below', models.ManyToManyField(related_name='report_reader_configs_cut_off_below', to='endoreg_db.reportreaderflag')),
920
- ('endoscope_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_endoscope_info_line', to='endoreg_db.reportreaderflag')),
921
- ('examiner_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_examiner_info_line', to='endoreg_db.reportreaderflag')),
922
- ('first_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.firstname')),
923
- ('last_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.lastname')),
924
- ('patient_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_patient_info_line', to='endoreg_db.reportreaderflag')),
791
+ ('name', models.CharField(max_length=255, unique=True)),
792
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
793
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
794
+ ('disease', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='disease_classifications', to='endoreg_db.disease')),
925
795
  ],
926
796
  ),
927
797
  migrations.CreateModel(
928
- name='ReportFile',
798
+ name='DiseaseClassificationChoice',
929
799
  fields=[
930
800
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
931
- ('pdf', models.FileField(blank=True, null=True, upload_to='raw_report_pdfs')),
932
- ('pdf_hash', models.CharField(max_length=255, unique=True)),
933
- ('meta', models.JSONField(blank=True, null=True)),
934
- ('text', models.TextField(blank=True, null=True)),
935
- ('text_anonymized', models.TextField(blank=True, null=True)),
936
- ('date', models.DateField(blank=True, null=True)),
937
- ('time', models.TimeField(blank=True, null=True)),
938
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
939
- ('examiner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.examiner')),
940
- ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
801
+ ('name', models.CharField(max_length=255, unique=True)),
802
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
803
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
804
+ ('disease_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='disease_classification_choices', to='endoreg_db.diseaseclassification')),
941
805
  ],
942
806
  ),
943
807
  migrations.CreateModel(
944
- name='ReferenceProduct',
808
+ name='DroppedName',
945
809
  fields=[
946
810
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
947
811
  ('name', models.CharField(max_length=255)),
948
- ('emission_factor_package', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_product_package', to='endoreg_db.emissionfactor')),
949
- ('emission_factor_product', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_product_product', to='endoreg_db.emissionfactor')),
950
- ('emission_factor_total', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
951
- ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.product')),
952
- ('product_group', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='reference_product', to='endoreg_db.productgroup')),
812
+ ('gender', models.CharField(max_length=255)),
813
+ ('x', models.FloatField()),
814
+ ('y', models.FloatField()),
815
+ ('name_image_url', models.CharField(max_length=255)),
816
+ ('box_coordinates', models.CharField(blank=True, max_length=255, null=True)),
817
+ ('annotation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dropped_names', to='endoreg_db.anonymousimageannotation')),
953
818
  ],
954
819
  ),
955
820
  migrations.CreateModel(
956
- name='RawVideoFile',
821
+ name='Endoscope',
957
822
  fields=[
958
823
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
959
- ('uuid', models.UUIDField()),
960
- ('file', models.FileField(upload_to='raw_data/')),
961
- ('original_file_name', models.CharField(max_length=255)),
962
- ('video_hash', models.CharField(max_length=255, unique=True)),
963
- ('uploaded_at', models.DateTimeField(auto_now_add=True)),
964
- ('state_frames_required', models.BooleanField(default=True)),
965
- ('state_frames_extracted', models.BooleanField(default=False)),
966
- ('state_initial_prediction_required', models.BooleanField(default=True)),
967
- ('state_initial_prediction_completed', models.BooleanField(default=False)),
968
- ('state_initial_prediction_import_required', models.BooleanField(default=True)),
969
- ('state_initial_prediction_import_completed', models.BooleanField(default=False)),
970
- ('state_ocr_required', models.BooleanField(default=True)),
971
- ('state_ocr_completed', models.BooleanField(default=False)),
972
- ('state_outside_validated', models.BooleanField(default=False)),
973
- ('state_ocr_result_validated', models.BooleanField(default=False)),
974
- ('state_sensitive_data_retrieved', models.BooleanField(default=False)),
975
- ('state_histology_required', models.BooleanField(blank=True, null=True)),
976
- ('state_histology_available', models.BooleanField(default=False)),
977
- ('state_follow_up_intervention_required', models.BooleanField(blank=True, null=True)),
978
- ('state_follow_up_intervention_available', models.BooleanField(default=False)),
979
- ('state_dataset_complete', models.BooleanField(default=False)),
980
- ('state_anonym_video_required', models.BooleanField(default=True)),
981
- ('state_anonym_video_performed', models.BooleanField(default=False)),
982
- ('state_original_reports_deleted', models.BooleanField(default=False)),
983
- ('state_original_video_deleted', models.BooleanField(default=False)),
984
- ('state_finalized', models.BooleanField(default=False)),
985
- ('frame_dir', models.CharField(max_length=255)),
986
- ('prediction_dir', models.CharField(max_length=255)),
987
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
988
- ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
989
- ('sensitive_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.sensitivemeta')),
990
- ('video_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videometa')),
824
+ ('name', models.CharField(max_length=255)),
825
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
826
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
827
+ ('sn', models.CharField(max_length=255)),
828
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='endoscopes', to='endoreg_db.center')),
829
+ ('endoscope_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='endoscopes', to='endoreg_db.endoscopetype')),
991
830
  ],
831
+ options={
832
+ 'verbose_name': 'Endoscope',
833
+ 'verbose_name_plural': 'Endoscopes',
834
+ 'ordering': ['name'],
835
+ },
992
836
  ),
993
837
  migrations.CreateModel(
994
- name='RawPdfFile',
838
+ name='EndoscopyProcessor',
995
839
  fields=[
996
840
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
997
- ('file', models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/home/agl-admin/agl-monitor/agl_monitor/agl_monitor/erc_data/raw_pdf'), upload_to='raw_pdf/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])])),
998
- ('pdf_hash', models.CharField(max_length=255, unique=True)),
999
- ('state_report_processing_required', models.BooleanField(default=True)),
1000
- ('state_report_processed', models.BooleanField(default=False)),
1001
- ('text', models.TextField(blank=True, null=True)),
1002
- ('anonymized_text', models.TextField(blank=True, null=True)),
1003
- ('raw_meta', models.JSONField(blank=True, null=True)),
1004
- ('created_at', models.DateTimeField(auto_now_add=True)),
1005
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1006
- ('pdf_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.pdftype')),
1007
- ('sensitive_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='raw_pdf_file', to='endoreg_db.sensitivemeta')),
1008
- ],
1009
- ),
1010
- migrations.CreateModel(
1011
- name='QuizQuestion',
1012
- fields=[
841
+ ('name', models.CharField(max_length=255)),
842
+ ('image_width', models.IntegerField()),
843
+ ('image_height', models.IntegerField()),
844
+ ('endoscope_image_x', models.IntegerField()),
845
+ ('endoscope_image_y', models.IntegerField()),
846
+ ('endoscope_image_width', models.IntegerField()),
847
+ ('endoscope_image_height', models.IntegerField()),
848
+ ('examination_date_x', models.IntegerField()),
849
+ ('examination_date_y', models.IntegerField()),
850
+ ('examination_date_width', models.IntegerField()),
851
+ ('examination_date_height', models.IntegerField()),
852
+ ('examination_time_x', models.IntegerField(blank=True, null=True)),
853
+ ('examination_time_y', models.IntegerField(blank=True, null=True)),
854
+ ('examination_time_width', models.IntegerField(blank=True, null=True)),
855
+ ('examination_time_height', models.IntegerField(blank=True, null=True)),
856
+ ('patient_first_name_x', models.IntegerField()),
857
+ ('patient_first_name_y', models.IntegerField()),
858
+ ('patient_first_name_width', models.IntegerField()),
859
+ ('patient_first_name_height', models.IntegerField()),
860
+ ('patient_last_name_x', models.IntegerField()),
861
+ ('patient_last_name_y', models.IntegerField()),
862
+ ('patient_last_name_width', models.IntegerField()),
863
+ ('patient_last_name_height', models.IntegerField()),
864
+ ('patient_dob_x', models.IntegerField()),
865
+ ('patient_dob_y', models.IntegerField()),
866
+ ('patient_dob_width', models.IntegerField()),
867
+ ('patient_dob_height', models.IntegerField()),
868
+ ('endoscope_type_x', models.IntegerField(blank=True, null=True)),
869
+ ('endoscope_type_y', models.IntegerField(blank=True, null=True)),
870
+ ('endoscope_type_width', models.IntegerField(blank=True, null=True)),
871
+ ('endoscope_type_height', models.IntegerField(blank=True, null=True)),
872
+ ('endoscope_sn_x', models.IntegerField(blank=True, null=True)),
873
+ ('endoscope_sn_y', models.IntegerField(blank=True, null=True)),
874
+ ('endoscope_sn_width', models.IntegerField(blank=True, null=True)),
875
+ ('endoscope_sn_height', models.IntegerField(blank=True, null=True)),
876
+ ('centers', models.ManyToManyField(blank=True, related_name='endoscopy_processors', to='endoreg_db.center')),
877
+ ],
878
+ ),
879
+ migrations.CreateModel(
880
+ name='Event',
881
+ fields=[
1013
882
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1014
- ('text', models.TextField()),
883
+ ('name', models.CharField(max_length=100, unique=True)),
884
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
885
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
1015
886
  ('description', models.TextField(blank=True, null=True)),
1016
- ('question_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.quizquestiontype')),
887
+ ('event_classification', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='events', to='endoreg_db.eventclassification')),
1017
888
  ],
1018
889
  ),
1019
890
  migrations.CreateModel(
1020
- name='QuizAnswer',
891
+ name='EventClassificationChoice',
1021
892
  fields=[
1022
893
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1023
- ('text_value', models.CharField(blank=True, max_length=255, null=True)),
1024
- ('number_value', models.FloatField(blank=True, null=True)),
1025
- ('last_updated', models.DateTimeField(auto_now=True)),
1026
- ('answer_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.quizanswertype')),
1027
- ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.quizquestion')),
894
+ ('name', models.CharField(max_length=255, unique=True)),
895
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
896
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
897
+ ('subcategories', models.JSONField(default=dict)),
898
+ ('numerical_descriptors', models.JSONField(default=dict)),
899
+ ('event_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='event_classification_choices', to='endoreg_db.eventclassification')),
1028
900
  ],
1029
901
  ),
1030
902
  migrations.CreateModel(
1031
- name='ProductWeight',
903
+ name='ExaminationIndication',
1032
904
  fields=[
1033
905
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1034
- ('name', models.CharField(max_length=255, null=True)),
1035
- ('measured', models.FloatField(null=True)),
1036
- ('verified', models.FloatField(null=True)),
1037
- ('manufacturer', models.FloatField(null=True)),
1038
- ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.product')),
1039
- ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
906
+ ('name', models.CharField(max_length=255, unique=True)),
907
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
908
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
909
+ ('examination', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='indications', to='endoreg_db.examination')),
910
+ ('classification', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='indications', to='endoreg_db.examinationindicationclassification')),
1040
911
  ],
1041
912
  ),
1042
913
  migrations.CreateModel(
1043
- name='ProductMaterial',
914
+ name='ExaminationIndicationClassificationChoice',
1044
915
  fields=[
1045
916
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1046
- ('component', models.CharField(max_length=255)),
1047
- ('quantity', models.FloatField()),
1048
- ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.material')),
1049
- ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='product_materials', to='endoreg_db.product')),
1050
- ('unit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
917
+ ('name', models.CharField(max_length=255, unique=True)),
918
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
919
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
920
+ ('subcategories', models.JSONField(default=dict)),
921
+ ('numerical_descriptors', models.JSONField(default=dict)),
922
+ ('classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='choices', to='endoreg_db.examinationindicationclassification')),
923
+ ],
924
+ ),
925
+ migrations.CreateModel(
926
+ name='ExaminationTimeType',
927
+ fields=[
928
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
929
+ ('name', models.CharField(max_length=100, unique=True)),
930
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
931
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
932
+ ('examinations', models.ManyToManyField(blank=True, to='endoreg_db.examination')),
933
+ ],
934
+ options={
935
+ 'verbose_name': 'Examination Time Type',
936
+ 'verbose_name_plural': 'Examination Time Types',
937
+ 'ordering': ['name'],
938
+ },
939
+ ),
940
+ migrations.CreateModel(
941
+ name='ExaminationTime',
942
+ fields=[
943
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
944
+ ('name', models.CharField(max_length=100, unique=True)),
945
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
946
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
947
+ ('start_time', models.TimeField(blank=True, null=True)),
948
+ ('end_time', models.TimeField(blank=True, null=True)),
949
+ ('time_types', models.ManyToManyField(blank=True, to='endoreg_db.examinationtimetype')),
1051
950
  ],
951
+ options={
952
+ 'verbose_name': 'Examination Time',
953
+ 'verbose_name_plural': 'Examination Times',
954
+ 'ordering': ['name'],
955
+ },
1052
956
  ),
1053
957
  migrations.AddField(
1054
- model_name='product',
1055
- name='product_group',
1056
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.productgroup'),
958
+ model_name='examination',
959
+ name='examination_types',
960
+ field=models.ManyToManyField(blank=True, to='endoreg_db.examinationtype'),
961
+ ),
962
+ migrations.CreateModel(
963
+ name='FindingIntervention',
964
+ fields=[
965
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
966
+ ('name', models.CharField(max_length=100, unique=True)),
967
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
968
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
969
+ ('description', models.TextField(blank=True, null=True)),
970
+ ('description_de', models.TextField(blank=True, null=True)),
971
+ ('description_en', models.TextField(blank=True, null=True)),
972
+ ('contraindications', models.ManyToManyField(blank=True, related_name='contraindicating_finding_interventions', to='endoreg_db.contraindication')),
973
+ ('intervention_types', models.ManyToManyField(blank=True, related_name='interventions', to='endoreg_db.findinginterventiontype')),
974
+ ],
975
+ ),
976
+ migrations.CreateModel(
977
+ name='Finding',
978
+ fields=[
979
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
980
+ ('name', models.CharField(max_length=100, unique=True)),
981
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
982
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
983
+ ('description', models.TextField(blank=True, null=True)),
984
+ ('description_de', models.TextField(blank=True, null=True)),
985
+ ('description_en', models.TextField(blank=True, null=True)),
986
+ ('examinations', models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.examination')),
987
+ ('causing_finding_interventions', models.ManyToManyField(blank=True, related_name='causing_findings', to='endoreg_db.findingintervention')),
988
+ ('finding_interventions', models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.findingintervention')),
989
+ ('opt_causing_finding_interventions', models.ManyToManyField(blank=True, related_name='opt_causing_findings', to='endoreg_db.findingintervention')),
990
+ ('optional_morphology_classification_types', models.ManyToManyField(blank=True, related_name='optional_for_findings', to='endoreg_db.findingmorphologyclassificationtype')),
991
+ ('required_morphology_classification_types', models.ManyToManyField(blank=True, related_name='required_by_findings', to='endoreg_db.findingmorphologyclassificationtype')),
992
+ ('finding_types', models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.findingtype')),
993
+ ],
994
+ ),
995
+ migrations.CreateModel(
996
+ name='FindingMorphologyClassificationChoice',
997
+ fields=[
998
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
999
+ ('name', models.CharField(max_length=255, unique=True)),
1000
+ ('name_de', models.CharField(blank=True, max_length=255)),
1001
+ ('name_en', models.CharField(blank=True, max_length=255)),
1002
+ ('description', models.TextField(blank=True)),
1003
+ ('subcategories', models.JSONField(default=dict)),
1004
+ ('numerical_descriptors', models.JSONField(default=dict)),
1005
+ ('classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='choices', to='endoreg_db.findingmorphologyclassification')),
1006
+ ],
1057
1007
  ),
1058
1008
  migrations.AddField(
1059
- model_name='product',
1060
- name='transport_route',
1061
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.transportroute'),
1009
+ model_name='findingmorphologyclassification',
1010
+ name='classification_type',
1011
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.findingmorphologyclassificationtype'),
1062
1012
  ),
1063
1013
  migrations.CreateModel(
1064
- name='PortalUserInfo',
1014
+ name='FindingLocationClassification',
1065
1015
  fields=[
1066
1016
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1067
- ('works_in_endoscopy', models.BooleanField(blank=True, null=True)),
1068
- ('profession', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.profession')),
1069
- ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
1017
+ ('name', models.CharField(max_length=100, unique=True)),
1018
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
1019
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
1020
+ ('description', models.TextField(blank=True, null=True)),
1021
+ ('description_de', models.TextField(blank=True, null=True)),
1022
+ ('description_en', models.TextField(blank=True, null=True)),
1023
+ ('examinations', models.ManyToManyField(blank=True, related_name='location_classifications', to='endoreg_db.examination')),
1024
+ ('findings', models.ManyToManyField(blank=True, related_name='location_classifications', to='endoreg_db.finding')),
1025
+ ('choices', models.ManyToManyField(blank=True, related_name='location_classifications', to='endoreg_db.findinglocationclassificationchoice')),
1026
+ ('finding_types', models.ManyToManyField(blank=True, related_name='location_classifications', to='endoreg_db.findingtype')),
1070
1027
  ],
1071
1028
  ),
1072
1029
  migrations.AddField(
1073
- model_name='pdftype',
1074
- name='cut_off_above_lines',
1075
- field=models.ManyToManyField(related_name='pdf_type_cut_off_above_lines', to='endoreg_db.reportreaderflag'),
1030
+ model_name='center',
1031
+ name='first_names',
1032
+ field=models.ManyToManyField(related_name='centers', to='endoreg_db.firstname'),
1033
+ ),
1034
+ migrations.CreateModel(
1035
+ name='Examiner',
1036
+ fields=[
1037
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1038
+ ('first_name', models.CharField(max_length=255)),
1039
+ ('last_name', models.CharField(max_length=255)),
1040
+ ('dob', models.DateField(blank=True, null=True, verbose_name='Date of Birth')),
1041
+ ('email', models.EmailField(blank=True, max_length=255, null=True)),
1042
+ ('phone', models.CharField(blank=True, max_length=255, null=True)),
1043
+ ('is_real_person', models.BooleanField(default=True)),
1044
+ ('hash', models.CharField(max_length=255, unique=True)),
1045
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1046
+ ('gender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender')),
1047
+ ],
1048
+ options={
1049
+ 'abstract': False,
1050
+ },
1051
+ ),
1052
+ migrations.CreateModel(
1053
+ name='BinaryClassificationAnnotationTask',
1054
+ fields=[
1055
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1056
+ ('is_finished', models.BooleanField(default=False)),
1057
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1058
+ ('date_finished', models.DateTimeField(blank=True, null=True)),
1059
+ ('image_path', models.CharField(blank=True, max_length=255, null=True)),
1060
+ ('labelstudio_project_id', models.IntegerField(blank=True, null=True)),
1061
+ ('labelstudio_task_id', models.IntegerField(blank=True, null=True)),
1062
+ ('image_type', models.CharField(default='frame', max_length=255)),
1063
+ ('frame', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='binary_classification_annotation_tasks', to='endoreg_db.frame')),
1064
+ ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.label')),
1065
+ ],
1066
+ options={
1067
+ 'abstract': False,
1068
+ },
1069
+ ),
1070
+ migrations.CreateModel(
1071
+ name='LabelSet',
1072
+ fields=[
1073
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1074
+ ('name', models.CharField(max_length=255)),
1075
+ ('description', models.TextField(blank=True, null=True)),
1076
+ ('version', models.IntegerField()),
1077
+ ('labels', models.ManyToManyField(related_name='labels', to='endoreg_db.label')),
1078
+ ],
1076
1079
  ),
1077
1080
  migrations.AddField(
1078
- model_name='pdftype',
1079
- name='cut_off_below_lines',
1080
- field=models.ManyToManyField(related_name='pdf_type_cut_off_below_lines', to='endoreg_db.reportreaderflag'),
1081
+ model_name='label',
1082
+ name='label_type',
1083
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='labels', to='endoreg_db.labeltype'),
1084
+ ),
1085
+ migrations.CreateModel(
1086
+ name='LabValue',
1087
+ fields=[
1088
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1089
+ ('name', models.CharField(max_length=255, unique=True)),
1090
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
1091
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
1092
+ ('abbreviation', models.CharField(blank=True, max_length=10, null=True)),
1093
+ ('numeric_precision', models.IntegerField(default=3)),
1094
+ ('default_normal_range', models.JSONField(blank=True, null=True)),
1095
+ ('normal_range_age_dependent', models.BooleanField(default=False)),
1096
+ ('normal_range_gender_dependent', models.BooleanField(default=False)),
1097
+ ('normal_range_special_case', models.BooleanField(default=False)),
1098
+ ('default_date_value_distribution', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='default_date_value_distribution', to='endoreg_db.datevaluedistribution')),
1099
+ ('default_multiple_categorical_value_distribution', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='default_multiple_categorical_value_distribution', to='endoreg_db.multiplecategoricalvaluedistribution')),
1100
+ ('default_numerical_value_distribution', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='default_numerical_value_distribution', to='endoreg_db.numericvaluedistribution')),
1101
+ ('default_single_categorical_value_distribution', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='default_single_categorical_value_distribution', to='endoreg_db.singlecategoricalvaluedistribution')),
1102
+ ('default_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1103
+ ],
1081
1104
  ),
1082
1105
  migrations.AddField(
1083
- model_name='pdftype',
1084
- name='endoscope_info_line',
1085
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_endoscopy_info_line', to='endoreg_db.reportreaderflag'),
1106
+ model_name='findingintervention',
1107
+ name='required_lab_values',
1108
+ field=models.ManyToManyField(blank=True, related_name='required_by_finding_interventions', to='endoreg_db.labvalue'),
1086
1109
  ),
1087
1110
  migrations.AddField(
1088
- model_name='pdftype',
1089
- name='examiner_info_line',
1090
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_examiner_info_line', to='endoreg_db.reportreaderflag'),
1111
+ model_name='center',
1112
+ name='last_names',
1113
+ field=models.ManyToManyField(related_name='centers', to='endoreg_db.lastname'),
1114
+ ),
1115
+ migrations.CreateModel(
1116
+ name='LxClient',
1117
+ fields=[
1118
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1119
+ ('name', models.CharField(max_length=100, unique=True)),
1120
+ ('description', models.TextField(blank=True)),
1121
+ ('vpn_ip', models.GenericIPAddressField(blank=True, null=True)),
1122
+ ('client_tags', models.ManyToManyField(blank=True, to='endoreg_db.lxclienttag')),
1123
+ ('client_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.lxclienttype')),
1124
+ ],
1091
1125
  ),
1092
1126
  migrations.AddField(
1093
- model_name='pdftype',
1094
- name='patient_info_line',
1095
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_patient_info_line', to='endoreg_db.reportreaderflag'),
1127
+ model_name='lxclienttag',
1128
+ name='permissions',
1129
+ field=models.ManyToManyField(blank=True, related_name='allowed_client_tags', to='endoreg_db.lxpermission'),
1130
+ ),
1131
+ migrations.CreateModel(
1132
+ name='LxIdentity',
1133
+ fields=[
1134
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1135
+ ('name', models.CharField(max_length=100, unique=True)),
1136
+ ('description', models.TextField(blank=True)),
1137
+ ('identity_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.lxidentitytype')),
1138
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.lxuser')),
1139
+ ],
1140
+ ),
1141
+ migrations.CreateModel(
1142
+ name='Material',
1143
+ fields=[
1144
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1145
+ ('name', models.CharField(max_length=255)),
1146
+ ('name_de', models.CharField(max_length=255, null=True)),
1147
+ ('name_en', models.CharField(max_length=255, null=True)),
1148
+ ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
1149
+ ],
1150
+ ),
1151
+ migrations.CreateModel(
1152
+ name='MedicationSchedule',
1153
+ fields=[
1154
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1155
+ ('name', models.CharField(max_length=255)),
1156
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
1157
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
1158
+ ('description', models.TextField(blank=True, null=True)),
1159
+ ('therapy_duration_d', models.FloatField(blank=True, null=True)),
1160
+ ('dose', models.FloatField()),
1161
+ ('intake_times', models.ManyToManyField(to='endoreg_db.medicationintaketime')),
1162
+ ('medication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.medication')),
1163
+ ('unit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1164
+ ],
1165
+ ),
1166
+ migrations.CreateModel(
1167
+ name='MedicationIndication',
1168
+ fields=[
1169
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1170
+ ('name', models.CharField(max_length=255, unique=True)),
1171
+ ('disease_classification_choices', models.ManyToManyField(to='endoreg_db.diseaseclassificationchoice')),
1172
+ ('diseases', models.ManyToManyField(to='endoreg_db.disease')),
1173
+ ('events', models.ManyToManyField(to='endoreg_db.event')),
1174
+ ('sources', models.ManyToManyField(to='endoreg_db.informationsource')),
1175
+ ('indication_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='medication_indications', to='endoreg_db.medicationindicationtype')),
1176
+ ('medication_schedules', models.ManyToManyField(to='endoreg_db.medicationschedule')),
1177
+ ],
1178
+ ),
1179
+ migrations.CreateModel(
1180
+ name='ModelMeta',
1181
+ fields=[
1182
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1183
+ ('name', models.CharField(max_length=255)),
1184
+ ('version', models.CharField(max_length=255)),
1185
+ ('activation', models.CharField(default='sigmoid', max_length=255)),
1186
+ ('weights', models.FileField(blank=True, null=True, upload_to='db_model_weights', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['ckpt'])])),
1187
+ ('mean', models.CharField(default='0.45211223,0.27139644,0.19264949', max_length=255)),
1188
+ ('std', models.CharField(default='0.31418097,0.21088019,0.16059452', max_length=255)),
1189
+ ('size_x', models.IntegerField(default=716)),
1190
+ ('size_y', models.IntegerField(default=716)),
1191
+ ('axes', models.CharField(default='2,0,1', max_length=255)),
1192
+ ('batchsize', models.IntegerField(default=16)),
1193
+ ('num_workers', models.IntegerField(default=0)),
1194
+ ('description', models.TextField(blank=True, null=True)),
1195
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1196
+ ('labelset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='models', to='endoreg_db.labelset')),
1197
+ ('model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='models', to='endoreg_db.aimodel')),
1198
+ ],
1199
+ ),
1200
+ migrations.AddField(
1201
+ model_name='aimodel',
1202
+ name='active_meta',
1203
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='active_model', to='endoreg_db.modelmeta'),
1204
+ ),
1205
+ migrations.CreateModel(
1206
+ name='ActiveModel',
1207
+ fields=[
1208
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1209
+ ('name', models.CharField(max_length=255, unique=True)),
1210
+ ('model_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.modelmeta')),
1211
+ ],
1212
+ ),
1213
+ migrations.CreateModel(
1214
+ name='AglServiceLogEntry',
1215
+ fields=[
1216
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1217
+ ('timestamp', models.DateTimeField(auto_now_add=True)),
1218
+ ('ip_address', models.GenericIPAddressField(blank=True, null=True)),
1219
+ ('user_agent', models.CharField(blank=True, max_length=256, null=True)),
1220
+ ('message', models.TextField()),
1221
+ ('json_content', models.JSONField(blank=True, null=True)),
1222
+ ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.aglservice')),
1223
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
1224
+ ('log_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.logtype')),
1225
+ ('device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.networkdevice')),
1226
+ ],
1227
+ options={
1228
+ 'verbose_name': 'AGL Service Log Entry',
1229
+ 'verbose_name_plural': 'AGL Service Log Entries',
1230
+ },
1231
+ ),
1232
+ migrations.AddField(
1233
+ model_name='aglservice',
1234
+ name='devices',
1235
+ field=models.ManyToManyField(related_name='services', to='endoreg_db.networkdevice'),
1236
+ ),
1237
+ migrations.CreateModel(
1238
+ name='NetworkDeviceLogEntry',
1239
+ fields=[
1240
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1241
+ ('timestamp', models.DateTimeField(auto_now_add=True)),
1242
+ ('ip_address', models.GenericIPAddressField(blank=True, null=True)),
1243
+ ('user_agent', models.CharField(blank=True, max_length=256, null=True)),
1244
+ ('message', models.TextField()),
1245
+ ('json_content', models.JSONField(blank=True, null=True)),
1246
+ ('datetime', models.DateTimeField(blank=True, default=None, null=True)),
1247
+ ('aglnet_ip', models.GenericIPAddressField(blank=True, null=True)),
1248
+ ('vpn_service_status', models.CharField(blank=True, max_length=255, null=True)),
1249
+ ('vpn_service_restart_attempt', models.BooleanField(default=False)),
1250
+ ('vpn_service_restart_success', models.BooleanField(blank=True, null=True)),
1251
+ ('ping_vpn', models.BooleanField(default=False)),
1252
+ ('ping_www', models.BooleanField(default=False)),
1253
+ ('transferred_to_host', models.BooleanField(default=False)),
1254
+ ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.networkdevice')),
1255
+ ('log_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.logtype')),
1256
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
1257
+ ],
1258
+ options={
1259
+ 'verbose_name': 'Network Device Log Entry',
1260
+ 'verbose_name_plural': 'Network Device Log Entries',
1261
+ },
1262
+ ),
1263
+ migrations.AddField(
1264
+ model_name='networkdevice',
1265
+ name='device_type',
1266
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.networkdevicetype'),
1267
+ ),
1268
+ migrations.CreateModel(
1269
+ name='Organ',
1270
+ fields=[
1271
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1272
+ ('name', models.CharField(max_length=100, unique=True)),
1273
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
1274
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
1275
+ ('description', models.TextField(blank=True, null=True)),
1276
+ ('description_de', models.TextField(blank=True, null=True)),
1277
+ ('description_en', models.TextField(blank=True, null=True)),
1278
+ ('location_choices', models.ManyToManyField(blank=True, related_name='organs', to='endoreg_db.findinglocationclassificationchoice')),
1279
+ ],
1280
+ ),
1281
+ migrations.CreateModel(
1282
+ name='Patient',
1283
+ fields=[
1284
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1285
+ ('email', models.EmailField(blank=True, max_length=255, null=True)),
1286
+ ('phone', models.CharField(blank=True, max_length=255, null=True)),
1287
+ ('is_real_person', models.BooleanField(default=True)),
1288
+ ('first_name', models.CharField(max_length=100)),
1289
+ ('last_name', models.CharField(max_length=100)),
1290
+ ('dob', models.DateField(blank=True, null=True)),
1291
+ ('patient_hash', models.CharField(blank=True, max_length=255, null=True)),
1292
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1293
+ ('gender', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender')),
1294
+ ],
1295
+ options={
1296
+ 'abstract': False,
1297
+ },
1298
+ ),
1299
+ migrations.CreateModel(
1300
+ name='PatientDisease',
1301
+ fields=[
1302
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1303
+ ('start_date', models.DateField(blank=True, null=True)),
1304
+ ('end_date', models.DateField(blank=True, null=True)),
1305
+ ('numerical_descriptors', models.JSONField(default=dict)),
1306
+ ('subcategories', models.JSONField(default=dict)),
1307
+ ('last_update', models.DateTimeField(auto_now=True)),
1308
+ ('classification_choices', models.ManyToManyField(to='endoreg_db.diseaseclassificationchoice')),
1309
+ ('disease', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.disease')),
1310
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1311
+ ],
1312
+ options={
1313
+ 'verbose_name': 'Patient Disease',
1314
+ 'verbose_name_plural': 'Patient Diseases',
1315
+ },
1316
+ ),
1317
+ migrations.CreateModel(
1318
+ name='PatientEvent',
1319
+ fields=[
1320
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1321
+ ('date_start', models.DateField()),
1322
+ ('date_end', models.DateField(blank=True, null=True)),
1323
+ ('description', models.TextField(blank=True, null=True)),
1324
+ ('subcategories', models.JSONField(default=dict)),
1325
+ ('numerical_descriptors', models.JSONField(default=dict)),
1326
+ ('last_update', models.DateTimeField(auto_now=True)),
1327
+ ('classification_choice', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.eventclassificationchoice')),
1328
+ ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.event')),
1329
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1330
+ ],
1331
+ ),
1332
+ migrations.CreateModel(
1333
+ name='PatientExamination',
1334
+ fields=[
1335
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1336
+ ('date_start', models.DateField(blank=True, null=True)),
1337
+ ('date_end', models.DateField(blank=True, null=True)),
1338
+ ('hash', models.CharField(max_length=255, unique=True)),
1339
+ ('examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.examination')),
1340
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_examinations', to='endoreg_db.patient')),
1341
+ ],
1342
+ options={
1343
+ 'verbose_name': 'Patient Examination',
1344
+ 'verbose_name_plural': 'Patient Examinations',
1345
+ 'ordering': ['patient', 'examination', 'date_start'],
1346
+ },
1347
+ ),
1348
+ migrations.CreateModel(
1349
+ name='PatientExaminationIndication',
1350
+ fields=[
1351
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1352
+ ('examination_indication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.examinationindication')),
1353
+ ('indication_choice', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.examinationindicationclassificationchoice')),
1354
+ ('patient_examination', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='indications', to='endoreg_db.patientexamination')),
1355
+ ],
1356
+ ),
1357
+ migrations.CreateModel(
1358
+ name='PatientFinding',
1359
+ fields=[
1360
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1361
+ ('finding', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_findings', to='endoreg_db.finding')),
1362
+ ('patient_examination', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_findings', to='endoreg_db.patientexamination')),
1363
+ ],
1364
+ options={
1365
+ 'verbose_name': 'Patient Finding',
1366
+ 'verbose_name_plural': 'Patient Findings',
1367
+ 'ordering': ['patient_examination', 'finding'],
1368
+ },
1369
+ ),
1370
+ migrations.CreateModel(
1371
+ name='PatientFindingIntervention',
1372
+ fields=[
1373
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1374
+ ('state', models.CharField(blank=True, max_length=100, null=True)),
1375
+ ('time_start', models.DateTimeField(blank=True, null=True)),
1376
+ ('time_end', models.DateTimeField(blank=True, null=True)),
1377
+ ('date', models.DateField(blank=True, null=True)),
1378
+ ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_interventions', to='endoreg_db.findingintervention')),
1379
+ ('patient_finding', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='interventions', to='endoreg_db.patientfinding')),
1380
+ ],
1381
+ ),
1382
+ migrations.CreateModel(
1383
+ name='PatientFindingLocation',
1384
+ fields=[
1385
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1386
+ ('subcategories', models.JSONField(blank=True, null=True)),
1387
+ ('numerical_descriptors', models.JSONField(blank=True, null=True)),
1388
+ ('location_choice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_locations', to='endoreg_db.findinglocationclassificationchoice')),
1389
+ ('location_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_locations', to='endoreg_db.findinglocationclassification')),
1390
+ ],
1391
+ options={
1392
+ 'verbose_name': 'Patient Finding Location',
1393
+ 'verbose_name_plural': 'Patient Finding Locations',
1394
+ 'ordering': ['location_classification', 'location_choice'],
1395
+ },
1396
+ ),
1397
+ migrations.AddField(
1398
+ model_name='patientfinding',
1399
+ name='locations',
1400
+ field=models.ManyToManyField(blank=True, related_name='patient_findings', to='endoreg_db.patientfindinglocation'),
1401
+ ),
1402
+ migrations.CreateModel(
1403
+ name='PatientFindingMorphology',
1404
+ fields=[
1405
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1406
+ ('subcategories', models.JSONField(default=dict)),
1407
+ ('numerical_descriptors', models.JSONField(default=dict)),
1408
+ ('morphology_choice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_morphologies', to='endoreg_db.findingmorphologyclassificationchoice')),
1409
+ ('morphology_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_morphologies', to='endoreg_db.findingmorphologyclassification')),
1410
+ ],
1411
+ options={
1412
+ 'verbose_name': 'Patient Finding Morphology',
1413
+ 'verbose_name_plural': 'Patient Finding Morphologies',
1414
+ 'ordering': ['morphology_classification', 'morphology_choice'],
1415
+ },
1416
+ ),
1417
+ migrations.AddField(
1418
+ model_name='patientfinding',
1419
+ name='morphologies',
1420
+ field=models.ManyToManyField(blank=True, related_name='patient_findings', to='endoreg_db.patientfindingmorphology'),
1421
+ ),
1422
+ migrations.CreateModel(
1423
+ name='PatientLabSample',
1424
+ fields=[
1425
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1426
+ ('date', models.DateTimeField()),
1427
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lab_samples', to='endoreg_db.patient')),
1428
+ ('sample_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patientlabsampletype')),
1429
+ ],
1096
1430
  ),
1097
1431
  migrations.CreateModel(
1098
- name='PdfMeta',
1432
+ name='PatientMedication',
1099
1433
  fields=[
1100
1434
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1101
- ('date', models.DateField()),
1102
- ('time', models.TimeField()),
1103
- ('pdf_hash', models.CharField(max_length=255, unique=True)),
1104
- ('pdf_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.pdftype')),
1435
+ ('dosage', models.JSONField(blank=True, null=True)),
1436
+ ('active', models.BooleanField(default=True)),
1437
+ ('intake_times', models.ManyToManyField(blank=True, related_name='patient_medications', to='endoreg_db.medicationintaketime')),
1438
+ ('medication', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='patient_medications', to='endoreg_db.medication')),
1439
+ ('medication_indication', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='patient_medications', to='endoreg_db.medicationindication')),
1440
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1441
+ ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1105
1442
  ],
1443
+ options={
1444
+ 'verbose_name': 'Patient Medication',
1445
+ 'verbose_name_plural': 'Patient Medications',
1446
+ },
1106
1447
  ),
1107
1448
  migrations.CreateModel(
1108
1449
  name='PatientMedicationSchedule',
@@ -1110,321 +1451,378 @@ class Migration(migrations.Migration):
1110
1451
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1111
1452
  ('created_at', models.DateTimeField(auto_now_add=True)),
1112
1453
  ('updated_at', models.DateTimeField(auto_now=True)),
1113
- ('medication', models.ManyToManyField(related_name='patient_medication_schedules', to='endoreg_db.patientmedication')),
1454
+ ('medication', models.ManyToManyField(blank=True, related_name='patient_medication_schedules', to='endoreg_db.patientmedication')),
1114
1455
  ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1115
1456
  ],
1116
1457
  ),
1117
- migrations.AddField(
1118
- model_name='patientmedication',
1119
- name='unit',
1120
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit'),
1458
+ migrations.CreateModel(
1459
+ name='PdfMeta',
1460
+ fields=[
1461
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1462
+ ('date', models.DateField()),
1463
+ ('time', models.TimeField()),
1464
+ ('pdf_hash', models.CharField(max_length=255, unique=True)),
1465
+ ('pdf_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.pdftype')),
1466
+ ],
1121
1467
  ),
1122
1468
  migrations.CreateModel(
1123
- name='PatientLabValue',
1469
+ name='CenterProduct',
1124
1470
  fields=[
1125
1471
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1126
- ('value', models.FloatField(blank=True, null=True)),
1127
- ('value_str', models.CharField(blank=True, max_length=255, null=True)),
1128
- ('datetime', models.DateTimeField(auto_now_add=True)),
1129
- ('normal_range', models.JSONField(default=dict)),
1130
- ('lab_value', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.labvalue')),
1131
- ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='lab_values', to='endoreg_db.patient')),
1132
- ('sample', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='values', to='endoreg_db.patientlabsample')),
1133
- ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1472
+ ('date_used', models.DateField()),
1473
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1474
+ ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.product')),
1134
1475
  ],
1135
1476
  ),
1136
1477
  migrations.AddField(
1137
- model_name='patientlabsample',
1138
- name='sample_type',
1139
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patientlabsampletype'),
1478
+ model_name='product',
1479
+ name='product_group',
1480
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.productgroup'),
1140
1481
  ),
1141
1482
  migrations.CreateModel(
1142
- name='PatientExamination',
1483
+ name='PortalUserInfo',
1143
1484
  fields=[
1144
1485
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1145
- ('examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.examination')),
1146
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_examinations', to='endoreg_db.patient')),
1147
- ('report_file', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='patient_examination', to='endoreg_db.reportfile')),
1148
- ('video', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='patient_examination', to='endoreg_db.video')),
1486
+ ('works_in_endoscopy', models.BooleanField(blank=True, null=True)),
1487
+ ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
1488
+ ('profession', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.profession')),
1149
1489
  ],
1150
- options={
1151
- 'verbose_name': 'Patient Examination',
1152
- 'verbose_name_plural': 'Patient Examinations',
1153
- 'ordering': ['patient', 'examination'],
1154
- },
1155
1490
  ),
1156
1491
  migrations.CreateModel(
1157
- name='PatientEvent',
1492
+ name='QuizAnswer',
1158
1493
  fields=[
1159
1494
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1160
- ('date_start', models.DateField()),
1161
- ('date_end', models.DateField(blank=True, null=True)),
1162
- ('description', models.TextField(blank=True, null=True)),
1163
- ('last_update', models.DateTimeField(auto_now=True)),
1164
- ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.event')),
1165
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1495
+ ('text_value', models.CharField(blank=True, max_length=255, null=True)),
1496
+ ('number_value', models.FloatField(blank=True, null=True)),
1497
+ ('last_updated', models.DateTimeField(auto_now=True)),
1498
+ ('answer_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.quizanswertype')),
1499
+ ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.quizquestion')),
1166
1500
  ],
1167
1501
  ),
1502
+ migrations.AddField(
1503
+ model_name='quizquestion',
1504
+ name='question_type',
1505
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.quizquestiontype'),
1506
+ ),
1168
1507
  migrations.CreateModel(
1169
- name='PatientDisease',
1508
+ name='ImageClassificationAnnotation',
1170
1509
  fields=[
1171
1510
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1172
- ('start_date', models.DateField(blank=True, null=True)),
1173
- ('end_date', models.DateField(blank=True, null=True)),
1174
- ('last_update', models.DateTimeField(auto_now=True)),
1175
- ('classification_choices', models.ManyToManyField(to='endoreg_db.diseaseclassificationchoice')),
1176
- ('disease', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.disease')),
1177
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1511
+ ('value', models.BooleanField()),
1512
+ ('float_value', models.FloatField(blank=True, null=True)),
1513
+ ('annotator', models.CharField(blank=True, max_length=255, null=True)),
1514
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1515
+ ('date_modified', models.DateTimeField(auto_now=True)),
1516
+ ('frame', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.frame')),
1517
+ ('information_source', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='image_classification_annotations', to='endoreg_db.informationsource')),
1518
+ ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.label')),
1519
+ ('model_meta', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='image_classification_annotations', to='endoreg_db.modelmeta')),
1520
+ ('raw_frame', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.rawframe')),
1178
1521
  ],
1179
1522
  ),
1180
1523
  migrations.CreateModel(
1181
- name='NetworkDeviceLogEntry',
1524
+ name='RawVideoFile',
1182
1525
  fields=[
1183
1526
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1184
- ('timestamp', models.DateTimeField(auto_now_add=True)),
1185
- ('ip_address', models.GenericIPAddressField(blank=True, null=True)),
1186
- ('user_agent', models.CharField(blank=True, max_length=256, null=True)),
1187
- ('message', models.TextField()),
1188
- ('json_content', models.JSONField(blank=True, null=True)),
1189
- ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.networkdevice')),
1190
- ('log_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.logtype')),
1191
- ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
1527
+ ('uuid', models.UUIDField()),
1528
+ ('original_file_name', models.CharField(max_length=255)),
1529
+ ('video_hash', models.CharField(max_length=255, unique=True)),
1530
+ ('uploaded_at', models.DateTimeField(auto_now_add=True)),
1531
+ ('frame_dir', models.CharField(max_length=255)),
1532
+ ('prediction_dir', models.CharField(max_length=255)),
1533
+ ('predictions', models.JSONField(default=dict)),
1534
+ ('fps', models.FloatField(blank=True, null=True)),
1535
+ ('duration', models.FloatField(blank=True, null=True)),
1536
+ ('readable_predictions', models.JSONField(default=dict)),
1537
+ ('merged_predictions', models.JSONField(default=dict)),
1538
+ ('smooth_merged_predictions', models.JSONField(default=dict)),
1539
+ ('binary_smooth_merged_predictions', models.JSONField(default=dict)),
1540
+ ('sequences', models.JSONField(default=dict)),
1541
+ ('state_frames_required', models.BooleanField(default=True)),
1542
+ ('state_frames_extracted', models.BooleanField(default=False)),
1543
+ ('state_initial_prediction_required', models.BooleanField(default=True)),
1544
+ ('state_initial_prediction_completed', models.BooleanField(default=False)),
1545
+ ('state_initial_prediction_import_required', models.BooleanField(default=True)),
1546
+ ('state_initial_prediction_import_completed', models.BooleanField(default=False)),
1547
+ ('state_histology_required', models.BooleanField(blank=True, null=True)),
1548
+ ('state_histology_available', models.BooleanField(default=False)),
1549
+ ('state_follow_up_intervention_required', models.BooleanField(blank=True, null=True)),
1550
+ ('state_follow_up_intervention_available', models.BooleanField(default=False)),
1551
+ ('state_dataset_complete', models.BooleanField(default=False)),
1552
+ ('is_raw', models.BooleanField(default=False)),
1553
+ ('file', models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/home/admin/test-data'), upload_to='videos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['mp4'])])),
1554
+ ('state_anonymized_frames_generated', models.BooleanField(default=False)),
1555
+ ('state_ocr_required', models.BooleanField(default=True)),
1556
+ ('state_ocr_completed', models.BooleanField(default=False)),
1557
+ ('state_outside_validated', models.BooleanField(default=False)),
1558
+ ('state_ocr_result_validated', models.BooleanField(default=False)),
1559
+ ('state_sensitive_data_retrieved', models.BooleanField(default=False)),
1560
+ ('state_censor_outside_required', models.BooleanField(default=True)),
1561
+ ('state_censor_outside_completed', models.BooleanField(default=False)),
1562
+ ('state_make_anonymized_video_required', models.BooleanField(default=True)),
1563
+ ('state_make_anonymized_video_completed', models.BooleanField(default=False)),
1564
+ ('ai_model_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.modelmeta')),
1565
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1566
+ ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.patient')),
1567
+ ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
1192
1568
  ],
1193
1569
  options={
1194
- 'verbose_name': 'Network Device Log Entry',
1195
- 'verbose_name_plural': 'Network Device Log Entries',
1570
+ 'abstract': False,
1196
1571
  },
1197
1572
  ),
1198
1573
  migrations.AddField(
1199
- model_name='networkdevice',
1200
- name='device_type',
1201
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.networkdevicetype'),
1202
- ),
1203
- migrations.AddField(
1204
- model_name='modelmeta',
1205
- name='type',
1206
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='models', to='endoreg_db.modeltype'),
1207
- ),
1208
- migrations.AddField(
1209
- model_name='medicationschedule',
1210
- name='unit',
1211
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit'),
1212
- ),
1213
- migrations.AddField(
1214
- model_name='medicationindication',
1215
- name='indication_type',
1216
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='medication_indications', to='endoreg_db.medicationindicationtype'),
1217
- ),
1218
- migrations.AddField(
1219
- model_name='medicationindication',
1220
- name='medication_schedules',
1221
- field=models.ManyToManyField(to='endoreg_db.medicationschedule'),
1222
- ),
1223
- migrations.AddField(
1224
- model_name='medicationindication',
1225
- name='sources',
1226
- field=models.ManyToManyField(to='endoreg_db.informationsource'),
1227
- ),
1228
- migrations.AddField(
1229
- model_name='medication',
1230
- name='default_unit',
1231
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit'),
1574
+ model_name='rawframe',
1575
+ name='video',
1576
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='frames', to='endoreg_db.rawvideofile'),
1232
1577
  ),
1233
1578
  migrations.CreateModel(
1234
- name='LegacyVideoPredictionMeta',
1579
+ name='RawVideoPredictionMeta',
1235
1580
  fields=[
1236
1581
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1237
1582
  ('date_created', models.DateTimeField(auto_now_add=True)),
1238
1583
  ('date_modified', models.DateTimeField(auto_now=True)),
1239
1584
  ('prediction_array', models.BinaryField(blank=True, null=True)),
1585
+ ('is_raw', models.BooleanField(default=False)),
1240
1586
  ('model_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.modelmeta')),
1241
- ('video', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='video_prediction_meta', to='endoreg_db.legacyvideo')),
1587
+ ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_prediction_meta', to='endoreg_db.rawvideofile')),
1242
1588
  ],
1243
1589
  options={
1244
1590
  'abstract': False,
1245
- 'unique_together': {('model_meta', 'video')},
1246
1591
  },
1247
1592
  ),
1248
- migrations.AddField(
1249
- model_name='legacyvideo',
1250
- name='patient',
1251
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient'),
1252
- ),
1253
1593
  migrations.CreateModel(
1254
- name='LegacyLabelVideoSegment',
1594
+ name='LabelRawVideoSegment',
1255
1595
  fields=[
1256
1596
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1257
1597
  ('start_frame_number', models.IntegerField()),
1258
1598
  ('end_frame_number', models.IntegerField()),
1259
- ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.label')),
1260
- ('prediction_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_segments', to='endoreg_db.legacyvideopredictionmeta')),
1261
- ('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.informationsource')),
1262
- ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.legacyvideo')),
1599
+ ('label', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.label')),
1600
+ ('source', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.informationsource')),
1601
+ ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='label_video_segments', to='endoreg_db.rawvideofile')),
1602
+ ('prediction_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='label_video_segments', to='endoreg_db.rawvideopredictionmeta')),
1263
1603
  ],
1264
1604
  options={
1265
1605
  'abstract': False,
1266
1606
  },
1267
1607
  ),
1268
1608
  migrations.CreateModel(
1269
- name='LegacyFrame',
1609
+ name='ReferenceProduct',
1270
1610
  fields=[
1271
1611
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1272
- ('frame_number', models.IntegerField()),
1273
- ('image', models.ImageField(blank=True, null=True, upload_to='legacy_frames')),
1274
- ('suffix', models.CharField(max_length=255)),
1275
- ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='frames', to='endoreg_db.legacyvideo')),
1612
+ ('name', models.CharField(max_length=255)),
1613
+ ('emission_factor_package', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_product_package', to='endoreg_db.emissionfactor')),
1614
+ ('emission_factor_product', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_product_product', to='endoreg_db.emissionfactor')),
1615
+ ('emission_factor_total', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
1616
+ ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.product')),
1617
+ ('product_group', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='reference_product', to='endoreg_db.productgroup')),
1276
1618
  ],
1277
1619
  ),
1278
1620
  migrations.CreateModel(
1279
- name='LegacyBinaryClassificationAnnotationTask',
1621
+ name='ReportReaderConfig',
1280
1622
  fields=[
1281
1623
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1282
- ('is_finished', models.BooleanField(default=False)),
1283
- ('date_created', models.DateTimeField(auto_now_add=True)),
1284
- ('date_finished', models.DateTimeField(blank=True, null=True)),
1285
- ('image_path', models.CharField(blank=True, max_length=255, null=True)),
1286
- ('labelstudio_project_id', models.IntegerField(blank=True, null=True)),
1287
- ('labelstudio_task_id', models.IntegerField(blank=True, null=True)),
1288
- ('image_type', models.CharField(default='legacy', max_length=255)),
1289
- ('frame', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='binary_classification_annotation_tasks', to='endoreg_db.legacyframe')),
1290
- ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.label')),
1624
+ ('locale', models.CharField(default='de_DE', max_length=10)),
1625
+ ('text_date_format', models.CharField(default='%d.%m.%Y', max_length=10)),
1626
+ ('first_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.firstname')),
1627
+ ('last_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.lastname')),
1628
+ ('cut_off_above', models.ManyToManyField(related_name='report_reader_configs_cut_off_above', to='endoreg_db.reportreaderflag')),
1629
+ ('cut_off_below', models.ManyToManyField(related_name='report_reader_configs_cut_off_below', to='endoreg_db.reportreaderflag')),
1630
+ ('endoscope_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_endoscope_info_line', to='endoreg_db.reportreaderflag')),
1631
+ ('examiner_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_examiner_info_line', to='endoreg_db.reportreaderflag')),
1632
+ ('patient_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_patient_info_line', to='endoreg_db.reportreaderflag')),
1291
1633
  ],
1292
- options={
1293
- 'abstract': False,
1294
- },
1295
1634
  ),
1296
1635
  migrations.AddField(
1297
- model_name='labvalue',
1298
- name='default_multiple_categorical_value_distribution',
1299
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='default_multiple_categorical_value_distribution', to='endoreg_db.multiplecategoricalvaluedistribution'),
1636
+ model_name='pdftype',
1637
+ name='cut_off_above_lines',
1638
+ field=models.ManyToManyField(related_name='pdf_type_cut_off_above_lines', to='endoreg_db.reportreaderflag'),
1639
+ ),
1640
+ migrations.AddField(
1641
+ model_name='pdftype',
1642
+ name='cut_off_below_lines',
1643
+ field=models.ManyToManyField(related_name='pdf_type_cut_off_below_lines', to='endoreg_db.reportreaderflag'),
1300
1644
  ),
1301
1645
  migrations.AddField(
1302
- model_name='labvalue',
1303
- name='default_numerical_value_distribution',
1304
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='default_numerical_value_distribution', to='endoreg_db.numericvaluedistribution'),
1646
+ model_name='pdftype',
1647
+ name='endoscope_info_line',
1648
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_endoscopy_info_line', to='endoreg_db.reportreaderflag'),
1305
1649
  ),
1306
1650
  migrations.AddField(
1307
- model_name='labvalue',
1308
- name='default_single_categorical_value_distribution',
1309
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='default_single_categorical_value_distribution', to='endoreg_db.singlecategoricalvaluedistribution'),
1651
+ model_name='pdftype',
1652
+ name='examiner_info_line',
1653
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_examiner_info_line', to='endoreg_db.reportreaderflag'),
1310
1654
  ),
1311
1655
  migrations.AddField(
1312
- model_name='labvalue',
1313
- name='default_unit',
1314
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit'),
1656
+ model_name='pdftype',
1657
+ name='patient_info_line',
1658
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_patient_info_line', to='endoreg_db.reportreaderflag'),
1315
1659
  ),
1316
1660
  migrations.CreateModel(
1317
- name='LabelVideoSegment',
1661
+ name='Rule',
1318
1662
  fields=[
1319
1663
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1320
- ('start_frame_number', models.IntegerField()),
1321
- ('end_frame_number', models.IntegerField()),
1322
- ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.label')),
1323
- ('prediction_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_segments', to='endoreg_db.videopredictionmeta')),
1324
- ('source', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.informationsource')),
1325
- ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.video')),
1664
+ ('name', models.CharField(max_length=255, unique=True)),
1665
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
1666
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
1667
+ ('description', models.TextField(blank=True, null=True)),
1668
+ ('attribute_key', models.CharField(max_length=255)),
1669
+ ('attribute_dtype', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ruleattributedtype')),
1670
+ ('rule_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ruletype')),
1671
+ ],
1672
+ options={
1673
+ 'verbose_name': 'Rule',
1674
+ 'verbose_name_plural': 'Rules',
1675
+ },
1676
+ ),
1677
+ migrations.CreateModel(
1678
+ name='Ruleset',
1679
+ fields=[
1680
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1681
+ ('name', models.CharField(max_length=255, unique=True)),
1682
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
1683
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
1684
+ ('rules', models.ManyToManyField(to='endoreg_db.rule')),
1685
+ ],
1686
+ ),
1687
+ migrations.CreateModel(
1688
+ name='SensitiveMeta',
1689
+ fields=[
1690
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1691
+ ('examination_date', models.DateField(blank=True, null=True)),
1692
+ ('patient_first_name', models.CharField(blank=True, max_length=255, null=True)),
1693
+ ('patient_last_name', models.CharField(blank=True, max_length=255, null=True)),
1694
+ ('patient_dob', models.DateField(blank=True, null=True)),
1695
+ ('examiner_first_name', models.CharField(blank=True, max_length=255, null=True)),
1696
+ ('examiner_last_name', models.CharField(blank=True, max_length=255, null=True)),
1697
+ ('examination_hash', models.CharField(blank=True, max_length=255, null=True)),
1698
+ ('patient_hash', models.CharField(blank=True, max_length=255, null=True)),
1699
+ ('endoscope_type', models.CharField(blank=True, max_length=255, null=True)),
1700
+ ('endoscope_sn', models.CharField(blank=True, max_length=255, null=True)),
1701
+ ('state_verified', models.BooleanField(default=False)),
1702
+ ('state_hash_generated', models.BooleanField(default=False)),
1703
+ ('state_names_substituted', models.BooleanField(default=False)),
1704
+ ('state_dob_substituted', models.BooleanField(default=False)),
1705
+ ('state_examination_date_substituted', models.BooleanField(default=False)),
1706
+ ('state_endoscope_sn_substituted', models.BooleanField(default=False)),
1707
+ ('state_examiners_substituted', models.BooleanField(default=False)),
1708
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1709
+ ('examiners', models.ManyToManyField(blank=True, to='endoreg_db.examiner')),
1710
+ ('patient_gender', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.gender')),
1711
+ ('pseudo_examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patientexamination')),
1712
+ ('pseudo_patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1713
+ ],
1714
+ ),
1715
+ migrations.CreateModel(
1716
+ name='ReportFile',
1717
+ fields=[
1718
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1719
+ ('pdf_hash', models.CharField(max_length=255, unique=True)),
1720
+ ('created_at', models.DateTimeField(auto_now_add=True)),
1721
+ ('meta', models.JSONField(blank=True, null=True)),
1722
+ ('text', models.TextField(blank=True, null=True)),
1723
+ ('date', models.DateField(blank=True, null=True)),
1724
+ ('time', models.TimeField(blank=True, null=True)),
1725
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1726
+ ('examiner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='endoreg_db.examiner')),
1727
+ ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='endoreg_db.patient')),
1728
+ ('patient_examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='report_files', to='endoreg_db.patientexamination')),
1729
+ ('pdf_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.pdftype')),
1730
+ ('sensitive_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='report_files', to='endoreg_db.sensitivemeta')),
1326
1731
  ],
1327
1732
  options={
1328
1733
  'abstract': False,
1329
1734
  },
1330
1735
  ),
1331
1736
  migrations.AddField(
1332
- model_name='label',
1333
- name='label_type',
1334
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='labels', to='endoreg_db.labeltype'),
1737
+ model_name='rawvideofile',
1738
+ name='sensitive_meta',
1739
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_videos', to='endoreg_db.sensitivemeta'),
1335
1740
  ),
1336
1741
  migrations.CreateModel(
1337
- name='ImageClassificationPrediction',
1742
+ name='RawPdfFile',
1338
1743
  fields=[
1339
1744
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1340
- ('value', models.BooleanField()),
1341
- ('confidence', models.FloatField()),
1342
- ('date_created', models.DateTimeField(auto_now_add=True)),
1343
- ('frame', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_predictions', to='endoreg_db.frame')),
1344
- ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_predictions', to='endoreg_db.label')),
1345
- ('legacy_frame', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_predictions', to='endoreg_db.legacyframe')),
1346
- ('legacy_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_predictions', to='endoreg_db.legacyimage')),
1347
- ('model_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_predictions', to='endoreg_db.modelmeta')),
1745
+ ('pdf_hash', models.CharField(max_length=255, unique=True)),
1746
+ ('text', models.TextField(blank=True, null=True)),
1747
+ ('created_at', models.DateTimeField(auto_now_add=True)),
1748
+ ('file', models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/home/admin/test-data'), upload_to='raw_pdf/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])])),
1749
+ ('state_report_processing_required', models.BooleanField(default=True)),
1750
+ ('state_report_processed', models.BooleanField(default=False)),
1751
+ ('raw_meta', models.JSONField(blank=True, null=True)),
1752
+ ('anonymized_text', models.TextField(blank=True, null=True)),
1753
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1754
+ ('pdf_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.pdftype')),
1755
+ ('report_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_files', to='endoreg_db.reportfile')),
1756
+ ('sensitive_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_files', to='endoreg_db.sensitivemeta')),
1348
1757
  ],
1758
+ options={
1759
+ 'abstract': False,
1760
+ },
1349
1761
  ),
1350
1762
  migrations.CreateModel(
1351
- name='ImageClassificationAnnotation',
1763
+ name='TransportRoute',
1352
1764
  fields=[
1353
1765
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1354
- ('value', models.BooleanField()),
1355
- ('annotator', models.CharField(max_length=255)),
1356
- ('date_created', models.DateTimeField(auto_now_add=True)),
1357
- ('date_modified', models.DateTimeField(auto_now=True)),
1358
- ('frame', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.frame')),
1359
- ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.label')),
1360
- ('legacy_frame', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.legacyframe')),
1361
- ('legacy_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.legacyimage')),
1766
+ ('distance', models.FloatField()),
1767
+ ('name', models.CharField(max_length=255)),
1768
+ ('name_de', models.CharField(max_length=255, null=True)),
1769
+ ('name_en', models.CharField(max_length=255, null=True)),
1770
+ ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
1771
+ ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1362
1772
  ],
1363
1773
  ),
1364
1774
  migrations.AddField(
1365
- model_name='frame',
1366
- name='video',
1367
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='frames', to='endoreg_db.video'),
1775
+ model_name='product',
1776
+ name='transport_route',
1777
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.transportroute'),
1368
1778
  ),
1369
- migrations.AddField(
1370
- model_name='examiner',
1371
- name='gender',
1372
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender'),
1779
+ migrations.CreateModel(
1780
+ name='ProductWeight',
1781
+ fields=[
1782
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1783
+ ('name', models.CharField(max_length=255, null=True)),
1784
+ ('measured', models.FloatField(null=True)),
1785
+ ('verified', models.FloatField(null=True)),
1786
+ ('manufacturer', models.FloatField(null=True)),
1787
+ ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.product')),
1788
+ ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1789
+ ],
1373
1790
  ),
1374
1791
  migrations.CreateModel(
1375
- name='ExaminationTimeType',
1792
+ name='ProductMaterial',
1376
1793
  fields=[
1377
1794
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1378
- ('name', models.CharField(max_length=100, unique=True)),
1379
- ('name_de', models.CharField(blank=True, max_length=100, null=True)),
1380
- ('name_en', models.CharField(blank=True, max_length=100, null=True)),
1381
- ('examinations', models.ManyToManyField(blank=True, to='endoreg_db.examination')),
1795
+ ('component', models.CharField(max_length=255)),
1796
+ ('quantity', models.FloatField()),
1797
+ ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.material')),
1798
+ ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='product_materials', to='endoreg_db.product')),
1799
+ ('unit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1382
1800
  ],
1383
- options={
1384
- 'verbose_name': 'Examination Time Type',
1385
- 'verbose_name_plural': 'Examination Time Types',
1386
- 'ordering': ['name'],
1387
- },
1388
1801
  ),
1389
1802
  migrations.CreateModel(
1390
- name='ExaminationTime',
1803
+ name='PatientLabValue',
1391
1804
  fields=[
1392
1805
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1393
- ('name', models.CharField(max_length=100, unique=True)),
1394
- ('name_de', models.CharField(blank=True, max_length=100, null=True)),
1395
- ('name_en', models.CharField(blank=True, max_length=100, null=True)),
1396
- ('start_time', models.TimeField(blank=True, null=True)),
1397
- ('end_time', models.TimeField(blank=True, null=True)),
1398
- ('time_types', models.ManyToManyField(blank=True, to='endoreg_db.examinationtimetype')),
1806
+ ('value', models.FloatField(blank=True, null=True)),
1807
+ ('value_str', models.CharField(blank=True, max_length=255, null=True)),
1808
+ ('datetime', models.DateTimeField(auto_now_add=True)),
1809
+ ('normal_range', models.JSONField(default=dict)),
1810
+ ('lab_value', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.labvalue')),
1811
+ ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='lab_values', to='endoreg_db.patient')),
1812
+ ('sample', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='values', to='endoreg_db.patientlabsample')),
1813
+ ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1399
1814
  ],
1400
- options={
1401
- 'verbose_name': 'Examination Time',
1402
- 'verbose_name_plural': 'Examination Times',
1403
- 'ordering': ['name'],
1404
- },
1405
1815
  ),
1406
1816
  migrations.AddField(
1407
- model_name='examination',
1408
- name='examination_types',
1409
- field=models.ManyToManyField(blank=True, to='endoreg_db.examinationtype'),
1817
+ model_name='medication',
1818
+ name='default_unit',
1819
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit'),
1410
1820
  ),
1411
1821
  migrations.AddField(
1412
1822
  model_name='emissionfactor',
1413
1823
  name='unit',
1414
1824
  field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit'),
1415
1825
  ),
1416
- migrations.CreateModel(
1417
- name='CenterWaste',
1418
- fields=[
1419
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1420
- ('year', models.IntegerField()),
1421
- ('quantity', models.FloatField()),
1422
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1423
- ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
1424
- ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1425
- ('waste', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.waste')),
1426
- ],
1427
- ),
1428
1826
  migrations.CreateModel(
1429
1827
  name='CenterResource',
1430
1828
  fields=[
@@ -1435,126 +1833,202 @@ class Migration(migrations.Migration):
1435
1833
  ('quantity', models.FloatField()),
1436
1834
  ('year', models.IntegerField()),
1437
1835
  ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1438
- ('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.resource')),
1439
1836
  ('transport_emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='center_resource_transport_emission_factor', to='endoreg_db.emissionfactor')),
1440
- ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1441
1837
  ('use_emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='center_resource_use_emission_factor', to='endoreg_db.emissionfactor')),
1838
+ ('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.resource')),
1839
+ ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1442
1840
  ],
1443
1841
  ),
1444
1842
  migrations.CreateModel(
1445
- name='CenterProduct',
1843
+ name='AnonymizedFile',
1446
1844
  fields=[
1447
1845
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1448
- ('date_used', models.DateField()),
1846
+ ('anonymized_file', models.FileField(upload_to='uploads/anonymized/')),
1847
+ ('anonymization_date', models.DateTimeField(default=django.utils.timezone.now)),
1848
+ ('original_file', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='anonymized_file', to='endoreg_db.uploadedfile')),
1849
+ ],
1850
+ ),
1851
+ migrations.CreateModel(
1852
+ name='Video',
1853
+ fields=[
1854
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1855
+ ('uuid', models.UUIDField()),
1856
+ ('original_file_name', models.CharField(max_length=255)),
1857
+ ('video_hash', models.CharField(max_length=255, unique=True)),
1858
+ ('uploaded_at', models.DateTimeField(auto_now_add=True)),
1859
+ ('frame_dir', models.CharField(max_length=255)),
1860
+ ('prediction_dir', models.CharField(max_length=255)),
1861
+ ('predictions', models.JSONField(default=dict)),
1862
+ ('readable_predictions', models.JSONField(default=dict)),
1863
+ ('merged_predictions', models.JSONField(default=dict)),
1864
+ ('smooth_merged_predictions', models.JSONField(default=dict)),
1865
+ ('binary_smooth_merged_predictions', models.JSONField(default=dict)),
1866
+ ('sequences', models.JSONField(default=dict)),
1867
+ ('state_frames_required', models.BooleanField(default=True)),
1868
+ ('state_initial_prediction_required', models.BooleanField(default=True)),
1869
+ ('state_initial_prediction_completed', models.BooleanField(default=False)),
1870
+ ('state_initial_prediction_import_required', models.BooleanField(default=True)),
1871
+ ('state_initial_prediction_import_completed', models.BooleanField(default=False)),
1872
+ ('state_histology_required', models.BooleanField(blank=True, null=True)),
1873
+ ('state_histology_available', models.BooleanField(default=False)),
1874
+ ('state_follow_up_intervention_required', models.BooleanField(blank=True, null=True)),
1875
+ ('state_follow_up_intervention_available', models.BooleanField(default=False)),
1876
+ ('state_dataset_complete', models.BooleanField(default=False)),
1877
+ ('is_raw', models.BooleanField(default=False)),
1878
+ ('file', models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/home/admin/test-data'), upload_to='videos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['mp4'])])),
1879
+ ('date', models.DateField(blank=True, null=True)),
1880
+ ('suffix', models.CharField(blank=True, max_length=255, null=True)),
1881
+ ('fps', models.FloatField(blank=True, null=True)),
1882
+ ('duration', models.FloatField(blank=True, null=True)),
1883
+ ('width', models.IntegerField(blank=True, null=True)),
1884
+ ('height', models.IntegerField(blank=True, null=True)),
1885
+ ('endoscope_image_x', models.IntegerField(blank=True, null=True)),
1886
+ ('endoscope_image_y', models.IntegerField(blank=True, null=True)),
1887
+ ('endoscope_image_width', models.IntegerField(blank=True, null=True)),
1888
+ ('endoscope_image_height', models.IntegerField(blank=True, null=True)),
1889
+ ('state_frames_extracted', models.BooleanField(default=False)),
1890
+ ('meta', models.JSONField(blank=True, null=True)),
1891
+ ('ai_model_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.modelmeta')),
1449
1892
  ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1450
- ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.product')),
1893
+ ('examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='videos', to='endoreg_db.patientexamination')),
1894
+ ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
1895
+ ('pseudo_patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='videos', to='endoreg_db.patient')),
1896
+ ('sensitive_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='videos', to='endoreg_db.sensitivemeta')),
1897
+ ('import_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videoimportmeta')),
1451
1898
  ],
1899
+ options={
1900
+ 'abstract': False,
1901
+ },
1452
1902
  ),
1453
1903
  migrations.AddField(
1454
- model_name='center',
1455
- name='first_names',
1456
- field=models.ManyToManyField(related_name='centers', to='endoreg_db.firstname'),
1904
+ model_name='rawvideofile',
1905
+ name='video',
1906
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_videos', to='endoreg_db.video'),
1457
1907
  ),
1458
1908
  migrations.AddField(
1459
- model_name='center',
1460
- name='last_names',
1461
- field=models.ManyToManyField(related_name='centers', to='endoreg_db.lastname'),
1909
+ model_name='patientexamination',
1910
+ name='video',
1911
+ field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='patient_examination', to='endoreg_db.video'),
1912
+ ),
1913
+ migrations.AddField(
1914
+ model_name='frame',
1915
+ name='video',
1916
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='frames', to='endoreg_db.video'),
1462
1917
  ),
1463
1918
  migrations.CreateModel(
1464
- name='CaseTemplateRule',
1919
+ name='VideoMeta',
1465
1920
  fields=[
1466
1921
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1467
- ('name', models.CharField(max_length=255)),
1468
- ('name_de', models.CharField(max_length=255, null=True)),
1469
- ('name_en', models.CharField(max_length=255, null=True)),
1470
- ('description', models.TextField(blank=True, null=True)),
1471
- ('parent_model', models.CharField(blank=True, max_length=255, null=True)),
1472
- ('parent_field', models.CharField(blank=True, max_length=255, null=True)),
1473
- ('target_field', models.CharField(blank=True, max_length=255, null=True)),
1474
- ('target_model', models.CharField(blank=True, max_length=255, null=True)),
1475
- ('rule_values', models.JSONField(blank=True, null=True)),
1476
- ('extra_parameters', models.JSONField(blank=True, null=True)),
1477
- ('chained_rules', models.ManyToManyField(related_name='calling_rules', to='endoreg_db.casetemplaterule')),
1478
- ('date_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.datevaluedistribution')),
1479
- ('multiple_categorical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.multiplecategoricalvaluedistribution')),
1480
- ('numerical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.numericvaluedistribution')),
1481
- ('rule_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.casetemplateruletype')),
1482
- ('single_categorical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.singlecategoricalvaluedistribution')),
1483
- ('value_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.casetemplaterulevaluetype')),
1922
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1923
+ ('endoscope', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscope')),
1924
+ ('ffmpeg_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ffmpegmeta')),
1925
+ ('import_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videoimportmeta')),
1926
+ ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
1484
1927
  ],
1485
1928
  ),
1929
+ migrations.AddField(
1930
+ model_name='video',
1931
+ name='video_meta',
1932
+ field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videometa'),
1933
+ ),
1934
+ migrations.AddField(
1935
+ model_name='rawvideofile',
1936
+ name='video_meta',
1937
+ field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videometa'),
1938
+ ),
1486
1939
  migrations.CreateModel(
1487
- name='CaseTemplate',
1940
+ name='VideoPredictionMeta',
1488
1941
  fields=[
1489
1942
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1490
- ('name', models.CharField(max_length=255, unique=True)),
1491
- ('description', models.TextField(blank=True, null=True)),
1492
- ('rules', models.ManyToManyField(to='endoreg_db.casetemplaterule')),
1493
- ('secondary_rules', models.ManyToManyField(related_name='secondary_rules', to='endoreg_db.casetemplaterule')),
1494
- ('template_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='case_templates', to='endoreg_db.casetemplatetype')),
1943
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1944
+ ('date_modified', models.DateTimeField(auto_now=True)),
1945
+ ('prediction_array', models.BinaryField(blank=True, null=True)),
1946
+ ('is_raw', models.BooleanField(default=False)),
1947
+ ('model_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.modelmeta')),
1948
+ ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_prediction_meta', to='endoreg_db.video')),
1495
1949
  ],
1950
+ options={
1951
+ 'abstract': False,
1952
+ },
1496
1953
  ),
1497
1954
  migrations.CreateModel(
1498
- name='BinaryClassificationAnnotationTask',
1955
+ name='LabelVideoSegment',
1499
1956
  fields=[
1500
1957
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1501
- ('is_finished', models.BooleanField(default=False)),
1502
- ('date_created', models.DateTimeField(auto_now_add=True)),
1503
- ('date_finished', models.DateTimeField(blank=True, null=True)),
1504
- ('image_path', models.CharField(blank=True, max_length=255, null=True)),
1505
- ('labelstudio_project_id', models.IntegerField(blank=True, null=True)),
1506
- ('labelstudio_task_id', models.IntegerField(blank=True, null=True)),
1507
- ('image_type', models.CharField(default='frame', max_length=255)),
1508
- ('frame', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='binary_classification_annotation_tasks', to='endoreg_db.frame')),
1509
- ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.label')),
1958
+ ('start_frame_number', models.IntegerField()),
1959
+ ('end_frame_number', models.IntegerField()),
1960
+ ('label', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.label')),
1961
+ ('source', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.informationsource')),
1962
+ ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='label_video_segments', to='endoreg_db.video')),
1963
+ ('prediction_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='label_video_segments', to='endoreg_db.videopredictionmeta')),
1510
1964
  ],
1511
1965
  options={
1512
1966
  'abstract': False,
1513
1967
  },
1514
1968
  ),
1515
1969
  migrations.CreateModel(
1516
- name='AglServiceLogEntry',
1970
+ name='VideoSegmentationAnnotation',
1517
1971
  fields=[
1518
1972
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1519
- ('timestamp', models.DateTimeField(auto_now_add=True)),
1520
- ('ip_address', models.GenericIPAddressField(blank=True, null=True)),
1521
- ('user_agent', models.CharField(blank=True, max_length=256, null=True)),
1522
- ('message', models.TextField()),
1523
- ('json_content', models.JSONField(blank=True, null=True)),
1524
- ('device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.networkdevice')),
1525
- ('log_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.logtype')),
1526
- ('service', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.aglservice')),
1527
- ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
1973
+ ('start_time', models.FloatField()),
1974
+ ('stop_time', models.FloatField()),
1975
+ ('is_true', models.BooleanField(default=True)),
1976
+ ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.rawvideofile')),
1977
+ ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videosegmentationlabel')),
1978
+ ],
1979
+ ),
1980
+ migrations.CreateModel(
1981
+ name='VideoSegmentationLabelSet',
1982
+ fields=[
1983
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1984
+ ('name', models.CharField(max_length=255)),
1985
+ ('description', models.TextField(blank=True, null=True)),
1986
+ ('labels', models.ManyToManyField(related_name='labelsets', to='endoreg_db.videosegmentationlabel')),
1528
1987
  ],
1529
- options={
1530
- 'verbose_name': 'AGL Service Log Entry',
1531
- 'verbose_name_plural': 'AGL Service Log Entries',
1532
- },
1533
1988
  ),
1534
1989
  migrations.AddField(
1535
- model_name='aglservice',
1536
- name='devices',
1537
- field=models.ManyToManyField(related_name='services', to='endoreg_db.networkdevice'),
1990
+ model_name='aimodel',
1991
+ name='video_segmentation_labelset',
1992
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ai_models', to='endoreg_db.videosegmentationlabelset'),
1538
1993
  ),
1539
1994
  migrations.CreateModel(
1540
- name='ActiveModel',
1995
+ name='CenterWaste',
1541
1996
  fields=[
1542
1997
  ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1543
- ('name', models.CharField(max_length=255, unique=True)),
1544
- ('model_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.modelmeta')),
1998
+ ('year', models.IntegerField()),
1999
+ ('quantity', models.FloatField()),
2000
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
2001
+ ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
2002
+ ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
2003
+ ('waste', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.waste')),
1545
2004
  ],
1546
2005
  ),
2006
+ migrations.CreateModel(
2007
+ name='ImageClassificationPrediction',
2008
+ fields=[
2009
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
2010
+ ('value', models.BooleanField()),
2011
+ ('confidence', models.FloatField()),
2012
+ ('date_created', models.DateTimeField(auto_now_add=True)),
2013
+ ('frame', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_predictions', to='endoreg_db.frame')),
2014
+ ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_predictions', to='endoreg_db.label')),
2015
+ ('model_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_predictions', to='endoreg_db.modelmeta')),
2016
+ ],
2017
+ options={
2018
+ 'unique_together': {('label', 'frame', 'model_meta')},
2019
+ },
2020
+ ),
1547
2021
  migrations.AddIndex(
1548
- model_name='legacyframe',
1549
- index=models.Index(fields=['video', 'frame_number'], name='endoreg_db__video_i_e10f1c_idx'),
2022
+ model_name='rawframe',
2023
+ index=models.Index(fields=['video', 'frame_number'], name='endoreg_db__video_i_b5dc58_idx'),
1550
2024
  ),
1551
2025
  migrations.AlterUniqueTogether(
1552
- name='legacyframe',
2026
+ name='rawframe',
1553
2027
  unique_together={('video', 'frame_number')},
1554
2028
  ),
1555
2029
  migrations.AlterUniqueTogether(
1556
- name='imageclassificationprediction',
1557
- unique_together={('label', 'frame', 'model_meta')},
2030
+ name='rawvideopredictionmeta',
2031
+ unique_together={('model_meta', 'video')},
1558
2032
  ),
1559
2033
  migrations.AddIndex(
1560
2034
  model_name='frame',
@@ -1564,4 +2038,8 @@ class Migration(migrations.Migration):
1564
2038
  name='frame',
1565
2039
  unique_together={('video', 'frame_number')},
1566
2040
  ),
2041
+ migrations.AlterUniqueTogether(
2042
+ name='videopredictionmeta',
2043
+ unique_together={('model_meta', 'video')},
2044
+ ),
1567
2045
  ]