endoreg-db 0.8.8.0__py3-none-any.whl → 0.8.9.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of endoreg-db might be problematic. Click here for more details.

Files changed (402) hide show
  1. endoreg_db/data/__init__.py +22 -8
  2. endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +0 -1
  3. endoreg_db/data/examination/examinations/data.yaml +114 -14
  4. endoreg_db/data/examination/time-type/data.yaml +0 -3
  5. endoreg_db/data/examination_indication/endoscopy.yaml +108 -173
  6. endoreg_db/data/examination_indication_classification/endoscopy.yaml +0 -70
  7. endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +33 -37
  8. endoreg_db/data/finding/00_generic.yaml +35 -0
  9. endoreg_db/data/finding/00_generic_complication.yaml +9 -0
  10. endoreg_db/data/finding/01_gastroscopy_baseline.yaml +88 -0
  11. endoreg_db/data/finding/01_gastroscopy_observation.yaml +113 -0
  12. endoreg_db/data/finding/02_colonoscopy_baseline.yaml +53 -0
  13. endoreg_db/data/finding/02_colonoscopy_hidden.yaml +119 -0
  14. endoreg_db/data/finding/02_colonoscopy_observation.yaml +152 -0
  15. endoreg_db/data/finding_classification/00_generic.yaml +44 -0
  16. endoreg_db/data/finding_classification/00_generic_histology.yaml +28 -0
  17. endoreg_db/data/finding_classification/00_generic_lesion.yaml +52 -0
  18. endoreg_db/data/finding_classification/{colonoscopy_bowel_preparation.yaml → 02_colonoscopy_baseline.yaml} +35 -20
  19. endoreg_db/data/finding_classification/02_colonoscopy_histology.yaml +13 -0
  20. endoreg_db/data/finding_classification/02_colonoscopy_other.yaml +12 -0
  21. endoreg_db/data/finding_classification/02_colonoscopy_polyp.yaml +101 -0
  22. endoreg_db/data/finding_classification_choice/{yes_no_na.yaml → 00_generic.yaml} +5 -1
  23. endoreg_db/data/finding_classification_choice/{examination_setting_generic_types.yaml → 00_generic_baseline.yaml} +10 -2
  24. endoreg_db/data/finding_classification_choice/{complication_generic_types.yaml → 00_generic_complication.yaml} +1 -1
  25. endoreg_db/data/finding_classification_choice/{histology.yaml → 00_generic_histology.yaml} +1 -4
  26. endoreg_db/data/finding_classification_choice/00_generic_lesion.yaml +158 -0
  27. endoreg_db/data/finding_classification_choice/{bowel_preparation.yaml → 02_colonoscopy_bowel_preparation.yaml} +1 -30
  28. endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_not_complete_reason.yaml → finding_classification_choice/02_colonoscopy_generic.yaml} +1 -1
  29. endoreg_db/data/finding_classification_choice/{histology_polyp.yaml → 02_colonoscopy_histology.yaml} +1 -1
  30. endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_location.yaml → finding_classification_choice/02_colonoscopy_location.yaml} +23 -4
  31. endoreg_db/data/finding_classification_choice/02_colonoscopy_other.yaml +34 -0
  32. endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_advanced_imaging.yaml +76 -0
  33. endoreg_db/data/{_examples/finding_classification_choice/colon_lesion_paris.yaml → finding_classification_choice/02_colonoscopy_polyp_morphology.yaml} +26 -8
  34. endoreg_db/data/finding_classification_choice/02_colonoscopy_size.yaml +27 -0
  35. endoreg_db/data/finding_classification_type/{colonoscopy_basic.yaml → 00_generic.yaml} +18 -13
  36. endoreg_db/data/finding_classification_type/02_colonoscopy.yaml +9 -0
  37. endoreg_db/data/finding_intervention/00_generic_endoscopy.yaml +59 -0
  38. endoreg_db/data/finding_intervention/00_generic_endoscopy_ablation.yaml +44 -0
  39. endoreg_db/data/finding_intervention/00_generic_endoscopy_bleeding.yaml +55 -0
  40. endoreg_db/data/finding_intervention/00_generic_endoscopy_resection.yaml +85 -0
  41. endoreg_db/data/finding_intervention/00_generic_endoscopy_stenosis.yaml +17 -0
  42. endoreg_db/data/finding_intervention/00_generic_endoscopy_stent.yaml +9 -0
  43. endoreg_db/data/finding_intervention/01_gastroscopy.yaml +19 -0
  44. endoreg_db/data/finding_intervention/04_eus.yaml +39 -0
  45. endoreg_db/data/finding_intervention/05_ercp.yaml +3 -0
  46. endoreg_db/data/finding_type/data.yaml +8 -12
  47. endoreg_db/data/requirement/01_patient_data.yaml +93 -0
  48. endoreg_db/data/requirement_operator/new_operators.yaml +36 -0
  49. endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +0 -2
  50. endoreg_db/data/requirement_set/90_coloreg.yaml +20 -8
  51. endoreg_db/exceptions.py +0 -1
  52. endoreg_db/forms/examination_form.py +1 -1
  53. endoreg_db/helpers/data_loader.py +124 -52
  54. endoreg_db/helpers/default_objects.py +116 -81
  55. endoreg_db/import_files/__init__.py +27 -0
  56. endoreg_db/import_files/context/__init__.py +7 -0
  57. endoreg_db/import_files/context/default_sensitive_meta.py +81 -0
  58. endoreg_db/import_files/context/ensure_center.py +17 -0
  59. endoreg_db/import_files/context/file_lock.py +66 -0
  60. endoreg_db/import_files/context/import_context.py +43 -0
  61. endoreg_db/import_files/context/validate_directories.py +56 -0
  62. endoreg_db/import_files/file_storage/__init__.py +15 -0
  63. endoreg_db/import_files/file_storage/create_report_file.py +76 -0
  64. endoreg_db/import_files/file_storage/create_video_file.py +75 -0
  65. endoreg_db/import_files/file_storage/sensitive_meta_storage.py +39 -0
  66. endoreg_db/import_files/file_storage/state_management.py +496 -0
  67. endoreg_db/import_files/file_storage/storage.py +36 -0
  68. endoreg_db/import_files/import_service.md +26 -0
  69. endoreg_db/import_files/processing/__init__.py +11 -0
  70. endoreg_db/import_files/processing/report_processing/report_anonymization.py +94 -0
  71. endoreg_db/import_files/processing/sensitive_meta_adapter.py +51 -0
  72. endoreg_db/import_files/processing/video_processing/video_anonymization.py +107 -0
  73. endoreg_db/import_files/pseudonymization/fake.py +52 -0
  74. endoreg_db/import_files/pseudonymization/k_anonymity.py +182 -0
  75. endoreg_db/import_files/pseudonymization/k_pseudonymity.py +128 -0
  76. endoreg_db/import_files/pseudonymization/pseudonymize.py +0 -0
  77. endoreg_db/import_files/report_import_service.py +141 -0
  78. endoreg_db/import_files/video_import_service.py +150 -0
  79. endoreg_db/management/commands/import_report.py +130 -65
  80. endoreg_db/management/commands/import_video_with_classification.py +1 -1
  81. endoreg_db/management/commands/load_ai_model_data.py +5 -5
  82. endoreg_db/management/commands/load_ai_model_label_data.py +9 -7
  83. endoreg_db/management/commands/load_base_db_data.py +5 -134
  84. endoreg_db/management/commands/load_contraindication_data.py +14 -16
  85. endoreg_db/management/commands/load_disease_classification_choices_data.py +15 -18
  86. endoreg_db/management/commands/load_disease_classification_data.py +15 -18
  87. endoreg_db/management/commands/load_disease_data.py +25 -28
  88. endoreg_db/management/commands/load_endoscope_data.py +20 -27
  89. endoreg_db/management/commands/load_event_data.py +14 -16
  90. endoreg_db/management/commands/load_examination_data.py +31 -44
  91. endoreg_db/management/commands/load_examination_indication_data.py +20 -21
  92. endoreg_db/management/commands/load_finding_data.py +52 -80
  93. endoreg_db/management/commands/load_information_source.py +21 -23
  94. endoreg_db/management/commands/load_lab_value_data.py +17 -26
  95. endoreg_db/management/commands/load_medication_data.py +13 -12
  96. endoreg_db/management/commands/load_organ_data.py +15 -19
  97. endoreg_db/management/commands/load_pdf_type_data.py +19 -18
  98. endoreg_db/management/commands/load_profession_data.py +14 -17
  99. endoreg_db/management/commands/load_qualification_data.py +20 -23
  100. endoreg_db/management/commands/load_report_reader_flag_data.py +17 -19
  101. endoreg_db/management/commands/load_requirement_data.py +14 -20
  102. endoreg_db/management/commands/load_risk_data.py +7 -6
  103. endoreg_db/management/commands/load_shift_data.py +20 -23
  104. endoreg_db/management/commands/load_tag_data.py +8 -11
  105. endoreg_db/management/commands/load_unit_data.py +17 -19
  106. endoreg_db/management/commands/start_filewatcher.py +46 -37
  107. endoreg_db/management/commands/validate_video_files.py +1 -5
  108. endoreg_db/migrations/0001_initial.py +1360 -1812
  109. endoreg_db/models/administration/person/patient/patient.py +72 -46
  110. endoreg_db/models/label/__init__.py +2 -2
  111. endoreg_db/models/label/annotation/video_segmentation_annotation.py +18 -26
  112. endoreg_db/models/label/label_video_segment/label_video_segment.py +23 -1
  113. endoreg_db/models/media/pdf/raw_pdf.py +136 -64
  114. endoreg_db/models/media/pdf/report_reader/report_reader_config.py +34 -10
  115. endoreg_db/models/media/processing_history/__init__.py +5 -0
  116. endoreg_db/models/media/processing_history/processing_history.py +96 -0
  117. endoreg_db/models/media/video/create_from_file.py +101 -31
  118. endoreg_db/models/media/video/video_file.py +125 -105
  119. endoreg_db/models/media/video/video_file_io.py +31 -26
  120. endoreg_db/models/medical/contraindication/README.md +1 -0
  121. endoreg_db/models/medical/examination/examination.py +28 -8
  122. endoreg_db/models/medical/examination/examination_indication.py +13 -79
  123. endoreg_db/models/medical/examination/examination_time.py +8 -3
  124. endoreg_db/models/medical/finding/finding.py +5 -12
  125. endoreg_db/models/medical/finding/finding_classification.py +18 -37
  126. endoreg_db/models/medical/finding/finding_intervention.py +7 -9
  127. endoreg_db/models/medical/hardware/endoscope.py +6 -0
  128. endoreg_db/models/medical/patient/medication_examples.py +5 -1
  129. endoreg_db/models/medical/patient/patient_finding.py +1 -1
  130. endoreg_db/models/metadata/pdf_meta.py +22 -10
  131. endoreg_db/models/metadata/sensitive_meta.py +3 -0
  132. endoreg_db/models/metadata/sensitive_meta_logic.py +200 -124
  133. endoreg_db/models/other/information_source.py +27 -6
  134. endoreg_db/models/report/__init__.py +0 -0
  135. endoreg_db/models/report/images.py +0 -0
  136. endoreg_db/models/report/report.py +6 -0
  137. endoreg_db/models/requirement/requirement.py +59 -399
  138. endoreg_db/models/requirement/requirement_operator.py +86 -98
  139. endoreg_db/models/state/audit_ledger.py +4 -5
  140. endoreg_db/models/state/raw_pdf.py +69 -30
  141. endoreg_db/models/state/video.py +65 -49
  142. endoreg_db/models/upload_job.py +33 -9
  143. endoreg_db/models/utils.py +27 -23
  144. endoreg_db/queries/__init__.py +3 -1
  145. endoreg_db/schemas/examination_evaluation.py +1 -1
  146. endoreg_db/serializers/__init__.py +2 -8
  147. endoreg_db/serializers/label_video_segment/label_video_segment.py +2 -29
  148. endoreg_db/serializers/meta/__init__.py +1 -6
  149. endoreg_db/serializers/misc/sensitive_patient_data.py +50 -26
  150. endoreg_db/serializers/patient_examination/patient_examination.py +3 -3
  151. endoreg_db/serializers/pdf/anony_text_validation.py +39 -23
  152. endoreg_db/serializers/video/video_file_list.py +65 -34
  153. endoreg_db/services/__old/pdf_import.py +1487 -0
  154. endoreg_db/services/__old/video_import.py +1306 -0
  155. endoreg_db/services/anonymization.py +63 -26
  156. endoreg_db/services/lookup_service.py +28 -28
  157. endoreg_db/services/lookup_store.py +2 -2
  158. endoreg_db/services/pdf_import.py +0 -1480
  159. endoreg_db/services/report_import.py +10 -0
  160. endoreg_db/services/video_import.py +6 -1165
  161. endoreg_db/tasks/upload_tasks.py +79 -70
  162. endoreg_db/tasks/video_ingest.py +8 -4
  163. endoreg_db/urls/__init__.py +0 -14
  164. endoreg_db/urls/ai.py +32 -0
  165. endoreg_db/urls/media.py +21 -24
  166. endoreg_db/utils/dataloader.py +87 -57
  167. endoreg_db/utils/paths.py +110 -46
  168. endoreg_db/utils/pipelines/Readme.md +1 -1
  169. endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +97 -0
  170. endoreg_db/utils/video/ffmpeg_wrapper.py +217 -52
  171. endoreg_db/views/__init__.py +85 -173
  172. endoreg_db/views/ai/__init__.py +8 -0
  173. endoreg_db/views/ai/label.py +155 -0
  174. endoreg_db/views/anonymization/media_management.py +8 -7
  175. endoreg_db/views/anonymization/overview.py +97 -68
  176. endoreg_db/views/anonymization/validate.py +25 -21
  177. endoreg_db/views/media/__init__.py +5 -20
  178. endoreg_db/views/media/pdf_media.py +109 -65
  179. endoreg_db/views/media/sensitive_metadata.py +163 -148
  180. endoreg_db/views/meta/__init__.py +0 -8
  181. endoreg_db/views/misc/__init__.py +1 -7
  182. endoreg_db/views/misc/upload_views.py +94 -93
  183. endoreg_db/views/report/__init__.py +7 -0
  184. endoreg_db/views/{pdf → report}/reimport.py +45 -24
  185. endoreg_db/views/{pdf/pdf_stream.py → report/report_stream.py} +40 -32
  186. endoreg_db/views/requirement/lookup_store.py +22 -90
  187. endoreg_db/views/video/__init__.py +23 -22
  188. endoreg_db/views/video/correction.py +201 -172
  189. endoreg_db/views/video/reimport.py +1 -1
  190. endoreg_db/views/{media/video_segments.py → video/segments_crud.py} +75 -37
  191. endoreg_db/views/video/{video_meta.py → video_meta_stats.py} +2 -2
  192. endoreg_db/views/video/video_stream.py +7 -8
  193. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/METADATA +2 -2
  194. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/RECORD +217 -335
  195. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/WHEEL +1 -1
  196. endoreg_db/data/_examples/disease.yaml +0 -55
  197. endoreg_db/data/_examples/disease_classification.yaml +0 -13
  198. endoreg_db/data/_examples/disease_classification_choice.yaml +0 -62
  199. endoreg_db/data/_examples/event.yaml +0 -64
  200. endoreg_db/data/_examples/examination.yaml +0 -72
  201. endoreg_db/data/_examples/finding/anatomy_colon.yaml +0 -128
  202. endoreg_db/data/_examples/finding/colonoscopy.yaml +0 -40
  203. endoreg_db/data/_examples/finding/colonoscopy_bowel_prep.yaml +0 -56
  204. endoreg_db/data/_examples/finding/complication.yaml +0 -16
  205. endoreg_db/data/_examples/finding/data.yaml +0 -105
  206. endoreg_db/data/_examples/finding/examination_setting.yaml +0 -16
  207. endoreg_db/data/_examples/finding/medication_related.yaml +0 -18
  208. endoreg_db/data/_examples/finding/outcome.yaml +0 -12
  209. endoreg_db/data/_examples/finding_classification/colonoscopy_bowel_preparation.yaml +0 -68
  210. endoreg_db/data/_examples/finding_classification/colonoscopy_jnet.yaml +0 -22
  211. endoreg_db/data/_examples/finding_classification/colonoscopy_kudo.yaml +0 -25
  212. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
  213. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
  214. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_size.yaml +0 -68
  215. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
  216. endoreg_db/data/_examples/finding_classification/colonoscopy_location.yaml +0 -80
  217. endoreg_db/data/_examples/finding_classification/colonoscopy_lst.yaml +0 -21
  218. endoreg_db/data/_examples/finding_classification/colonoscopy_nice.yaml +0 -20
  219. endoreg_db/data/_examples/finding_classification/colonoscopy_paris.yaml +0 -26
  220. endoreg_db/data/_examples/finding_classification/colonoscopy_sano.yaml +0 -22
  221. endoreg_db/data/_examples/finding_classification/colonoscopy_summary.yaml +0 -53
  222. endoreg_db/data/_examples/finding_classification/complication_generic.yaml +0 -25
  223. endoreg_db/data/_examples/finding_classification/examination_setting_generic.yaml +0 -40
  224. endoreg_db/data/_examples/finding_classification/histology_colo.yaml +0 -51
  225. endoreg_db/data/_examples/finding_classification/intervention_required.yaml +0 -26
  226. endoreg_db/data/_examples/finding_classification/medication_related.yaml +0 -23
  227. endoreg_db/data/_examples/finding_classification/visualized.yaml +0 -33
  228. endoreg_db/data/_examples/finding_classification_choice/bowel_preparation.yaml +0 -78
  229. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
  230. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
  231. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
  232. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_lst.yaml +0 -15
  233. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_nice.yaml +0 -17
  234. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
  235. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_sano.yaml +0 -14
  236. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
  237. endoreg_db/data/_examples/finding_classification_choice/colonoscopy_size.yaml +0 -82
  238. endoreg_db/data/_examples/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
  239. endoreg_db/data/_examples/finding_classification_choice/complication_generic_types.yaml +0 -15
  240. endoreg_db/data/_examples/finding_classification_choice/examination_setting_generic_types.yaml +0 -15
  241. endoreg_db/data/_examples/finding_classification_choice/histology.yaml +0 -24
  242. endoreg_db/data/_examples/finding_classification_choice/histology_polyp.yaml +0 -20
  243. endoreg_db/data/_examples/finding_classification_choice/outcome.yaml +0 -19
  244. endoreg_db/data/_examples/finding_classification_choice/yes_no_na.yaml +0 -11
  245. endoreg_db/data/_examples/finding_classification_type/colonoscopy_basic.yaml +0 -48
  246. endoreg_db/data/_examples/finding_intervention/endoscopy.yaml +0 -43
  247. endoreg_db/data/_examples/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
  248. endoreg_db/data/_examples/finding_intervention/endoscopy_egd.yaml +0 -128
  249. endoreg_db/data/_examples/finding_intervention/endoscopy_ercp.yaml +0 -32
  250. endoreg_db/data/_examples/finding_intervention/endoscopy_eus_lower.yaml +0 -9
  251. endoreg_db/data/_examples/finding_intervention/endoscopy_eus_upper.yaml +0 -36
  252. endoreg_db/data/_examples/finding_intervention_type/endoscopy.yaml +0 -15
  253. endoreg_db/data/_examples/finding_type/data.yaml +0 -43
  254. endoreg_db/data/_examples/requirement/age.yaml +0 -26
  255. endoreg_db/data/_examples/requirement/gender.yaml +0 -25
  256. endoreg_db/data/_examples/requirement_set/01_endoscopy_generic.yaml +0 -48
  257. endoreg_db/data/_examples/requirement_set/colonoscopy_austria_screening.yaml +0 -57
  258. endoreg_db/data/_examples/requirement_set/endoscopy_bleeding_risk.yaml +0 -52
  259. endoreg_db/data/_examples/yaml_examples.xlsx +0 -0
  260. endoreg_db/data/finding/anatomy_colon.yaml +0 -128
  261. endoreg_db/data/finding/colonoscopy.yaml +0 -40
  262. endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +0 -56
  263. endoreg_db/data/finding/complication.yaml +0 -16
  264. endoreg_db/data/finding/data.yaml +0 -105
  265. endoreg_db/data/finding/examination_setting.yaml +0 -16
  266. endoreg_db/data/finding/medication_related.yaml +0 -18
  267. endoreg_db/data/finding/outcome.yaml +0 -12
  268. endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +0 -22
  269. endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +0 -25
  270. endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
  271. endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
  272. endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +0 -38
  273. endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
  274. endoreg_db/data/finding_classification/colonoscopy_location.yaml +0 -49
  275. endoreg_db/data/finding_classification/colonoscopy_lst.yaml +0 -21
  276. endoreg_db/data/finding_classification/colonoscopy_nice.yaml +0 -20
  277. endoreg_db/data/finding_classification/colonoscopy_paris.yaml +0 -26
  278. endoreg_db/data/finding_classification/colonoscopy_sano.yaml +0 -22
  279. endoreg_db/data/finding_classification/colonoscopy_summary.yaml +0 -53
  280. endoreg_db/data/finding_classification/complication_generic.yaml +0 -25
  281. endoreg_db/data/finding_classification/examination_setting_generic.yaml +0 -40
  282. endoreg_db/data/finding_classification/histology_colo.yaml +0 -43
  283. endoreg_db/data/finding_classification/intervention_required.yaml +0 -26
  284. endoreg_db/data/finding_classification/medication_related.yaml +0 -23
  285. endoreg_db/data/finding_classification/visualized.yaml +0 -33
  286. endoreg_db/data/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
  287. endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
  288. endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
  289. endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +0 -15
  290. endoreg_db/data/finding_classification_choice/colon_lesion_nice.yaml +0 -17
  291. endoreg_db/data/finding_classification_choice/colon_lesion_paris.yaml +0 -57
  292. endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
  293. endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +0 -14
  294. endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
  295. endoreg_db/data/finding_classification_choice/colonoscopy_location.yaml +0 -229
  296. endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +0 -19
  297. endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +0 -82
  298. endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
  299. endoreg_db/data/finding_classification_choice/outcome.yaml +0 -19
  300. endoreg_db/data/finding_intervention/endoscopy.yaml +0 -43
  301. endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
  302. endoreg_db/data/finding_intervention/endoscopy_egd.yaml +0 -128
  303. endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +0 -32
  304. endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +0 -9
  305. endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +0 -36
  306. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +0 -79
  307. endoreg_db/data/requirement/age.yaml +0 -26
  308. endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +0 -45
  309. endoreg_db/data/requirement/disease_cardiovascular.yaml +0 -79
  310. endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +0 -41
  311. endoreg_db/data/requirement/disease_hepatology.yaml +0 -12
  312. endoreg_db/data/requirement/disease_misc.yaml +0 -12
  313. endoreg_db/data/requirement/disease_renal.yaml +0 -96
  314. endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +0 -59
  315. endoreg_db/data/requirement/event_cardiology.yaml +0 -251
  316. endoreg_db/data/requirement/event_requirements.yaml +0 -145
  317. endoreg_db/data/requirement/finding_colon_polyp.yaml +0 -50
  318. endoreg_db/data/requirement/gender.yaml +0 -25
  319. endoreg_db/data/requirement/lab_value.yaml +0 -441
  320. endoreg_db/data/requirement/medication.yaml +0 -93
  321. endoreg_db/data/requirement_operator/age.yaml +0 -13
  322. endoreg_db/data/requirement_operator/lab_operators.yaml +0 -129
  323. endoreg_db/data/requirement_operator/model_operators.yaml +0 -96
  324. endoreg_db/management/commands/init_default_ai_model.py +0 -112
  325. endoreg_db/management/commands/reset_celery_schedule.py +0 -9
  326. endoreg_db/management/commands/validate_video.py +0 -204
  327. endoreg_db/migrations/0002_requirementset_depends_on.py +0 -18
  328. endoreg_db/migrations/_old/0001_initial.py +0 -1857
  329. endoreg_db/migrations/_old/0002_add_video_correction_models.py +0 -52
  330. endoreg_db/migrations/_old/0003_add_center_display_name.py +0 -30
  331. endoreg_db/migrations/_old/0004_employee_city_employee_post_code_employee_street_and_more.py +0 -68
  332. endoreg_db/migrations/_old/0004_remove_casetemplate_rules_and_more.py +0 -77
  333. endoreg_db/migrations/_old/0005_merge_20251111_1003.py +0 -14
  334. endoreg_db/migrations/_old/0006_sensitivemeta_anonymized_text_and_more.py +0 -68
  335. endoreg_db/migrations/_old/0007_remove_rule_attribute_dtype_remove_rule_rule_type_and_more.py +0 -89
  336. endoreg_db/migrations/_old/0008_remove_event_event_classification_and_more.py +0 -27
  337. endoreg_db/migrations/_old/0009_alter_modelmeta_options_and_more.py +0 -21
  338. endoreg_db/renames.yml +0 -8
  339. endoreg_db/serializers/_old/raw_pdf_meta_validation.py +0 -223
  340. endoreg_db/serializers/_old/raw_video_meta_validation.py +0 -179
  341. endoreg_db/serializers/_old/video.py +0 -71
  342. endoreg_db/serializers/meta/pdf_file_meta_extraction.py +0 -115
  343. endoreg_db/serializers/meta/report_meta.py +0 -53
  344. endoreg_db/serializers/report/__init__.py +0 -9
  345. endoreg_db/serializers/report/mixins.py +0 -45
  346. endoreg_db/serializers/report/report.py +0 -105
  347. endoreg_db/serializers/report/report_list.py +0 -22
  348. endoreg_db/serializers/report/secure_file_url.py +0 -26
  349. endoreg_db/services/requirements_object.py +0 -147
  350. endoreg_db/services/storage_aware_video_processor.py +0 -370
  351. endoreg_db/urls/files.py +0 -6
  352. endoreg_db/urls/label_video_segment_validate.py +0 -33
  353. endoreg_db/urls/label_video_segments.py +0 -46
  354. endoreg_db/views/label/__init__.py +0 -5
  355. endoreg_db/views/label/label.py +0 -15
  356. endoreg_db/views/label_video_segment/__init__.py +0 -16
  357. endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +0 -44
  358. endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +0 -50
  359. endoreg_db/views/label_video_segment/label_video_segment.py +0 -77
  360. endoreg_db/views/label_video_segment/label_video_segment_by_label.py +0 -174
  361. endoreg_db/views/label_video_segment/label_video_segment_detail.py +0 -73
  362. endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +0 -46
  363. endoreg_db/views/label_video_segment/validate.py +0 -226
  364. endoreg_db/views/media/segments.py +0 -71
  365. endoreg_db/views/meta/available_files_list.py +0 -146
  366. endoreg_db/views/meta/report_meta.py +0 -53
  367. endoreg_db/views/meta/sensitive_meta_detail.py +0 -85
  368. endoreg_db/views/misc/secure_file_serving_view.py +0 -80
  369. endoreg_db/views/misc/secure_file_url_view.py +0 -84
  370. endoreg_db/views/misc/secure_url_validate.py +0 -79
  371. endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +0 -164
  372. endoreg_db/views/patient_finding_location/__init__.py +0 -5
  373. endoreg_db/views/patient_finding_location/pfl_create.py +0 -70
  374. endoreg_db/views/patient_finding_morphology/__init__.py +0 -5
  375. endoreg_db/views/patient_finding_morphology/pfm_create.py +0 -70
  376. endoreg_db/views/pdf/__init__.py +0 -8
  377. endoreg_db/views/video/segmentation.py +0 -274
  378. endoreg_db/views/video/task_status.py +0 -49
  379. endoreg_db/views/video/timeline.py +0 -46
  380. endoreg_db/views/video/video_analyze.py +0 -52
  381. /endoreg_db/data/requirement/{colon_polyp_intervention.yaml → old/colon_polyp_intervention.yaml} +0 -0
  382. /endoreg_db/data/{_examples/requirement → requirement/old}/colonoscopy_baseline_austria.yaml +0 -0
  383. /endoreg_db/data/requirement/{coloreg_colon_polyp.yaml → old/coloreg_colon_polyp.yaml} +0 -0
  384. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_cardiovascular.yaml +0 -0
  385. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_classification_choice_cardiovascular.yaml +0 -0
  386. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_hepatology.yaml +0 -0
  387. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_misc.yaml +0 -0
  388. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_renal.yaml +0 -0
  389. /endoreg_db/data/{_examples/requirement → requirement/old}/endoscopy_bleeding_risk.yaml +0 -0
  390. /endoreg_db/data/{_examples/requirement → requirement/old}/event_cardiology.yaml +0 -0
  391. /endoreg_db/data/{_examples/requirement → requirement/old}/event_requirements.yaml +0 -0
  392. /endoreg_db/data/{_examples/requirement → requirement/old}/finding_colon_polyp.yaml +0 -0
  393. /endoreg_db/{urls/sensitive_meta.py → data/requirement/old/gender.yaml} +0 -0
  394. /endoreg_db/data/{_examples/requirement → requirement/old}/lab_value.yaml +0 -0
  395. /endoreg_db/data/{_examples/requirement → requirement/old}/medication.yaml +0 -0
  396. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/age.yaml +0 -0
  397. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/lab_operators.yaml +0 -0
  398. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/model_operators.yaml +0 -0
  399. /endoreg_db/{views/pdf/pdf_stream_views.py → import_files/pseudonymization/__init__.py} +0 -0
  400. /endoreg_db/utils/requirement_operator_logic/{lab_value_operators.py → _old/lab_value_operators.py} +0 -0
  401. /endoreg_db/utils/requirement_operator_logic/{model_evaluators.py → _old/model_evaluators.py} +0 -0
  402. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,1857 +0,0 @@
1
- # Generated by Django 5.2.5 on 2025-09-15 11:52
2
-
3
- import django.core.validators
4
- import django.db.models.deletion
5
- import pathlib
6
- import uuid
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='AiModel',
22
- fields=[
23
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
24
- ('name', models.CharField(max_length=255, unique=True)),
25
- ('description', models.TextField(blank=True, null=True)),
26
- ('model_subtype', models.CharField(blank=True, max_length=255, null=True)),
27
- ],
28
- ),
29
- migrations.CreateModel(
30
- name='CaseTemplateRuleType',
31
- fields=[
32
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
33
- ('name', models.CharField(max_length=255)),
34
- ('description', models.TextField(blank=True, null=True)),
35
- ],
36
- ),
37
- migrations.CreateModel(
38
- name='CaseTemplateRuleValue',
39
- fields=[
40
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
41
- ('name', models.CharField(max_length=255)),
42
- ('description', models.TextField(blank=True, null=True)),
43
- ('fk_value', models.CharField(blank=True, max_length=255, null=True)),
44
- ('numeric_value', models.FloatField(blank=True, null=True)),
45
- ('text_value', models.CharField(blank=True, max_length=255, null=True)),
46
- ],
47
- ),
48
- migrations.CreateModel(
49
- name='CaseTemplateRuleValueType',
50
- fields=[
51
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
52
- ('name', models.CharField(max_length=255)),
53
- ('description', models.TextField(blank=True, null=True)),
54
- ('distribution_type', models.CharField(choices=[('single_categorical', 'single_categorical'), ('multiple_categorical', 'multiple_categorical'), ('numeric', 'numeric')], max_length=255)),
55
- ],
56
- ),
57
- migrations.CreateModel(
58
- name='CaseTemplateType',
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
- ('description', models.TextField(blank=True, null=True)),
63
- ],
64
- ),
65
- migrations.CreateModel(
66
- name='Center',
67
- fields=[
68
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
69
- ('name', models.CharField(max_length=255)),
70
- ],
71
- ),
72
- migrations.CreateModel(
73
- name='Contraindication',
74
- fields=[
75
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
76
- ('name', models.CharField(max_length=100, unique=True)),
77
- ('description', models.TextField(blank=True, null=True)),
78
- ],
79
- ),
80
- migrations.CreateModel(
81
- name='DateValueDistribution',
82
- fields=[
83
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
84
- ('name', models.CharField(max_length=100)),
85
- ('description', models.TextField(blank=True, null=True)),
86
- ('distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal')], max_length=20)),
87
- ('mode', models.CharField(choices=[('date', 'Date'), ('timedelta', 'Timedelta')], max_length=20)),
88
- ('date_min', models.DateField(blank=True, null=True)),
89
- ('date_max', models.DateField(blank=True, null=True)),
90
- ('date_mean', models.DateField(blank=True, null=True)),
91
- ('date_std_dev', models.IntegerField(blank=True, null=True)),
92
- ('timedelta_days_min', models.IntegerField(blank=True, null=True)),
93
- ('timedelta_days_max', models.IntegerField(blank=True, null=True)),
94
- ('timedelta_days_mean', models.IntegerField(blank=True, null=True)),
95
- ('timedelta_days_std_dev', models.IntegerField(blank=True, null=True)),
96
- ],
97
- options={
98
- 'abstract': False,
99
- },
100
- ),
101
- migrations.CreateModel(
102
- name='Disease',
103
- fields=[
104
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
105
- ('name', models.CharField(max_length=255, unique=True)),
106
- ('subcategories', models.JSONField(default=dict)),
107
- ('numerical_descriptors', models.JSONField(default=dict)),
108
- ],
109
- ),
110
- migrations.CreateModel(
111
- name='DocumentType',
112
- fields=[
113
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
114
- ('name', models.CharField(max_length=255, unique=True)),
115
- ('description', models.TextField(blank=True, null=True)),
116
- ],
117
- options={
118
- 'verbose_name': 'Document Type',
119
- 'verbose_name_plural': 'Document Types',
120
- },
121
- ),
122
- migrations.CreateModel(
123
- name='EmissionFactor',
124
- fields=[
125
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
126
- ('name', models.CharField(max_length=255)),
127
- ('value', models.FloatField()),
128
- ],
129
- ),
130
- migrations.CreateModel(
131
- name='EmployeeType',
132
- fields=[
133
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
134
- ('name', models.CharField(max_length=255, unique=True)),
135
- ('description', models.TextField(blank=True, null=True)),
136
- ('is_active', models.BooleanField(default=True)),
137
- ],
138
- ),
139
- migrations.CreateModel(
140
- name='EndoscopeType',
141
- fields=[
142
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
143
- ('name', models.CharField(max_length=255, unique=True)),
144
- ],
145
- options={
146
- 'verbose_name': 'Endoscope Type',
147
- 'verbose_name_plural': 'Endoscope Types',
148
- 'ordering': ['name'],
149
- },
150
- ),
151
- migrations.CreateModel(
152
- name='EventClassification',
153
- fields=[
154
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
155
- ('name', models.CharField(max_length=255, unique=True)),
156
- ],
157
- ),
158
- migrations.CreateModel(
159
- name='Examination',
160
- fields=[
161
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
162
- ('name', models.CharField(max_length=100, unique=True)),
163
- ('name_de', models.CharField(max_length=100, null=True, unique=True)),
164
- ('name_en', models.CharField(max_length=100, null=True, unique=True)),
165
- ('description', models.TextField(blank=True, null=True)),
166
- ('description_de', models.TextField(blank=True, null=True)),
167
- ('description_en', models.TextField(blank=True, null=True)),
168
- ],
169
- options={
170
- 'verbose_name': 'Examination',
171
- 'verbose_name_plural': 'Examinations',
172
- 'ordering': ['name'],
173
- },
174
- ),
175
- migrations.CreateModel(
176
- name='ExaminationType',
177
- fields=[
178
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
179
- ('name', models.CharField(max_length=100, unique=True)),
180
- ],
181
- ),
182
- migrations.CreateModel(
183
- name='FFMpegMeta',
184
- fields=[
185
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
186
- ('width', models.IntegerField(blank=True, null=True)),
187
- ('height', models.IntegerField(blank=True, null=True)),
188
- ('duration', models.FloatField(blank=True, null=True)),
189
- ('frame_rate_num', models.IntegerField(blank=True, null=True)),
190
- ('frame_rate_den', models.IntegerField(blank=True, null=True)),
191
- ('codec_name', models.CharField(blank=True, max_length=50, null=True)),
192
- ('pixel_format', models.CharField(blank=True, max_length=50, null=True)),
193
- ('bit_rate', models.BigIntegerField(blank=True, null=True)),
194
- ('raw_probe_data', models.JSONField(blank=True, null=True)),
195
- ],
196
- ),
197
- migrations.CreateModel(
198
- name='FindingClassificationChoice',
199
- fields=[
200
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
201
- ('name', models.CharField(max_length=255, unique=True)),
202
- ('name_de', models.CharField(max_length=255, null=True, unique=True)),
203
- ('name_en', models.CharField(max_length=255, null=True, unique=True)),
204
- ('description', models.TextField(blank=True)),
205
- ('description_de', models.TextField(blank=True, null=True)),
206
- ('description_en', models.TextField(blank=True, null=True)),
207
- ('subcategories', models.JSONField(default=dict)),
208
- ('numerical_descriptors', models.JSONField(default=dict)),
209
- ],
210
- ),
211
- migrations.CreateModel(
212
- name='FindingClassificationType',
213
- fields=[
214
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
215
- ('name', models.CharField(max_length=255, unique=True)),
216
- ('description', models.TextField(blank=True)),
217
- ],
218
- ),
219
- migrations.CreateModel(
220
- name='FindingInterventionType',
221
- fields=[
222
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
223
- ('name', models.CharField(max_length=100, unique=True)),
224
- ('description', models.TextField(blank=True, null=True)),
225
- ],
226
- ),
227
- migrations.CreateModel(
228
- name='FindingType',
229
- fields=[
230
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
231
- ('name', models.CharField(max_length=100, unique=True)),
232
- ('description', models.TextField(blank=True, null=True)),
233
- ],
234
- ),
235
- migrations.CreateModel(
236
- name='FirstName',
237
- fields=[
238
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
239
- ('name', models.CharField(max_length=255, unique=True)),
240
- ],
241
- ),
242
- migrations.CreateModel(
243
- name='Gender',
244
- fields=[
245
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
246
- ('name', models.CharField(max_length=255)),
247
- ('abbreviation', models.CharField(max_length=255, null=True)),
248
- ('description', models.TextField(blank=True, null=True)),
249
- ],
250
- ),
251
- migrations.CreateModel(
252
- name='Label',
253
- fields=[
254
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
255
- ('name', models.CharField(max_length=255)),
256
- ('description', models.TextField(blank=True, null=True)),
257
- ],
258
- ),
259
- migrations.CreateModel(
260
- name='LabelType',
261
- fields=[
262
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
263
- ('name', models.CharField(max_length=255)),
264
- ('description', models.TextField(blank=True, null=True)),
265
- ],
266
- ),
267
- migrations.CreateModel(
268
- name='LastName',
269
- fields=[
270
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
271
- ('name', models.CharField(max_length=255, unique=True)),
272
- ],
273
- ),
274
- migrations.CreateModel(
275
- name='Medication',
276
- fields=[
277
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
278
- ('name', models.CharField(max_length=255, unique=True)),
279
- ('adapt_to_renal_function', models.BooleanField(default=False)),
280
- ('adapt_to_hepatic_function', models.BooleanField(default=False)),
281
- ('adapt_to_indication', models.BooleanField(default=False)),
282
- ('adapt_to_age', models.BooleanField(default=False)),
283
- ('adapt_to_weight', models.BooleanField(default=False)),
284
- ('adapt_to_risk', models.BooleanField(default=False)),
285
- ],
286
- ),
287
- migrations.CreateModel(
288
- name='MedicationIndicationType',
289
- fields=[
290
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
291
- ('name', models.CharField(max_length=255, unique=True)),
292
- ],
293
- ),
294
- migrations.CreateModel(
295
- name='MedicationIntakeTime',
296
- fields=[
297
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
298
- ('name', models.CharField(max_length=255, unique=True)),
299
- ('repeats', models.CharField(default='daily', max_length=20)),
300
- ('time', models.TimeField()),
301
- ],
302
- ),
303
- migrations.CreateModel(
304
- name='ModelType',
305
- fields=[
306
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
307
- ('name', models.CharField(max_length=255)),
308
- ('description', models.TextField(blank=True, null=True)),
309
- ],
310
- ),
311
- migrations.CreateModel(
312
- name='MultipleCategoricalValueDistribution',
313
- fields=[
314
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
315
- ('name', models.CharField(max_length=100)),
316
- ('categories', models.JSONField()),
317
- ('min_count', models.IntegerField()),
318
- ('max_count', models.IntegerField()),
319
- ('count_distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal')], max_length=20)),
320
- ('count_mean', models.FloatField(blank=True, null=True)),
321
- ('count_std_dev', models.FloatField(blank=True, null=True)),
322
- ],
323
- options={
324
- 'abstract': False,
325
- },
326
- ),
327
- migrations.CreateModel(
328
- name='NumericValueDistribution',
329
- fields=[
330
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
331
- ('name', models.CharField(max_length=100)),
332
- ('distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal'), ('skewed_normal', 'Skewed Normal')], max_length=20)),
333
- ('min_descriptor', models.CharField(max_length=20)),
334
- ('max_descriptor', models.CharField(max_length=20)),
335
- ],
336
- options={
337
- 'abstract': False,
338
- },
339
- ),
340
- migrations.CreateModel(
341
- name='PatientLabSampleType',
342
- fields=[
343
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
344
- ('name', models.CharField(max_length=255)),
345
- ('description', models.TextField(blank=True, null=True)),
346
- ],
347
- ),
348
- migrations.CreateModel(
349
- name='PdfType',
350
- fields=[
351
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
352
- ('name', models.CharField(max_length=255)),
353
- ],
354
- ),
355
- migrations.CreateModel(
356
- name='Product',
357
- fields=[
358
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
359
- ('name', models.CharField(max_length=255)),
360
- ],
361
- ),
362
- migrations.CreateModel(
363
- name='ProductGroup',
364
- fields=[
365
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
366
- ('name', models.CharField(max_length=255)),
367
- ],
368
- ),
369
- migrations.CreateModel(
370
- name='Profession',
371
- fields=[
372
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
373
- ('name', models.CharField(max_length=100)),
374
- ('description', models.TextField(blank=True, null=True)),
375
- ],
376
- ),
377
- migrations.CreateModel(
378
- name='Qualification',
379
- fields=[
380
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
381
- ('name', models.CharField(max_length=255, unique=True)),
382
- ('description', models.TextField(blank=True, null=True)),
383
- ('is_active', models.BooleanField(default=True)),
384
- ],
385
- ),
386
- migrations.CreateModel(
387
- name='QualificationType',
388
- fields=[
389
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
390
- ('name', models.CharField(max_length=255, unique=True)),
391
- ('description', models.TextField(blank=True, null=True)),
392
- ('is_active', models.BooleanField(default=True)),
393
- ],
394
- ),
395
- migrations.CreateModel(
396
- name='RawPdfState',
397
- fields=[
398
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
399
- ('text_meta_extracted', models.BooleanField(default=False, help_text='True if text metadata (OCR) has been extracted.')),
400
- ('initial_prediction_completed', models.BooleanField(default=False, help_text='True if initial AI prediction has run.')),
401
- ('sensitive_meta_processed', models.BooleanField(default=False, help_text='True if the video has been fully processed, meaning a anonymized person was created.')),
402
- ('anonymized', models.BooleanField(default=False, help_text='True if the anonymized video file has been created.')),
403
- ('anonymization_validated', models.BooleanField(default=False, help_text='True if the anonymization process has been validated and confirmed.')),
404
- ('processing_started', models.BooleanField(default=False, help_text='True if the processing has started, but not yet completed.')),
405
- ('processing_error', models.BooleanField(default=False, help_text='True if an error occurred during processing.')),
406
- ('date_created', models.DateTimeField(auto_now_add=True)),
407
- ('date_modified', models.DateTimeField(auto_now=True)),
408
- ('was_created', models.BooleanField(default=True, help_text='True if this state was created for the first time.')),
409
- ('pdf_meta_extracted', models.BooleanField(default=False, help_text='True if PDF metadata has been extracted.')),
410
- ],
411
- options={
412
- 'verbose_name': 'Raw PDF Processing State',
413
- 'verbose_name_plural': 'Raw PDF Processing States',
414
- },
415
- ),
416
- migrations.CreateModel(
417
- name='ReportReaderFlag',
418
- fields=[
419
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
420
- ('name', models.CharField(max_length=255, unique=True)),
421
- ('value', models.CharField(max_length=255)),
422
- ],
423
- ),
424
- migrations.CreateModel(
425
- name='RequirementOperator',
426
- fields=[
427
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
428
- ('name', models.CharField(max_length=100, unique=True)),
429
- ('description', models.TextField(blank=True, null=True)),
430
- ('evaluation_function_name', models.CharField(blank=True, max_length=255, null=True)),
431
- ],
432
- ),
433
- migrations.CreateModel(
434
- name='RequirementSetType',
435
- fields=[
436
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
437
- ('name', models.CharField(max_length=100, unique=True)),
438
- ('description', models.TextField(blank=True, null=True)),
439
- ],
440
- ),
441
- migrations.CreateModel(
442
- name='RequirementType',
443
- fields=[
444
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
445
- ('name', models.CharField(max_length=100, unique=True)),
446
- ('description', models.TextField(blank=True, null=True)),
447
- ],
448
- ),
449
- migrations.CreateModel(
450
- name='Resource',
451
- fields=[
452
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
453
- ('name', models.CharField(max_length=255)),
454
- ],
455
- ),
456
- migrations.CreateModel(
457
- name='RiskType',
458
- fields=[
459
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
460
- ('name', models.CharField(max_length=100, unique=True)),
461
- ('description', models.TextField(blank=True, null=True)),
462
- ],
463
- ),
464
- migrations.CreateModel(
465
- name='RuleAttributeDType',
466
- fields=[
467
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
468
- ('name', models.CharField(max_length=255, unique=True)),
469
- ],
470
- ),
471
- migrations.CreateModel(
472
- name='RuleType',
473
- fields=[
474
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
475
- ('name', models.CharField(max_length=255, unique=True)),
476
- ],
477
- options={
478
- 'verbose_name': 'Rule Type',
479
- 'verbose_name_plural': 'Rule Types',
480
- },
481
- ),
482
- migrations.CreateModel(
483
- name='ScheduledDays',
484
- fields=[
485
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
486
- ('name', models.CharField(help_text='Name of the scheduled days.', max_length=255, unique=True)),
487
- ('working_days', models.BooleanField(blank=True, default=True, null=True)),
488
- ('non_working_days', models.BooleanField(blank=True, default=False, null=True)),
489
- ('limited_time', models.BooleanField(blank=True, default=False, null=True)),
490
- ('start_date', models.DateField(blank=True, null=True)),
491
- ('end_date', models.DateField(blank=True, null=True)),
492
- ],
493
- ),
494
- migrations.CreateModel(
495
- name='ShiftType',
496
- fields=[
497
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
498
- ('name', models.CharField(max_length=255, unique=True)),
499
- ('description', models.TextField(blank=True, null=True)),
500
- ('is_active', models.BooleanField(default=True)),
501
- ],
502
- ),
503
- migrations.CreateModel(
504
- name='SingleCategoricalValueDistribution',
505
- fields=[
506
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
507
- ('name', models.CharField(max_length=100)),
508
- ('categories', models.JSONField()),
509
- ],
510
- options={
511
- 'abstract': False,
512
- },
513
- ),
514
- migrations.CreateModel(
515
- name='Tag',
516
- fields=[
517
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
518
- ('name', models.CharField(max_length=100, unique=True)),
519
- ],
520
- options={
521
- 'verbose_name': 'Tag',
522
- 'verbose_name_plural': 'Tags',
523
- },
524
- ),
525
- migrations.CreateModel(
526
- name='Unit',
527
- fields=[
528
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
529
- ('name', models.CharField(max_length=100)),
530
- ('description', models.CharField(blank=True, max_length=100, null=True)),
531
- ('abbreviation', models.CharField(blank=True, max_length=25, null=True)),
532
- ],
533
- ),
534
- migrations.CreateModel(
535
- name='VideoImportMeta',
536
- fields=[
537
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
538
- ('file_name', models.CharField(blank=True, max_length=255, null=True)),
539
- ('video_anonymized', models.BooleanField(default=False)),
540
- ('video_patient_data_detected', models.BooleanField(default=False)),
541
- ('outside_detected', models.BooleanField(default=False)),
542
- ('patient_data_removed', models.BooleanField(default=False)),
543
- ('outside_removed', models.BooleanField(default=False)),
544
- ],
545
- ),
546
- migrations.CreateModel(
547
- name='VideoSegmentationLabel',
548
- fields=[
549
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
550
- ('name', models.CharField(max_length=255)),
551
- ('description', models.TextField(blank=True, null=True)),
552
- ('color', models.CharField(blank=True, max_length=255, null=True)),
553
- ('order_priority', models.IntegerField(default=0)),
554
- ],
555
- ),
556
- migrations.CreateModel(
557
- name='VideoState',
558
- fields=[
559
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
560
- ('frames_extracted', models.BooleanField(default=False, help_text='True if raw frames have been extracted to files.')),
561
- ('frames_initialized', models.BooleanField(default=False, help_text='True if Frame DB objects have been created.')),
562
- ('frame_count', models.PositiveIntegerField(blank=True, help_text='Number of frames extracted/initialized.', null=True)),
563
- ('video_meta_extracted', models.BooleanField(default=False, help_text='True if VideoMeta (technical specs) has been extracted.')),
564
- ('text_meta_extracted', models.BooleanField(default=False, help_text='True if text metadata (OCR) has been extracted.')),
565
- ('initial_prediction_completed', models.BooleanField(default=False, help_text='True if initial AI prediction has run.')),
566
- ('lvs_created', models.BooleanField(default=False, help_text='True if LabelVideoSegments have been created from predictions.')),
567
- ('frame_annotations_generated', models.BooleanField(default=False, help_text='True if frame-level annotations have been generated from segments.')),
568
- ('sensitive_meta_processed', models.BooleanField(default=False, help_text='True if the video has been fully processed, meaning a anonymized person was created.')),
569
- ('anonymized', models.BooleanField(default=False, help_text='True if the anonymized video file has been created.')),
570
- ('anonymization_validated', models.BooleanField(default=False, help_text='True if the anonymization process has been validated and confirmed.')),
571
- ('processing_started', models.BooleanField(default=False, help_text='True if the processing has started, but not yet completed.')),
572
- ('date_created', models.DateTimeField(auto_now_add=True)),
573
- ('date_modified', models.DateTimeField(auto_now=True)),
574
- ('segment_annotations_created', models.BooleanField(default=False, help_text='True if segment annotations have been created from LabelVideoSegments.')),
575
- ('segment_annotations_validated', models.BooleanField(default=False, help_text='True if segment annotations have been validated.')),
576
- ('was_created', models.BooleanField(default=True, help_text='True if this state was created for the first time.')),
577
- ],
578
- options={
579
- 'verbose_name': 'Video Processing State',
580
- 'verbose_name_plural': 'Video Processing States',
581
- },
582
- ),
583
- migrations.CreateModel(
584
- name='Waste',
585
- fields=[
586
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
587
- ('name', models.CharField(max_length=255)),
588
- ],
589
- ),
590
- migrations.CreateModel(
591
- name='CaseTemplateRule',
592
- fields=[
593
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
594
- ('name', models.CharField(max_length=255)),
595
- ('description', models.TextField(blank=True, null=True)),
596
- ('parent_model', models.CharField(blank=True, max_length=255, null=True)),
597
- ('parent_field', models.CharField(blank=True, max_length=255, null=True)),
598
- ('target_field', models.CharField(blank=True, max_length=255, null=True)),
599
- ('target_model', models.CharField(blank=True, max_length=255, null=True)),
600
- ('rule_values', models.JSONField(blank=True, null=True)),
601
- ('extra_parameters', models.JSONField(blank=True, null=True)),
602
- ('chained_rules', models.ManyToManyField(related_name='calling_rules', to='endoreg_db.casetemplaterule')),
603
- ('rule_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.casetemplateruletype')),
604
- ('value_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.casetemplaterulevaluetype')),
605
- ('date_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.datevaluedistribution')),
606
- ('multiple_categorical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.multiplecategoricalvaluedistribution')),
607
- ('numerical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.numericvaluedistribution')),
608
- ('single_categorical_value_distribution', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.singlecategoricalvaluedistribution')),
609
- ],
610
- ),
611
- migrations.CreateModel(
612
- name='CaseTemplate',
613
- fields=[
614
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
615
- ('name', models.CharField(max_length=255, unique=True)),
616
- ('description', models.TextField(blank=True, null=True)),
617
- ('rules', models.ManyToManyField(to='endoreg_db.casetemplaterule')),
618
- ('secondary_rules', models.ManyToManyField(related_name='secondary_rules', to='endoreg_db.casetemplaterule')),
619
- ('template_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='case_templates', to='endoreg_db.casetemplatetype')),
620
- ],
621
- ),
622
- migrations.CreateModel(
623
- name='DiseaseClassification',
624
- fields=[
625
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
626
- ('name', models.CharField(max_length=255, unique=True)),
627
- ('disease', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='disease_classifications', to='endoreg_db.disease')),
628
- ],
629
- ),
630
- migrations.CreateModel(
631
- name='DiseaseClassificationChoice',
632
- fields=[
633
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
634
- ('name', models.CharField(max_length=255, unique=True)),
635
- ('disease_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='disease_classification_choices', to='endoreg_db.diseaseclassification')),
636
- ],
637
- ),
638
- migrations.CreateModel(
639
- name='Endoscope',
640
- fields=[
641
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
642
- ('name', models.CharField(max_length=255)),
643
- ('sn', models.CharField(max_length=255)),
644
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='endoscopes', to='endoreg_db.center')),
645
- ('endoscope_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='endoscopes', to='endoreg_db.endoscopetype')),
646
- ],
647
- options={
648
- 'verbose_name': 'Endoscope',
649
- 'verbose_name_plural': 'Endoscopes',
650
- 'ordering': ['name'],
651
- },
652
- ),
653
- migrations.CreateModel(
654
- name='EndoscopyProcessor',
655
- fields=[
656
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
657
- ('name', models.CharField(max_length=255)),
658
- ('image_width', models.IntegerField()),
659
- ('image_height', models.IntegerField()),
660
- ('endoscope_image_x', models.IntegerField()),
661
- ('endoscope_image_y', models.IntegerField()),
662
- ('endoscope_image_width', models.IntegerField()),
663
- ('endoscope_image_height', models.IntegerField()),
664
- ('examination_date_x', models.IntegerField()),
665
- ('examination_date_y', models.IntegerField()),
666
- ('examination_date_width', models.IntegerField()),
667
- ('examination_date_height', models.IntegerField()),
668
- ('examination_time_x', models.IntegerField(blank=True, null=True)),
669
- ('examination_time_y', models.IntegerField(blank=True, null=True)),
670
- ('examination_time_width', models.IntegerField(blank=True, null=True)),
671
- ('examination_time_height', models.IntegerField(blank=True, null=True)),
672
- ('patient_first_name_x', models.IntegerField()),
673
- ('patient_first_name_y', models.IntegerField()),
674
- ('patient_first_name_width', models.IntegerField()),
675
- ('patient_first_name_height', models.IntegerField()),
676
- ('patient_last_name_x', models.IntegerField()),
677
- ('patient_last_name_y', models.IntegerField()),
678
- ('patient_last_name_width', models.IntegerField()),
679
- ('patient_last_name_height', models.IntegerField()),
680
- ('patient_dob_x', models.IntegerField()),
681
- ('patient_dob_y', models.IntegerField()),
682
- ('patient_dob_width', models.IntegerField()),
683
- ('patient_dob_height', models.IntegerField()),
684
- ('endoscope_type_x', models.IntegerField(blank=True, null=True)),
685
- ('endoscope_type_y', models.IntegerField(blank=True, null=True)),
686
- ('endoscope_type_width', models.IntegerField(blank=True, null=True)),
687
- ('endoscope_type_height', models.IntegerField(blank=True, null=True)),
688
- ('endoscope_sn_x', models.IntegerField(blank=True, null=True)),
689
- ('endoscope_sn_y', models.IntegerField(blank=True, null=True)),
690
- ('endoscope_sn_width', models.IntegerField(blank=True, null=True)),
691
- ('endoscope_sn_height', models.IntegerField(blank=True, null=True)),
692
- ('centers', models.ManyToManyField(blank=True, related_name='endoscopy_processors', to='endoreg_db.center')),
693
- ],
694
- ),
695
- migrations.CreateModel(
696
- name='Event',
697
- fields=[
698
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
699
- ('name', models.CharField(max_length=100, unique=True)),
700
- ('description', models.TextField(blank=True, null=True)),
701
- ('event_classification', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='events', to='endoreg_db.eventclassification')),
702
- ],
703
- ),
704
- migrations.CreateModel(
705
- name='EventClassificationChoice',
706
- fields=[
707
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
708
- ('name', models.CharField(max_length=255, unique=True)),
709
- ('subcategories', models.JSONField(default=dict)),
710
- ('numerical_descriptors', models.JSONField(default=dict)),
711
- ('event_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='event_classification_choices', to='endoreg_db.eventclassification')),
712
- ],
713
- ),
714
- migrations.CreateModel(
715
- name='ExaminationIndicationClassification',
716
- fields=[
717
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
718
- ('name', models.CharField(max_length=255, unique=True)),
719
- ('description', models.TextField(blank=True, null=True)),
720
- ('examinations', models.ManyToManyField(blank=True, related_name='indication_classifications', to='endoreg_db.examination')),
721
- ],
722
- ),
723
- migrations.CreateModel(
724
- name='ExaminationIndicationClassificationChoice',
725
- fields=[
726
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
727
- ('name', models.CharField(max_length=255, unique=True)),
728
- ('subcategories', models.JSONField(default=dict)),
729
- ('numerical_descriptors', models.JSONField(default=dict)),
730
- ('classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='choices', to='endoreg_db.examinationindicationclassification')),
731
- ],
732
- ),
733
- migrations.CreateModel(
734
- name='ExaminationRequirementSet',
735
- fields=[
736
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
737
- ('enabled_by_default', models.BooleanField(default=False)),
738
- ('name', models.CharField(max_length=100, unique=True)),
739
- ('examinations', models.ManyToManyField(blank=True, related_name='exam_reqset_links', to='endoreg_db.examination')),
740
- ],
741
- ),
742
- migrations.CreateModel(
743
- name='ExaminationTimeType',
744
- fields=[
745
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
746
- ('name', models.CharField(max_length=100, unique=True)),
747
- ('examinations', models.ManyToManyField(blank=True, to='endoreg_db.examination')),
748
- ],
749
- options={
750
- 'verbose_name': 'Examination Time Type',
751
- 'verbose_name_plural': 'Examination Time Types',
752
- 'ordering': ['name'],
753
- },
754
- ),
755
- migrations.CreateModel(
756
- name='ExaminationTime',
757
- fields=[
758
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
759
- ('name', models.CharField(max_length=100, unique=True)),
760
- ('start_time', models.TimeField(blank=True, null=True)),
761
- ('end_time', models.TimeField(blank=True, null=True)),
762
- ('time_types', models.ManyToManyField(blank=True, to='endoreg_db.examinationtimetype')),
763
- ],
764
- options={
765
- 'verbose_name': 'Examination Time',
766
- 'verbose_name_plural': 'Examination Times',
767
- 'ordering': ['name'],
768
- },
769
- ),
770
- migrations.AddField(
771
- model_name='examination',
772
- name='examination_types',
773
- field=models.ManyToManyField(blank=True, to='endoreg_db.examinationtype'),
774
- ),
775
- migrations.CreateModel(
776
- name='Examiner',
777
- fields=[
778
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
779
- ('first_name', models.CharField(max_length=255)),
780
- ('last_name', models.CharField(max_length=255)),
781
- ('dob', models.DateField(blank=True, null=True, verbose_name='Date of Birth')),
782
- ('email', models.EmailField(blank=True, max_length=255, null=True)),
783
- ('phone', models.CharField(blank=True, max_length=255, null=True)),
784
- ('is_real_person', models.BooleanField(default=True)),
785
- ('hash', models.CharField(max_length=255, unique=True)),
786
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
787
- ('gender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender')),
788
- ],
789
- options={
790
- 'abstract': False,
791
- },
792
- ),
793
- migrations.CreateModel(
794
- name='FindingIntervention',
795
- fields=[
796
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
797
- ('name', models.CharField(max_length=100, unique=True)),
798
- ('name_de', models.CharField(max_length=100, null=True, unique=True)),
799
- ('name_en', models.CharField(max_length=100, null=True, unique=True)),
800
- ('description', models.TextField(blank=True, null=True)),
801
- ('description_de', models.TextField(blank=True, null=True)),
802
- ('description_en', models.TextField(blank=True, null=True)),
803
- ('contraindications', models.ManyToManyField(blank=True, related_name='contraindicating_finding_interventions', to='endoreg_db.contraindication')),
804
- ('intervention_types', models.ManyToManyField(blank=True, related_name='interventions', to='endoreg_db.findinginterventiontype')),
805
- ],
806
- ),
807
- migrations.CreateModel(
808
- name='Finding',
809
- fields=[
810
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
811
- ('name', models.CharField(max_length=100, unique=True)),
812
- ('name_de', models.CharField(max_length=100, null=True, unique=True)),
813
- ('name_en', models.CharField(max_length=100, null=True, unique=True)),
814
- ('description', models.TextField(blank=True, null=True)),
815
- ('description_de', models.TextField(blank=True, null=True)),
816
- ('description_en', models.TextField(blank=True, null=True)),
817
- ('examinations', models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.examination')),
818
- ('finding_interventions', models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.findingintervention')),
819
- ('finding_types', models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.findingtype')),
820
- ],
821
- ),
822
- migrations.CreateModel(
823
- name='ExaminationIndication',
824
- fields=[
825
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
826
- ('name', models.CharField(max_length=255, unique=True)),
827
- ('description', models.TextField(blank=True, null=True)),
828
- ('examinations', models.ManyToManyField(blank=True, related_name='indications', to='endoreg_db.examination')),
829
- ('classifications', models.ManyToManyField(blank=True, related_name='indications', to='endoreg_db.examinationindicationclassification')),
830
- ('expected_interventions', models.ManyToManyField(blank=True, related_name='indications', to='endoreg_db.findingintervention')),
831
- ],
832
- ),
833
- migrations.CreateModel(
834
- name='FindingClassification',
835
- fields=[
836
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
837
- ('name', models.CharField(max_length=255, unique=True)),
838
- ('name_de', models.CharField(max_length=255, null=True, unique=True)),
839
- ('name_en', models.CharField(max_length=255, null=True, unique=True)),
840
- ('description', models.TextField(blank=True)),
841
- ('description_de', models.TextField(blank=True, null=True)),
842
- ('description_en', models.TextField(blank=True, null=True)),
843
- ('examinations', models.ManyToManyField(blank=True, related_name='finding_classifications', to='endoreg_db.examination')),
844
- ('findings', models.ManyToManyField(blank=True, related_name='finding_classifications', to='endoreg_db.finding')),
845
- ('choices', models.ManyToManyField(blank=True, related_name='classifications', to='endoreg_db.findingclassificationchoice')),
846
- ('classification_types', models.ManyToManyField(to='endoreg_db.findingclassificationtype')),
847
- ('finding_types', models.ManyToManyField(blank=True, related_name='finding_classifications', to='endoreg_db.findingtype')),
848
- ],
849
- ),
850
- migrations.AddField(
851
- model_name='center',
852
- name='first_names',
853
- field=models.ManyToManyField(related_name='centers', to='endoreg_db.firstname'),
854
- ),
855
- migrations.CreateModel(
856
- name='Employee',
857
- fields=[
858
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
859
- ('first_name', models.CharField(max_length=255)),
860
- ('last_name', models.CharField(max_length=255)),
861
- ('dob', models.DateField(blank=True, null=True, verbose_name='Date of Birth')),
862
- ('email', models.EmailField(blank=True, max_length=255, null=True)),
863
- ('phone', models.CharField(blank=True, max_length=255, null=True)),
864
- ('is_real_person', models.BooleanField(default=True)),
865
- ('employee_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='employees', to='endoreg_db.employeetype')),
866
- ('gender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender')),
867
- ],
868
- options={
869
- 'abstract': False,
870
- },
871
- ),
872
- migrations.CreateModel(
873
- name='InformationSource',
874
- fields=[
875
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
876
- ('name', models.CharField(max_length=100)),
877
- ('url', models.URLField(blank=True, null=True)),
878
- ('description', models.TextField(blank=True, null=True)),
879
- ('date', models.DateField(blank=True, null=True)),
880
- ('date_created', models.DateField(auto_now_add=True)),
881
- ('date_modified', models.DateField(auto_now=True)),
882
- ('abbreviation', models.CharField(blank=True, max_length=100, null=True, unique=True)),
883
- ],
884
- options={
885
- 'verbose_name': 'Information Source',
886
- 'verbose_name_plural': 'Information Sources',
887
- 'indexes': [models.Index(fields=['name'], name='endoreg_db__name_febac5_idx'), models.Index(fields=['abbreviation'], name='endoreg_db__abbrevi_5a07c4_idx')],
888
- },
889
- ),
890
- migrations.CreateModel(
891
- name='InformationSourceType',
892
- fields=[
893
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
894
- ('name', models.CharField(max_length=100, unique=True)),
895
- ('description', models.TextField(blank=True, null=True)),
896
- ('information_sources', models.ManyToManyField(blank=True, related_name='information_source_types', to='endoreg_db.informationsource')),
897
- ],
898
- options={
899
- 'verbose_name': 'Information Source Type',
900
- 'verbose_name_plural': 'Information Source Types',
901
- },
902
- ),
903
- migrations.CreateModel(
904
- name='LabelSet',
905
- fields=[
906
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
907
- ('name', models.CharField(max_length=255)),
908
- ('description', models.TextField(blank=True, null=True)),
909
- ('version', models.IntegerField()),
910
- ('labels', models.ManyToManyField(related_name='label_sets', to='endoreg_db.label')),
911
- ],
912
- ),
913
- migrations.AddField(
914
- model_name='label',
915
- name='label_type',
916
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='labels', to='endoreg_db.labeltype'),
917
- ),
918
- migrations.CreateModel(
919
- name='LabelVideoSegment',
920
- fields=[
921
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
922
- ('start_frame_number', models.IntegerField()),
923
- ('end_frame_number', models.IntegerField()),
924
- ('label', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.label')),
925
- ('source', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.informationsource')),
926
- ],
927
- ),
928
- migrations.CreateModel(
929
- name='LabelVideoSegmentState',
930
- fields=[
931
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
932
- ('created_at', models.DateTimeField(auto_now_add=True)),
933
- ('updated_at', models.DateTimeField(auto_now=True)),
934
- ('prediction', models.BooleanField(default=False)),
935
- ('annotation', models.BooleanField(default=False)),
936
- ('frames_extracted', models.BooleanField(default=False)),
937
- ('is_validated', models.BooleanField(default=False)),
938
- ('origin', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='state', to='endoreg_db.labelvideosegment')),
939
- ],
940
- options={
941
- 'verbose_name': 'Label Video Segment State',
942
- 'verbose_name_plural': 'Label Video Segment States',
943
- },
944
- ),
945
- migrations.CreateModel(
946
- name='LabValue',
947
- fields=[
948
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
949
- ('name', models.CharField(max_length=255, unique=True)),
950
- ('abbreviation', models.CharField(blank=True, max_length=10, null=True)),
951
- ('numeric_precision', models.IntegerField(default=3)),
952
- ('default_normal_range', models.JSONField(blank=True, null=True)),
953
- ('normal_range_age_dependent', models.BooleanField(default=False)),
954
- ('normal_range_gender_dependent', models.BooleanField(default=False)),
955
- ('normal_range_special_case', models.BooleanField(default=False)),
956
- ('bound_adjustment_factor', models.FloatField(default=0.1, help_text='Factor for adjusting bounds when generating increased/decreased values, e.g., 0.1 for 10%.')),
957
- ('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')),
958
- ('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')),
959
- ('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')),
960
- ('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')),
961
- ('default_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
962
- ],
963
- ),
964
- migrations.AddField(
965
- model_name='findingintervention',
966
- name='required_lab_values',
967
- field=models.ManyToManyField(blank=True, related_name='required_by_finding_interventions', to='endoreg_db.labvalue'),
968
- ),
969
- migrations.AddField(
970
- model_name='center',
971
- name='last_names',
972
- field=models.ManyToManyField(related_name='centers', to='endoreg_db.lastname'),
973
- ),
974
- migrations.CreateModel(
975
- name='Material',
976
- fields=[
977
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
978
- ('name', models.CharField(max_length=255)),
979
- ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
980
- ],
981
- ),
982
- migrations.CreateModel(
983
- name='MedicationSchedule',
984
- fields=[
985
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
986
- ('name', models.CharField(max_length=255, unique=True)),
987
- ('description', models.TextField(blank=True, null=True)),
988
- ('therapy_duration_d', models.FloatField(blank=True, null=True)),
989
- ('dose', models.FloatField()),
990
- ('intake_times', models.ManyToManyField(to='endoreg_db.medicationintaketime')),
991
- ('medication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.medication')),
992
- ('unit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
993
- ],
994
- ),
995
- migrations.CreateModel(
996
- name='MedicationIndication',
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
- ('disease_classification_choices', models.ManyToManyField(to='endoreg_db.diseaseclassificationchoice')),
1001
- ('diseases', models.ManyToManyField(to='endoreg_db.disease')),
1002
- ('events', models.ManyToManyField(to='endoreg_db.event')),
1003
- ('sources', models.ManyToManyField(to='endoreg_db.informationsource')),
1004
- ('indication_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='medication_indications', to='endoreg_db.medicationindicationtype')),
1005
- ('medication_schedules', models.ManyToManyField(to='endoreg_db.medicationschedule')),
1006
- ],
1007
- ),
1008
- migrations.CreateModel(
1009
- name='ModelMeta',
1010
- fields=[
1011
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1012
- ('name', models.CharField(help_text="User-defined name for this specific model metadata set (e.g., 'segmentation_base').", max_length=255)),
1013
- ('version', models.CharField(help_text="Version identifier for this metadata set (e.g., '1', '2a').", max_length=255)),
1014
- ('activation', models.CharField(default='sigmoid', help_text="Output activation function (e.g., 'sigmoid', 'softmax', 'none').", max_length=50)),
1015
- ('weights', models.FileField(blank=True, help_text='Path to the model weights file (.ckpt), relative to MEDIA_ROOT.', null=True, upload_to='model_weights', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['ckpt'])])),
1016
- ('mean', models.CharField(default='0.45211223,0.27139644,0.19264949', help_text='Comma-separated mean values for input normalization.', max_length=255)),
1017
- ('std', models.CharField(default='0.31418097,0.21088019,0.16059452', help_text='Comma-separated standard deviation values for input normalization.', max_length=255)),
1018
- ('size_x', models.IntegerField(default=716, help_text='Expected input image width.')),
1019
- ('size_y', models.IntegerField(default=716, help_text='Expected input image height.')),
1020
- ('axes', models.CharField(default='2,0,1', help_text="Comma-separated target axis order (e.g., '2,0,1' for CHW).", max_length=10)),
1021
- ('batchsize', models.IntegerField(default=16, help_text='Default batch size for inference.')),
1022
- ('num_workers', models.IntegerField(default=0, help_text='Default number of workers for data loading.')),
1023
- ('description', models.TextField(blank=True, help_text='Optional description.', null=True)),
1024
- ('date_created', models.DateTimeField(auto_now_add=True)),
1025
- ('labelset', models.ForeignKey(help_text='The set of labels this model version predicts.', on_delete=django.db.models.deletion.CASCADE, related_name='model_metadata', to='endoreg_db.labelset')),
1026
- ('model', models.ForeignKey(help_text='The base AI model architecture this metadata belongs to.', on_delete=django.db.models.deletion.CASCADE, related_name='metadata_versions', to='endoreg_db.aimodel')),
1027
- ],
1028
- ),
1029
- migrations.AddField(
1030
- model_name='aimodel',
1031
- name='active_meta',
1032
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='active_model', to='endoreg_db.modelmeta'),
1033
- ),
1034
- migrations.CreateModel(
1035
- name='ActiveModel',
1036
- fields=[
1037
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1038
- ('name', models.CharField(max_length=255, unique=True)),
1039
- ('model_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.modelmeta')),
1040
- ],
1041
- ),
1042
- migrations.AddField(
1043
- model_name='aimodel',
1044
- name='model_type',
1045
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ai_models', to='endoreg_db.modeltype'),
1046
- ),
1047
- migrations.CreateModel(
1048
- name='Organ',
1049
- fields=[
1050
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1051
- ('name', models.CharField(max_length=100, unique=True)),
1052
- ('description', models.TextField(blank=True, null=True)),
1053
- ('location_choices', models.ManyToManyField(blank=True, related_name='organs', to='endoreg_db.findingclassificationchoice')),
1054
- ],
1055
- ),
1056
- migrations.CreateModel(
1057
- name='Patient',
1058
- fields=[
1059
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1060
- ('email', models.EmailField(blank=True, max_length=255, null=True)),
1061
- ('phone', models.CharField(blank=True, max_length=255, null=True)),
1062
- ('is_real_person', models.BooleanField(default=True)),
1063
- ('first_name', models.CharField(max_length=100)),
1064
- ('last_name', models.CharField(max_length=100)),
1065
- ('dob', models.DateField(blank=True, null=True)),
1066
- ('patient_hash', models.CharField(blank=True, max_length=255, null=True)),
1067
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1068
- ('gender', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender')),
1069
- ],
1070
- options={
1071
- 'abstract': False,
1072
- },
1073
- ),
1074
- migrations.CreateModel(
1075
- name='PatientDisease',
1076
- fields=[
1077
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1078
- ('start_date', models.DateField(blank=True, null=True)),
1079
- ('end_date', models.DateField(blank=True, null=True)),
1080
- ('numerical_descriptors', models.JSONField(default=dict)),
1081
- ('subcategories', models.JSONField(default=dict)),
1082
- ('last_update', models.DateTimeField(auto_now=True)),
1083
- ('classification_choices', models.ManyToManyField(to='endoreg_db.diseaseclassificationchoice')),
1084
- ('disease', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_diseases', to='endoreg_db.disease')),
1085
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='diseases', to='endoreg_db.patient')),
1086
- ],
1087
- options={
1088
- 'verbose_name': 'Patient Disease',
1089
- 'verbose_name_plural': 'Patient Diseases',
1090
- },
1091
- ),
1092
- migrations.CreateModel(
1093
- name='PatientEvent',
1094
- fields=[
1095
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1096
- ('date_start', models.DateField()),
1097
- ('date_end', models.DateField(blank=True, null=True)),
1098
- ('description', models.TextField(blank=True, null=True)),
1099
- ('subcategories', models.JSONField(default=dict)),
1100
- ('numerical_descriptors', models.JSONField(default=dict)),
1101
- ('last_update', models.DateTimeField(auto_now=True)),
1102
- ('classification_choice', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.eventclassificationchoice')),
1103
- ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_events', to='endoreg_db.event')),
1104
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='events', to='endoreg_db.patient')),
1105
- ],
1106
- ),
1107
- migrations.CreateModel(
1108
- name='PatientExamination',
1109
- fields=[
1110
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1111
- ('date_start', models.DateField(blank=True, null=True)),
1112
- ('date_end', models.DateField(blank=True, null=True)),
1113
- ('hash', models.CharField(max_length=255, unique=True)),
1114
- ('examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.examination')),
1115
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_examinations', to='endoreg_db.patient')),
1116
- ],
1117
- options={
1118
- 'verbose_name': 'Patient Examination',
1119
- 'verbose_name_plural': 'Patient Examinations',
1120
- 'ordering': ['patient', 'examination', 'date_start'],
1121
- },
1122
- ),
1123
- migrations.CreateModel(
1124
- name='Case',
1125
- fields=[
1126
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1127
- ('hash', models.CharField(blank=True, help_text='An optional hash value associated with the case.', max_length=255, null=True)),
1128
- ('start_date', models.DateTimeField(db_index=True, help_text='The start date and time of the case.')),
1129
- ('end_date', models.DateTimeField(blank=True, help_text='The end date and time of the case (optional).', null=True)),
1130
- ('is_active', models.BooleanField(db_index=True, default=True, help_text='Flag indicating if the case is currently active.')),
1131
- ('is_closed', models.BooleanField(db_index=True, default=False, help_text='Flag indicating if the case has been closed.')),
1132
- ('is_deleted', models.BooleanField(db_index=True, default=False, help_text='Flag indicating if the case is marked as deleted.')),
1133
- ('created_at', models.DateTimeField(auto_now_add=True, help_text='The date and time the case was created.')),
1134
- ('updated_at', models.DateTimeField(auto_now=True, help_text='The date and time the case was last updated.')),
1135
- ('patient', models.ForeignKey(help_text='The patient associated with this case.', on_delete=django.db.models.deletion.CASCADE, related_name='cases', to='endoreg_db.patient')),
1136
- ('patient_examinations', models.ManyToManyField(help_text='The examinations included in this case.', related_name='cases', to='endoreg_db.patientexamination')),
1137
- ],
1138
- options={
1139
- 'verbose_name': 'Case',
1140
- 'verbose_name_plural': 'Cases',
1141
- 'ordering': ['-start_date', 'patient'],
1142
- },
1143
- ),
1144
- migrations.CreateModel(
1145
- name='AnonymExaminationReport',
1146
- fields=[
1147
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1148
- ('meta', models.JSONField(blank=True, null=True)),
1149
- ('text', models.TextField(blank=True, null=True)),
1150
- ('date', models.DateField(blank=True, null=True)),
1151
- ('time', models.TimeField(blank=True, null=True)),
1152
- ('file', models.FileField(blank=True, null=True, upload_to=pathlib.PurePosixPath('pdfs'))),
1153
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1154
- ('type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.documenttype')),
1155
- ('examiners', models.ManyToManyField(blank=True, to='endoreg_db.examiner')),
1156
- ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='endoreg_db.patient')),
1157
- ('patient_examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.patientexamination')),
1158
- ],
1159
- options={
1160
- 'abstract': False,
1161
- },
1162
- ),
1163
- migrations.CreateModel(
1164
- name='PatientExaminationIndication',
1165
- fields=[
1166
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1167
- ('examination_indication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.examinationindication')),
1168
- ('indication_choice', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.examinationindicationclassificationchoice')),
1169
- ('patient_examination', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='indications', to='endoreg_db.patientexamination')),
1170
- ],
1171
- ),
1172
- migrations.CreateModel(
1173
- name='PatientFinding',
1174
- fields=[
1175
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1176
- ('created_at', models.DateTimeField(auto_now_add=True)),
1177
- ('updated_at', models.DateTimeField(auto_now=True)),
1178
- ('is_active', models.BooleanField(default=True, help_text='Deaktiviert statt gelöscht für Audit-Trail')),
1179
- ('deactivated_at', models.DateTimeField(blank=True, null=True)),
1180
- ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='created_findings', to=settings.AUTH_USER_MODEL)),
1181
- ('deactivated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='deactivated_findings', to=settings.AUTH_USER_MODEL)),
1182
- ('finding', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='finding_patient_findings', to='endoreg_db.finding')),
1183
- ('patient_examination', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_findings', to='endoreg_db.patientexamination')),
1184
- ('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='updated_findings', to=settings.AUTH_USER_MODEL)),
1185
- ],
1186
- options={
1187
- 'verbose_name': 'Patient Finding',
1188
- 'verbose_name_plural': 'Patient Findings',
1189
- 'ordering': ['patient_examination', 'finding'],
1190
- },
1191
- ),
1192
- migrations.AddField(
1193
- model_name='labelvideosegment',
1194
- name='patient_findings',
1195
- field=models.ManyToManyField(blank=True, related_name='video_segments', to='endoreg_db.patientfinding'),
1196
- ),
1197
- migrations.CreateModel(
1198
- name='PatientFindingClassification',
1199
- fields=[
1200
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1201
- ('is_active', models.BooleanField(default=True, help_text='Indicates if the classification is currently active.')),
1202
- ('subcategories', models.JSONField(blank=True, null=True)),
1203
- ('numerical_descriptors', models.JSONField(blank=True, null=True)),
1204
- ('classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_classifications', to='endoreg_db.findingclassification')),
1205
- ('classification_choice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_classifications', to='endoreg_db.findingclassificationchoice')),
1206
- ('finding', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='classifications', to='endoreg_db.patientfinding')),
1207
- ],
1208
- options={
1209
- 'verbose_name': 'Patient Finding Classification',
1210
- 'verbose_name_plural': 'Patient Finding Classifications',
1211
- 'ordering': ['finding', 'classification', 'classification_choice'],
1212
- },
1213
- ),
1214
- migrations.CreateModel(
1215
- name='PatientFindingIntervention',
1216
- fields=[
1217
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1218
- ('is_active', models.BooleanField(default=True, help_text='Indicates if the intervention is currently active.')),
1219
- ('state', models.CharField(blank=True, max_length=100, null=True)),
1220
- ('time_start', models.DateTimeField(blank=True, null=True)),
1221
- ('time_end', models.DateTimeField(blank=True, null=True)),
1222
- ('date', models.DateField(blank=True, null=True)),
1223
- ('finding', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='interventions', to='endoreg_db.patientfinding')),
1224
- ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_interventions', to='endoreg_db.findingintervention')),
1225
- ],
1226
- ),
1227
- migrations.CreateModel(
1228
- name='PatientLabSample',
1229
- fields=[
1230
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1231
- ('date', models.DateTimeField()),
1232
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lab_samples', to='endoreg_db.patient')),
1233
- ('sample_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patientlabsampletype')),
1234
- ],
1235
- ),
1236
- migrations.CreateModel(
1237
- name='PatientMedication',
1238
- fields=[
1239
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1240
- ('dosage', models.JSONField(blank=True, null=True)),
1241
- ('active', models.BooleanField(default=True)),
1242
- ('intake_times', models.ManyToManyField(blank=True, related_name='intake_time_patient_medications', to='endoreg_db.medicationintaketime')),
1243
- ('medication', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='medication_patient_medications', to='endoreg_db.medication')),
1244
- ('medication_indication', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='indication_patient_medications', to='endoreg_db.medicationindication')),
1245
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1246
- ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1247
- ],
1248
- options={
1249
- 'verbose_name': 'Patient Medication',
1250
- 'verbose_name_plural': 'Patient Medications',
1251
- },
1252
- ),
1253
- migrations.CreateModel(
1254
- name='PatientMedicationSchedule',
1255
- fields=[
1256
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1257
- ('created_at', models.DateTimeField(auto_now_add=True)),
1258
- ('updated_at', models.DateTimeField(auto_now=True)),
1259
- ('medication', models.ManyToManyField(blank=True, related_name='patient_medication_schedules', to='endoreg_db.patientmedication')),
1260
- ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1261
- ],
1262
- ),
1263
- migrations.CreateModel(
1264
- name='PdfMeta',
1265
- fields=[
1266
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1267
- ('date', models.DateField()),
1268
- ('time', models.TimeField()),
1269
- ('pdf_hash', models.CharField(max_length=255, unique=True)),
1270
- ('pdf_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.pdftype')),
1271
- ],
1272
- ),
1273
- migrations.CreateModel(
1274
- name='CenterProduct',
1275
- fields=[
1276
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1277
- ('date_used', models.DateField()),
1278
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_products', to='endoreg_db.center')),
1279
- ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_products', to='endoreg_db.product')),
1280
- ],
1281
- options={
1282
- 'verbose_name': 'Center Product Usage',
1283
- 'verbose_name_plural': 'Center Product Usages',
1284
- 'ordering': ['center', '-date_used', 'product'],
1285
- },
1286
- ),
1287
- migrations.AddField(
1288
- model_name='product',
1289
- name='product_group',
1290
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='products', to='endoreg_db.productgroup'),
1291
- ),
1292
- migrations.CreateModel(
1293
- name='PortalUserInfo',
1294
- fields=[
1295
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1296
- ('works_in_endoscopy', models.BooleanField(blank=True, null=True)),
1297
- ('examiner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portal_user_info', to='endoreg_db.examiner')),
1298
- ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
1299
- ('profession', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portal_user_infos', to='endoreg_db.profession')),
1300
- ],
1301
- ),
1302
- migrations.AddField(
1303
- model_name='employeetype',
1304
- name='qualifications',
1305
- field=models.ManyToManyField(related_name='employee_types', to='endoreg_db.qualification'),
1306
- ),
1307
- migrations.CreateModel(
1308
- name='EmployeeQualification',
1309
- fields=[
1310
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1311
- ('employee', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='qualification', to='endoreg_db.employee')),
1312
- ('qualifications', models.ManyToManyField(related_name='employee_qualifications', to='endoreg_db.qualification')),
1313
- ],
1314
- ),
1315
- migrations.AddField(
1316
- model_name='qualification',
1317
- name='qualification_types',
1318
- field=models.ManyToManyField(related_name='qualifications', to='endoreg_db.qualificationtype'),
1319
- ),
1320
- migrations.CreateModel(
1321
- name='ReferenceProduct',
1322
- fields=[
1323
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1324
- ('name', models.CharField(max_length=255)),
1325
- ('emission_factor_package', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_product_package', to='endoreg_db.emissionfactor')),
1326
- ('emission_factor_product', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_product_product', to='endoreg_db.emissionfactor')),
1327
- ('emission_factor_total', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_products', to='endoreg_db.emissionfactor')),
1328
- ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reference_products', to='endoreg_db.product')),
1329
- ('product_group', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='reference_product', to='endoreg_db.productgroup')),
1330
- ],
1331
- ),
1332
- migrations.CreateModel(
1333
- name='ReportReaderConfig',
1334
- fields=[
1335
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1336
- ('locale', models.CharField(default='de_DE', max_length=10)),
1337
- ('text_date_format', models.CharField(default='%d.%m.%Y', max_length=10)),
1338
- ('first_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.firstname')),
1339
- ('last_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.lastname')),
1340
- ('cut_off_above', models.ManyToManyField(related_name='report_reader_configs_cut_off_above', to='endoreg_db.reportreaderflag')),
1341
- ('cut_off_below', models.ManyToManyField(related_name='report_reader_configs_cut_off_below', to='endoreg_db.reportreaderflag')),
1342
- ('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')),
1343
- ('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')),
1344
- ('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')),
1345
- ],
1346
- ),
1347
- migrations.AddField(
1348
- model_name='pdftype',
1349
- name='cut_off_above_lines',
1350
- field=models.ManyToManyField(related_name='pdf_type_cut_off_above_lines', to='endoreg_db.reportreaderflag'),
1351
- ),
1352
- migrations.AddField(
1353
- model_name='pdftype',
1354
- name='cut_off_below_lines',
1355
- field=models.ManyToManyField(related_name='pdf_type_cut_off_below_lines', to='endoreg_db.reportreaderflag'),
1356
- ),
1357
- migrations.AddField(
1358
- model_name='pdftype',
1359
- name='endoscope_info_line',
1360
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_endoscopy_info_line', to='endoreg_db.reportreaderflag'),
1361
- ),
1362
- migrations.AddField(
1363
- model_name='pdftype',
1364
- name='examiner_info_line',
1365
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_examiner_info_line', to='endoreg_db.reportreaderflag'),
1366
- ),
1367
- migrations.AddField(
1368
- model_name='pdftype',
1369
- name='patient_info_line',
1370
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_patient_info_line', to='endoreg_db.reportreaderflag'),
1371
- ),
1372
- migrations.CreateModel(
1373
- name='Requirement',
1374
- fields=[
1375
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1376
- ('name', models.CharField(max_length=100, unique=True)),
1377
- ('description', models.TextField(blank=True, null=True)),
1378
- ('numeric_value', models.FloatField(blank=True, help_text='Numeric value for the requirement. If not set, the requirement is not used in calculations.', null=True)),
1379
- ('numeric_value_min', models.FloatField(blank=True, help_text='Minimum numeric value for the requirement. If not set, the requirement is not used in calculations.', null=True)),
1380
- ('numeric_value_max', models.FloatField(blank=True, help_text='Maximum numeric value for the requirement. If not set, the requirement is not used in calculations.', null=True)),
1381
- ('string_value', models.CharField(blank=True, help_text='String value for the requirement. If not set, the requirement is not used in calculations.', max_length=100, null=True)),
1382
- ('string_values', models.TextField(blank=True, help_text=" ','-separated list of string values for the requirement.If not set, the requirement is not used in calculations.", null=True)),
1383
- ('disease_classification_choices', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.diseaseclassificationchoice')),
1384
- ('diseases', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.disease')),
1385
- ('events', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.event')),
1386
- ('examination_indications', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.examinationindication')),
1387
- ('examinations', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.examination')),
1388
- ('finding_classification_choices', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.findingclassificationchoice')),
1389
- ('finding_classifications', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.findingclassification')),
1390
- ('finding_interventions', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.findingintervention')),
1391
- ('findings', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.finding')),
1392
- ('genders', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.gender')),
1393
- ('lab_values', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.labvalue')),
1394
- ('medication_indications', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.medicationindication')),
1395
- ('medication_intake_times', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.medicationintaketime')),
1396
- ('medication_schedules', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.medicationschedule')),
1397
- ('medications', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.medication')),
1398
- ('operators', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.requirementoperator')),
1399
- ('requirement_types', models.ManyToManyField(blank=True, related_name='linked_requirements', to='endoreg_db.requirementtype')),
1400
- ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='required_in', to='endoreg_db.unit')),
1401
- ],
1402
- ),
1403
- migrations.CreateModel(
1404
- name='Risk',
1405
- fields=[
1406
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1407
- ('name', models.CharField(max_length=100, unique=True)),
1408
- ('name_de', models.CharField(blank=True, max_length=100, null=True)),
1409
- ('name_en', models.CharField(blank=True, max_length=100, null=True)),
1410
- ('description', models.TextField(blank=True, null=True)),
1411
- ('risk_value', models.FloatField(blank=True, help_text='Risk value for the risk. If not set, the risk is not used in calculations.', null=True)),
1412
- ('risk_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='risks', to='endoreg_db.risktype')),
1413
- ],
1414
- ),
1415
- migrations.CreateModel(
1416
- name='Rule',
1417
- fields=[
1418
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1419
- ('name', models.CharField(max_length=255, unique=True)),
1420
- ('description', models.TextField(blank=True, null=True)),
1421
- ('attribute_key', models.CharField(max_length=255)),
1422
- ('attribute_dtype', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ruleattributedtype')),
1423
- ('rule_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ruletype')),
1424
- ],
1425
- options={
1426
- 'verbose_name': 'Rule',
1427
- 'verbose_name_plural': 'Rules',
1428
- },
1429
- ),
1430
- migrations.CreateModel(
1431
- name='Ruleset',
1432
- fields=[
1433
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1434
- ('name', models.CharField(max_length=255, unique=True)),
1435
- ('rules', models.ManyToManyField(to='endoreg_db.rule')),
1436
- ],
1437
- ),
1438
- migrations.CreateModel(
1439
- name='SensitiveMeta',
1440
- fields=[
1441
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1442
- ('examination_date', models.DateField(blank=True, null=True)),
1443
- ('patient_first_name', models.CharField(blank=True, max_length=255, null=True)),
1444
- ('patient_last_name', models.CharField(blank=True, max_length=255, null=True)),
1445
- ('patient_dob', models.DateTimeField(blank=True, help_text='Date of birth (can be auto-generated if missing).', null=True)),
1446
- ('examiner_first_name', models.CharField(blank=True, editable=False, max_length=255, null=True)),
1447
- ('examiner_last_name', models.CharField(blank=True, editable=False, max_length=255, null=True)),
1448
- ('examination_hash', models.CharField(blank=True, db_index=True, editable=False, max_length=64, null=True)),
1449
- ('patient_hash', models.CharField(blank=True, db_index=True, editable=False, max_length=64, null=True)),
1450
- ('endoscope_type', models.CharField(blank=True, max_length=255, null=True)),
1451
- ('endoscope_sn', models.CharField(blank=True, max_length=255, null=True)),
1452
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1453
- ('examiners', models.ManyToManyField(blank=True, help_text='Pseudo-anonymized examiner(s) associated with the examination.', to='endoreg_db.examiner')),
1454
- ('patient_gender', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.gender')),
1455
- ('pseudo_examination', models.ForeignKey(blank=True, help_text='FK to the pseudo-anonymized PatientExamination record.', null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patientexamination')),
1456
- ('pseudo_patient', models.ForeignKey(blank=True, help_text='FK to the pseudo-anonymized Patient record.', null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1457
- ],
1458
- ),
1459
- migrations.CreateModel(
1460
- name='RawPdfFile',
1461
- fields=[
1462
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1463
- ('pdf_hash', models.CharField(max_length=255, unique=True)),
1464
- ('text', models.TextField(blank=True, null=True)),
1465
- ('date_created', models.DateTimeField(auto_now_add=True)),
1466
- ('date_modified', models.DateTimeField(auto_now=True)),
1467
- ('anonymized', models.BooleanField(default=False, help_text='True if the PDF has been anonymized.')),
1468
- ('file', models.FileField(upload_to='raw_pdfs', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])])),
1469
- ('anonymized_file', models.FileField(blank=True, null=True, upload_to='raw_pdfs', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])])),
1470
- ('state_report_processing_required', models.BooleanField(default=True)),
1471
- ('state_report_processed', models.BooleanField(default=False)),
1472
- ('raw_meta', models.JSONField(blank=True, null=True)),
1473
- ('anonymized_text', models.TextField(blank=True, null=True)),
1474
- ('anonym_examination_report', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_file', to='endoreg_db.anonymexaminationreport')),
1475
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1476
- ('examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_files', to='endoreg_db.patientexamination')),
1477
- ('examiner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.examiner')),
1478
- ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_files', to='endoreg_db.patient')),
1479
- ('pdf_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.pdftype')),
1480
- ('state', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_file', to='endoreg_db.rawpdfstate')),
1481
- ('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')),
1482
- ],
1483
- ),
1484
- migrations.CreateModel(
1485
- name='AnonymHistologyReport',
1486
- fields=[
1487
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1488
- ('meta', models.JSONField(blank=True, null=True)),
1489
- ('text', models.TextField(blank=True, null=True)),
1490
- ('date', models.DateField(blank=True, null=True)),
1491
- ('time', models.TimeField(blank=True, null=True)),
1492
- ('file', models.FileField(blank=True, null=True, upload_to=pathlib.PurePosixPath('pdfs'))),
1493
- ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1494
- ('type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.documenttype')),
1495
- ('examiners', models.ManyToManyField(blank=True, to='endoreg_db.examiner')),
1496
- ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='endoreg_db.patient')),
1497
- ('patient_examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.patientexamination')),
1498
- ('sensitive_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.sensitivemeta')),
1499
- ],
1500
- options={
1501
- 'abstract': False,
1502
- },
1503
- ),
1504
- migrations.AddField(
1505
- model_name='anonymexaminationreport',
1506
- name='sensitive_meta',
1507
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.sensitivemeta'),
1508
- ),
1509
- migrations.CreateModel(
1510
- name='SensitiveMetaState',
1511
- fields=[
1512
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1513
- ('created_at', models.DateTimeField(auto_now_add=True)),
1514
- ('updated_at', models.DateTimeField(auto_now=True)),
1515
- ('dob_verified', models.BooleanField(default=False)),
1516
- ('names_verified', models.BooleanField(default=False)),
1517
- ('origin', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='state', to='endoreg_db.sensitivemeta')),
1518
- ],
1519
- options={
1520
- 'verbose_name': 'Sensitive Meta State',
1521
- 'verbose_name_plural': 'Sensitive Meta States',
1522
- },
1523
- ),
1524
- migrations.CreateModel(
1525
- name='Shift',
1526
- fields=[
1527
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1528
- ('name', models.CharField(max_length=255, unique=True)),
1529
- ('description', models.TextField(blank=True, null=True)),
1530
- ('is_active', models.BooleanField(default=True)),
1531
- ('required_qualifications', models.ManyToManyField(related_name='shifts', to='endoreg_db.qualification')),
1532
- ('shift_types', models.ManyToManyField(related_name='shifts', to='endoreg_db.shifttype')),
1533
- ],
1534
- ),
1535
- migrations.CreateModel(
1536
- name='CenterShift',
1537
- fields=[
1538
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1539
- ('name', models.CharField(max_length=255, unique=True)),
1540
- ('description', models.TextField(blank=True, null=True)),
1541
- ('start_time', models.TimeField()),
1542
- ('end_time', models.TimeField()),
1543
- ('estimated_presence_fraction', models.DecimalField(decimal_places=4, default=0.0, max_digits=5)),
1544
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_shifts', to='endoreg_db.center')),
1545
- ('scheduled_days', models.ManyToManyField(related_name='center_shifts', to='endoreg_db.scheduleddays')),
1546
- ('shift', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_shifts', to='endoreg_db.shift')),
1547
- ],
1548
- ),
1549
- migrations.CreateModel(
1550
- name='RequirementSet',
1551
- fields=[
1552
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1553
- ('name', models.CharField(max_length=100, unique=True)),
1554
- ('description', models.TextField(blank=True, null=True)),
1555
- ('information_sources', models.ManyToManyField(blank=True, related_name='requirement_sets', to='endoreg_db.informationsource')),
1556
- ('links_to_sets', models.ManyToManyField(blank=True, related_name='links_from_sets', to='endoreg_db.requirementset')),
1557
- ('reqset_exam_links', models.ManyToManyField(blank=True, related_name='requirement_set', to='endoreg_db.examinationrequirementset')),
1558
- ('requirements', models.ManyToManyField(blank=True, related_name='requirement_sets', to='endoreg_db.requirement')),
1559
- ('requirement_set_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='requirement_sets', to='endoreg_db.requirementsettype')),
1560
- ('tags', models.ManyToManyField(blank=True, related_name='requirement_sets', to='endoreg_db.tag')),
1561
- ],
1562
- ),
1563
- migrations.CreateModel(
1564
- name='TransportRoute',
1565
- fields=[
1566
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1567
- ('distance', models.FloatField()),
1568
- ('name', models.CharField(max_length=255)),
1569
- ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
1570
- ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1571
- ],
1572
- ),
1573
- migrations.AddField(
1574
- model_name='product',
1575
- name='transport_route',
1576
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.transportroute'),
1577
- ),
1578
- migrations.CreateModel(
1579
- name='ProductWeight',
1580
- fields=[
1581
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1582
- ('name', models.CharField(max_length=255, null=True)),
1583
- ('measured', models.FloatField(null=True)),
1584
- ('verified', models.FloatField(null=True)),
1585
- ('manufacturer', models.FloatField(null=True)),
1586
- ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.product')),
1587
- ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1588
- ],
1589
- ),
1590
- migrations.CreateModel(
1591
- name='ProductMaterial',
1592
- fields=[
1593
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1594
- ('component', models.CharField(max_length=255)),
1595
- ('quantity', models.FloatField()),
1596
- ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_product_materials', to='endoreg_db.material')),
1597
- ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='product_product_materials', to='endoreg_db.product')),
1598
- ('unit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='unit_product_materials', to='endoreg_db.unit')),
1599
- ],
1600
- ),
1601
- migrations.CreateModel(
1602
- name='PatientLabValue',
1603
- fields=[
1604
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1605
- ('value', models.FloatField(blank=True, null=True)),
1606
- ('value_str', models.CharField(blank=True, max_length=255, null=True)),
1607
- ('datetime', models.DateTimeField(auto_now_add=True)),
1608
- ('normal_range', models.JSONField(default=dict)),
1609
- ('lab_value', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.labvalue')),
1610
- ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='lab_values', to='endoreg_db.patient')),
1611
- ('sample', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='values', to='endoreg_db.patientlabsample')),
1612
- ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1613
- ],
1614
- ),
1615
- migrations.AddField(
1616
- model_name='medication',
1617
- name='default_unit',
1618
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit'),
1619
- ),
1620
- migrations.AddField(
1621
- model_name='emissionfactor',
1622
- name='unit',
1623
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit'),
1624
- ),
1625
- migrations.CreateModel(
1626
- name='CenterResource',
1627
- fields=[
1628
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1629
- ('name', models.CharField(max_length=255, null=True)),
1630
- ('quantity', models.FloatField()),
1631
- ('year', models.IntegerField()),
1632
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_resources', to='endoreg_db.center')),
1633
- ('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')),
1634
- ('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')),
1635
- ('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.resource')),
1636
- ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1637
- ],
1638
- ),
1639
- migrations.CreateModel(
1640
- name='UploadJob',
1641
- fields=[
1642
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unique identifier for the upload job', primary_key=True, serialize=False)),
1643
- ('file', models.FileField(help_text='Uploaded file (PDF or video)', upload_to='uploads/%Y/%m/%d/')),
1644
- ('status', models.CharField(choices=[('pending', 'Pending'), ('processing', 'Processing'), ('anonymized', 'Anonymized'), ('error', 'Error')], default='pending', help_text='Current processing status of the upload', max_length=20)),
1645
- ('content_type', models.CharField(blank=True, help_text='MIME type of the uploaded file', max_length=100)),
1646
- ('error_detail', models.TextField(blank=True, help_text='Error message if processing failed')),
1647
- ('created_at', models.DateTimeField(auto_now_add=True, help_text='When the upload job was created')),
1648
- ('updated_at', models.DateTimeField(auto_now=True, help_text='When the upload job was last updated')),
1649
- ('sensitive_meta', models.ForeignKey(blank=True, help_text='Link to the created SensitiveMeta record after processing', null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.sensitivemeta')),
1650
- ],
1651
- options={
1652
- 'verbose_name': 'Upload Job',
1653
- 'verbose_name_plural': 'Upload Jobs',
1654
- 'ordering': ['-created_at'],
1655
- },
1656
- ),
1657
- migrations.CreateModel(
1658
- name='VideoFile',
1659
- fields=[
1660
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1661
- ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
1662
- ('raw_file', models.FileField(blank=True, null=True, upload_to='videos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['mp4'])])),
1663
- ('processed_file', models.FileField(blank=True, null=True, upload_to='videos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['mp4'])])),
1664
- ('video_hash', models.CharField(help_text='Hash of the raw video file.', max_length=255, unique=True)),
1665
- ('processed_video_hash', models.CharField(blank=True, help_text='Hash of the processed video file, unique if not null.', max_length=255, null=True, unique=True)),
1666
- ('original_file_name', models.CharField(blank=True, max_length=255, null=True)),
1667
- ('uploaded_at', models.DateTimeField(auto_now_add=True)),
1668
- ('frame_dir', models.CharField(blank=True, help_text='Path to frames extracted from the raw video.', max_length=512)),
1669
- ('fps', models.FloatField(blank=True, null=True)),
1670
- ('duration', models.FloatField(blank=True, null=True)),
1671
- ('frame_count', models.IntegerField(blank=True, null=True)),
1672
- ('width', models.IntegerField(blank=True, null=True)),
1673
- ('height', models.IntegerField(blank=True, null=True)),
1674
- ('suffix', models.CharField(blank=True, max_length=10, null=True)),
1675
- ('sequences', models.JSONField(blank=True, default=dict, help_text='AI prediction sequences based on raw frames.')),
1676
- ('date', models.DateField(blank=True, null=True)),
1677
- ('meta', models.JSONField(blank=True, null=True)),
1678
- ('date_created', models.DateTimeField(auto_now_add=True)),
1679
- ('date_modified', models.DateTimeField(auto_now=True)),
1680
- ('ai_model_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.modelmeta')),
1681
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='endoreg_db.center')),
1682
- ('examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_files', to='endoreg_db.patientexamination')),
1683
- ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_files', to='endoreg_db.patient')),
1684
- ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='endoreg_db.endoscopyprocessor')),
1685
- ('sensitive_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_file', to='endoreg_db.sensitivemeta')),
1686
- ('import_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videoimportmeta')),
1687
- ],
1688
- ),
1689
- migrations.AddField(
1690
- model_name='patientexamination',
1691
- name='video',
1692
- field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='patient_examination', to='endoreg_db.videofile'),
1693
- ),
1694
- migrations.AddField(
1695
- model_name='labelvideosegment',
1696
- name='video_file',
1697
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='label_video_segments', to='endoreg_db.videofile'),
1698
- ),
1699
- migrations.CreateModel(
1700
- name='Frame',
1701
- fields=[
1702
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1703
- ('frame_number', models.PositiveIntegerField()),
1704
- ('relative_path', models.CharField(max_length=512)),
1705
- ('timestamp', models.FloatField(blank=True, null=True)),
1706
- ('is_extracted', models.BooleanField(default=False)),
1707
- ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='frames', to='endoreg_db.videofile')),
1708
- ],
1709
- options={
1710
- 'ordering': ['video', 'frame_number'],
1711
- },
1712
- ),
1713
- migrations.CreateModel(
1714
- name='VideoMeta',
1715
- fields=[
1716
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1717
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1718
- ('endoscope', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscope')),
1719
- ('ffmpeg_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ffmpegmeta')),
1720
- ('import_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videoimportmeta')),
1721
- ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
1722
- ],
1723
- ),
1724
- migrations.AddField(
1725
- model_name='videofile',
1726
- name='video_meta',
1727
- field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_file', to='endoreg_db.videometa'),
1728
- ),
1729
- migrations.CreateModel(
1730
- name='VideoPredictionMeta',
1731
- fields=[
1732
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1733
- ('date_created', models.DateTimeField(auto_now_add=True)),
1734
- ('date_modified', models.DateTimeField(auto_now=True)),
1735
- ('prediction_array', models.BinaryField(blank=True, null=True)),
1736
- ('model_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.modelmeta')),
1737
- ('video_file', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_prediction_meta', to='endoreg_db.videofile')),
1738
- ],
1739
- ),
1740
- migrations.AddField(
1741
- model_name='labelvideosegment',
1742
- name='prediction_meta',
1743
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='label_video_segments', to='endoreg_db.videopredictionmeta'),
1744
- ),
1745
- migrations.CreateModel(
1746
- name='VideoSegmentationAnnotation',
1747
- fields=[
1748
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1749
- ('start_time', models.FloatField()),
1750
- ('stop_time', models.FloatField()),
1751
- ('is_true', models.BooleanField(default=True)),
1752
- ('video_file', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_segmentation_annotations', to='endoreg_db.videofile')),
1753
- ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videosegmentationlabel')),
1754
- ],
1755
- ),
1756
- migrations.CreateModel(
1757
- name='VideoSegmentationLabelSet',
1758
- fields=[
1759
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1760
- ('name', models.CharField(max_length=255)),
1761
- ('description', models.TextField(blank=True, null=True)),
1762
- ('labels', models.ManyToManyField(related_name='labelsets', to='endoreg_db.videosegmentationlabel')),
1763
- ],
1764
- ),
1765
- migrations.AddField(
1766
- model_name='aimodel',
1767
- name='video_segmentation_labelset',
1768
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ai_models', to='endoreg_db.videosegmentationlabelset'),
1769
- ),
1770
- migrations.AddField(
1771
- model_name='videofile',
1772
- name='state',
1773
- field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_file', to='endoreg_db.videostate'),
1774
- ),
1775
- migrations.CreateModel(
1776
- name='CenterWaste',
1777
- fields=[
1778
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1779
- ('year', models.IntegerField()),
1780
- ('quantity', models.FloatField()),
1781
- ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_wastes', to='endoreg_db.center')),
1782
- ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
1783
- ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1784
- ('waste', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.waste')),
1785
- ],
1786
- ),
1787
- migrations.CreateModel(
1788
- name='ImageClassificationAnnotation',
1789
- fields=[
1790
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1791
- ('value', models.BooleanField()),
1792
- ('float_value', models.FloatField(blank=True, null=True)),
1793
- ('annotator', models.CharField(blank=True, max_length=255, null=True)),
1794
- ('date_created', models.DateTimeField(auto_now_add=True)),
1795
- ('date_modified', models.DateTimeField(auto_now=True)),
1796
- ('frame', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.frame')),
1797
- ('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')),
1798
- ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.label')),
1799
- ('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')),
1800
- ],
1801
- options={
1802
- 'indexes': [models.Index(fields=['frame', 'label'], name='endoreg_db__frame_i_47f916_idx'), models.Index(fields=['frame'], name='endoreg_db__frame_i_92c75a_idx')],
1803
- },
1804
- ),
1805
- migrations.AddIndex(
1806
- model_name='patientfinding',
1807
- index=models.Index(fields=['patient_examination', 'finding'], name='endoreg_db__patient_54869f_idx'),
1808
- ),
1809
- migrations.AddIndex(
1810
- model_name='patientfinding',
1811
- index=models.Index(fields=['patient_examination', 'is_active'], name='endoreg_db__patient_9359f8_idx'),
1812
- ),
1813
- migrations.AddIndex(
1814
- model_name='patientfinding',
1815
- index=models.Index(fields=['created_at'], name='endoreg_db__created_b44d86_idx'),
1816
- ),
1817
- migrations.AddIndex(
1818
- model_name='patientfinding',
1819
- index=models.Index(fields=['finding', 'is_active'], name='endoreg_db__finding_2f036b_idx'),
1820
- ),
1821
- migrations.AddConstraint(
1822
- model_name='patientfinding',
1823
- constraint=models.UniqueConstraint(condition=models.Q(('is_active', True)), fields=('patient_examination', 'finding'), name='unique_active_finding_per_examination'),
1824
- ),
1825
- migrations.AddConstraint(
1826
- model_name='patientfinding',
1827
- constraint=models.CheckConstraint(condition=models.Q(models.Q(('deactivated_at__isnull', True), ('deactivated_by__isnull', True)), models.Q(('deactivated_at__isnull', False), ('deactivated_by__isnull', False), ('is_active', False)), _connector='OR'), name='deactivation_fields_consistency'),
1828
- ),
1829
- migrations.AlterUniqueTogether(
1830
- name='frame',
1831
- unique_together={('video', 'frame_number')},
1832
- ),
1833
- migrations.AddIndex(
1834
- model_name='videopredictionmeta',
1835
- index=models.Index(fields=['model_meta', 'video_file'], name='endoreg_db__model_m_208dee_idx'),
1836
- ),
1837
- migrations.AddConstraint(
1838
- model_name='videopredictionmeta',
1839
- constraint=models.UniqueConstraint(fields=('model_meta', 'video_file'), name='unique_prediction_per_video_model'),
1840
- ),
1841
- migrations.AddIndex(
1842
- model_name='labelvideosegment',
1843
- index=models.Index(fields=['video_file', 'label', 'start_frame_number'], name='endoreg_db__video_f_fa9326_idx'),
1844
- ),
1845
- migrations.AddIndex(
1846
- model_name='labelvideosegment',
1847
- index=models.Index(fields=['prediction_meta', 'label'], name='endoreg_db__predict_2bfba4_idx'),
1848
- ),
1849
- migrations.AddConstraint(
1850
- model_name='labelvideosegment',
1851
- constraint=models.CheckConstraint(condition=models.Q(('start_frame_number__lt', models.F('end_frame_number'))), name='segment_start_lt_end'),
1852
- ),
1853
- migrations.AddConstraint(
1854
- model_name='videosegmentationannotation',
1855
- constraint=models.CheckConstraint(condition=models.Q(('start_time__lt', models.F('stop_time'))), name='start_time_less_than_stop_time'),
1856
- ),
1857
- ]