endoreg-db 0.6.0__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.
Files changed (416) hide show
  1. endoreg_db/case_generator/__init__.py +0 -0
  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 +118 -0
  6. endoreg_db/data/agl_service/data.yaml +19 -0
  7. endoreg_db/data/ai_model/data.yaml +7 -0
  8. endoreg_db/data/ai_model_label/label/data.yaml +88 -0
  9. endoreg_db/data/ai_model_label/label-set/data.yaml +21 -0
  10. endoreg_db/data/ai_model_label/label-type/data.yaml +7 -0
  11. endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +5 -0
  12. endoreg_db/data/ai_model_type/data.yaml +7 -0
  13. endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml +176 -0
  14. endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml +20 -0
  15. endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +167 -0
  16. endoreg_db/data/case_template/rule/01_patient-set-age.yaml +8 -0
  17. endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +9 -0
  18. endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +23 -0
  19. endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +19 -0
  20. endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +19 -0
  21. endoreg_db/data/case_template/rule/19_create_patient.yaml +17 -0
  22. endoreg_db/data/case_template/rule_type/base_types.yaml +35 -0
  23. endoreg_db/data/case_template/rule_value/.init +0 -0
  24. endoreg_db/data/case_template/rule_value_type/base_types.yaml +59 -0
  25. endoreg_db/data/case_template/template/base.yaml +8 -0
  26. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +3 -0
  27. endoreg_db/data/case_template/tmp/_rule_value +13 -0
  28. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -0
  29. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +10 -0
  30. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +7 -0
  31. endoreg_db/data/center/data.yaml +90 -0
  32. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -0
  33. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -0
  34. endoreg_db/data/contraindication/bleeding.yaml +11 -0
  35. endoreg_db/data/disease/cardiovascular.yaml +37 -0
  36. endoreg_db/data/disease/hepatology.yaml +5 -0
  37. endoreg_db/data/disease/misc.yaml +6 -0
  38. endoreg_db/data/disease/renal.yaml +5 -0
  39. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +6 -0
  40. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +6 -0
  41. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +41 -0
  42. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +20 -0
  43. endoreg_db/data/distribution/date/patient.yaml +7 -0
  44. endoreg_db/data/distribution/multiple_categorical/.init +0 -0
  45. endoreg_db/data/distribution/numeric/data.yaml +14 -0
  46. endoreg_db/data/distribution/single_categorical/patient.yaml +7 -0
  47. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -0
  48. endoreg_db/data/endoscope/data.yaml +93 -0
  49. endoreg_db/data/endoscope_type/data.yaml +11 -0
  50. endoreg_db/data/endoscopy_processor/data.yaml +47 -0
  51. endoreg_db/data/event/cardiology.yaml +28 -0
  52. endoreg_db/data/event/neurology.yaml +14 -0
  53. endoreg_db/data/event/surgery.yaml +13 -0
  54. endoreg_db/data/event/thrombembolism.yaml +20 -0
  55. endoreg_db/data/examination/examinations/data.yaml +66 -0
  56. endoreg_db/data/examination/time/data.yaml +48 -0
  57. endoreg_db/data/examination/time-type/data.yaml +8 -0
  58. endoreg_db/data/examination/type/data.yaml +5 -0
  59. endoreg_db/data/examination_indication/endoscopy.yaml +8 -0
  60. endoreg_db/data/examination_indication_classification/endoscopy.yaml +8 -0
  61. endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +101 -0
  62. endoreg_db/data/finding/data.yaml +141 -0
  63. endoreg_db/data/finding_intervention/endoscopy.yaml +138 -0
  64. endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
  65. endoreg_db/data/finding_location_classification/colonoscopy.yaml +46 -0
  66. endoreg_db/data/finding_location_classification_choice/colonoscopy.yaml +240 -0
  67. endoreg_db/data/finding_morphology_classification/colonoscopy.yaml +48 -0
  68. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_circularity_default.yaml +34 -0
  69. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_nice.yaml +20 -0
  70. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_paris.yaml +65 -0
  71. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_planarity_default.yaml +56 -0
  72. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_surface_intact_default.yaml +39 -0
  73. endoreg_db/data/finding_morphology_classification_choice/colonoscopy_size.yaml +57 -0
  74. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +79 -0
  75. endoreg_db/data/finding_type/data.yaml +30 -0
  76. endoreg_db/data/gender/data.yaml +35 -0
  77. endoreg_db/data/information_source/data.yaml +30 -0
  78. endoreg_db/data/information_source/medication.yaml +6 -0
  79. endoreg_db/data/lab_value/cardiac_enzymes.yaml +37 -0
  80. endoreg_db/data/lab_value/coagulation.yaml +54 -0
  81. endoreg_db/data/lab_value/electrolytes.yaml +228 -0
  82. endoreg_db/data/lab_value/gastrointestinal_function.yaml +133 -0
  83. endoreg_db/data/lab_value/hematology.yaml +184 -0
  84. endoreg_db/data/lab_value/hormones.yaml +59 -0
  85. endoreg_db/data/lab_value/lipids.yaml +53 -0
  86. endoreg_db/data/lab_value/misc.yaml +33 -0
  87. endoreg_db/data/lab_value/renal_function.yaml +12 -0
  88. endoreg_db/data/log_type/data.yaml +57 -0
  89. endoreg_db/data/lx_client_tag/base.yaml +54 -0
  90. endoreg_db/data/lx_client_type/base.yaml +30 -0
  91. endoreg_db/data/lx_permission/base.yaml +24 -0
  92. endoreg_db/data/lx_permission/endoreg.yaml +52 -0
  93. endoreg_db/data/material/material.yaml +91 -0
  94. endoreg_db/data/medication/anticoagulation.yaml +65 -0
  95. endoreg_db/data/medication/tah.yaml +70 -0
  96. endoreg_db/data/medication_indication/anticoagulation.yaml +115 -0
  97. endoreg_db/data/medication_indication_type/data.yaml +11 -0
  98. endoreg_db/data/medication_indication_type/thrombembolism.yaml +41 -0
  99. endoreg_db/data/medication_intake_time/base.yaml +31 -0
  100. endoreg_db/data/medication_schedule/apixaban.yaml +95 -0
  101. endoreg_db/data/medication_schedule/ass.yaml +12 -0
  102. endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -0
  103. endoreg_db/data/names_first/first_names.yaml +51 -0
  104. endoreg_db/data/names_last/last_names.yaml +51 -0
  105. endoreg_db/data/network_device/data.yaml +59 -0
  106. endoreg_db/data/network_device_type/data.yaml +12 -0
  107. endoreg_db/data/organ/data.yaml +29 -0
  108. endoreg_db/data/patient_lab_sample_type/generic.yaml +6 -0
  109. endoreg_db/data/pdf_type/data.yaml +29 -0
  110. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -0
  111. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -0
  112. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -0
  113. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -0
  114. endoreg_db/data/profession/data.yaml +70 -0
  115. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -0
  116. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +30 -0
  117. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -0
  118. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -0
  119. endoreg_db/data/tmp/chronic_kidney_disease.yaml +0 -0
  120. endoreg_db/data/tmp/congestive_heart_failure.yaml +0 -0
  121. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -0
  122. endoreg_db/data/unit/concentration.yaml +92 -0
  123. endoreg_db/data/unit/data.yaml +17 -0
  124. endoreg_db/data/unit/length.yaml +31 -0
  125. endoreg_db/data/unit/misc.yaml +20 -0
  126. endoreg_db/data/unit/rate.yaml +6 -0
  127. endoreg_db/data/unit/time.yaml +13 -0
  128. endoreg_db/data/unit/volume.yaml +35 -0
  129. endoreg_db/data/unit/weight.yaml +38 -0
  130. endoreg_db/data/waste/data.yaml +12 -0
  131. endoreg_db/forms/__init__.py +5 -0
  132. endoreg_db/forms/examination_form.py +11 -0
  133. endoreg_db/forms/patient_finding_intervention_form.py +19 -0
  134. endoreg_db/forms/patient_form.py +26 -0
  135. endoreg_db/forms/questionnaires/__init__.py +1 -0
  136. endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -0
  137. endoreg_db/forms/settings/__init__.py +8 -0
  138. endoreg_db/forms/unit.py +6 -0
  139. endoreg_db/management/__init__.py +0 -0
  140. endoreg_db/management/commands/__init__.py +0 -0
  141. endoreg_db/management/commands/_load_model_template.py +41 -0
  142. endoreg_db/management/commands/delete_all.py +18 -0
  143. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -0
  144. endoreg_db/management/commands/fix_auth_permission.py +20 -0
  145. endoreg_db/management/commands/load_active_model_data.py +45 -0
  146. endoreg_db/management/commands/load_ai_model_data.py +79 -0
  147. endoreg_db/management/commands/load_ai_model_label_data.py +59 -0
  148. endoreg_db/management/commands/load_base_db_data.py +178 -0
  149. endoreg_db/management/commands/load_center_data.py +43 -0
  150. endoreg_db/management/commands/load_contraindication_data.py +41 -0
  151. endoreg_db/management/commands/load_disease_classification_choices_data.py +41 -0
  152. endoreg_db/management/commands/load_disease_classification_data.py +41 -0
  153. endoreg_db/management/commands/load_disease_data.py +62 -0
  154. endoreg_db/management/commands/load_distribution_data.py +66 -0
  155. endoreg_db/management/commands/load_endoscope_data.py +68 -0
  156. endoreg_db/management/commands/load_event_data.py +41 -0
  157. endoreg_db/management/commands/load_examination_data.py +75 -0
  158. endoreg_db/management/commands/load_examination_indication_data.py +65 -0
  159. endoreg_db/management/commands/load_finding_data.py +171 -0
  160. endoreg_db/management/commands/load_g_play_data.py +113 -0
  161. endoreg_db/management/commands/load_gender_data.py +44 -0
  162. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +133 -0
  163. endoreg_db/management/commands/load_information_source.py +45 -0
  164. endoreg_db/management/commands/load_lab_value_data.py +50 -0
  165. endoreg_db/management/commands/load_logging_data.py +39 -0
  166. endoreg_db/management/commands/load_lx_data.py +64 -0
  167. endoreg_db/management/commands/load_medication_data.py +103 -0
  168. endoreg_db/management/commands/load_medication_indication_data.py +63 -0
  169. endoreg_db/management/commands/load_medication_indication_type_data.py +41 -0
  170. endoreg_db/management/commands/load_medication_intake_time_data.py +41 -0
  171. endoreg_db/management/commands/load_medication_schedule_data.py +55 -0
  172. endoreg_db/management/commands/load_name_data.py +37 -0
  173. endoreg_db/management/commands/load_network_data.py +57 -0
  174. endoreg_db/management/commands/load_organ_data.py +43 -0
  175. endoreg_db/management/commands/load_pdf_type_data.py +61 -0
  176. endoreg_db/management/commands/load_profession_data.py +44 -0
  177. endoreg_db/management/commands/load_report_reader_flag_data.py +46 -0
  178. endoreg_db/management/commands/load_unit_data.py +46 -0
  179. endoreg_db/management/commands/load_user_groups.py +28 -0
  180. endoreg_db/management/commands/register_ai_model.py +64 -0
  181. endoreg_db/management/commands/reset_celery_schedule.py +9 -0
  182. endoreg_db/migrations/0001_initial.py +2045 -0
  183. endoreg_db/migrations/0002_alter_frame_image_alter_rawframe_image.py +23 -0
  184. endoreg_db/migrations/0003_alter_frame_image_alter_rawframe_image.py +23 -0
  185. endoreg_db/migrations/0004_alter_rawvideofile_file_alter_video_file.py +25 -0
  186. endoreg_db/migrations/0005_rawvideofile_frame_count_and_more.py +33 -0
  187. endoreg_db/migrations/0006_frame_extracted_rawframe_extracted.py +23 -0
  188. endoreg_db/migrations/0007_rename_pseudo_patient_video_patient_and_more.py +24 -0
  189. endoreg_db/migrations/0008_remove_reportfile_patient_examination_and_more.py +48 -0
  190. endoreg_db/migrations/__init__.py +0 -0
  191. endoreg_db/models/__init__.py +376 -0
  192. endoreg_db/models/ai_model/__init__.py +4 -0
  193. endoreg_db/models/ai_model/active_model.py +9 -0
  194. endoreg_db/models/ai_model/ai_model.py +103 -0
  195. endoreg_db/models/ai_model/lightning/__init__.py +3 -0
  196. endoreg_db/models/ai_model/lightning/inference_dataset.py +53 -0
  197. endoreg_db/models/ai_model/lightning/multilabel_classification_net.py +155 -0
  198. endoreg_db/models/ai_model/lightning/postprocess.py +53 -0
  199. endoreg_db/models/ai_model/lightning/predict.py +172 -0
  200. endoreg_db/models/ai_model/lightning/prediction_visualizer.py +55 -0
  201. endoreg_db/models/ai_model/lightning/preprocess.py +68 -0
  202. endoreg_db/models/ai_model/lightning/run_visualizer.py +21 -0
  203. endoreg_db/models/ai_model/model_meta.py +250 -0
  204. endoreg_db/models/ai_model/model_type.py +36 -0
  205. endoreg_db/models/ai_model/utils.py +8 -0
  206. endoreg_db/models/annotation/__init__.py +32 -0
  207. endoreg_db/models/annotation/anonymized_image_annotation.py +115 -0
  208. endoreg_db/models/annotation/binary_classification_annotation_task.py +117 -0
  209. endoreg_db/models/annotation/image_classification.py +86 -0
  210. endoreg_db/models/annotation/video_segmentation_annotation.py +52 -0
  211. endoreg_db/models/annotation/video_segmentation_labelset.py +20 -0
  212. endoreg_db/models/case/__init__.py +1 -0
  213. endoreg_db/models/case/case.py +34 -0
  214. endoreg_db/models/case_template/__init__.py +15 -0
  215. endoreg_db/models/case_template/case_template.py +125 -0
  216. endoreg_db/models/case_template/case_template_rule.py +276 -0
  217. endoreg_db/models/case_template/case_template_rule_value.py +88 -0
  218. endoreg_db/models/case_template/case_template_type.py +28 -0
  219. endoreg_db/models/center/__init__.py +11 -0
  220. endoreg_db/models/center/center.py +51 -0
  221. endoreg_db/models/center/center_product.py +33 -0
  222. endoreg_db/models/center/center_resource.py +33 -0
  223. endoreg_db/models/center/center_waste.py +16 -0
  224. endoreg_db/models/contraindication/__init__.py +21 -0
  225. endoreg_db/models/data_file/__init__.py +39 -0
  226. endoreg_db/models/data_file/base_classes/__init__.py +7 -0
  227. endoreg_db/models/data_file/base_classes/abstract_frame.py +100 -0
  228. endoreg_db/models/data_file/base_classes/abstract_pdf.py +136 -0
  229. endoreg_db/models/data_file/base_classes/abstract_video.py +807 -0
  230. endoreg_db/models/data_file/base_classes/frame_helpers.py +17 -0
  231. endoreg_db/models/data_file/base_classes/prepare_bulk_frames.py +19 -0
  232. endoreg_db/models/data_file/base_classes/utils.py +80 -0
  233. endoreg_db/models/data_file/frame.py +29 -0
  234. endoreg_db/models/data_file/import_classes/__init__.py +18 -0
  235. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +35 -0
  236. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -0
  237. endoreg_db/models/data_file/import_classes/processing_functions/video.py +260 -0
  238. endoreg_db/models/data_file/import_classes/raw_pdf.py +260 -0
  239. endoreg_db/models/data_file/import_classes/raw_video.py +288 -0
  240. endoreg_db/models/data_file/metadata/__init__.py +13 -0
  241. endoreg_db/models/data_file/metadata/pdf_meta.py +74 -0
  242. endoreg_db/models/data_file/metadata/sensitive_meta.py +290 -0
  243. endoreg_db/models/data_file/metadata/video_meta.py +199 -0
  244. endoreg_db/models/data_file/report_file.py +56 -0
  245. endoreg_db/models/data_file/video/__init__.py +11 -0
  246. endoreg_db/models/data_file/video/import_meta.py +25 -0
  247. endoreg_db/models/data_file/video/video.py +196 -0
  248. endoreg_db/models/data_file/video_segment.py +214 -0
  249. endoreg_db/models/disease.py +79 -0
  250. endoreg_db/models/emission/__init__.py +5 -0
  251. endoreg_db/models/emission/emission_factor.py +85 -0
  252. endoreg_db/models/event.py +73 -0
  253. endoreg_db/models/examination/__init__.py +9 -0
  254. endoreg_db/models/examination/examination.py +67 -0
  255. endoreg_db/models/examination/examination_indication.py +170 -0
  256. endoreg_db/models/examination/examination_time.py +53 -0
  257. endoreg_db/models/examination/examination_time_type.py +48 -0
  258. endoreg_db/models/examination/examination_type.py +40 -0
  259. endoreg_db/models/finding/__init__.py +11 -0
  260. endoreg_db/models/finding/finding.py +75 -0
  261. endoreg_db/models/finding/finding_intervention.py +60 -0
  262. endoreg_db/models/finding/finding_location_classification.py +94 -0
  263. endoreg_db/models/finding/finding_morphology_classification.py +89 -0
  264. endoreg_db/models/finding/finding_type.py +22 -0
  265. endoreg_db/models/hardware/__init__.py +2 -0
  266. endoreg_db/models/hardware/endoscope.py +60 -0
  267. endoreg_db/models/hardware/endoscopy_processor.py +155 -0
  268. endoreg_db/models/information_source.py +29 -0
  269. endoreg_db/models/label/__init__.py +1 -0
  270. endoreg_db/models/label/label.py +112 -0
  271. endoreg_db/models/laboratory/__init__.py +1 -0
  272. endoreg_db/models/laboratory/lab_value.py +111 -0
  273. endoreg_db/models/logging/__init__.py +11 -0
  274. endoreg_db/models/logging/agl_service.py +19 -0
  275. endoreg_db/models/logging/base.py +22 -0
  276. endoreg_db/models/logging/log_type.py +23 -0
  277. endoreg_db/models/logging/network_device.py +27 -0
  278. endoreg_db/models/lx/__init__.py +4 -0
  279. endoreg_db/models/lx/client.py +57 -0
  280. endoreg_db/models/lx/identity.py +34 -0
  281. endoreg_db/models/lx/permission.py +18 -0
  282. endoreg_db/models/lx/user.py +16 -0
  283. endoreg_db/models/medication/__init__.py +19 -0
  284. endoreg_db/models/medication/medication.py +33 -0
  285. endoreg_db/models/medication/medication_indication.py +50 -0
  286. endoreg_db/models/medication/medication_indication_type.py +34 -0
  287. endoreg_db/models/medication/medication_intake_time.py +26 -0
  288. endoreg_db/models/medication/medication_schedule.py +37 -0
  289. endoreg_db/models/network/__init__.py +9 -0
  290. endoreg_db/models/network/agl_service.py +38 -0
  291. endoreg_db/models/network/network_device.py +58 -0
  292. endoreg_db/models/network/network_device_type.py +23 -0
  293. endoreg_db/models/organ/__init__.py +38 -0
  294. endoreg_db/models/other/__init__.py +23 -0
  295. endoreg_db/models/other/distribution/__init__.py +44 -0
  296. endoreg_db/models/other/distribution/base_value_distribution.py +20 -0
  297. endoreg_db/models/other/distribution/date_value_distribution.py +91 -0
  298. endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +32 -0
  299. endoreg_db/models/other/distribution/numeric_value_distribution.py +97 -0
  300. endoreg_db/models/other/distribution/single_categorical_value_distribution.py +22 -0
  301. endoreg_db/models/other/distribution.py +5 -0
  302. endoreg_db/models/other/material.py +20 -0
  303. endoreg_db/models/other/resource.py +18 -0
  304. endoreg_db/models/other/transport_route.py +22 -0
  305. endoreg_db/models/other/waste.py +20 -0
  306. endoreg_db/models/patient/__init__.py +24 -0
  307. endoreg_db/models/patient/patient_examination.py +182 -0
  308. endoreg_db/models/patient/patient_finding.py +143 -0
  309. endoreg_db/models/patient/patient_finding_intervention.py +26 -0
  310. endoreg_db/models/patient/patient_finding_location.py +120 -0
  311. endoreg_db/models/patient/patient_finding_morphology.py +166 -0
  312. endoreg_db/models/permissions/__init__.py +44 -0
  313. endoreg_db/models/persons/__init__.py +34 -0
  314. endoreg_db/models/persons/examiner/__init__.py +2 -0
  315. endoreg_db/models/persons/examiner/examiner.py +60 -0
  316. endoreg_db/models/persons/examiner/examiner_type.py +2 -0
  317. endoreg_db/models/persons/first_name.py +18 -0
  318. endoreg_db/models/persons/gender.py +22 -0
  319. endoreg_db/models/persons/last_name.py +20 -0
  320. endoreg_db/models/persons/patient/__init__.py +8 -0
  321. endoreg_db/models/persons/patient/patient.py +389 -0
  322. endoreg_db/models/persons/patient/patient_disease.py +22 -0
  323. endoreg_db/models/persons/patient/patient_event.py +52 -0
  324. endoreg_db/models/persons/patient/patient_examination_indication.py +32 -0
  325. endoreg_db/models/persons/patient/patient_lab_sample.py +108 -0
  326. endoreg_db/models/persons/patient/patient_lab_value.py +197 -0
  327. endoreg_db/models/persons/patient/patient_medication.py +59 -0
  328. endoreg_db/models/persons/patient/patient_medication_schedule.py +88 -0
  329. endoreg_db/models/persons/person.py +31 -0
  330. endoreg_db/models/persons/portal_user_information.py +27 -0
  331. endoreg_db/models/prediction/__init__.py +8 -0
  332. endoreg_db/models/prediction/image_classification.py +51 -0
  333. endoreg_db/models/prediction/video_prediction_meta.py +306 -0
  334. endoreg_db/models/product/__init__.py +14 -0
  335. endoreg_db/models/product/product.py +110 -0
  336. endoreg_db/models/product/product_group.py +27 -0
  337. endoreg_db/models/product/product_material.py +28 -0
  338. endoreg_db/models/product/product_weight.py +38 -0
  339. endoreg_db/models/product/reference_product.py +115 -0
  340. endoreg_db/models/questionnaires/__init__.py +114 -0
  341. endoreg_db/models/quiz/__init__.py +9 -0
  342. endoreg_db/models/quiz/quiz_answer.py +41 -0
  343. endoreg_db/models/quiz/quiz_question.py +54 -0
  344. endoreg_db/models/report_reader/__init__.py +7 -0
  345. endoreg_db/models/report_reader/report_reader_config.py +53 -0
  346. endoreg_db/models/report_reader/report_reader_flag.py +20 -0
  347. endoreg_db/models/rules/__init__.py +5 -0
  348. endoreg_db/models/rules/rule.py +24 -0
  349. endoreg_db/models/rules/rule_applicator.py +224 -0
  350. endoreg_db/models/rules/rule_attribute_dtype.py +19 -0
  351. endoreg_db/models/rules/rule_type.py +22 -0
  352. endoreg_db/models/rules/ruleset.py +19 -0
  353. endoreg_db/models/unit.py +22 -0
  354. endoreg_db/queries/__init__.py +5 -0
  355. endoreg_db/queries/annotations/__init__.py +3 -0
  356. endoreg_db/queries/annotations/legacy.py +158 -0
  357. endoreg_db/queries/get/__init__.py +6 -0
  358. endoreg_db/queries/get/annotation.py +0 -0
  359. endoreg_db/queries/get/center.py +42 -0
  360. endoreg_db/queries/get/model.py +13 -0
  361. endoreg_db/queries/get/patient.py +14 -0
  362. endoreg_db/queries/get/patient_examination.py +20 -0
  363. endoreg_db/queries/get/prediction.py +0 -0
  364. endoreg_db/queries/get/report_file.py +33 -0
  365. endoreg_db/queries/get/video.py +31 -0
  366. endoreg_db/queries/get/video_import_meta.py +0 -0
  367. endoreg_db/queries/get/video_prediction_meta.py +0 -0
  368. endoreg_db/queries/sanity/__init_.py +0 -0
  369. endoreg_db/serializers/__init__.py +10 -0
  370. endoreg_db/serializers/ai_model.py +19 -0
  371. endoreg_db/serializers/annotation.py +14 -0
  372. endoreg_db/serializers/center.py +11 -0
  373. endoreg_db/serializers/examination.py +33 -0
  374. endoreg_db/serializers/frame.py +9 -0
  375. endoreg_db/serializers/hardware.py +21 -0
  376. endoreg_db/serializers/label.py +22 -0
  377. endoreg_db/serializers/patient.py +33 -0
  378. endoreg_db/serializers/prediction.py +10 -0
  379. endoreg_db/serializers/raw_video_meta_validation.py +13 -0
  380. endoreg_db/serializers/report_file.py +7 -0
  381. endoreg_db/serializers/video.py +20 -0
  382. endoreg_db/serializers/video_segmentation.py +492 -0
  383. endoreg_db/templates/admin/patient_finding_intervention.html +253 -0
  384. endoreg_db/templates/admin/start_examination.html +12 -0
  385. endoreg_db/templates/timeline.html +176 -0
  386. endoreg_db/utils/__init__.py +36 -0
  387. endoreg_db/utils/cropping.py +29 -0
  388. endoreg_db/utils/dataloader.py +118 -0
  389. endoreg_db/utils/dates.py +39 -0
  390. endoreg_db/utils/file_operations.py +30 -0
  391. endoreg_db/utils/hashs.py +152 -0
  392. endoreg_db/utils/legacy_ocr.py +201 -0
  393. endoreg_db/utils/names.py +74 -0
  394. endoreg_db/utils/ocr.py +190 -0
  395. endoreg_db/utils/parse_and_generate_yaml.py +46 -0
  396. endoreg_db/utils/pydantic_models/__init__.py +6 -0
  397. endoreg_db/utils/pydantic_models/db_config.py +57 -0
  398. endoreg_db/utils/uuid.py +4 -0
  399. endoreg_db/utils/validate_endo_roi.py +19 -0
  400. endoreg_db/utils/validate_subcategory_dict.py +91 -0
  401. endoreg_db/utils/video/__init__.py +13 -0
  402. endoreg_db/utils/video/extract_frames.py +121 -0
  403. endoreg_db/utils/video/transcode_videofile.py +111 -0
  404. endoreg_db/views/__init__.py +2 -0
  405. endoreg_db/views/csrf.py +7 -0
  406. endoreg_db/views/patient_views.py +90 -0
  407. endoreg_db/views/raw_video_meta_validation_views.py +38 -0
  408. endoreg_db/views/report_views.py +96 -0
  409. endoreg_db/views/video_segmentation_views.py +149 -0
  410. endoreg_db/views/views_for_timeline.py +46 -0
  411. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.1.dist-info}/METADATA +4 -4
  412. endoreg_db-0.6.1.dist-info/RECORD +420 -0
  413. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.1.dist-info}/WHEEL +1 -2
  414. endoreg_db-0.6.0.dist-info/RECORD +0 -11
  415. endoreg_db-0.6.0.dist-info/top_level.txt +0 -1
  416. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.1.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,2045 @@
1
+ # Generated by Django 5.1.6 on 2025-03-08 15:58
2
+
3
+ import django.core.files.storage
4
+ import django.core.validators
5
+ import django.db.models.deletion
6
+ import django.utils.timezone
7
+ from django.conf import settings
8
+ from django.db import migrations, models
9
+
10
+
11
+ class Migration(migrations.Migration):
12
+
13
+ initial = True
14
+
15
+ dependencies = [
16
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
17
+ ]
18
+
19
+ operations = [
20
+ migrations.CreateModel(
21
+ name='AglService',
22
+ fields=[
23
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
24
+ ('name', models.CharField(max_length=255)),
25
+ ('description', models.CharField(max_length=255)),
26
+ ('online', models.BooleanField(default=False)),
27
+ ('created', models.DateTimeField(auto_now_add=True)),
28
+ ('updated', models.DateTimeField(auto_now=True)),
29
+ ('port', models.IntegerField(blank=True, null=True)),
30
+ ('protocol', models.CharField(blank=True, max_length=255, null=True)),
31
+ ('url', models.URLField(blank=True, null=True)),
32
+ ],
33
+ options={
34
+ 'ordering': ['name'],
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
+ ),
57
+ migrations.CreateModel(
58
+ name='CaseTemplateRuleType',
59
+ fields=[
60
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
61
+ ('name', models.CharField(max_length=255)),
62
+ ('name_de', models.CharField(max_length=255, null=True)),
63
+ ('name_en', models.CharField(max_length=255, null=True)),
64
+ ('description', models.TextField(blank=True, null=True)),
65
+ ],
66
+ ),
67
+ migrations.CreateModel(
68
+ name='CaseTemplateRuleValue',
69
+ fields=[
70
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
71
+ ('name', models.CharField(max_length=255)),
72
+ ('description', models.TextField(blank=True, null=True)),
73
+ ('fk_value', models.CharField(blank=True, max_length=255, null=True)),
74
+ ('numeric_value', models.FloatField(blank=True, null=True)),
75
+ ('text_value', models.CharField(blank=True, max_length=255, null=True)),
76
+ ],
77
+ ),
78
+ migrations.CreateModel(
79
+ name='CaseTemplateRuleValueType',
80
+ fields=[
81
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
82
+ ('name', models.CharField(max_length=255)),
83
+ ('name_de', models.CharField(max_length=255, null=True)),
84
+ ('name_en', models.CharField(max_length=255, null=True)),
85
+ ('description', models.TextField(blank=True, null=True)),
86
+ ('distribution_type', models.CharField(choices=[('single_categorical', 'single_categorical'), ('multiple_categorical', 'multiple_categorical'), ('numeric', 'numeric')], max_length=255)),
87
+ ],
88
+ ),
89
+ migrations.CreateModel(
90
+ name='CaseTemplateType',
91
+ fields=[
92
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
93
+ ('name', models.CharField(max_length=255)),
94
+ ('name_de', models.CharField(max_length=255, null=True)),
95
+ ('name_en', models.CharField(max_length=255, null=True)),
96
+ ('description', models.TextField(blank=True, null=True)),
97
+ ],
98
+ ),
99
+ migrations.CreateModel(
100
+ name='Center',
101
+ fields=[
102
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
103
+ ('name', models.CharField(max_length=255)),
104
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
105
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
106
+ ],
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
+ ),
120
+ migrations.CreateModel(
121
+ name='DateValueDistribution',
122
+ fields=[
123
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
124
+ ('name', models.CharField(max_length=100)),
125
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
126
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
127
+ ('description', models.TextField(blank=True, null=True)),
128
+ ('distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal')], max_length=20)),
129
+ ('mode', models.CharField(choices=[('date', 'Date'), ('timedelta', 'Timedelta')], max_length=20)),
130
+ ('date_min', models.DateField(blank=True, null=True)),
131
+ ('date_max', models.DateField(blank=True, null=True)),
132
+ ('date_mean', models.DateField(blank=True, null=True)),
133
+ ('date_std_dev', models.IntegerField(blank=True, null=True)),
134
+ ('timedelta_days_min', models.IntegerField(blank=True, null=True)),
135
+ ('timedelta_days_max', models.IntegerField(blank=True, null=True)),
136
+ ('timedelta_days_mean', models.IntegerField(blank=True, null=True)),
137
+ ('timedelta_days_std_dev', models.IntegerField(blank=True, null=True)),
138
+ ],
139
+ options={
140
+ 'abstract': False,
141
+ },
142
+ ),
143
+ migrations.CreateModel(
144
+ name='Disease',
145
+ fields=[
146
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
147
+ ('name', models.CharField(max_length=255, unique=True)),
148
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
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)),
152
+ ],
153
+ ),
154
+ migrations.CreateModel(
155
+ name='EmissionFactor',
156
+ fields=[
157
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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()),
162
+ ],
163
+ ),
164
+ migrations.CreateModel(
165
+ name='EndoscopeType',
166
+ fields=[
167
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
168
+ ('name', models.CharField(max_length=255)),
169
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
170
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
171
+ ],
172
+ options={
173
+ 'verbose_name': 'Endoscope Type',
174
+ 'verbose_name_plural': 'Endoscope Types',
175
+ 'ordering': ['name'],
176
+ },
177
+ ),
178
+ migrations.CreateModel(
179
+ name='EventClassification',
180
+ fields=[
181
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
185
+ ],
186
+ ),
187
+ migrations.CreateModel(
188
+ name='Examination',
189
+ fields=[
190
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
194
+ ],
195
+ options={
196
+ 'verbose_name': 'Examination',
197
+ 'verbose_name_plural': 'Examinations',
198
+ 'ordering': ['name'],
199
+ },
200
+ ),
201
+ migrations.CreateModel(
202
+ name='ExaminationIndicationClassification',
203
+ fields=[
204
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
205
+ ('name', models.CharField(max_length=255, unique=True)),
206
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
207
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
208
+ ],
209
+ ),
210
+ migrations.CreateModel(
211
+ name='ExaminationType',
212
+ fields=[
213
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
217
+ ],
218
+ ),
219
+ migrations.CreateModel(
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',
235
+ fields=[
236
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
237
+ ('name', models.CharField(max_length=100, unique=True)),
238
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
239
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
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)),
243
+ ],
244
+ ),
245
+ migrations.CreateModel(
246
+ name='FindingLocationClassificationChoice',
247
+ fields=[
248
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
249
+ ('name', models.CharField(max_length=100, unique=True)),
250
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
251
+ ('name_en', models.CharField(blank=True, max_length=100, 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)),
257
+ ],
258
+ ),
259
+ migrations.CreateModel(
260
+ name='FindingMorphologyClassification',
261
+ fields=[
262
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
267
+ ],
268
+ ),
269
+ migrations.CreateModel(
270
+ name='FindingMorphologyClassificationType',
271
+ fields=[
272
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
277
+ ],
278
+ ),
279
+ migrations.CreateModel(
280
+ name='FindingType',
281
+ fields=[
282
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
289
+ ],
290
+ ),
291
+ migrations.CreateModel(
292
+ name='FirstName',
293
+ fields=[
294
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
295
+ ('name', models.CharField(max_length=255, unique=True)),
296
+ ],
297
+ ),
298
+ migrations.CreateModel(
299
+ name='Frame',
300
+ fields=[
301
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
302
+ ('frame_number', models.IntegerField()),
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)),
306
+ ],
307
+ options={
308
+ 'abstract': False,
309
+ },
310
+ ),
311
+ migrations.CreateModel(
312
+ name='Gender',
313
+ fields=[
314
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
315
+ ('name', models.CharField(max_length=255)),
316
+ ('name_de', models.CharField(max_length=255, null=True)),
317
+ ('name_en', models.CharField(max_length=255, null=True)),
318
+ ('abbreviation', models.CharField(max_length=255, null=True)),
319
+ ('description', models.TextField(blank=True, null=True)),
320
+ ],
321
+ ),
322
+ migrations.CreateModel(
323
+ name='InformationSource',
324
+ fields=[
325
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
326
+ ('name', models.CharField(max_length=100)),
327
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
328
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
329
+ ('url', models.URLField(blank=True, null=True)),
330
+ ('description', models.TextField(blank=True, null=True)),
331
+ ('date', models.DateField(blank=True, null=True)),
332
+ ],
333
+ ),
334
+ migrations.CreateModel(
335
+ name='Label',
336
+ fields=[
337
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
338
+ ('name', models.CharField(max_length=255)),
339
+ ('description', models.TextField(blank=True, null=True)),
340
+ ],
341
+ ),
342
+ migrations.CreateModel(
343
+ name='LabelType',
344
+ fields=[
345
+ ('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)),
348
+ ],
349
+ ),
350
+ migrations.CreateModel(
351
+ name='LastName',
352
+ fields=[
353
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
354
+ ('name', models.CharField(max_length=255, unique=True)),
355
+ ],
356
+ ),
357
+ migrations.CreateModel(
358
+ name='LogType',
359
+ fields=[
360
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
365
+ ],
366
+ options={
367
+ 'ordering': ['name'],
368
+ },
369
+ ),
370
+ migrations.CreateModel(
371
+ name='LxClientTag',
372
+ fields=[
373
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
374
+ ('name', models.CharField(max_length=100, unique=True)),
375
+ ('description', models.TextField(blank=True)),
376
+ ],
377
+ ),
378
+ migrations.CreateModel(
379
+ name='LxClientType',
380
+ fields=[
381
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
382
+ ('name', models.CharField(max_length=100, unique=True)),
383
+ ('abbreviation', models.CharField(max_length=10, unique=True)),
384
+ ('description', models.TextField(blank=True)),
385
+ ],
386
+ ),
387
+ migrations.CreateModel(
388
+ name='LxIdentityType',
389
+ fields=[
390
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
391
+ ('name', models.CharField(max_length=100, unique=True)),
392
+ ('description', models.TextField(blank=True)),
393
+ ],
394
+ ),
395
+ migrations.CreateModel(
396
+ name='LxPermission',
397
+ fields=[
398
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
399
+ ('name', models.CharField(max_length=100, unique=True)),
400
+ ('description', models.TextField(blank=True)),
401
+ ],
402
+ ),
403
+ migrations.CreateModel(
404
+ name='LxUser',
405
+ fields=[
406
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
407
+ ('name', models.CharField(max_length=100, unique=True)),
408
+ ('description', models.TextField(blank=True)),
409
+ ],
410
+ ),
411
+ migrations.CreateModel(
412
+ name='Medication',
413
+ fields=[
414
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
415
+ ('name', models.CharField(max_length=255, unique=True)),
416
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
417
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
418
+ ('adapt_to_renal_function', models.BooleanField(default=False)),
419
+ ('adapt_to_hepatic_function', models.BooleanField(default=False)),
420
+ ('adapt_to_indication', models.BooleanField(default=False)),
421
+ ('adapt_to_age', models.BooleanField(default=False)),
422
+ ('adapt_to_weight', models.BooleanField(default=False)),
423
+ ('adapt_to_risk', models.BooleanField(default=False)),
424
+ ],
425
+ ),
426
+ migrations.CreateModel(
427
+ name='MedicationIndicationType',
428
+ fields=[
429
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
430
+ ('name', models.CharField(max_length=255, unique=True)),
431
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
432
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
433
+ ],
434
+ ),
435
+ migrations.CreateModel(
436
+ name='MedicationIntakeTime',
437
+ fields=[
438
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
439
+ ('name', models.CharField(max_length=255)),
440
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
441
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
442
+ ('repeats', models.CharField(default='daily', max_length=20)),
443
+ ('time', models.TimeField()),
444
+ ],
445
+ ),
446
+ migrations.CreateModel(
447
+ name='ModelType',
448
+ fields=[
449
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
450
+ ('name', models.CharField(max_length=255)),
451
+ ('description', models.TextField(blank=True, null=True)),
452
+ ],
453
+ ),
454
+ migrations.CreateModel(
455
+ name='MultipleCategoricalValueDistribution',
456
+ fields=[
457
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
458
+ ('name', models.CharField(max_length=100)),
459
+ ('categories', models.JSONField()),
460
+ ('min_count', models.IntegerField()),
461
+ ('max_count', models.IntegerField()),
462
+ ('count_distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal')], max_length=20)),
463
+ ('count_mean', models.FloatField(blank=True, null=True)),
464
+ ('count_std_dev', models.FloatField(blank=True, null=True)),
465
+ ],
466
+ options={
467
+ 'abstract': False,
468
+ },
469
+ ),
470
+ migrations.CreateModel(
471
+ name='NetworkDevice',
472
+ fields=[
473
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
474
+ ('name', models.CharField(max_length=255)),
475
+ ('ip', models.GenericIPAddressField(blank=True, null=True)),
476
+ ('description', models.CharField(max_length=255)),
477
+ ('online', models.BooleanField(default=False)),
478
+ ('created', models.DateTimeField(auto_now_add=True)),
479
+ ('updated', models.DateTimeField(auto_now=True)),
480
+ ],
481
+ options={
482
+ 'db_table': 'network_devices',
483
+ 'ordering': ['name'],
484
+ },
485
+ ),
486
+ migrations.CreateModel(
487
+ name='NetworkDeviceType',
488
+ fields=[
489
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
490
+ ('name', models.CharField(max_length=255)),
491
+ ('description', models.CharField(max_length=255)),
492
+ ('created', models.DateTimeField(auto_now_add=True)),
493
+ ('updated', models.DateTimeField(auto_now=True)),
494
+ ],
495
+ options={
496
+ 'db_table': 'network_device_types',
497
+ 'ordering': ['name'],
498
+ },
499
+ ),
500
+ migrations.CreateModel(
501
+ name='NumericValueDistribution',
502
+ fields=[
503
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
504
+ ('name', models.CharField(max_length=100)),
505
+ ('distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal'), ('skewed_normal', 'Skewed Normal')], max_length=20)),
506
+ ('min_descriptor', models.CharField(max_length=20)),
507
+ ('max_descriptor', models.CharField(max_length=20)),
508
+ ],
509
+ options={
510
+ 'abstract': False,
511
+ },
512
+ ),
513
+ migrations.CreateModel(
514
+ name='PatientLabSampleType',
515
+ fields=[
516
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
517
+ ('name', models.CharField(max_length=255)),
518
+ ('name_de', models.CharField(max_length=255, null=True)),
519
+ ('name_en', models.CharField(max_length=255, null=True)),
520
+ ('description', models.TextField(blank=True, null=True)),
521
+ ],
522
+ ),
523
+ migrations.CreateModel(
524
+ name='PdfType',
525
+ fields=[
526
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
527
+ ('name', models.CharField(max_length=255)),
528
+ ],
529
+ ),
530
+ migrations.CreateModel(
531
+ name='Product',
532
+ fields=[
533
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
534
+ ('name', models.CharField(max_length=255)),
535
+ ('name_de', models.CharField(max_length=255, null=True)),
536
+ ('name_en', models.CharField(max_length=255, null=True)),
537
+ ],
538
+ ),
539
+ migrations.CreateModel(
540
+ name='ProductGroup',
541
+ fields=[
542
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
543
+ ('name', models.CharField(max_length=255)),
544
+ ('name_de', models.CharField(max_length=255, null=True)),
545
+ ('name_en', models.CharField(max_length=255, null=True)),
546
+ ],
547
+ ),
548
+ migrations.CreateModel(
549
+ name='Profession',
550
+ fields=[
551
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
552
+ ('name', models.CharField(max_length=100)),
553
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
554
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
555
+ ('description', models.TextField(blank=True, null=True)),
556
+ ],
557
+ ),
558
+ migrations.CreateModel(
559
+ name='QuizAnswerType',
560
+ fields=[
561
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
562
+ ('name', models.CharField(max_length=255)),
563
+ ('description', models.TextField(blank=True, null=True)),
564
+ ],
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
+ ),
574
+ migrations.CreateModel(
575
+ name='QuizQuestionType',
576
+ fields=[
577
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
578
+ ('name', models.CharField(max_length=255)),
579
+ ('description', models.TextField(blank=True, null=True)),
580
+ ],
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
+ ),
595
+ migrations.CreateModel(
596
+ name='ReportReaderFlag',
597
+ fields=[
598
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
599
+ ('name', models.CharField(max_length=255, unique=True)),
600
+ ('value', models.CharField(max_length=255)),
601
+ ],
602
+ ),
603
+ migrations.CreateModel(
604
+ name='Resource',
605
+ fields=[
606
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
607
+ ('name', models.CharField(max_length=255)),
608
+ ('name_de', models.CharField(max_length=255, null=True)),
609
+ ('name_en', models.CharField(max_length=255, null=True)),
610
+ ],
611
+ ),
612
+ migrations.CreateModel(
613
+ name='RuleAttributeDType',
614
+ fields=[
615
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
616
+ ('name', models.CharField(max_length=255, unique=True)),
617
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
618
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
619
+ ],
620
+ ),
621
+ migrations.CreateModel(
622
+ name='RuleType',
623
+ fields=[
624
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
625
+ ('name', models.CharField(max_length=255, unique=True)),
626
+ ('name_de', models.CharField(blank=True, max_length=255, null=True)),
627
+ ('name_en', models.CharField(blank=True, max_length=255, null=True)),
628
+ ],
629
+ options={
630
+ 'verbose_name': 'Rule Type',
631
+ 'verbose_name_plural': 'Rule Types',
632
+ },
633
+ ),
634
+ migrations.CreateModel(
635
+ name='SingleCategoricalValueDistribution',
636
+ fields=[
637
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
638
+ ('name', models.CharField(max_length=100)),
639
+ ('categories', models.JSONField()),
640
+ ],
641
+ options={
642
+ 'abstract': False,
643
+ },
644
+ ),
645
+ migrations.CreateModel(
646
+ name='TtoQuestionnaire',
647
+ fields=[
648
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
649
+ ('patient_name', models.CharField(max_length=255, verbose_name='Identifikation des Patienten (Name)')),
650
+ ('birth_date', models.DateField(verbose_name='Geburtsdatum')),
651
+ ('emergency_patient', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Notfallpatient/kürzlich untersuchter Patient (Verzicht auf Team-Time-Out möglich)')),
652
+ ('consent_signed', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Einverständniserklärung unterschrieben (Arzt, Patient)')),
653
+ ('documents_present', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Alle Dokumente liegen vor (Labor, Befunde, etc.)')),
654
+ ('communication_possible', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Kommunikation mit Patient möglich')),
655
+ ('work_incapacity_certificate', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Arbeitsunfähigkeitsbescheinigung')),
656
+ ('pregnancy', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Schwangerschaft')),
657
+ ('asa_classification_checked', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='ASA-Klassifikation/Komorbidität geprüft')),
658
+ ('previous_anesthesia_complications', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Komplikationen bei bisherigen Narkosen?')),
659
+ ('last_meal_over_6_hours_ago', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Zeitpunkt letzte Mahlzeit > 6 Stunden')),
660
+ ('allergies', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Allergien, welche?')),
661
+ ('outpatient_accompaniment_post_sedation', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Nur bei ambulanter Vorstellung: Begleitung nach Sedierung?')),
662
+ ('dental_prosthesis', models.BooleanField(default=False, verbose_name='Zahnprothese')),
663
+ ('glasses', models.BooleanField(default=False, verbose_name='Brille')),
664
+ ('implants', models.BooleanField(default=False, verbose_name='Implantate')),
665
+ ('hearing_aids', models.BooleanField(default=False, verbose_name='Hörgeräte')),
666
+ ('anticoagulants_ass', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Antikoagulation, ASS')),
667
+ ('blood_pressure_medication', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Blutdruckmedikamente')),
668
+ ('glaucoma', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Glaukom')),
669
+ ('metal_implants', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Metallimplantate')),
670
+ ('pacemaker_icd', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Herzschrittmacher/ICD')),
671
+ ('copd', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='COPD')),
672
+ ('liver_cirrhosis', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Leberzirrhose')),
673
+ ('ibd', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='CED (Chronisch entzündliche Darmerkrankungen)')),
674
+ ('radiation', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Bestrahlung')),
675
+ ('surgeries', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='OP´s')),
676
+ ('team_introduction', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Teamvorstellung mit Name und Aufgabe')),
677
+ ('instruments_available', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Notwendige Instrumente vorhanden?')),
678
+ ('monitoring_medications_equipment_checked', models.CharField(choices=[('yes', 'Ja'), ('no', 'Nein')], max_length=3, verbose_name='Monitoring, Medikamente, Equipment zum Atemwegsmanagement zur Verfügung und überprüft?')),
679
+ ('complete_documentation_inclusive_care_notes', models.TextField(verbose_name='Vollständige Dokumentation inklusive Hinweise für Nachsorge')),
680
+ ('notes', models.TextField(default='Keine Bemerkungen', verbose_name='Bemerkungen')),
681
+ ('specimens_secured', models.BooleanField(default=False, verbose_name='Histologische Proben gesichert')),
682
+ ('patient_condition_documented', models.TextField(verbose_name='Patientenzustand dokumentiert (je nach Ausgangszustand)')),
683
+ ],
684
+ ),
685
+ migrations.CreateModel(
686
+ name='Unit',
687
+ fields=[
688
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
689
+ ('name', models.CharField(max_length=100)),
690
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
691
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
692
+ ('description', models.CharField(blank=True, max_length=100, null=True)),
693
+ ('abbreviation', models.CharField(blank=True, max_length=25, null=True)),
694
+ ],
695
+ ),
696
+ migrations.CreateModel(
697
+ name='UploadedFile',
698
+ fields=[
699
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
703
+ ],
704
+ ),
705
+ migrations.CreateModel(
706
+ name='VideoImportMeta',
707
+ fields=[
708
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
709
+ ('video_anonymized', models.BooleanField(default=False)),
710
+ ('video_patient_data_detected', models.BooleanField(default=False)),
711
+ ('outside_detected', models.BooleanField(default=False)),
712
+ ('patient_data_removed', models.BooleanField(default=False)),
713
+ ('outside_removed', models.BooleanField(default=False)),
714
+ ],
715
+ ),
716
+ migrations.CreateModel(
717
+ name='VideoSegmentationLabel',
718
+ fields=[
719
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
720
+ ('name', models.CharField(max_length=255)),
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)),
726
+ ],
727
+ ),
728
+ migrations.CreateModel(
729
+ name='Waste',
730
+ fields=[
731
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
735
+ ],
736
+ ),
737
+ migrations.CreateModel(
738
+ name='AnonymousImageAnnotation',
739
+ fields=[
740
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
751
+ ],
752
+ ),
753
+ migrations.CreateModel(
754
+ name='CaseTemplateRule',
755
+ fields=[
756
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
757
+ ('name', models.CharField(max_length=255)),
758
+ ('name_de', models.CharField(max_length=255, null=True)),
759
+ ('name_en', models.CharField(max_length=255, null=True)),
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')),
774
+ ],
775
+ ),
776
+ migrations.CreateModel(
777
+ name='CaseTemplate',
778
+ fields=[
779
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
780
+ ('name', models.CharField(max_length=255, unique=True)),
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')),
785
+ ],
786
+ ),
787
+ migrations.CreateModel(
788
+ name='DiseaseClassification',
789
+ fields=[
790
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
795
+ ],
796
+ ),
797
+ migrations.CreateModel(
798
+ name='DiseaseClassificationChoice',
799
+ fields=[
800
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
805
+ ],
806
+ ),
807
+ migrations.CreateModel(
808
+ name='DroppedName',
809
+ fields=[
810
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
811
+ ('name', models.CharField(max_length=255)),
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')),
818
+ ],
819
+ ),
820
+ migrations.CreateModel(
821
+ name='Endoscope',
822
+ fields=[
823
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
830
+ ],
831
+ options={
832
+ 'verbose_name': 'Endoscope',
833
+ 'verbose_name_plural': 'Endoscopes',
834
+ 'ordering': ['name'],
835
+ },
836
+ ),
837
+ migrations.CreateModel(
838
+ name='EndoscopyProcessor',
839
+ fields=[
840
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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=[
882
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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)),
886
+ ('description', models.TextField(blank=True, null=True)),
887
+ ('event_classification', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='events', to='endoreg_db.eventclassification')),
888
+ ],
889
+ ),
890
+ migrations.CreateModel(
891
+ name='EventClassificationChoice',
892
+ fields=[
893
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
900
+ ],
901
+ ),
902
+ migrations.CreateModel(
903
+ name='ExaminationIndication',
904
+ fields=[
905
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
911
+ ],
912
+ ),
913
+ migrations.CreateModel(
914
+ name='ExaminationIndicationClassificationChoice',
915
+ fields=[
916
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
950
+ ],
951
+ options={
952
+ 'verbose_name': 'Examination Time',
953
+ 'verbose_name_plural': 'Examination Times',
954
+ 'ordering': ['name'],
955
+ },
956
+ ),
957
+ migrations.AddField(
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
+ ],
1007
+ ),
1008
+ migrations.AddField(
1009
+ model_name='findingmorphologyclassification',
1010
+ name='classification_type',
1011
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.findingmorphologyclassificationtype'),
1012
+ ),
1013
+ migrations.CreateModel(
1014
+ name='FindingLocationClassification',
1015
+ fields=[
1016
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1027
+ ],
1028
+ ),
1029
+ migrations.AddField(
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
+ ],
1079
+ ),
1080
+ migrations.AddField(
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
+ ],
1104
+ ),
1105
+ migrations.AddField(
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'),
1109
+ ),
1110
+ migrations.AddField(
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
+ ],
1125
+ ),
1126
+ migrations.AddField(
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
+ ],
1430
+ ),
1431
+ migrations.CreateModel(
1432
+ name='PatientMedication',
1433
+ fields=[
1434
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1442
+ ],
1443
+ options={
1444
+ 'verbose_name': 'Patient Medication',
1445
+ 'verbose_name_plural': 'Patient Medications',
1446
+ },
1447
+ ),
1448
+ migrations.CreateModel(
1449
+ name='PatientMedicationSchedule',
1450
+ fields=[
1451
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1452
+ ('created_at', models.DateTimeField(auto_now_add=True)),
1453
+ ('updated_at', models.DateTimeField(auto_now=True)),
1454
+ ('medication', models.ManyToManyField(blank=True, related_name='patient_medication_schedules', to='endoreg_db.patientmedication')),
1455
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1456
+ ],
1457
+ ),
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
+ ],
1467
+ ),
1468
+ migrations.CreateModel(
1469
+ name='CenterProduct',
1470
+ fields=[
1471
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1475
+ ],
1476
+ ),
1477
+ migrations.AddField(
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'),
1481
+ ),
1482
+ migrations.CreateModel(
1483
+ name='PortalUserInfo',
1484
+ fields=[
1485
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1489
+ ],
1490
+ ),
1491
+ migrations.CreateModel(
1492
+ name='QuizAnswer',
1493
+ fields=[
1494
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1500
+ ],
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
+ ),
1507
+ migrations.CreateModel(
1508
+ name='ImageClassificationAnnotation',
1509
+ fields=[
1510
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1521
+ ],
1522
+ ),
1523
+ migrations.CreateModel(
1524
+ name='RawVideoFile',
1525
+ fields=[
1526
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1568
+ ],
1569
+ options={
1570
+ 'abstract': False,
1571
+ },
1572
+ ),
1573
+ migrations.AddField(
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'),
1577
+ ),
1578
+ migrations.CreateModel(
1579
+ name='RawVideoPredictionMeta',
1580
+ fields=[
1581
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1582
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1583
+ ('date_modified', models.DateTimeField(auto_now=True)),
1584
+ ('prediction_array', models.BinaryField(blank=True, null=True)),
1585
+ ('is_raw', models.BooleanField(default=False)),
1586
+ ('model_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.modelmeta')),
1587
+ ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_prediction_meta', to='endoreg_db.rawvideofile')),
1588
+ ],
1589
+ options={
1590
+ 'abstract': False,
1591
+ },
1592
+ ),
1593
+ migrations.CreateModel(
1594
+ name='LabelRawVideoSegment',
1595
+ fields=[
1596
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1597
+ ('start_frame_number', models.IntegerField()),
1598
+ ('end_frame_number', models.IntegerField()),
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')),
1603
+ ],
1604
+ options={
1605
+ 'abstract': False,
1606
+ },
1607
+ ),
1608
+ migrations.CreateModel(
1609
+ name='ReferenceProduct',
1610
+ fields=[
1611
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1618
+ ],
1619
+ ),
1620
+ migrations.CreateModel(
1621
+ name='ReportReaderConfig',
1622
+ fields=[
1623
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1633
+ ],
1634
+ ),
1635
+ migrations.AddField(
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'),
1644
+ ),
1645
+ migrations.AddField(
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'),
1649
+ ),
1650
+ migrations.AddField(
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'),
1654
+ ),
1655
+ migrations.AddField(
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'),
1659
+ ),
1660
+ migrations.CreateModel(
1661
+ name='Rule',
1662
+ fields=[
1663
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1731
+ ],
1732
+ options={
1733
+ 'abstract': False,
1734
+ },
1735
+ ),
1736
+ migrations.AddField(
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'),
1740
+ ),
1741
+ migrations.CreateModel(
1742
+ name='RawPdfFile',
1743
+ fields=[
1744
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1757
+ ],
1758
+ options={
1759
+ 'abstract': False,
1760
+ },
1761
+ ),
1762
+ migrations.CreateModel(
1763
+ name='TransportRoute',
1764
+ fields=[
1765
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1772
+ ],
1773
+ ),
1774
+ migrations.AddField(
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'),
1778
+ ),
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
+ ],
1790
+ ),
1791
+ migrations.CreateModel(
1792
+ name='ProductMaterial',
1793
+ fields=[
1794
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1800
+ ],
1801
+ ),
1802
+ migrations.CreateModel(
1803
+ name='PatientLabValue',
1804
+ fields=[
1805
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1814
+ ],
1815
+ ),
1816
+ migrations.AddField(
1817
+ model_name='medication',
1818
+ name='default_unit',
1819
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit'),
1820
+ ),
1821
+ migrations.AddField(
1822
+ model_name='emissionfactor',
1823
+ name='unit',
1824
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit'),
1825
+ ),
1826
+ migrations.CreateModel(
1827
+ name='CenterResource',
1828
+ fields=[
1829
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1830
+ ('name', models.CharField(max_length=255, null=True)),
1831
+ ('name_de', models.CharField(max_length=255, null=True)),
1832
+ ('name_en', models.CharField(max_length=255, null=True)),
1833
+ ('quantity', models.FloatField()),
1834
+ ('year', models.IntegerField()),
1835
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
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')),
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')),
1840
+ ],
1841
+ ),
1842
+ migrations.CreateModel(
1843
+ name='AnonymizedFile',
1844
+ fields=[
1845
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1892
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
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')),
1898
+ ],
1899
+ options={
1900
+ 'abstract': False,
1901
+ },
1902
+ ),
1903
+ migrations.AddField(
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'),
1907
+ ),
1908
+ migrations.AddField(
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'),
1917
+ ),
1918
+ migrations.CreateModel(
1919
+ name='VideoMeta',
1920
+ fields=[
1921
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1927
+ ],
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
+ ),
1939
+ migrations.CreateModel(
1940
+ name='VideoPredictionMeta',
1941
+ fields=[
1942
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1949
+ ],
1950
+ options={
1951
+ 'abstract': False,
1952
+ },
1953
+ ),
1954
+ migrations.CreateModel(
1955
+ name='LabelVideoSegment',
1956
+ fields=[
1957
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1964
+ ],
1965
+ options={
1966
+ 'abstract': False,
1967
+ },
1968
+ ),
1969
+ migrations.CreateModel(
1970
+ name='VideoSegmentationAnnotation',
1971
+ fields=[
1972
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
1987
+ ],
1988
+ ),
1989
+ migrations.AddField(
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'),
1993
+ ),
1994
+ migrations.CreateModel(
1995
+ name='CenterWaste',
1996
+ fields=[
1997
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
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')),
2004
+ ],
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
+ ),
2021
+ migrations.AddIndex(
2022
+ model_name='rawframe',
2023
+ index=models.Index(fields=['video', 'frame_number'], name='endoreg_db__video_i_b5dc58_idx'),
2024
+ ),
2025
+ migrations.AlterUniqueTogether(
2026
+ name='rawframe',
2027
+ unique_together={('video', 'frame_number')},
2028
+ ),
2029
+ migrations.AlterUniqueTogether(
2030
+ name='rawvideopredictionmeta',
2031
+ unique_together={('model_meta', 'video')},
2032
+ ),
2033
+ migrations.AddIndex(
2034
+ model_name='frame',
2035
+ index=models.Index(fields=['video', 'frame_number'], name='endoreg_db__video_i_56cc44_idx'),
2036
+ ),
2037
+ migrations.AlterUniqueTogether(
2038
+ name='frame',
2039
+ unique_together={('video', 'frame_number')},
2040
+ ),
2041
+ migrations.AlterUniqueTogether(
2042
+ name='videopredictionmeta',
2043
+ unique_together={('model_meta', 'video')},
2044
+ ),
2045
+ ]