endoreg-db 0.8.8.0__py3-none-any.whl → 0.8.8.9__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 +400 -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/processing/video_processing/video_cleanup_on_error.py +119 -0
  74. endoreg_db/import_files/pseudonymization/fake.py +52 -0
  75. endoreg_db/import_files/pseudonymization/k_anonymity.py +182 -0
  76. endoreg_db/import_files/pseudonymization/k_pseudonymity.py +128 -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 +64 -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/views/__init__.py +85 -173
  171. endoreg_db/views/ai/__init__.py +8 -0
  172. endoreg_db/views/ai/label.py +155 -0
  173. endoreg_db/views/anonymization/media_management.py +8 -7
  174. endoreg_db/views/anonymization/overview.py +97 -68
  175. endoreg_db/views/anonymization/validate.py +25 -21
  176. endoreg_db/views/media/__init__.py +5 -20
  177. endoreg_db/views/media/pdf_media.py +109 -65
  178. endoreg_db/views/media/sensitive_metadata.py +163 -148
  179. endoreg_db/views/meta/__init__.py +0 -8
  180. endoreg_db/views/misc/__init__.py +1 -7
  181. endoreg_db/views/misc/upload_views.py +94 -93
  182. endoreg_db/views/report/__init__.py +7 -0
  183. endoreg_db/views/{pdf → report}/reimport.py +45 -24
  184. endoreg_db/views/{pdf/pdf_stream.py → report/report_stream.py} +40 -32
  185. endoreg_db/views/requirement/lookup_store.py +22 -90
  186. endoreg_db/views/video/__init__.py +23 -22
  187. endoreg_db/views/video/correction.py +201 -172
  188. endoreg_db/views/video/reimport.py +1 -1
  189. endoreg_db/views/{media/video_segments.py → video/segments_crud.py} +75 -37
  190. endoreg_db/views/video/{video_meta.py → video_meta_stats.py} +2 -2
  191. endoreg_db/views/video/video_stream.py +7 -8
  192. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/METADATA +2 -2
  193. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/RECORD +217 -335
  194. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/WHEEL +1 -1
  195. endoreg_db/data/_examples/disease.yaml +0 -55
  196. endoreg_db/data/_examples/disease_classification.yaml +0 -13
  197. endoreg_db/data/_examples/disease_classification_choice.yaml +0 -62
  198. endoreg_db/data/_examples/event.yaml +0 -64
  199. endoreg_db/data/_examples/examination.yaml +0 -72
  200. endoreg_db/data/_examples/finding/anatomy_colon.yaml +0 -128
  201. endoreg_db/data/_examples/finding/colonoscopy.yaml +0 -40
  202. endoreg_db/data/_examples/finding/colonoscopy_bowel_prep.yaml +0 -56
  203. endoreg_db/data/_examples/finding/complication.yaml +0 -16
  204. endoreg_db/data/_examples/finding/data.yaml +0 -105
  205. endoreg_db/data/_examples/finding/examination_setting.yaml +0 -16
  206. endoreg_db/data/_examples/finding/medication_related.yaml +0 -18
  207. endoreg_db/data/_examples/finding/outcome.yaml +0 -12
  208. endoreg_db/data/_examples/finding_classification/colonoscopy_bowel_preparation.yaml +0 -68
  209. endoreg_db/data/_examples/finding_classification/colonoscopy_jnet.yaml +0 -22
  210. endoreg_db/data/_examples/finding_classification/colonoscopy_kudo.yaml +0 -25
  211. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
  212. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
  213. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_size.yaml +0 -68
  214. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
  215. endoreg_db/data/_examples/finding_classification/colonoscopy_location.yaml +0 -80
  216. endoreg_db/data/_examples/finding_classification/colonoscopy_lst.yaml +0 -21
  217. endoreg_db/data/_examples/finding_classification/colonoscopy_nice.yaml +0 -20
  218. endoreg_db/data/_examples/finding_classification/colonoscopy_paris.yaml +0 -26
  219. endoreg_db/data/_examples/finding_classification/colonoscopy_sano.yaml +0 -22
  220. endoreg_db/data/_examples/finding_classification/colonoscopy_summary.yaml +0 -53
  221. endoreg_db/data/_examples/finding_classification/complication_generic.yaml +0 -25
  222. endoreg_db/data/_examples/finding_classification/examination_setting_generic.yaml +0 -40
  223. endoreg_db/data/_examples/finding_classification/histology_colo.yaml +0 -51
  224. endoreg_db/data/_examples/finding_classification/intervention_required.yaml +0 -26
  225. endoreg_db/data/_examples/finding_classification/medication_related.yaml +0 -23
  226. endoreg_db/data/_examples/finding_classification/visualized.yaml +0 -33
  227. endoreg_db/data/_examples/finding_classification_choice/bowel_preparation.yaml +0 -78
  228. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
  229. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
  230. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
  231. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_lst.yaml +0 -15
  232. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_nice.yaml +0 -17
  233. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
  234. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_sano.yaml +0 -14
  235. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
  236. endoreg_db/data/_examples/finding_classification_choice/colonoscopy_size.yaml +0 -82
  237. endoreg_db/data/_examples/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
  238. endoreg_db/data/_examples/finding_classification_choice/complication_generic_types.yaml +0 -15
  239. endoreg_db/data/_examples/finding_classification_choice/examination_setting_generic_types.yaml +0 -15
  240. endoreg_db/data/_examples/finding_classification_choice/histology.yaml +0 -24
  241. endoreg_db/data/_examples/finding_classification_choice/histology_polyp.yaml +0 -20
  242. endoreg_db/data/_examples/finding_classification_choice/outcome.yaml +0 -19
  243. endoreg_db/data/_examples/finding_classification_choice/yes_no_na.yaml +0 -11
  244. endoreg_db/data/_examples/finding_classification_type/colonoscopy_basic.yaml +0 -48
  245. endoreg_db/data/_examples/finding_intervention/endoscopy.yaml +0 -43
  246. endoreg_db/data/_examples/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
  247. endoreg_db/data/_examples/finding_intervention/endoscopy_egd.yaml +0 -128
  248. endoreg_db/data/_examples/finding_intervention/endoscopy_ercp.yaml +0 -32
  249. endoreg_db/data/_examples/finding_intervention/endoscopy_eus_lower.yaml +0 -9
  250. endoreg_db/data/_examples/finding_intervention/endoscopy_eus_upper.yaml +0 -36
  251. endoreg_db/data/_examples/finding_intervention_type/endoscopy.yaml +0 -15
  252. endoreg_db/data/_examples/finding_type/data.yaml +0 -43
  253. endoreg_db/data/_examples/requirement/age.yaml +0 -26
  254. endoreg_db/data/_examples/requirement/gender.yaml +0 -25
  255. endoreg_db/data/_examples/requirement_set/01_endoscopy_generic.yaml +0 -48
  256. endoreg_db/data/_examples/requirement_set/colonoscopy_austria_screening.yaml +0 -57
  257. endoreg_db/data/_examples/requirement_set/endoscopy_bleeding_risk.yaml +0 -52
  258. endoreg_db/data/_examples/yaml_examples.xlsx +0 -0
  259. endoreg_db/data/finding/anatomy_colon.yaml +0 -128
  260. endoreg_db/data/finding/colonoscopy.yaml +0 -40
  261. endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +0 -56
  262. endoreg_db/data/finding/complication.yaml +0 -16
  263. endoreg_db/data/finding/data.yaml +0 -105
  264. endoreg_db/data/finding/examination_setting.yaml +0 -16
  265. endoreg_db/data/finding/medication_related.yaml +0 -18
  266. endoreg_db/data/finding/outcome.yaml +0 -12
  267. endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +0 -22
  268. endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +0 -25
  269. endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
  270. endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
  271. endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +0 -38
  272. endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
  273. endoreg_db/data/finding_classification/colonoscopy_location.yaml +0 -49
  274. endoreg_db/data/finding_classification/colonoscopy_lst.yaml +0 -21
  275. endoreg_db/data/finding_classification/colonoscopy_nice.yaml +0 -20
  276. endoreg_db/data/finding_classification/colonoscopy_paris.yaml +0 -26
  277. endoreg_db/data/finding_classification/colonoscopy_sano.yaml +0 -22
  278. endoreg_db/data/finding_classification/colonoscopy_summary.yaml +0 -53
  279. endoreg_db/data/finding_classification/complication_generic.yaml +0 -25
  280. endoreg_db/data/finding_classification/examination_setting_generic.yaml +0 -40
  281. endoreg_db/data/finding_classification/histology_colo.yaml +0 -43
  282. endoreg_db/data/finding_classification/intervention_required.yaml +0 -26
  283. endoreg_db/data/finding_classification/medication_related.yaml +0 -23
  284. endoreg_db/data/finding_classification/visualized.yaml +0 -33
  285. endoreg_db/data/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
  286. endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
  287. endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
  288. endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +0 -15
  289. endoreg_db/data/finding_classification_choice/colon_lesion_nice.yaml +0 -17
  290. endoreg_db/data/finding_classification_choice/colon_lesion_paris.yaml +0 -57
  291. endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
  292. endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +0 -14
  293. endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
  294. endoreg_db/data/finding_classification_choice/colonoscopy_location.yaml +0 -229
  295. endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +0 -19
  296. endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +0 -82
  297. endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
  298. endoreg_db/data/finding_classification_choice/outcome.yaml +0 -19
  299. endoreg_db/data/finding_intervention/endoscopy.yaml +0 -43
  300. endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
  301. endoreg_db/data/finding_intervention/endoscopy_egd.yaml +0 -128
  302. endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +0 -32
  303. endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +0 -9
  304. endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +0 -36
  305. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +0 -79
  306. endoreg_db/data/requirement/age.yaml +0 -26
  307. endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +0 -45
  308. endoreg_db/data/requirement/disease_cardiovascular.yaml +0 -79
  309. endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +0 -41
  310. endoreg_db/data/requirement/disease_hepatology.yaml +0 -12
  311. endoreg_db/data/requirement/disease_misc.yaml +0 -12
  312. endoreg_db/data/requirement/disease_renal.yaml +0 -96
  313. endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +0 -59
  314. endoreg_db/data/requirement/event_cardiology.yaml +0 -251
  315. endoreg_db/data/requirement/event_requirements.yaml +0 -145
  316. endoreg_db/data/requirement/finding_colon_polyp.yaml +0 -50
  317. endoreg_db/data/requirement/gender.yaml +0 -25
  318. endoreg_db/data/requirement/lab_value.yaml +0 -441
  319. endoreg_db/data/requirement/medication.yaml +0 -93
  320. endoreg_db/data/requirement_operator/age.yaml +0 -13
  321. endoreg_db/data/requirement_operator/lab_operators.yaml +0 -129
  322. endoreg_db/data/requirement_operator/model_operators.yaml +0 -96
  323. endoreg_db/management/commands/init_default_ai_model.py +0 -112
  324. endoreg_db/management/commands/reset_celery_schedule.py +0 -9
  325. endoreg_db/management/commands/validate_video.py +0 -204
  326. endoreg_db/migrations/0002_requirementset_depends_on.py +0 -18
  327. endoreg_db/migrations/_old/0001_initial.py +0 -1857
  328. endoreg_db/migrations/_old/0002_add_video_correction_models.py +0 -52
  329. endoreg_db/migrations/_old/0003_add_center_display_name.py +0 -30
  330. endoreg_db/migrations/_old/0004_employee_city_employee_post_code_employee_street_and_more.py +0 -68
  331. endoreg_db/migrations/_old/0004_remove_casetemplate_rules_and_more.py +0 -77
  332. endoreg_db/migrations/_old/0005_merge_20251111_1003.py +0 -14
  333. endoreg_db/migrations/_old/0006_sensitivemeta_anonymized_text_and_more.py +0 -68
  334. endoreg_db/migrations/_old/0007_remove_rule_attribute_dtype_remove_rule_rule_type_and_more.py +0 -89
  335. endoreg_db/migrations/_old/0008_remove_event_event_classification_and_more.py +0 -27
  336. endoreg_db/migrations/_old/0009_alter_modelmeta_options_and_more.py +0 -21
  337. endoreg_db/renames.yml +0 -8
  338. endoreg_db/serializers/_old/raw_pdf_meta_validation.py +0 -223
  339. endoreg_db/serializers/_old/raw_video_meta_validation.py +0 -179
  340. endoreg_db/serializers/_old/video.py +0 -71
  341. endoreg_db/serializers/meta/pdf_file_meta_extraction.py +0 -115
  342. endoreg_db/serializers/meta/report_meta.py +0 -53
  343. endoreg_db/serializers/report/__init__.py +0 -9
  344. endoreg_db/serializers/report/mixins.py +0 -45
  345. endoreg_db/serializers/report/report.py +0 -105
  346. endoreg_db/serializers/report/report_list.py +0 -22
  347. endoreg_db/serializers/report/secure_file_url.py +0 -26
  348. endoreg_db/services/requirements_object.py +0 -147
  349. endoreg_db/services/storage_aware_video_processor.py +0 -370
  350. endoreg_db/urls/files.py +0 -6
  351. endoreg_db/urls/label_video_segment_validate.py +0 -33
  352. endoreg_db/urls/label_video_segments.py +0 -46
  353. endoreg_db/views/label/__init__.py +0 -5
  354. endoreg_db/views/label/label.py +0 -15
  355. endoreg_db/views/label_video_segment/__init__.py +0 -16
  356. endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +0 -44
  357. endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +0 -50
  358. endoreg_db/views/label_video_segment/label_video_segment.py +0 -77
  359. endoreg_db/views/label_video_segment/label_video_segment_by_label.py +0 -174
  360. endoreg_db/views/label_video_segment/label_video_segment_detail.py +0 -73
  361. endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +0 -46
  362. endoreg_db/views/label_video_segment/validate.py +0 -226
  363. endoreg_db/views/media/segments.py +0 -71
  364. endoreg_db/views/meta/available_files_list.py +0 -146
  365. endoreg_db/views/meta/report_meta.py +0 -53
  366. endoreg_db/views/meta/sensitive_meta_detail.py +0 -85
  367. endoreg_db/views/misc/secure_file_serving_view.py +0 -80
  368. endoreg_db/views/misc/secure_file_url_view.py +0 -84
  369. endoreg_db/views/misc/secure_url_validate.py +0 -79
  370. endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +0 -164
  371. endoreg_db/views/patient_finding_location/__init__.py +0 -5
  372. endoreg_db/views/patient_finding_location/pfl_create.py +0 -70
  373. endoreg_db/views/patient_finding_morphology/__init__.py +0 -5
  374. endoreg_db/views/patient_finding_morphology/pfm_create.py +0 -70
  375. endoreg_db/views/pdf/__init__.py +0 -8
  376. endoreg_db/views/video/segmentation.py +0 -274
  377. endoreg_db/views/video/task_status.py +0 -49
  378. endoreg_db/views/video/timeline.py +0 -46
  379. endoreg_db/views/video/video_analyze.py +0 -52
  380. /endoreg_db/data/requirement/{colon_polyp_intervention.yaml → old/colon_polyp_intervention.yaml} +0 -0
  381. /endoreg_db/data/{_examples/requirement → requirement/old}/colonoscopy_baseline_austria.yaml +0 -0
  382. /endoreg_db/data/requirement/{coloreg_colon_polyp.yaml → old/coloreg_colon_polyp.yaml} +0 -0
  383. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_cardiovascular.yaml +0 -0
  384. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_classification_choice_cardiovascular.yaml +0 -0
  385. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_hepatology.yaml +0 -0
  386. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_misc.yaml +0 -0
  387. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_renal.yaml +0 -0
  388. /endoreg_db/data/{_examples/requirement → requirement/old}/endoscopy_bleeding_risk.yaml +0 -0
  389. /endoreg_db/data/{_examples/requirement → requirement/old}/event_cardiology.yaml +0 -0
  390. /endoreg_db/data/{_examples/requirement → requirement/old}/event_requirements.yaml +0 -0
  391. /endoreg_db/data/{_examples/requirement → requirement/old}/finding_colon_polyp.yaml +0 -0
  392. /endoreg_db/{migrations/__init__.py → data/requirement/old/gender.yaml} +0 -0
  393. /endoreg_db/data/{_examples/requirement → requirement/old}/lab_value.yaml +0 -0
  394. /endoreg_db/data/{_examples/requirement → requirement/old}/medication.yaml +0 -0
  395. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/age.yaml +0 -0
  396. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/lab_operators.yaml +0 -0
  397. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/model_operators.yaml +0 -0
  398. /endoreg_db/{urls/sensitive_meta.py → import_files/pseudonymization/__init__.py} +0 -0
  399. /endoreg_db/{views/pdf/pdf_stream_views.py → import_files/pseudonymization/pseudonymize.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.8.9.dist-info}/licenses/LICENSE +0 -0
@@ -1,15 +1,15 @@
1
- # Generated by Django 5.2.7 on 2025-11-16 16:55
2
-
3
- import uuid
4
- from decimal import Decimal
1
+ # Generated by Django 5.2.7 on 2025-11-26 11:26
5
2
 
6
3
  import django.core.validators
7
4
  import django.db.models.deletion
5
+ import uuid
6
+ from decimal import Decimal
8
7
  from django.conf import settings
9
8
  from django.db import migrations, models
10
9
 
11
10
 
12
11
  class Migration(migrations.Migration):
12
+
13
13
  initial = True
14
14
 
15
15
  dependencies = [
@@ -18,2339 +18,1887 @@ class Migration(migrations.Migration):
18
18
 
19
19
  operations = [
20
20
  migrations.CreateModel(
21
- name="AiModel",
21
+ name='AiModel',
22
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)),
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
27
  ],
28
28
  ),
29
29
  migrations.CreateModel(
30
- name="Center",
30
+ name='Center',
31
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
- ("display_name", models.CharField(blank=True, default="", max_length=255)),
32
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
33
+ ('name', models.CharField(max_length=255)),
34
+ ('display_name', models.CharField(blank=True, default='', max_length=255)),
35
35
  ],
36
36
  ),
37
37
  migrations.CreateModel(
38
- name="Contraindication",
38
+ name='Contraindication',
39
39
  fields=[
40
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
41
- ("name", models.CharField(max_length=100, unique=True)),
42
- ("description", models.TextField(blank=True, null=True)),
40
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
41
+ ('name', models.CharField(max_length=100, unique=True)),
42
+ ('description', models.TextField(blank=True, null=True)),
43
43
  ],
44
44
  ),
45
45
  migrations.CreateModel(
46
- name="DateValueDistribution",
46
+ name='DateValueDistribution',
47
47
  fields=[
48
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
49
- ("name", models.CharField(max_length=100)),
50
- ("description", models.TextField(blank=True, null=True)),
51
- ("distribution_type", models.CharField(choices=[("uniform", "Uniform"), ("normal", "Normal")], max_length=20)),
52
- ("mode", models.CharField(choices=[("date", "Date"), ("timedelta", "Timedelta")], max_length=20)),
53
- ("date_min", models.DateField(blank=True, null=True)),
54
- ("date_max", models.DateField(blank=True, null=True)),
55
- ("date_mean", models.DateField(blank=True, null=True)),
56
- ("date_std_dev", models.IntegerField(blank=True, null=True)),
57
- ("timedelta_days_min", models.IntegerField(blank=True, null=True)),
58
- ("timedelta_days_max", models.IntegerField(blank=True, null=True)),
59
- ("timedelta_days_mean", models.IntegerField(blank=True, null=True)),
60
- ("timedelta_days_std_dev", models.IntegerField(blank=True, null=True)),
48
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
49
+ ('name', models.CharField(max_length=100)),
50
+ ('description', models.TextField(blank=True, null=True)),
51
+ ('distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal')], max_length=20)),
52
+ ('mode', models.CharField(choices=[('date', 'Date'), ('timedelta', 'Timedelta')], max_length=20)),
53
+ ('date_min', models.DateField(blank=True, null=True)),
54
+ ('date_max', models.DateField(blank=True, null=True)),
55
+ ('date_mean', models.DateField(blank=True, null=True)),
56
+ ('date_std_dev', models.IntegerField(blank=True, null=True)),
57
+ ('timedelta_days_min', models.IntegerField(blank=True, null=True)),
58
+ ('timedelta_days_max', models.IntegerField(blank=True, null=True)),
59
+ ('timedelta_days_mean', models.IntegerField(blank=True, null=True)),
60
+ ('timedelta_days_std_dev', models.IntegerField(blank=True, null=True)),
61
61
  ],
62
62
  options={
63
- "abstract": False,
63
+ 'abstract': False,
64
64
  },
65
65
  ),
66
66
  migrations.CreateModel(
67
- name="Disease",
67
+ name='Disease',
68
68
  fields=[
69
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
70
- ("name", models.CharField(max_length=255, unique=True)),
71
- ("subcategories", models.JSONField(default=dict)),
72
- ("numerical_descriptors", models.JSONField(default=dict)),
69
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
70
+ ('name', models.CharField(max_length=255, unique=True)),
71
+ ('subcategories', models.JSONField(default=dict)),
72
+ ('numerical_descriptors', models.JSONField(default=dict)),
73
73
  ],
74
74
  ),
75
75
  migrations.CreateModel(
76
- name="DocumentType",
76
+ name='DocumentType',
77
77
  fields=[
78
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
79
- ("name", models.CharField(max_length=255, unique=True)),
80
- ("description", models.TextField(blank=True, null=True)),
78
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
79
+ ('name', models.CharField(max_length=255, unique=True)),
80
+ ('description', models.TextField(blank=True, null=True)),
81
81
  ],
82
82
  options={
83
- "verbose_name": "Document Type",
84
- "verbose_name_plural": "Document Types",
83
+ 'verbose_name': 'Document Type',
84
+ 'verbose_name_plural': 'Document Types',
85
85
  },
86
86
  ),
87
87
  migrations.CreateModel(
88
- name="EmissionFactor",
88
+ name='EmissionFactor',
89
89
  fields=[
90
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
91
- ("name", models.CharField(max_length=255)),
92
- ("value", models.FloatField()),
90
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
91
+ ('name', models.CharField(max_length=255)),
92
+ ('value', models.FloatField()),
93
93
  ],
94
94
  ),
95
95
  migrations.CreateModel(
96
- name="EmployeeType",
96
+ name='EmployeeType',
97
97
  fields=[
98
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
99
- ("name", models.CharField(max_length=255, unique=True)),
100
- ("description", models.TextField(blank=True, null=True)),
101
- ("is_active", models.BooleanField(default=True)),
98
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
99
+ ('name', models.CharField(max_length=255, unique=True)),
100
+ ('description', models.TextField(blank=True, null=True)),
101
+ ('is_active', models.BooleanField(default=True)),
102
102
  ],
103
103
  ),
104
104
  migrations.CreateModel(
105
- name="EndoscopeType",
105
+ name='EndoscopeType',
106
106
  fields=[
107
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
108
- ("name", models.CharField(max_length=255, unique=True)),
107
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
108
+ ('name', models.CharField(max_length=255, unique=True)),
109
109
  ],
110
110
  options={
111
- "verbose_name": "Endoscope Type",
112
- "verbose_name_plural": "Endoscope Types",
113
- "ordering": ["name"],
111
+ 'verbose_name': 'Endoscope Type',
112
+ 'verbose_name_plural': 'Endoscope Types',
113
+ 'ordering': ['name'],
114
114
  },
115
115
  ),
116
116
  migrations.CreateModel(
117
- name="Event",
117
+ name='Event',
118
118
  fields=[
119
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
120
- ("name", models.CharField(max_length=100, unique=True)),
121
- ("description", models.TextField(blank=True, null=True)),
119
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
120
+ ('name', models.CharField(max_length=100, unique=True)),
121
+ ('description', models.TextField(blank=True, null=True)),
122
122
  ],
123
123
  ),
124
124
  migrations.CreateModel(
125
- name="Examination",
125
+ name='ExaminationIndication',
126
126
  fields=[
127
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
128
- ("name", models.CharField(max_length=100, unique=True)),
129
- ("name_de", models.CharField(max_length=100, null=True, unique=True)),
130
- ("name_en", models.CharField(max_length=100, null=True, unique=True)),
131
- ("description", models.TextField(blank=True, null=True)),
132
- ("description_de", models.TextField(blank=True, null=True)),
133
- ("description_en", models.TextField(blank=True, null=True)),
127
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
128
+ ('name', models.CharField(max_length=255, unique=True)),
129
+ ('description', models.TextField(blank=True, null=True)),
134
130
  ],
135
- options={
136
- "verbose_name": "Examination",
137
- "verbose_name_plural": "Examinations",
138
- "ordering": ["name"],
139
- },
140
131
  ),
141
132
  migrations.CreateModel(
142
- name="ExaminationType",
133
+ name='ExaminationIndicationClassification',
143
134
  fields=[
144
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
145
- ("name", models.CharField(max_length=100, unique=True)),
135
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
136
+ ('name', models.CharField(max_length=255, unique=True)),
137
+ ('description', models.TextField(blank=True, null=True)),
146
138
  ],
147
139
  ),
148
140
  migrations.CreateModel(
149
- name="FFMpegMeta",
141
+ name='ExaminationIndicationClassificationChoice',
150
142
  fields=[
151
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
152
- ("width", models.IntegerField(blank=True, null=True)),
153
- ("height", models.IntegerField(blank=True, null=True)),
154
- ("duration", models.FloatField(blank=True, null=True)),
155
- ("frame_rate_num", models.IntegerField(blank=True, null=True)),
156
- ("frame_rate_den", models.IntegerField(blank=True, null=True)),
157
- ("codec_name", models.CharField(blank=True, max_length=50, null=True)),
158
- ("pixel_format", models.CharField(blank=True, max_length=50, null=True)),
159
- ("bit_rate", models.BigIntegerField(blank=True, null=True)),
160
- ("raw_probe_data", models.JSONField(blank=True, null=True)),
143
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
144
+ ('name', models.CharField(max_length=255, unique=True)),
145
+ ('subcategories', models.JSONField(default=dict)),
146
+ ('numerical_descriptors', models.JSONField(default=dict)),
161
147
  ],
162
148
  ),
163
149
  migrations.CreateModel(
164
- name="FindingClassificationChoice",
150
+ name='ExaminationTime',
165
151
  fields=[
166
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
167
- ("name", models.CharField(max_length=255, unique=True)),
168
- ("name_de", models.CharField(max_length=255, null=True, unique=True)),
169
- ("name_en", models.CharField(max_length=255, null=True, unique=True)),
170
- ("description", models.TextField(blank=True)),
171
- ("description_de", models.TextField(blank=True, null=True)),
172
- ("description_en", models.TextField(blank=True, null=True)),
173
- ("subcategories", models.JSONField(default=dict)),
174
- ("numerical_descriptors", models.JSONField(default=dict)),
175
- ],
176
- ),
177
- migrations.CreateModel(
178
- name="FindingClassificationType",
179
- fields=[
180
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
181
- ("name", models.CharField(max_length=255, unique=True)),
182
- ("description", models.TextField(blank=True)),
152
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
153
+ ('name', models.CharField(max_length=100, unique=True)),
183
154
  ],
155
+ options={
156
+ 'verbose_name': 'Examination Time',
157
+ 'verbose_name_plural': 'Examination Times',
158
+ 'ordering': ['name'],
159
+ },
184
160
  ),
185
161
  migrations.CreateModel(
186
- name="FindingInterventionType",
162
+ name='ExaminationType',
187
163
  fields=[
188
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
189
- ("name", models.CharField(max_length=100, unique=True)),
190
- ("description", models.TextField(blank=True, null=True)),
164
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
165
+ ('name', models.CharField(max_length=100, unique=True)),
191
166
  ],
192
167
  ),
193
168
  migrations.CreateModel(
194
- name="FindingType",
169
+ name='FFMpegMeta',
195
170
  fields=[
196
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
197
- ("name", models.CharField(max_length=100, unique=True)),
198
- ("description", models.TextField(blank=True, null=True)),
171
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
172
+ ('width', models.IntegerField(blank=True, null=True)),
173
+ ('height', models.IntegerField(blank=True, null=True)),
174
+ ('duration', models.FloatField(blank=True, null=True)),
175
+ ('frame_rate_num', models.IntegerField(blank=True, null=True)),
176
+ ('frame_rate_den', models.IntegerField(blank=True, null=True)),
177
+ ('codec_name', models.CharField(blank=True, max_length=50, null=True)),
178
+ ('pixel_format', models.CharField(blank=True, max_length=50, null=True)),
179
+ ('bit_rate', models.BigIntegerField(blank=True, null=True)),
180
+ ('raw_probe_data', models.JSONField(blank=True, null=True)),
199
181
  ],
200
182
  ),
201
183
  migrations.CreateModel(
202
- name="FirstName",
184
+ name='Finding',
203
185
  fields=[
204
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
205
- ("name", models.CharField(max_length=255, unique=True)),
186
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
187
+ ('name', models.CharField(max_length=100, unique=True)),
188
+ ('name_de', models.CharField(max_length=100, null=True, unique=True)),
189
+ ('name_en', models.CharField(max_length=100, null=True, unique=True)),
190
+ ('description', models.TextField(blank=True, null=True)),
191
+ ('description_de', models.TextField(blank=True, null=True)),
192
+ ('description_en', models.TextField(blank=True, null=True)),
206
193
  ],
207
194
  ),
208
195
  migrations.CreateModel(
209
- name="Gender",
196
+ name='FindingClassification',
210
197
  fields=[
211
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
212
- ("name", models.CharField(max_length=255)),
213
- ("abbreviation", models.CharField(max_length=255, null=True)),
214
- ("description", models.TextField(blank=True, null=True)),
198
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
199
+ ('name', models.CharField(max_length=255, unique=True)),
200
+ ('name_de', models.CharField(max_length=255, null=True, unique=True)),
201
+ ('name_en', models.CharField(max_length=255, null=True, unique=True)),
202
+ ('description', models.TextField(blank=True)),
203
+ ('description_de', models.TextField(blank=True, null=True)),
204
+ ('description_en', models.TextField(blank=True, null=True)),
215
205
  ],
216
206
  ),
217
207
  migrations.CreateModel(
218
- name="Label",
208
+ name='FindingClassificationChoice',
219
209
  fields=[
220
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
221
- ("name", models.CharField(max_length=255)),
222
- ("description", models.TextField(blank=True, null=True)),
210
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
211
+ ('name', models.CharField(max_length=255, unique=True)),
212
+ ('name_de', models.CharField(max_length=255, null=True, unique=True)),
213
+ ('name_en', models.CharField(max_length=255, null=True, unique=True)),
214
+ ('description', models.TextField(blank=True)),
215
+ ('description_de', models.TextField(blank=True, null=True)),
216
+ ('description_en', models.TextField(blank=True, null=True)),
217
+ ('subcategories', models.JSONField(default=dict)),
218
+ ('numerical_descriptors', models.JSONField(default=dict)),
223
219
  ],
224
220
  ),
225
221
  migrations.CreateModel(
226
- name="LabelType",
222
+ name='FindingClassificationType',
227
223
  fields=[
228
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
229
- ("name", models.CharField(max_length=255)),
230
- ("description", models.TextField(blank=True, null=True)),
224
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
225
+ ('name', models.CharField(max_length=255, unique=True)),
226
+ ('description', models.TextField(blank=True)),
231
227
  ],
232
228
  ),
233
229
  migrations.CreateModel(
234
- name="LastName",
230
+ name='FindingIntervention',
235
231
  fields=[
236
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
237
- ("name", models.CharField(max_length=255, unique=True)),
232
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
233
+ ('name', models.CharField(max_length=100, unique=True)),
234
+ ('name_de', models.CharField(max_length=100, null=True, unique=True)),
235
+ ('name_en', models.CharField(max_length=100, null=True, unique=True)),
236
+ ('description', models.TextField(blank=True, null=True)),
237
+ ('description_de', models.TextField(blank=True, null=True)),
238
+ ('description_en', models.TextField(blank=True, null=True)),
238
239
  ],
239
240
  ),
240
241
  migrations.CreateModel(
241
- name="Medication",
242
+ name='FindingInterventionType',
242
243
  fields=[
243
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
244
- ("name", models.CharField(max_length=255, unique=True)),
245
- ("adapt_to_renal_function", models.BooleanField(default=False)),
246
- ("adapt_to_hepatic_function", models.BooleanField(default=False)),
247
- ("adapt_to_indication", models.BooleanField(default=False)),
248
- ("adapt_to_age", models.BooleanField(default=False)),
249
- ("adapt_to_weight", models.BooleanField(default=False)),
250
- ("adapt_to_risk", models.BooleanField(default=False)),
244
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
245
+ ('name', models.CharField(max_length=100, unique=True)),
246
+ ('description', models.TextField(blank=True, null=True)),
251
247
  ],
252
248
  ),
253
249
  migrations.CreateModel(
254
- name="MedicationIndicationType",
250
+ name='FindingType',
255
251
  fields=[
256
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
257
- ("name", models.CharField(max_length=255, unique=True)),
252
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
253
+ ('name', models.CharField(max_length=100, unique=True)),
254
+ ('description', models.TextField(blank=True, null=True)),
258
255
  ],
259
256
  ),
260
257
  migrations.CreateModel(
261
- name="MedicationIntakeTime",
258
+ name='FirstName',
262
259
  fields=[
263
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
264
- ("name", models.CharField(max_length=255, unique=True)),
265
- ("repeats", models.CharField(default="daily", max_length=20)),
266
- ("time", models.TimeField()),
260
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
261
+ ('name', models.CharField(max_length=255, unique=True)),
267
262
  ],
268
263
  ),
269
264
  migrations.CreateModel(
270
- name="ModelType",
265
+ name='Gender',
271
266
  fields=[
272
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
273
- ("name", models.CharField(max_length=255)),
274
- ("description", models.TextField(blank=True, null=True)),
267
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
268
+ ('name', models.CharField(max_length=255)),
269
+ ('abbreviation', models.CharField(max_length=255, null=True)),
270
+ ('description', models.TextField(blank=True, null=True)),
275
271
  ],
276
272
  ),
277
273
  migrations.CreateModel(
278
- name="MultipleCategoricalValueDistribution",
274
+ name='Label',
279
275
  fields=[
280
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
281
- ("name", models.CharField(max_length=100)),
282
- ("categories", models.JSONField()),
283
- ("min_count", models.IntegerField()),
284
- ("max_count", models.IntegerField()),
285
- ("count_distribution_type", models.CharField(choices=[("uniform", "Uniform"), ("normal", "Normal")], max_length=20)),
286
- ("count_mean", models.FloatField(blank=True, null=True)),
287
- ("count_std_dev", models.FloatField(blank=True, null=True)),
276
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
277
+ ('name', models.CharField(max_length=255)),
278
+ ('description', models.TextField(blank=True, null=True)),
288
279
  ],
289
- options={
290
- "abstract": False,
291
- },
292
280
  ),
293
281
  migrations.CreateModel(
294
- name="NumericValueDistribution",
282
+ name='LabelType',
295
283
  fields=[
296
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
297
- ("name", models.CharField(max_length=100)),
298
- (
299
- "distribution_type",
300
- models.CharField(choices=[("uniform", "Uniform"), ("normal", "Normal"), ("skewed_normal", "Skewed Normal")], max_length=20),
301
- ),
302
- ("min_descriptor", models.CharField(max_length=20)),
303
- ("max_descriptor", models.CharField(max_length=20)),
304
- ("min_value", models.FloatField(blank=True, help_text="Lower hard limit for generated values", null=True)),
305
- ("max_value", models.FloatField(blank=True, help_text="Upper hard limit for generated values", null=True)),
306
- ("mean", models.FloatField(blank=True, help_text="Mean used for normal or skewed normal distributions", null=True)),
307
- ("std_dev", models.FloatField(blank=True, help_text="Standard deviation for bell-shaped distributions", null=True)),
308
- ("skewness", models.FloatField(blank=True, help_text="Shape parameter for skewed normal distributions", null=True)),
284
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
285
+ ('name', models.CharField(max_length=255)),
286
+ ('description', models.TextField(blank=True, null=True)),
309
287
  ],
310
- options={
311
- "abstract": False,
312
- },
313
288
  ),
314
289
  migrations.CreateModel(
315
- name="Organ",
290
+ name='LastName',
316
291
  fields=[
317
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
318
- ("name", models.CharField(max_length=100, unique=True)),
319
- ("description", models.TextField(blank=True, null=True)),
292
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
293
+ ('name', models.CharField(max_length=255, unique=True)),
320
294
  ],
321
295
  ),
322
296
  migrations.CreateModel(
323
- name="PatientLabSampleType",
297
+ name='Medication',
324
298
  fields=[
325
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
326
- ("name", models.CharField(max_length=255)),
327
- ("description", models.TextField(blank=True, null=True)),
299
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
300
+ ('name', models.CharField(max_length=255, unique=True)),
301
+ ('adapt_to_renal_function', models.BooleanField(default=False)),
302
+ ('adapt_to_hepatic_function', models.BooleanField(default=False)),
303
+ ('adapt_to_indication', models.BooleanField(default=False)),
304
+ ('adapt_to_age', models.BooleanField(default=False)),
305
+ ('adapt_to_weight', models.BooleanField(default=False)),
306
+ ('adapt_to_risk', models.BooleanField(default=False)),
328
307
  ],
329
308
  ),
330
309
  migrations.CreateModel(
331
- name="PdfType",
310
+ name='MedicationIndicationType',
332
311
  fields=[
333
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
334
- ("name", models.CharField(max_length=255)),
312
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
313
+ ('name', models.CharField(max_length=255, unique=True)),
335
314
  ],
336
315
  ),
337
316
  migrations.CreateModel(
338
- name="Product",
317
+ name='MedicationIntakeTime',
339
318
  fields=[
340
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
341
- ("name", models.CharField(max_length=255)),
319
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
320
+ ('name', models.CharField(max_length=255, unique=True)),
321
+ ('repeats', models.CharField(default='daily', max_length=20)),
322
+ ('time', models.TimeField()),
342
323
  ],
343
324
  ),
344
325
  migrations.CreateModel(
345
- name="ProductGroup",
326
+ name='ModelType',
346
327
  fields=[
347
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
348
- ("name", models.CharField(max_length=255)),
328
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
329
+ ('name', models.CharField(max_length=255)),
330
+ ('description', models.TextField(blank=True, null=True)),
349
331
  ],
350
332
  ),
351
333
  migrations.CreateModel(
352
- name="Profession",
334
+ name='MultipleCategoricalValueDistribution',
353
335
  fields=[
354
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
355
- ("name", models.CharField(max_length=100)),
356
- ("description", models.TextField(blank=True, null=True)),
336
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
337
+ ('name', models.CharField(max_length=100)),
338
+ ('categories', models.JSONField()),
339
+ ('min_count', models.IntegerField()),
340
+ ('max_count', models.IntegerField()),
341
+ ('count_distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal')], max_length=20)),
342
+ ('count_mean', models.FloatField(blank=True, null=True)),
343
+ ('count_std_dev', models.FloatField(blank=True, null=True)),
357
344
  ],
345
+ options={
346
+ 'abstract': False,
347
+ },
358
348
  ),
359
349
  migrations.CreateModel(
360
- name="Qualification",
350
+ name='NumericValueDistribution',
361
351
  fields=[
362
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
363
- ("name", models.CharField(max_length=255, unique=True)),
364
- ("description", models.TextField(blank=True, null=True)),
365
- ("is_active", models.BooleanField(default=True)),
352
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
353
+ ('name', models.CharField(max_length=100)),
354
+ ('distribution_type', models.CharField(choices=[('uniform', 'Uniform'), ('normal', 'Normal'), ('skewed_normal', 'Skewed Normal')], max_length=20)),
355
+ ('min_descriptor', models.CharField(max_length=20)),
356
+ ('max_descriptor', models.CharField(max_length=20)),
357
+ ('min_value', models.FloatField(blank=True, help_text='Lower hard limit for generated values', null=True)),
358
+ ('max_value', models.FloatField(blank=True, help_text='Upper hard limit for generated values', null=True)),
359
+ ('mean', models.FloatField(blank=True, help_text='Mean used for normal or skewed normal distributions', null=True)),
360
+ ('std_dev', models.FloatField(blank=True, help_text='Standard deviation for bell-shaped distributions', null=True)),
361
+ ('skewness', models.FloatField(blank=True, help_text='Shape parameter for skewed normal distributions', null=True)),
366
362
  ],
363
+ options={
364
+ 'abstract': False,
365
+ },
367
366
  ),
368
367
  migrations.CreateModel(
369
- name="QualificationType",
368
+ name='Organ',
370
369
  fields=[
371
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
372
- ("name", models.CharField(max_length=255, unique=True)),
373
- ("description", models.TextField(blank=True, null=True)),
374
- ("is_active", models.BooleanField(default=True)),
370
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
371
+ ('name', models.CharField(max_length=100, unique=True)),
372
+ ('description', models.TextField(blank=True, null=True)),
375
373
  ],
376
374
  ),
377
375
  migrations.CreateModel(
378
- name="RawPdfState",
376
+ name='PatientLabSampleType',
379
377
  fields=[
380
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
381
- ("text_meta_extracted", models.BooleanField(default=False, help_text="True if text metadata (OCR) has been extracted.")),
382
- ("initial_prediction_completed", models.BooleanField(default=False, help_text="True if initial AI prediction has run.")),
383
- (
384
- "sensitive_meta_processed",
385
- models.BooleanField(default=False, help_text="True if the video has been fully processed, meaning a anonymized person was created."),
386
- ),
387
- ("anonymized", models.BooleanField(default=False, help_text="True if the anonymized video file has been created.")),
388
- (
389
- "anonymization_validated",
390
- models.BooleanField(default=False, help_text="True if the anonymization process has been validated and confirmed."),
391
- ),
392
- ("processing_started", models.BooleanField(default=False, help_text="True if the processing has started, but not yet completed.")),
393
- ("processing_error", models.BooleanField(default=False, help_text="True if an error occurred during processing.")),
394
- ("date_created", models.DateTimeField(auto_now_add=True)),
395
- ("date_modified", models.DateTimeField(auto_now=True)),
396
- ("was_created", models.BooleanField(default=True, help_text="True if this state was created for the first time.")),
397
- ("pdf_meta_extracted", models.BooleanField(default=False, help_text="True if PDF metadata has been extracted.")),
378
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
379
+ ('name', models.CharField(max_length=255)),
380
+ ('description', models.TextField(blank=True, null=True)),
398
381
  ],
399
- options={
400
- "verbose_name": "Raw PDF Processing State",
401
- "verbose_name_plural": "Raw PDF Processing States",
402
- },
403
382
  ),
404
383
  migrations.CreateModel(
405
- name="ReportReaderFlag",
384
+ name='PdfType',
406
385
  fields=[
407
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
408
- ("name", models.CharField(max_length=255, unique=True)),
409
- ("value", models.CharField(max_length=255)),
386
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
387
+ ('name', models.CharField(max_length=255)),
410
388
  ],
411
389
  ),
412
390
  migrations.CreateModel(
413
- name="RequirementOperator",
391
+ name='Product',
414
392
  fields=[
415
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
416
- ("name", models.CharField(max_length=100, unique=True)),
417
- ("description", models.TextField(blank=True, null=True)),
418
- ("evaluation_function_name", models.CharField(blank=True, max_length=255, null=True)),
393
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
394
+ ('name', models.CharField(max_length=255)),
419
395
  ],
420
396
  ),
421
397
  migrations.CreateModel(
422
- name="RequirementSetType",
398
+ name='ProductGroup',
423
399
  fields=[
424
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
425
- ("name", models.CharField(max_length=100, unique=True)),
426
- ("description", models.TextField(blank=True, null=True)),
400
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
401
+ ('name', models.CharField(max_length=255)),
427
402
  ],
428
403
  ),
429
404
  migrations.CreateModel(
430
- name="RequirementType",
405
+ name='Profession',
431
406
  fields=[
432
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
433
- ("name", models.CharField(max_length=100, unique=True)),
434
- ("description", models.TextField(blank=True, null=True)),
407
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
408
+ ('name', models.CharField(max_length=100)),
409
+ ('description', models.TextField(blank=True, null=True)),
435
410
  ],
436
411
  ),
437
412
  migrations.CreateModel(
438
- name="Resource",
413
+ name='Qualification',
439
414
  fields=[
440
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
441
- ("name", models.CharField(max_length=255)),
415
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
416
+ ('name', models.CharField(max_length=255, unique=True)),
417
+ ('description', models.TextField(blank=True, null=True)),
418
+ ('is_active', models.BooleanField(default=True)),
442
419
  ],
443
420
  ),
444
421
  migrations.CreateModel(
445
- name="RiskType",
422
+ name='QualificationType',
446
423
  fields=[
447
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
448
- ("name", models.CharField(max_length=100, unique=True)),
449
- ("description", models.TextField(blank=True, null=True)),
424
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
425
+ ('name', models.CharField(max_length=255, unique=True)),
426
+ ('description', models.TextField(blank=True, null=True)),
427
+ ('is_active', models.BooleanField(default=True)),
450
428
  ],
451
429
  ),
452
430
  migrations.CreateModel(
453
- name="ScheduledDays",
431
+ name='RawPdfState',
454
432
  fields=[
455
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
456
- ("name", models.CharField(help_text="Name of the scheduled days.", max_length=255, unique=True)),
457
- ("working_days", models.BooleanField(blank=True, default=True, null=True)),
458
- ("non_working_days", models.BooleanField(blank=True, default=False, null=True)),
459
- ("limited_time", models.BooleanField(blank=True, default=False, null=True)),
460
- ("start_date", models.DateField(blank=True, null=True)),
461
- ("end_date", models.DateField(blank=True, null=True)),
433
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
434
+ ('text_meta_extracted', models.BooleanField(default=False, help_text='True if text metadata (OCR) has been extracted.')),
435
+ ('initial_prediction_completed', models.BooleanField(default=False, help_text='True if initial AI prediction has run.')),
436
+ ('sensitive_meta_processed', models.BooleanField(default=False, help_text='True if the video has been fully processed, meaning a anonymized person was created.')),
437
+ ('anonymized', models.BooleanField(default=False, help_text='True if the anonymized video file has been created.')),
438
+ ('anonymization_validated', models.BooleanField(default=False, help_text='True if the anonymization process has been validated and confirmed.')),
439
+ ('processing_started', models.BooleanField(default=False, help_text='True if the processing has started, but not yet completed.')),
440
+ ('processing_error', models.BooleanField(default=False, help_text='True if an error occurred during processing.')),
441
+ ('date_created', models.DateTimeField(auto_now_add=True)),
442
+ ('date_modified', models.DateTimeField(auto_now=True)),
443
+ ('was_created', models.BooleanField(default=True, help_text='True if this state was created for the first time.')),
444
+ ('pdf_meta_extracted', models.BooleanField(default=False, help_text='True if PDF metadata has been extracted.')),
462
445
  ],
446
+ options={
447
+ 'verbose_name': 'Raw PDF Processing State',
448
+ 'verbose_name_plural': 'Raw PDF Processing States',
449
+ },
463
450
  ),
464
451
  migrations.CreateModel(
465
- name="ShiftType",
452
+ name='ReportReaderFlag',
466
453
  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
- ("description", models.TextField(blank=True, null=True)),
470
- ("is_active", models.BooleanField(default=True)),
454
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
455
+ ('name', models.CharField(max_length=255, unique=True)),
456
+ ('value', models.CharField(max_length=255)),
471
457
  ],
472
458
  ),
473
459
  migrations.CreateModel(
474
- name="SingleCategoricalValueDistribution",
460
+ name='RequirementOperator',
475
461
  fields=[
476
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
477
- ("name", models.CharField(max_length=100)),
478
- ("categories", models.JSONField()),
462
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
463
+ ('name', models.CharField(max_length=100, unique=True)),
464
+ ('description', models.TextField(blank=True, null=True)),
465
+ ('evaluation_function_name', models.CharField(blank=True, max_length=255, null=True)),
479
466
  ],
480
- options={
481
- "abstract": False,
482
- },
483
467
  ),
484
468
  migrations.CreateModel(
485
- name="Tag",
469
+ name='RequirementSetType',
486
470
  fields=[
487
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
488
- ("name", models.CharField(max_length=100, unique=True)),
471
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
472
+ ('name', models.CharField(max_length=100, unique=True)),
473
+ ('description', models.TextField(blank=True, null=True)),
489
474
  ],
490
- options={
491
- "verbose_name": "Tag",
492
- "verbose_name_plural": "Tags",
493
- },
494
475
  ),
495
476
  migrations.CreateModel(
496
- name="Unit",
477
+ name='RequirementType',
497
478
  fields=[
498
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
499
- ("name", models.CharField(max_length=100)),
500
- ("description", models.CharField(blank=True, max_length=100, null=True)),
501
- ("abbreviation", models.CharField(blank=True, max_length=25, null=True)),
479
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
480
+ ('name', models.CharField(max_length=100, unique=True)),
481
+ ('description', models.TextField(blank=True, null=True)),
502
482
  ],
503
483
  ),
504
484
  migrations.CreateModel(
505
- name="VideoImportMeta",
485
+ name='Resource',
506
486
  fields=[
507
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
508
- ("file_name", models.CharField(blank=True, max_length=255, null=True)),
509
- ("video_anonymized", models.BooleanField(default=False)),
510
- ("video_patient_data_detected", models.BooleanField(default=False)),
511
- ("outside_detected", models.BooleanField(default=False)),
512
- ("patient_data_removed", models.BooleanField(default=False)),
513
- ("outside_removed", models.BooleanField(default=False)),
487
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
488
+ ('name', models.CharField(max_length=255)),
514
489
  ],
515
490
  ),
516
491
  migrations.CreateModel(
517
- name="VideoSegmentationLabel",
492
+ name='RiskType',
518
493
  fields=[
519
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
520
- ("name", models.CharField(max_length=255)),
521
- ("description", models.TextField(blank=True, null=True)),
522
- ("color", models.CharField(blank=True, max_length=255, null=True)),
523
- ("order_priority", models.IntegerField(default=0)),
494
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
495
+ ('name', models.CharField(max_length=100, unique=True)),
496
+ ('description', models.TextField(blank=True, null=True)),
524
497
  ],
525
498
  ),
526
499
  migrations.CreateModel(
527
- name="VideoState",
500
+ name='ScheduledDays',
528
501
  fields=[
529
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
530
- ("frames_extracted", models.BooleanField(default=False, help_text="True if raw frames have been extracted to files.")),
531
- ("frames_initialized", models.BooleanField(default=False, help_text="True if Frame DB objects have been created.")),
532
- ("frame_count", models.PositiveIntegerField(blank=True, help_text="Number of frames extracted/initialized.", null=True)),
533
- ("video_meta_extracted", models.BooleanField(default=False, help_text="True if VideoMeta (technical specs) has been extracted.")),
534
- ("text_meta_extracted", models.BooleanField(default=False, help_text="True if text metadata (OCR) has been extracted.")),
535
- ("initial_prediction_completed", models.BooleanField(default=False, help_text="True if initial AI prediction has run.")),
536
- ("lvs_created", models.BooleanField(default=False, help_text="True if LabelVideoSegments have been created from predictions.")),
537
- (
538
- "frame_annotations_generated",
539
- models.BooleanField(default=False, help_text="True if frame-level annotations have been generated from segments."),
540
- ),
541
- (
542
- "sensitive_meta_processed",
543
- models.BooleanField(default=False, help_text="True if the video has been fully processed, meaning a anonymized person was created."),
544
- ),
545
- ("anonymized", models.BooleanField(default=False, help_text="True if the anonymized video file has been created.")),
546
- (
547
- "anonymization_validated",
548
- models.BooleanField(default=False, help_text="True if the anonymization process has been validated and confirmed."),
549
- ),
550
- ("processing_started", models.BooleanField(default=False, help_text="True if the processing has started, but not yet completed.")),
551
- ("date_created", models.DateTimeField(auto_now_add=True)),
552
- ("date_modified", models.DateTimeField(auto_now=True)),
553
- (
554
- "segment_annotations_created",
555
- models.BooleanField(default=False, help_text="True if segment annotations have been created from LabelVideoSegments."),
556
- ),
557
- ("segment_annotations_validated", models.BooleanField(default=False, help_text="True if segment annotations have been validated.")),
558
- ("was_created", models.BooleanField(default=True, help_text="True if this state was created for the first time.")),
502
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
503
+ ('name', models.CharField(help_text='Name of the scheduled days.', max_length=255, unique=True)),
504
+ ('working_days', models.BooleanField(blank=True, default=True, null=True)),
505
+ ('non_working_days', models.BooleanField(blank=True, default=False, null=True)),
506
+ ('limited_time', models.BooleanField(blank=True, default=False, null=True)),
507
+ ('start_date', models.DateField(blank=True, null=True)),
508
+ ('end_date', models.DateField(blank=True, null=True)),
559
509
  ],
560
- options={
561
- "verbose_name": "Video Processing State",
562
- "verbose_name_plural": "Video Processing States",
563
- },
564
510
  ),
565
511
  migrations.CreateModel(
566
- name="Waste",
512
+ name='ShiftType',
567
513
  fields=[
568
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
569
- ("name", models.CharField(max_length=255)),
514
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
515
+ ('name', models.CharField(max_length=255, unique=True)),
516
+ ('description', models.TextField(blank=True, null=True)),
517
+ ('is_active', models.BooleanField(default=True)),
570
518
  ],
571
519
  ),
572
520
  migrations.CreateModel(
573
- name="DiseaseClassification",
521
+ name='SingleCategoricalValueDistribution',
574
522
  fields=[
575
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
576
- ("name", models.CharField(max_length=255, unique=True)),
577
- ("disease", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="disease_classifications", to="endoreg_db.disease")),
523
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
524
+ ('name', models.CharField(max_length=100)),
525
+ ('categories', models.JSONField()),
578
526
  ],
527
+ options={
528
+ 'abstract': False,
529
+ },
579
530
  ),
580
531
  migrations.CreateModel(
581
- name="DiseaseClassificationChoice",
532
+ name='Tag',
582
533
  fields=[
583
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
584
- ("name", models.CharField(max_length=255, unique=True)),
585
- (
586
- "disease_classification",
587
- models.ForeignKey(
588
- on_delete=django.db.models.deletion.CASCADE, related_name="disease_classification_choices", to="endoreg_db.diseaseclassification"
589
- ),
590
- ),
534
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
535
+ ('name', models.CharField(max_length=100, unique=True)),
591
536
  ],
537
+ options={
538
+ 'verbose_name': 'Tag',
539
+ 'verbose_name_plural': 'Tags',
540
+ },
592
541
  ),
593
542
  migrations.CreateModel(
594
- name="Endoscope",
543
+ name='Unit',
595
544
  fields=[
596
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
597
- ("name", models.CharField(max_length=255)),
598
- ("sn", models.CharField(max_length=255)),
599
- (
600
- "center",
601
- models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="endoscopes", to="endoreg_db.center"),
602
- ),
603
- (
604
- "endoscope_type",
605
- models.ForeignKey(
606
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="endoscopes", to="endoreg_db.endoscopetype"
607
- ),
608
- ),
545
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
546
+ ('name', models.CharField(max_length=100)),
547
+ ('description', models.CharField(blank=True, max_length=100, null=True)),
548
+ ('abbreviation', models.CharField(blank=True, max_length=25, null=True)),
609
549
  ],
610
- options={
611
- "verbose_name": "Endoscope",
612
- "verbose_name_plural": "Endoscopes",
613
- "ordering": ["name"],
614
- },
615
550
  ),
616
551
  migrations.CreateModel(
617
- name="EndoscopyProcessor",
552
+ name='VideoImportMeta',
618
553
  fields=[
619
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
620
- ("name", models.CharField(max_length=255)),
621
- ("image_width", models.IntegerField()),
622
- ("image_height", models.IntegerField()),
623
- ("endoscope_image_x", models.IntegerField()),
624
- ("endoscope_image_y", models.IntegerField()),
625
- ("endoscope_image_width", models.IntegerField()),
626
- ("endoscope_image_height", models.IntegerField()),
627
- ("examination_date_x", models.IntegerField()),
628
- ("examination_date_y", models.IntegerField()),
629
- ("examination_date_width", models.IntegerField()),
630
- ("examination_date_height", models.IntegerField()),
631
- ("examination_time_x", models.IntegerField(blank=True, null=True)),
632
- ("examination_time_y", models.IntegerField(blank=True, null=True)),
633
- ("examination_time_width", models.IntegerField(blank=True, null=True)),
634
- ("examination_time_height", models.IntegerField(blank=True, null=True)),
635
- ("patient_first_name_x", models.IntegerField()),
636
- ("patient_first_name_y", models.IntegerField()),
637
- ("patient_first_name_width", models.IntegerField()),
638
- ("patient_first_name_height", models.IntegerField()),
639
- ("patient_last_name_x", models.IntegerField()),
640
- ("patient_last_name_y", models.IntegerField()),
641
- ("patient_last_name_width", models.IntegerField()),
642
- ("patient_last_name_height", models.IntegerField()),
643
- ("patient_dob_x", models.IntegerField()),
644
- ("patient_dob_y", models.IntegerField()),
645
- ("patient_dob_width", models.IntegerField()),
646
- ("patient_dob_height", models.IntegerField()),
647
- ("endoscope_type_x", models.IntegerField(blank=True, null=True)),
648
- ("endoscope_type_y", models.IntegerField(blank=True, null=True)),
649
- ("endoscope_type_width", models.IntegerField(blank=True, null=True)),
650
- ("endoscope_type_height", models.IntegerField(blank=True, null=True)),
651
- ("endoscope_sn_x", models.IntegerField(blank=True, null=True)),
652
- ("endoscope_sn_y", models.IntegerField(blank=True, null=True)),
653
- ("endoscope_sn_width", models.IntegerField(blank=True, null=True)),
654
- ("endoscope_sn_height", models.IntegerField(blank=True, null=True)),
655
- ("centers", models.ManyToManyField(blank=True, related_name="endoscopy_processors", to="endoreg_db.center")),
554
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
555
+ ('file_name', models.CharField(blank=True, max_length=255, null=True)),
556
+ ('video_anonymized', models.BooleanField(default=False)),
557
+ ('video_patient_data_detected', models.BooleanField(default=False)),
558
+ ('outside_detected', models.BooleanField(default=False)),
559
+ ('patient_data_removed', models.BooleanField(default=False)),
560
+ ('outside_removed', models.BooleanField(default=False)),
656
561
  ],
657
562
  ),
658
563
  migrations.CreateModel(
659
- name="EventClassification",
564
+ name='VideoSegmentationLabel',
660
565
  fields=[
661
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
662
- ("name", models.CharField(max_length=255, unique=True)),
663
- ("event", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="event_classifications", to="endoreg_db.event")),
566
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
567
+ ('name', models.CharField(max_length=255)),
568
+ ('description', models.TextField(blank=True, null=True)),
569
+ ('color', models.CharField(blank=True, max_length=255, null=True)),
570
+ ('order_priority', models.IntegerField(default=0)),
664
571
  ],
665
572
  ),
666
573
  migrations.CreateModel(
667
- name="EventClassificationChoice",
574
+ name='VideoState',
668
575
  fields=[
669
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
670
- ("name", models.CharField(max_length=255, unique=True)),
671
- ("subcategories", models.JSONField(default=dict)),
672
- ("numerical_descriptors", models.JSONField(default=dict)),
673
- (
674
- "event_classification",
675
- models.ForeignKey(
676
- on_delete=django.db.models.deletion.CASCADE, related_name="event_classification_choices", to="endoreg_db.eventclassification"
677
- ),
678
- ),
576
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
577
+ ('frames_extracted', models.BooleanField(default=False, help_text='True if raw frames have been extracted to files.')),
578
+ ('frames_initialized', models.BooleanField(default=False, help_text='True if Frame DB objects have been created.')),
579
+ ('frame_count', models.PositiveIntegerField(blank=True, help_text='Number of frames extracted/initialized.', null=True)),
580
+ ('video_meta_extracted', models.BooleanField(default=False, help_text='True if VideoMeta (technical specs) has been extracted.')),
581
+ ('text_meta_extracted', models.BooleanField(default=False, help_text='True if text metadata (OCR) has been extracted.')),
582
+ ('initial_prediction_completed', models.BooleanField(default=False, help_text='True if initial AI prediction has run.')),
583
+ ('lvs_created', models.BooleanField(default=False, help_text='True if LabelVideoSegments have been created from predictions.')),
584
+ ('frame_annotations_generated', models.BooleanField(default=False, help_text='True if frame-level annotations have been generated from segments.')),
585
+ ('sensitive_meta_processed', models.BooleanField(default=False, help_text='True if the video has been fully processed, meaning a anonymized person was created.')),
586
+ ('anonymized', models.BooleanField(default=False, help_text='True if the anonymized video file has been created.')),
587
+ ('anonymization_validated', models.BooleanField(default=False, help_text='True if the anonymization process has been validated and confirmed.')),
588
+ ('processing_started', models.BooleanField(default=False, help_text='True if the processing has started, but not yet completed.')),
589
+ ('date_created', models.DateTimeField(auto_now_add=True)),
590
+ ('date_modified', models.DateTimeField(auto_now=True)),
591
+ ('segment_annotations_created', models.BooleanField(default=False, help_text='True if segment annotations have been created from LabelVideoSegments.')),
592
+ ('segment_annotations_validated', models.BooleanField(default=False, help_text='True if segment annotations have been validated.')),
593
+ ('was_created', models.BooleanField(default=True, help_text='True if this state was created for the first time.')),
679
594
  ],
595
+ options={
596
+ 'verbose_name': 'Video Processing State',
597
+ 'verbose_name_plural': 'Video Processing States',
598
+ },
680
599
  ),
681
600
  migrations.CreateModel(
682
- name="ExaminationIndicationClassification",
601
+ name='Waste',
683
602
  fields=[
684
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
685
- ("name", models.CharField(max_length=255, unique=True)),
686
- ("description", models.TextField(blank=True, null=True)),
687
- ("examinations", models.ManyToManyField(blank=True, related_name="indication_classifications", to="endoreg_db.examination")),
603
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
604
+ ('name', models.CharField(max_length=255)),
688
605
  ],
689
606
  ),
690
607
  migrations.CreateModel(
691
- name="ExaminationIndicationClassificationChoice",
608
+ name='DiseaseClassification',
692
609
  fields=[
693
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
694
- ("name", models.CharField(max_length=255, unique=True)),
695
- ("subcategories", models.JSONField(default=dict)),
696
- ("numerical_descriptors", models.JSONField(default=dict)),
697
- (
698
- "classification",
699
- models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="choices", to="endoreg_db.examinationindicationclassification"),
700
- ),
610
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
611
+ ('name', models.CharField(max_length=255, unique=True)),
612
+ ('disease', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='disease_classifications', to='endoreg_db.disease')),
701
613
  ],
702
614
  ),
703
615
  migrations.CreateModel(
704
- name="ExaminationRequirementSet",
616
+ name='DiseaseClassificationChoice',
705
617
  fields=[
706
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
707
- ("enabled_by_default", models.BooleanField(default=False)),
708
- ("name", models.CharField(max_length=100, unique=True)),
709
- ("examinations", models.ManyToManyField(blank=True, related_name="exam_reqset_links", to="endoreg_db.examination")),
618
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
619
+ ('name', models.CharField(max_length=255, unique=True)),
620
+ ('disease_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='disease_classification_choices', to='endoreg_db.diseaseclassification')),
710
621
  ],
711
622
  ),
712
623
  migrations.CreateModel(
713
- name="ExaminationTimeType",
624
+ name='Endoscope',
714
625
  fields=[
715
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
716
- ("name", models.CharField(max_length=100, unique=True)),
717
- ("examinations", models.ManyToManyField(blank=True, to="endoreg_db.examination")),
626
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
627
+ ('name', models.CharField(max_length=255)),
628
+ ('sn', models.CharField(max_length=255)),
629
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='endoscopes', to='endoreg_db.center')),
630
+ ('endoscope_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='endoscopes', to='endoreg_db.endoscopetype')),
718
631
  ],
719
632
  options={
720
- "verbose_name": "Examination Time Type",
721
- "verbose_name_plural": "Examination Time Types",
722
- "ordering": ["name"],
633
+ 'verbose_name': 'Endoscope',
634
+ 'verbose_name_plural': 'Endoscopes',
635
+ 'ordering': ['name'],
723
636
  },
724
637
  ),
725
638
  migrations.CreateModel(
726
- name="ExaminationTime",
727
- fields=[
728
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
729
- ("name", models.CharField(max_length=100, unique=True)),
730
- ("start_time", models.TimeField(blank=True, null=True)),
731
- ("end_time", models.TimeField(blank=True, null=True)),
732
- ("time_types", models.ManyToManyField(blank=True, to="endoreg_db.examinationtimetype")),
639
+ name='EndoscopyProcessor',
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
+ ('image_width', models.IntegerField()),
644
+ ('image_height', models.IntegerField()),
645
+ ('endoscope_image_x', models.IntegerField()),
646
+ ('endoscope_image_y', models.IntegerField()),
647
+ ('endoscope_image_width', models.IntegerField()),
648
+ ('endoscope_image_height', models.IntegerField()),
649
+ ('examination_date_x', models.IntegerField()),
650
+ ('examination_date_y', models.IntegerField()),
651
+ ('examination_date_width', models.IntegerField()),
652
+ ('examination_date_height', models.IntegerField()),
653
+ ('examination_time_x', models.IntegerField(blank=True, null=True)),
654
+ ('examination_time_y', models.IntegerField(blank=True, null=True)),
655
+ ('examination_time_width', models.IntegerField(blank=True, null=True)),
656
+ ('examination_time_height', models.IntegerField(blank=True, null=True)),
657
+ ('patient_first_name_x', models.IntegerField()),
658
+ ('patient_first_name_y', models.IntegerField()),
659
+ ('patient_first_name_width', models.IntegerField()),
660
+ ('patient_first_name_height', models.IntegerField()),
661
+ ('patient_last_name_x', models.IntegerField()),
662
+ ('patient_last_name_y', models.IntegerField()),
663
+ ('patient_last_name_width', models.IntegerField()),
664
+ ('patient_last_name_height', models.IntegerField()),
665
+ ('patient_dob_x', models.IntegerField()),
666
+ ('patient_dob_y', models.IntegerField()),
667
+ ('patient_dob_width', models.IntegerField()),
668
+ ('patient_dob_height', models.IntegerField()),
669
+ ('endoscope_type_x', models.IntegerField(blank=True, null=True)),
670
+ ('endoscope_type_y', models.IntegerField(blank=True, null=True)),
671
+ ('endoscope_type_width', models.IntegerField(blank=True, null=True)),
672
+ ('endoscope_type_height', models.IntegerField(blank=True, null=True)),
673
+ ('endoscope_sn_x', models.IntegerField(blank=True, null=True)),
674
+ ('endoscope_sn_y', models.IntegerField(blank=True, null=True)),
675
+ ('endoscope_sn_width', models.IntegerField(blank=True, null=True)),
676
+ ('endoscope_sn_height', models.IntegerField(blank=True, null=True)),
677
+ ('centers', models.ManyToManyField(blank=True, related_name='endoscopy_processors', to='endoreg_db.center')),
678
+ ],
679
+ ),
680
+ migrations.CreateModel(
681
+ name='EventClassification',
682
+ fields=[
683
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
684
+ ('name', models.CharField(max_length=255, unique=True)),
685
+ ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='event_classifications', to='endoreg_db.event')),
686
+ ],
687
+ ),
688
+ migrations.CreateModel(
689
+ name='EventClassificationChoice',
690
+ fields=[
691
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
692
+ ('name', models.CharField(max_length=255, unique=True)),
693
+ ('subcategories', models.JSONField(default=dict)),
694
+ ('numerical_descriptors', models.JSONField(default=dict)),
695
+ ('event_classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='event_classification_choices', to='endoreg_db.eventclassification')),
696
+ ],
697
+ ),
698
+ migrations.CreateModel(
699
+ name='Examination',
700
+ fields=[
701
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
702
+ ('name', models.CharField(max_length=100, unique=True)),
703
+ ('name_de', models.CharField(max_length=100, null=True, unique=True)),
704
+ ('name_en', models.CharField(max_length=100, null=True, unique=True)),
705
+ ('description', models.TextField(blank=True, null=True)),
706
+ ('description_de', models.TextField(blank=True, null=True)),
707
+ ('description_en', models.TextField(blank=True, null=True)),
708
+ ('indications', models.ManyToManyField(blank=True, related_name='examinations', to='endoreg_db.examinationindication')),
709
+ ('examination_times', models.ManyToManyField(blank=True, related_name='examinations', to='endoreg_db.examinationtime')),
710
+ ('examination_types', models.ManyToManyField(blank=True, to='endoreg_db.examinationtype')),
711
+ ('findings', models.ManyToManyField(blank=True, related_name='examinations', to='endoreg_db.finding')),
733
712
  ],
734
713
  options={
735
- "verbose_name": "Examination Time",
736
- "verbose_name_plural": "Examination Times",
737
- "ordering": ["name"],
714
+ 'verbose_name': 'Examination',
715
+ 'verbose_name_plural': 'Examinations',
716
+ 'ordering': ['name'],
738
717
  },
739
718
  ),
740
719
  migrations.AddField(
741
- model_name="examination",
742
- name="examination_types",
743
- field=models.ManyToManyField(blank=True, to="endoreg_db.examinationtype"),
744
- ),
745
- migrations.CreateModel(
746
- name="Examiner",
747
- fields=[
748
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
749
- ("first_name", models.CharField(max_length=255)),
750
- ("last_name", models.CharField(max_length=255)),
751
- ("dob", models.DateField(blank=True, null=True, verbose_name="Date of Birth")),
752
- ("email", models.EmailField(blank=True, max_length=255, null=True)),
753
- ("phone", models.CharField(blank=True, max_length=255, null=True)),
754
- ("is_real_person", models.BooleanField(default=True)),
755
- ("post_code", models.CharField(blank=True, max_length=20, null=True)),
756
- ("city", models.CharField(blank=True, max_length=255, null=True)),
757
- ("street", models.CharField(blank=True, max_length=255, null=True)),
758
- ("hash", models.CharField(max_length=255, unique=True)),
759
- ("center", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.center")),
760
- ("gender", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.gender")),
761
- ],
762
- options={
763
- "abstract": False,
764
- },
720
+ model_name='examinationindication',
721
+ name='classifications',
722
+ field=models.ManyToManyField(blank=True, related_name='indications', to='endoreg_db.examinationindicationclassification'),
765
723
  ),
766
- migrations.CreateModel(
767
- name="FindingIntervention",
768
- fields=[
769
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
770
- ("name", models.CharField(max_length=100, unique=True)),
771
- ("name_de", models.CharField(max_length=100, null=True, unique=True)),
772
- ("name_en", models.CharField(max_length=100, null=True, unique=True)),
773
- ("description", models.TextField(blank=True, null=True)),
774
- ("description_de", models.TextField(blank=True, null=True)),
775
- ("description_en", models.TextField(blank=True, null=True)),
776
- (
777
- "contraindications",
778
- models.ManyToManyField(blank=True, related_name="contraindicating_finding_interventions", to="endoreg_db.contraindication"),
779
- ),
780
- ("intervention_types", models.ManyToManyField(blank=True, related_name="interventions", to="endoreg_db.findinginterventiontype")),
781
- ],
724
+ migrations.AddField(
725
+ model_name='examinationindicationclassification',
726
+ name='choices',
727
+ field=models.ManyToManyField(blank=True, related_name='classifications', to='endoreg_db.examinationindicationclassificationchoice'),
782
728
  ),
783
729
  migrations.CreateModel(
784
- name="Finding",
730
+ name='ExaminationRequirementSet',
785
731
  fields=[
786
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
787
- ("name", models.CharField(max_length=100, unique=True)),
788
- ("name_de", models.CharField(max_length=100, null=True, unique=True)),
789
- ("name_en", models.CharField(max_length=100, null=True, unique=True)),
790
- ("description", models.TextField(blank=True, null=True)),
791
- ("description_de", models.TextField(blank=True, null=True)),
792
- ("description_en", models.TextField(blank=True, null=True)),
793
- ("examinations", models.ManyToManyField(blank=True, related_name="findings", to="endoreg_db.examination")),
794
- ("finding_interventions", models.ManyToManyField(blank=True, related_name="findings", to="endoreg_db.findingintervention")),
795
- ("finding_types", models.ManyToManyField(blank=True, related_name="findings", to="endoreg_db.findingtype")),
732
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
733
+ ('enabled_by_default', models.BooleanField(default=False)),
734
+ ('name', models.CharField(max_length=100, unique=True)),
735
+ ('examinations', models.ManyToManyField(blank=True, related_name='exam_reqset_links', to='endoreg_db.examination')),
796
736
  ],
797
737
  ),
798
738
  migrations.CreateModel(
799
- name="ExaminationIndication",
739
+ name='ExaminationTimeType',
800
740
  fields=[
801
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
802
- ("name", models.CharField(max_length=255, unique=True)),
803
- ("description", models.TextField(blank=True, null=True)),
804
- ("examinations", models.ManyToManyField(blank=True, related_name="indications", to="endoreg_db.examination")),
805
- ("classifications", models.ManyToManyField(blank=True, related_name="indications", to="endoreg_db.examinationindicationclassification")),
806
- ("expected_interventions", models.ManyToManyField(blank=True, related_name="indications", to="endoreg_db.findingintervention")),
741
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
742
+ ('name', models.CharField(max_length=100, unique=True)),
743
+ ('examinations', models.ManyToManyField(blank=True, to='endoreg_db.examination')),
807
744
  ],
745
+ options={
746
+ 'verbose_name': 'Examination Time Type',
747
+ 'verbose_name_plural': 'Examination Time Types',
748
+ 'ordering': ['name'],
749
+ },
808
750
  ),
809
- migrations.CreateModel(
810
- name="FindingClassification",
811
- fields=[
812
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
813
- ("name", models.CharField(max_length=255, unique=True)),
814
- ("name_de", models.CharField(max_length=255, null=True, unique=True)),
815
- ("name_en", models.CharField(max_length=255, null=True, unique=True)),
816
- ("description", models.TextField(blank=True)),
817
- ("description_de", models.TextField(blank=True, null=True)),
818
- ("description_en", models.TextField(blank=True, null=True)),
819
- ("examinations", models.ManyToManyField(blank=True, related_name="finding_classifications", to="endoreg_db.examination")),
820
- ("findings", models.ManyToManyField(blank=True, related_name="finding_classifications", to="endoreg_db.finding")),
821
- ("choices", models.ManyToManyField(blank=True, related_name="classifications", to="endoreg_db.findingclassificationchoice")),
822
- ("classification_types", models.ManyToManyField(to="endoreg_db.findingclassificationtype")),
823
- ("finding_types", models.ManyToManyField(blank=True, related_name="finding_classifications", to="endoreg_db.findingtype")),
751
+ migrations.AddField(
752
+ model_name='examinationtime',
753
+ name='time_types',
754
+ field=models.ManyToManyField(blank=True, to='endoreg_db.examinationtimetype'),
755
+ ),
756
+ migrations.CreateModel(
757
+ name='Examiner',
758
+ fields=[
759
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
760
+ ('first_name', models.CharField(max_length=255)),
761
+ ('last_name', models.CharField(max_length=255)),
762
+ ('dob', models.DateField(blank=True, null=True, verbose_name='Date of Birth')),
763
+ ('email', models.EmailField(blank=True, max_length=255, null=True)),
764
+ ('phone', models.CharField(blank=True, max_length=255, null=True)),
765
+ ('is_real_person', models.BooleanField(default=True)),
766
+ ('post_code', models.CharField(blank=True, max_length=20, null=True)),
767
+ ('city', models.CharField(blank=True, max_length=255, null=True)),
768
+ ('street', models.CharField(blank=True, max_length=255, null=True)),
769
+ ('hash', models.CharField(max_length=255, unique=True)),
770
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
771
+ ('gender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender')),
824
772
  ],
773
+ options={
774
+ 'abstract': False,
775
+ },
776
+ ),
777
+ migrations.AddField(
778
+ model_name='finding',
779
+ name='finding_classifications',
780
+ field=models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.findingclassification'),
825
781
  ),
826
782
  migrations.AddField(
827
- model_name="center",
828
- name="first_names",
829
- field=models.ManyToManyField(related_name="centers", to="endoreg_db.firstname"),
830
- ),
831
- migrations.CreateModel(
832
- name="Employee",
833
- fields=[
834
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
835
- ("first_name", models.CharField(max_length=255)),
836
- ("last_name", models.CharField(max_length=255)),
837
- ("dob", models.DateField(blank=True, null=True, verbose_name="Date of Birth")),
838
- ("email", models.EmailField(blank=True, max_length=255, null=True)),
839
- ("phone", models.CharField(blank=True, max_length=255, null=True)),
840
- ("is_real_person", models.BooleanField(default=True)),
841
- ("post_code", models.CharField(blank=True, max_length=20, null=True)),
842
- ("city", models.CharField(blank=True, max_length=255, null=True)),
843
- ("street", models.CharField(blank=True, max_length=255, null=True)),
844
- ("employee_type", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="employees", to="endoreg_db.employeetype")),
845
- ("gender", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.gender")),
783
+ model_name='findingclassification',
784
+ name='choices',
785
+ field=models.ManyToManyField(blank=True, related_name='classifications', to='endoreg_db.findingclassificationchoice'),
786
+ ),
787
+ migrations.AddField(
788
+ model_name='findingclassification',
789
+ name='classification_types',
790
+ field=models.ManyToManyField(to='endoreg_db.findingclassificationtype'),
791
+ ),
792
+ migrations.AddField(
793
+ model_name='finding',
794
+ name='caused_by_interventions',
795
+ field=models.ManyToManyField(blank=True, related_name='causes_findings', to='endoreg_db.findingintervention'),
796
+ ),
797
+ migrations.AddField(
798
+ model_name='finding',
799
+ name='finding_interventions',
800
+ field=models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.findingintervention'),
801
+ ),
802
+ migrations.AddField(
803
+ model_name='examinationindication',
804
+ name='expected_interventions',
805
+ field=models.ManyToManyField(blank=True, related_name='indications', to='endoreg_db.findingintervention'),
806
+ ),
807
+ migrations.AddField(
808
+ model_name='findingintervention',
809
+ name='intervention_types',
810
+ field=models.ManyToManyField(blank=True, related_name='interventions', to='endoreg_db.findinginterventiontype'),
811
+ ),
812
+ migrations.AddField(
813
+ model_name='findingclassification',
814
+ name='finding_types',
815
+ field=models.ManyToManyField(blank=True, related_name='finding_classifications', to='endoreg_db.findingtype'),
816
+ ),
817
+ migrations.AddField(
818
+ model_name='finding',
819
+ name='finding_types',
820
+ field=models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.findingtype'),
821
+ ),
822
+ migrations.AddField(
823
+ model_name='center',
824
+ name='first_names',
825
+ field=models.ManyToManyField(related_name='centers', to='endoreg_db.firstname'),
826
+ ),
827
+ migrations.CreateModel(
828
+ name='Employee',
829
+ fields=[
830
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
831
+ ('first_name', models.CharField(max_length=255)),
832
+ ('last_name', models.CharField(max_length=255)),
833
+ ('dob', models.DateField(blank=True, null=True, verbose_name='Date of Birth')),
834
+ ('email', models.EmailField(blank=True, max_length=255, null=True)),
835
+ ('phone', models.CharField(blank=True, max_length=255, null=True)),
836
+ ('is_real_person', models.BooleanField(default=True)),
837
+ ('post_code', models.CharField(blank=True, max_length=20, null=True)),
838
+ ('city', models.CharField(blank=True, max_length=255, null=True)),
839
+ ('street', models.CharField(blank=True, max_length=255, null=True)),
840
+ ('employee_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='employees', to='endoreg_db.employeetype')),
841
+ ('gender', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.gender')),
846
842
  ],
847
843
  options={
848
- "abstract": False,
844
+ 'abstract': False,
849
845
  },
850
846
  ),
851
847
  migrations.CreateModel(
852
- name="InformationSource",
848
+ name='InformationSource',
853
849
  fields=[
854
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
855
- ("name", models.CharField(max_length=100)),
856
- ("url", models.URLField(blank=True, null=True)),
857
- ("description", models.TextField(blank=True, null=True)),
858
- ("date", models.DateField(blank=True, null=True)),
859
- ("date_created", models.DateField(auto_now_add=True)),
860
- ("date_modified", models.DateField(auto_now=True)),
861
- ("abbreviation", models.CharField(blank=True, max_length=100, null=True, unique=True)),
850
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
851
+ ('name', models.CharField(max_length=100)),
852
+ ('url', models.URLField(blank=True, null=True)),
853
+ ('description', models.TextField(blank=True, null=True)),
854
+ ('date', models.DateField(blank=True, null=True)),
855
+ ('date_created', models.DateField(auto_now_add=True)),
856
+ ('date_modified', models.DateField(auto_now=True)),
857
+ ('abbreviation', models.CharField(blank=True, max_length=100, null=True, unique=True)),
862
858
  ],
863
859
  options={
864
- "verbose_name": "Information Source",
865
- "verbose_name_plural": "Information Sources",
866
- "indexes": [
867
- models.Index(fields=["name"], name="endoreg_db__name_febac5_idx"),
868
- models.Index(fields=["abbreviation"], name="endoreg_db__abbrevi_5a07c4_idx"),
869
- ],
860
+ 'verbose_name': 'Information Source',
861
+ 'verbose_name_plural': 'Information Sources',
862
+ 'indexes': [models.Index(fields=['name'], name='endoreg_db__name_febac5_idx'), models.Index(fields=['abbreviation'], name='endoreg_db__abbrevi_5a07c4_idx')],
870
863
  },
871
864
  ),
865
+ migrations.AddField(
866
+ model_name='findingintervention',
867
+ name='information_sources',
868
+ field=models.ManyToManyField(blank=True, related_name='finding_interventions', to='endoreg_db.informationsource'),
869
+ ),
870
+ migrations.AddField(
871
+ model_name='findingclassification',
872
+ name='information_sources',
873
+ field=models.ManyToManyField(blank=True, related_name='finding_classifications', to='endoreg_db.informationsource'),
874
+ ),
875
+ migrations.AddField(
876
+ model_name='finding',
877
+ name='information_sources',
878
+ field=models.ManyToManyField(blank=True, related_name='findings', to='endoreg_db.informationsource'),
879
+ ),
880
+ migrations.AddField(
881
+ model_name='examinationtime',
882
+ name='information_sources',
883
+ field=models.ManyToManyField(blank=True, related_name='examination_times', to='endoreg_db.informationsource'),
884
+ ),
885
+ migrations.AddField(
886
+ model_name='examinationindication',
887
+ name='information_sources',
888
+ field=models.ManyToManyField(blank=True, related_name='examination_indications', to='endoreg_db.informationsource'),
889
+ ),
890
+ migrations.AddField(
891
+ model_name='examination',
892
+ name='information_sources',
893
+ field=models.ManyToManyField(blank=True, related_name='examinations', to='endoreg_db.informationsource'),
894
+ ),
872
895
  migrations.CreateModel(
873
- name="InformationSourceType",
896
+ name='InformationSourceType',
874
897
  fields=[
875
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
876
- ("name", models.CharField(max_length=100, unique=True)),
877
- ("description", models.TextField(blank=True, null=True)),
878
- ("information_sources", models.ManyToManyField(blank=True, related_name="information_source_types", to="endoreg_db.informationsource")),
898
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
899
+ ('name', models.CharField(max_length=100, unique=True)),
900
+ ('description', models.TextField(blank=True, null=True)),
901
+ ('information_sources', models.ManyToManyField(blank=True, related_name='information_source_types', to='endoreg_db.informationsource')),
879
902
  ],
880
903
  options={
881
- "verbose_name": "Information Source Type",
882
- "verbose_name_plural": "Information Source Types",
904
+ 'verbose_name': 'Information Source Type',
905
+ 'verbose_name_plural': 'Information Source Types',
883
906
  },
884
907
  ),
885
908
  migrations.CreateModel(
886
- name="LabelSet",
909
+ name='LabelSet',
887
910
  fields=[
888
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
889
- ("name", models.CharField(max_length=255)),
890
- ("description", models.TextField(blank=True, null=True)),
891
- ("version", models.IntegerField()),
892
- ("labels", models.ManyToManyField(related_name="label_sets", to="endoreg_db.label")),
911
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
912
+ ('name', models.CharField(max_length=255)),
913
+ ('description', models.TextField(blank=True, null=True)),
914
+ ('version', models.IntegerField()),
915
+ ('labels', models.ManyToManyField(related_name='label_sets', to='endoreg_db.label')),
893
916
  ],
894
917
  ),
895
918
  migrations.AddField(
896
- model_name="label",
897
- name="label_type",
898
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="labels", to="endoreg_db.labeltype"),
919
+ model_name='label',
920
+ name='label_type',
921
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='labels', to='endoreg_db.labeltype'),
899
922
  ),
900
923
  migrations.CreateModel(
901
- name="LabelVideoSegment",
924
+ name='LabelVideoSegment',
902
925
  fields=[
903
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
904
- ("start_frame_number", models.IntegerField()),
905
- ("end_frame_number", models.IntegerField()),
906
- ("label", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.label")),
907
- ("source", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.informationsource")),
926
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
927
+ ('start_frame_number', models.IntegerField()),
928
+ ('end_frame_number', models.IntegerField()),
929
+ ('label', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.label')),
930
+ ('source', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.informationsource')),
908
931
  ],
909
932
  ),
910
933
  migrations.CreateModel(
911
- name="LabelVideoSegmentState",
934
+ name='LabelVideoSegmentState',
912
935
  fields=[
913
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
914
- ("created_at", models.DateTimeField(auto_now_add=True)),
915
- ("updated_at", models.DateTimeField(auto_now=True)),
916
- ("prediction", models.BooleanField(default=False)),
917
- ("annotation", models.BooleanField(default=False)),
918
- ("frames_extracted", models.BooleanField(default=False)),
919
- ("is_validated", models.BooleanField(default=False)),
920
- (
921
- "origin",
922
- models.OneToOneField(
923
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="state", to="endoreg_db.labelvideosegment"
924
- ),
925
- ),
936
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
937
+ ('created_at', models.DateTimeField(auto_now_add=True)),
938
+ ('updated_at', models.DateTimeField(auto_now=True)),
939
+ ('prediction', models.BooleanField(default=False)),
940
+ ('annotation', models.BooleanField(default=False)),
941
+ ('frames_extracted', models.BooleanField(default=False)),
942
+ ('is_validated', models.BooleanField(default=False)),
943
+ ('origin', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='state', to='endoreg_db.labelvideosegment')),
926
944
  ],
927
945
  options={
928
- "verbose_name": "Label Video Segment State",
929
- "verbose_name_plural": "Label Video Segment States",
946
+ 'verbose_name': 'Label Video Segment State',
947
+ 'verbose_name_plural': 'Label Video Segment States',
930
948
  },
931
949
  ),
950
+ migrations.AddField(
951
+ model_name='center',
952
+ name='last_names',
953
+ field=models.ManyToManyField(related_name='centers', to='endoreg_db.lastname'),
954
+ ),
932
955
  migrations.CreateModel(
933
- name="LabValue",
934
- fields=[
935
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
936
- ("name", models.CharField(max_length=255, unique=True)),
937
- ("abbreviation", models.CharField(blank=True, max_length=10, null=True)),
938
- ("numeric_precision", models.IntegerField(default=3)),
939
- ("default_normal_range", models.JSONField(blank=True, null=True)),
940
- ("normal_range_age_dependent", models.BooleanField(default=False)),
941
- ("normal_range_gender_dependent", models.BooleanField(default=False)),
942
- ("normal_range_special_case", models.BooleanField(default=False)),
943
- (
944
- "bound_adjustment_factor",
945
- models.FloatField(default=0.1, help_text="Factor for adjusting bounds when generating increased/decreased values, e.g., 0.1 for 10%."),
946
- ),
947
- (
948
- "default_date_value_distribution",
949
- models.ForeignKey(
950
- blank=True,
951
- null=True,
952
- on_delete=django.db.models.deletion.CASCADE,
953
- related_name="default_date_value_distribution",
954
- to="endoreg_db.datevaluedistribution",
955
- ),
956
- ),
957
- (
958
- "default_multiple_categorical_value_distribution",
959
- models.ForeignKey(
960
- blank=True,
961
- null=True,
962
- on_delete=django.db.models.deletion.CASCADE,
963
- related_name="default_multiple_categorical_value_distribution",
964
- to="endoreg_db.multiplecategoricalvaluedistribution",
965
- ),
966
- ),
967
- (
968
- "default_numerical_value_distribution",
969
- models.ForeignKey(
970
- blank=True,
971
- null=True,
972
- on_delete=django.db.models.deletion.CASCADE,
973
- related_name="default_numerical_value_distribution",
974
- to="endoreg_db.numericvaluedistribution",
975
- ),
976
- ),
977
- (
978
- "default_single_categorical_value_distribution",
979
- models.ForeignKey(
980
- blank=True,
981
- null=True,
982
- on_delete=django.db.models.deletion.CASCADE,
983
- related_name="default_single_categorical_value_distribution",
984
- to="endoreg_db.singlecategoricalvaluedistribution",
985
- ),
986
- ),
987
- ("default_unit", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.unit")),
956
+ name='Material',
957
+ fields=[
958
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
959
+ ('name', models.CharField(max_length=255)),
960
+ ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
988
961
  ],
989
962
  ),
990
- migrations.AddField(
991
- model_name="findingintervention",
992
- name="required_lab_values",
993
- field=models.ManyToManyField(blank=True, related_name="required_by_finding_interventions", to="endoreg_db.labvalue"),
963
+ migrations.CreateModel(
964
+ name='MedicationSchedule',
965
+ fields=[
966
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
967
+ ('name', models.CharField(max_length=255, unique=True)),
968
+ ('description', models.TextField(blank=True, null=True)),
969
+ ('therapy_duration_d', models.FloatField(blank=True, null=True)),
970
+ ('dose', models.FloatField()),
971
+ ('intake_times', models.ManyToManyField(to='endoreg_db.medicationintaketime')),
972
+ ('medication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.medication')),
973
+ ('unit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
974
+ ],
994
975
  ),
995
- migrations.AddField(
996
- model_name="center",
997
- name="last_names",
998
- field=models.ManyToManyField(related_name="centers", to="endoreg_db.lastname"),
999
- ),
1000
- migrations.CreateModel(
1001
- name="Material",
1002
- fields=[
1003
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1004
- ("name", models.CharField(max_length=255)),
1005
- ("emission_factor", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.emissionfactor")),
1006
- ],
1007
- ),
1008
- migrations.CreateModel(
1009
- name="MedicationSchedule",
1010
- fields=[
1011
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1012
- ("name", models.CharField(max_length=255, unique=True)),
1013
- ("description", models.TextField(blank=True, null=True)),
1014
- ("therapy_duration_d", models.FloatField(blank=True, null=True)),
1015
- ("dose", models.FloatField()),
1016
- ("intake_times", models.ManyToManyField(to="endoreg_db.medicationintaketime")),
1017
- ("medication", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.medication")),
1018
- ("unit", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.unit")),
1019
- ],
1020
- ),
1021
- migrations.CreateModel(
1022
- name="MedicationIndication",
1023
- fields=[
1024
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1025
- ("name", models.CharField(max_length=255, unique=True)),
1026
- ("disease_classification_choices", models.ManyToManyField(to="endoreg_db.diseaseclassificationchoice")),
1027
- ("diseases", models.ManyToManyField(to="endoreg_db.disease")),
1028
- ("events", models.ManyToManyField(to="endoreg_db.event")),
1029
- ("sources", models.ManyToManyField(to="endoreg_db.informationsource")),
1030
- (
1031
- "indication_type",
1032
- models.ForeignKey(
1033
- on_delete=django.db.models.deletion.CASCADE, related_name="medication_indications", to="endoreg_db.medicationindicationtype"
1034
- ),
1035
- ),
1036
- ("medication_schedules", models.ManyToManyField(to="endoreg_db.medicationschedule")),
1037
- ],
1038
- ),
1039
- migrations.CreateModel(
1040
- name="ModelMeta",
1041
- fields=[
1042
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1043
- ("name", models.CharField(help_text="User-defined name for this specific model metadata set (e.g., 'segmentation_base').", max_length=255)),
1044
- ("version", models.CharField(help_text="Version identifier for this metadata set (e.g., '1', '2a').", max_length=255)),
1045
- (
1046
- "activation",
1047
- models.CharField(default="sigmoid", help_text="Output activation function (e.g., 'sigmoid', 'softmax', 'none').", max_length=50),
1048
- ),
1049
- (
1050
- "weights",
1051
- models.FileField(
1052
- blank=True,
1053
- help_text="Path to the model weights file (.safetensors), relative to MEDIA_ROOT.",
1054
- null=True,
1055
- upload_to="model_weights",
1056
- validators=[django.core.validators.FileExtensionValidator(allowed_extensions=["safetensors", "pth", "pt"])],
1057
- ),
1058
- ),
1059
- (
1060
- "mean",
1061
- models.CharField(
1062
- default="0.45211223,0.27139644,0.19264949", help_text="Comma-separated mean values for input normalization.", max_length=255
1063
- ),
1064
- ),
1065
- (
1066
- "std",
1067
- models.CharField(
1068
- default="0.31418097,0.21088019,0.16059452",
1069
- help_text="Comma-separated standard deviation values for input normalization.",
1070
- max_length=255,
1071
- ),
1072
- ),
1073
- ("size_x", models.IntegerField(default=716, help_text="Expected input image width.")),
1074
- ("size_y", models.IntegerField(default=716, help_text="Expected input image height.")),
1075
- ("axes", models.CharField(default="2,0,1", help_text="Comma-separated target axis order (e.g., '2,0,1' for CHW).", max_length=10)),
1076
- ("batchsize", models.IntegerField(default=16, help_text="Default batch size for inference.")),
1077
- ("num_workers", models.IntegerField(default=0, help_text="Default number of workers for data loading.")),
1078
- ("description", models.TextField(blank=True, help_text="Optional description.", null=True)),
1079
- ("date_created", models.DateTimeField(auto_now_add=True)),
1080
- (
1081
- "labelset",
1082
- models.ForeignKey(
1083
- help_text="The set of labels this model version predicts.",
1084
- on_delete=django.db.models.deletion.CASCADE,
1085
- related_name="model_metadata",
1086
- to="endoreg_db.labelset",
1087
- ),
1088
- ),
1089
- (
1090
- "model",
1091
- models.ForeignKey(
1092
- help_text="The base AI model architecture this metadata belongs to.",
1093
- on_delete=django.db.models.deletion.CASCADE,
1094
- related_name="metadata_versions",
1095
- to="endoreg_db.aimodel",
1096
- ),
1097
- ),
976
+ migrations.CreateModel(
977
+ name='MedicationIndication',
978
+ fields=[
979
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
980
+ ('name', models.CharField(max_length=255, unique=True)),
981
+ ('disease_classification_choices', models.ManyToManyField(to='endoreg_db.diseaseclassificationchoice')),
982
+ ('diseases', models.ManyToManyField(to='endoreg_db.disease')),
983
+ ('events', models.ManyToManyField(to='endoreg_db.event')),
984
+ ('sources', models.ManyToManyField(to='endoreg_db.informationsource')),
985
+ ('indication_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='medication_indications', to='endoreg_db.medicationindicationtype')),
986
+ ('medication_schedules', models.ManyToManyField(to='endoreg_db.medicationschedule')),
987
+ ],
988
+ ),
989
+ migrations.CreateModel(
990
+ name='ModelMeta',
991
+ fields=[
992
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
993
+ ('name', models.CharField(help_text="User-defined name for this specific model metadata set (e.g., 'segmentation_base').", max_length=255)),
994
+ ('version', models.CharField(help_text="Version identifier for this metadata set (e.g., '1', '2a').", max_length=255)),
995
+ ('activation', models.CharField(default='sigmoid', help_text="Output activation function (e.g., 'sigmoid', 'softmax', 'none').", max_length=50)),
996
+ ('weights', models.FileField(blank=True, help_text='Path to the model weights file (.safetensors), relative to MEDIA_ROOT.', null=True, upload_to='model_weights', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['safetensors', 'pth', 'pt'])])),
997
+ ('mean', models.CharField(default='0.45211223,0.27139644,0.19264949', help_text='Comma-separated mean values for input normalization.', max_length=255)),
998
+ ('std', models.CharField(default='0.31418097,0.21088019,0.16059452', help_text='Comma-separated standard deviation values for input normalization.', max_length=255)),
999
+ ('size_x', models.IntegerField(default=716, help_text='Expected input image width.')),
1000
+ ('size_y', models.IntegerField(default=716, help_text='Expected input image height.')),
1001
+ ('axes', models.CharField(default='2,0,1', help_text="Comma-separated target axis order (e.g., '2,0,1' for CHW).", max_length=10)),
1002
+ ('batchsize', models.IntegerField(default=16, help_text='Default batch size for inference.')),
1003
+ ('num_workers', models.IntegerField(default=0, help_text='Default number of workers for data loading.')),
1004
+ ('description', models.TextField(blank=True, help_text='Optional description.', null=True)),
1005
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1006
+ ('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')),
1007
+ ('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')),
1098
1008
  ],
1099
1009
  options={
1100
- "verbose_name": "Model Metadata",
1101
- "verbose_name_plural": "Model Metadata",
1102
- "ordering": ["-date_created"],
1103
- "unique_together": {("name", "version", "model")},
1010
+ 'verbose_name': 'Model Metadata',
1011
+ 'verbose_name_plural': 'Model Metadata',
1012
+ 'ordering': ['-date_created'],
1013
+ 'unique_together': {('name', 'version', 'model')},
1104
1014
  },
1105
1015
  ),
1106
1016
  migrations.AddField(
1107
- model_name="aimodel",
1108
- name="active_meta",
1109
- field=models.ForeignKey(
1110
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="active_model", to="endoreg_db.modelmeta"
1111
- ),
1017
+ model_name='aimodel',
1018
+ name='active_meta',
1019
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='active_model', to='endoreg_db.modelmeta'),
1112
1020
  ),
1113
1021
  migrations.CreateModel(
1114
- name="ActiveModel",
1022
+ name='ActiveModel',
1115
1023
  fields=[
1116
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1117
- ("name", models.CharField(max_length=255, unique=True)),
1118
- ("model_meta", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.modelmeta")),
1024
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1025
+ ('name', models.CharField(max_length=255, unique=True)),
1026
+ ('model_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.modelmeta')),
1119
1027
  ],
1120
1028
  ),
1121
1029
  migrations.AddField(
1122
- model_name="aimodel",
1123
- name="model_type",
1124
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="ai_models", to="endoreg_db.modeltype"),
1125
- ),
1126
- migrations.CreateModel(
1127
- name="Patient",
1128
- fields=[
1129
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1130
- ("email", models.EmailField(blank=True, max_length=255, null=True)),
1131
- ("phone", models.CharField(blank=True, max_length=255, null=True)),
1132
- ("is_real_person", models.BooleanField(default=True)),
1133
- ("post_code", models.CharField(blank=True, max_length=20, null=True)),
1134
- ("city", models.CharField(blank=True, max_length=255, null=True)),
1135
- ("street", models.CharField(blank=True, max_length=255, null=True)),
1136
- ("first_name", models.CharField(max_length=100)),
1137
- ("last_name", models.CharField(max_length=100)),
1138
- ("dob", models.DateField(blank=True, null=True)),
1139
- ("patient_hash", models.CharField(blank=True, max_length=255, null=True)),
1140
- ("center", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.center")),
1141
- ("gender", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.gender")),
1030
+ model_name='aimodel',
1031
+ name='model_type',
1032
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ai_models', to='endoreg_db.modeltype'),
1033
+ ),
1034
+ migrations.CreateModel(
1035
+ name='LabValue',
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
+ ('abbreviation', models.CharField(blank=True, max_length=10, null=True)),
1040
+ ('numeric_precision', models.IntegerField(default=3)),
1041
+ ('default_normal_range', models.JSONField(blank=True, null=True)),
1042
+ ('normal_range_age_dependent', models.BooleanField(default=False)),
1043
+ ('normal_range_gender_dependent', models.BooleanField(default=False)),
1044
+ ('normal_range_special_case', models.BooleanField(default=False)),
1045
+ ('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%.')),
1046
+ ('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')),
1047
+ ('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')),
1048
+ ('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')),
1049
+ ('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')),
1050
+ ('default_unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1051
+ ],
1052
+ ),
1053
+ migrations.CreateModel(
1054
+ name='Patient',
1055
+ fields=[
1056
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1057
+ ('email', models.EmailField(blank=True, max_length=255, null=True)),
1058
+ ('phone', models.CharField(blank=True, max_length=255, null=True)),
1059
+ ('is_real_person', models.BooleanField(default=True)),
1060
+ ('post_code', models.CharField(blank=True, max_length=20, null=True)),
1061
+ ('city', models.CharField(blank=True, max_length=255, null=True)),
1062
+ ('street', models.CharField(blank=True, max_length=255, null=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')),
1142
1069
  ],
1143
1070
  options={
1144
- "abstract": False,
1071
+ 'abstract': False,
1145
1072
  },
1146
1073
  ),
1147
1074
  migrations.CreateModel(
1148
- name="PatientDisease",
1075
+ name='PatientDisease',
1149
1076
  fields=[
1150
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1151
- ("start_date", models.DateField(blank=True, null=True)),
1152
- ("end_date", models.DateField(blank=True, null=True)),
1153
- ("numerical_descriptors", models.JSONField(default=dict)),
1154
- ("subcategories", models.JSONField(default=dict)),
1155
- ("last_update", models.DateTimeField(auto_now=True)),
1156
- ("classification_choices", models.ManyToManyField(to="endoreg_db.diseaseclassificationchoice")),
1157
- ("disease", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="patient_diseases", to="endoreg_db.disease")),
1158
- ("patient", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="diseases", to="endoreg_db.patient")),
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')),
1159
1086
  ],
1160
1087
  options={
1161
- "verbose_name": "Patient Disease",
1162
- "verbose_name_plural": "Patient Diseases",
1088
+ 'verbose_name': 'Patient Disease',
1089
+ 'verbose_name_plural': 'Patient Diseases',
1163
1090
  },
1164
1091
  ),
1165
1092
  migrations.CreateModel(
1166
- name="PatientEvent",
1093
+ name='PatientEvent',
1167
1094
  fields=[
1168
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1169
- ("date_start", models.DateField()),
1170
- ("date_end", models.DateField(blank=True, null=True)),
1171
- ("description", models.TextField(blank=True, null=True)),
1172
- ("subcategories", models.JSONField(default=dict)),
1173
- ("numerical_descriptors", models.JSONField(default=dict)),
1174
- ("last_update", models.DateTimeField(auto_now=True)),
1175
- (
1176
- "classification_choice",
1177
- models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.eventclassificationchoice"),
1178
- ),
1179
- ("event", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="patient_events", to="endoreg_db.event")),
1180
- ("patient", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="events", to="endoreg_db.patient")),
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')),
1181
1105
  ],
1182
1106
  ),
1183
1107
  migrations.CreateModel(
1184
- name="PatientExamination",
1108
+ name='PatientExamination',
1185
1109
  fields=[
1186
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1187
- ("date_start", models.DateField(blank=True, null=True)),
1188
- ("date_end", models.DateField(blank=True, null=True)),
1189
- ("hash", models.CharField(max_length=255, unique=True)),
1190
- ("examination", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.examination")),
1191
- ("patient", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="patient_examinations", to="endoreg_db.patient")),
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')),
1192
1116
  ],
1193
1117
  options={
1194
- "verbose_name": "Patient Examination",
1195
- "verbose_name_plural": "Patient Examinations",
1196
- "ordering": ["patient", "examination", "date_start"],
1118
+ 'verbose_name': 'Patient Examination',
1119
+ 'verbose_name_plural': 'Patient Examinations',
1120
+ 'ordering': ['patient', 'examination', 'date_start'],
1197
1121
  },
1198
1122
  ),
1199
1123
  migrations.CreateModel(
1200
- name="Case",
1201
- fields=[
1202
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1203
- ("hash", models.CharField(blank=True, help_text="An optional hash value associated with the case.", max_length=255, null=True)),
1204
- ("start_date", models.DateTimeField(db_index=True, help_text="The start date and time of the case.")),
1205
- ("end_date", models.DateTimeField(blank=True, help_text="The end date and time of the case (optional).", null=True)),
1206
- ("is_active", models.BooleanField(db_index=True, default=True, help_text="Flag indicating if the case is currently active.")),
1207
- ("is_closed", models.BooleanField(db_index=True, default=False, help_text="Flag indicating if the case has been closed.")),
1208
- ("is_deleted", models.BooleanField(db_index=True, default=False, help_text="Flag indicating if the case is marked as deleted.")),
1209
- ("created_at", models.DateTimeField(auto_now_add=True, help_text="The date and time the case was created.")),
1210
- ("updated_at", models.DateTimeField(auto_now=True, help_text="The date and time the case was last updated.")),
1211
- (
1212
- "patient",
1213
- models.ForeignKey(
1214
- help_text="The patient associated with this case.",
1215
- on_delete=django.db.models.deletion.CASCADE,
1216
- related_name="cases",
1217
- to="endoreg_db.patient",
1218
- ),
1219
- ),
1220
- (
1221
- "patient_examinations",
1222
- models.ManyToManyField(help_text="The examinations included in this case.", related_name="cases", to="endoreg_db.patientexamination"),
1223
- ),
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')),
1224
1137
  ],
1225
1138
  options={
1226
- "verbose_name": "Case",
1227
- "verbose_name_plural": "Cases",
1228
- "ordering": ["-start_date", "patient"],
1139
+ 'verbose_name': 'Case',
1140
+ 'verbose_name_plural': 'Cases',
1141
+ 'ordering': ['-start_date', 'patient'],
1229
1142
  },
1230
1143
  ),
1231
1144
  migrations.CreateModel(
1232
- name="AnonymExaminationReport",
1145
+ name='AnonymExaminationReport',
1233
1146
  fields=[
1234
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1235
- ("meta", models.JSONField(blank=True, null=True)),
1236
- ("text", models.TextField(blank=True, null=True)),
1237
- ("date", models.DateField(blank=True, null=True)),
1238
- ("time", models.TimeField(blank=True, null=True)),
1239
- ("file", models.FileField(blank=True, null=True, upload_to="pdfs")),
1240
- ("center", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.center")),
1241
- ("type", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.documenttype")),
1242
- ("examiners", models.ManyToManyField(blank=True, to="endoreg_db.examiner")),
1243
- ("patient", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to="endoreg_db.patient")),
1244
- (
1245
- "patient_examination",
1246
- models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.patientexamination"),
1247
- ),
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='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')),
1248
1158
  ],
1249
1159
  options={
1250
- "abstract": False,
1160
+ 'abstract': False,
1251
1161
  },
1252
1162
  ),
1253
1163
  migrations.CreateModel(
1254
- name="PatientExaminationIndication",
1255
- fields=[
1256
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1257
- ("examination_indication", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.examinationindication")),
1258
- (
1259
- "indication_choice",
1260
- models.ForeignKey(
1261
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.examinationindicationclassificationchoice"
1262
- ),
1263
- ),
1264
- (
1265
- "patient_examination",
1266
- models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="indications", to="endoreg_db.patientexamination"),
1267
- ),
1268
- ],
1269
- ),
1270
- migrations.CreateModel(
1271
- name="PatientExternalID",
1272
- fields=[
1273
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1274
- ("external_id", models.CharField(max_length=255)),
1275
- ("origin", models.CharField(max_length=255)),
1276
- ("patient", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="external_ids", to="endoreg_db.patient")),
1277
- ],
1278
- ),
1279
- migrations.CreateModel(
1280
- name="PatientFinding",
1281
- fields=[
1282
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1283
- ("created_at", models.DateTimeField(auto_now_add=True)),
1284
- ("updated_at", models.DateTimeField(auto_now=True)),
1285
- ("is_active", models.BooleanField(default=True, help_text="Deaktiviert statt gelöscht für Audit-Trail")),
1286
- ("deactivated_at", models.DateTimeField(blank=True, null=True)),
1287
- (
1288
- "created_by",
1289
- models.ForeignKey(
1290
- blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="created_findings", to=settings.AUTH_USER_MODEL
1291
- ),
1292
- ),
1293
- (
1294
- "deactivated_by",
1295
- models.ForeignKey(
1296
- blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="deactivated_findings", to=settings.AUTH_USER_MODEL
1297
- ),
1298
- ),
1299
- ("finding", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="finding_patient_findings", to="endoreg_db.finding")),
1300
- (
1301
- "patient_examination",
1302
- models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="patient_findings", to="endoreg_db.patientexamination"),
1303
- ),
1304
- (
1305
- "updated_by",
1306
- models.ForeignKey(
1307
- blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="updated_findings", to=settings.AUTH_USER_MODEL
1308
- ),
1309
- ),
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='PatientExternalID',
1174
+ fields=[
1175
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1176
+ ('external_id', models.CharField(max_length=255)),
1177
+ ('origin', models.CharField(max_length=255)),
1178
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='external_ids', to='endoreg_db.patient')),
1179
+ ],
1180
+ ),
1181
+ migrations.CreateModel(
1182
+ name='PatientFinding',
1183
+ fields=[
1184
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1185
+ ('created_at', models.DateTimeField(auto_now_add=True)),
1186
+ ('updated_at', models.DateTimeField(auto_now=True)),
1187
+ ('is_active', models.BooleanField(default=True, help_text='Deaktiviert statt gelöscht für Audit-Trail')),
1188
+ ('deactivated_at', models.DateTimeField(blank=True, null=True)),
1189
+ ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='created_findings', to=settings.AUTH_USER_MODEL)),
1190
+ ('deactivated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='deactivated_findings', to=settings.AUTH_USER_MODEL)),
1191
+ ('finding', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='finding_patient_findings', to='endoreg_db.finding')),
1192
+ ('patient_examination', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_findings', to='endoreg_db.patientexamination')),
1193
+ ('updated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='updated_findings', to=settings.AUTH_USER_MODEL)),
1310
1194
  ],
1311
1195
  options={
1312
- "verbose_name": "Patient Finding",
1313
- "verbose_name_plural": "Patient Findings",
1314
- "ordering": ["patient_examination", "finding"],
1196
+ 'verbose_name': 'Patient Finding',
1197
+ 'verbose_name_plural': 'Patient Findings',
1198
+ 'ordering': ['patient_examination', 'finding'],
1315
1199
  },
1316
1200
  ),
1317
1201
  migrations.AddField(
1318
- model_name="labelvideosegment",
1319
- name="patient_findings",
1320
- field=models.ManyToManyField(blank=True, related_name="video_segments", to="endoreg_db.patientfinding"),
1321
- ),
1322
- migrations.CreateModel(
1323
- name="PatientFindingClassification",
1324
- fields=[
1325
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1326
- ("is_active", models.BooleanField(default=True, help_text="Indicates if the classification is currently active.")),
1327
- ("subcategories", models.JSONField(blank=True, null=True)),
1328
- ("numerical_descriptors", models.JSONField(blank=True, null=True)),
1329
- (
1330
- "classification",
1331
- models.ForeignKey(
1332
- on_delete=django.db.models.deletion.CASCADE, related_name="patient_finding_classifications", to="endoreg_db.findingclassification"
1333
- ),
1334
- ),
1335
- (
1336
- "classification_choice",
1337
- models.ForeignKey(
1338
- on_delete=django.db.models.deletion.CASCADE, related_name="patient_finding_classifications", to="endoreg_db.findingclassificationchoice"
1339
- ),
1340
- ),
1341
- ("finding", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="classifications", to="endoreg_db.patientfinding")),
1202
+ model_name='labelvideosegment',
1203
+ name='patient_findings',
1204
+ field=models.ManyToManyField(blank=True, related_name='video_segments', to='endoreg_db.patientfinding'),
1205
+ ),
1206
+ migrations.CreateModel(
1207
+ name='PatientFindingClassification',
1208
+ fields=[
1209
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1210
+ ('is_active', models.BooleanField(default=True, help_text='Indicates if the classification is currently active.')),
1211
+ ('subcategories', models.JSONField(blank=True, null=True)),
1212
+ ('numerical_descriptors', models.JSONField(blank=True, null=True)),
1213
+ ('classification', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_classifications', to='endoreg_db.findingclassification')),
1214
+ ('classification_choice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_classifications', to='endoreg_db.findingclassificationchoice')),
1215
+ ('finding', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='classifications', to='endoreg_db.patientfinding')),
1342
1216
  ],
1343
1217
  options={
1344
- "verbose_name": "Patient Finding Classification",
1345
- "verbose_name_plural": "Patient Finding Classifications",
1346
- "ordering": ["finding", "classification", "classification_choice"],
1218
+ 'verbose_name': 'Patient Finding Classification',
1219
+ 'verbose_name_plural': 'Patient Finding Classifications',
1220
+ 'ordering': ['finding', 'classification', 'classification_choice'],
1347
1221
  },
1348
1222
  ),
1349
1223
  migrations.CreateModel(
1350
- name="PatientFindingIntervention",
1351
- fields=[
1352
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1353
- ("is_active", models.BooleanField(default=True, help_text="Indicates if the intervention is currently active.")),
1354
- ("state", models.CharField(blank=True, max_length=100, null=True)),
1355
- ("time_start", models.DateTimeField(blank=True, null=True)),
1356
- ("time_end", models.DateTimeField(blank=True, null=True)),
1357
- ("date", models.DateField(blank=True, null=True)),
1358
- ("finding", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="interventions", to="endoreg_db.patientfinding")),
1359
- (
1360
- "intervention",
1361
- models.ForeignKey(
1362
- on_delete=django.db.models.deletion.CASCADE, related_name="patient_finding_interventions", to="endoreg_db.findingintervention"
1363
- ),
1364
- ),
1365
- ],
1366
- ),
1367
- migrations.CreateModel(
1368
- name="PatientLabSample",
1369
- fields=[
1370
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1371
- ("date", models.DateTimeField()),
1372
- ("patient", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="lab_samples", to="endoreg_db.patient")),
1373
- ("sample_type", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.patientlabsampletype")),
1374
- ],
1375
- ),
1376
- migrations.CreateModel(
1377
- name="PatientMedication",
1378
- fields=[
1379
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1380
- ("dosage", models.JSONField(blank=True, null=True)),
1381
- ("active", models.BooleanField(default=True)),
1382
- ("intake_times", models.ManyToManyField(blank=True, related_name="intake_time_patient_medications", to="endoreg_db.medicationintaketime")),
1383
- (
1384
- "medication",
1385
- models.ForeignKey(
1386
- blank=True, on_delete=django.db.models.deletion.CASCADE, related_name="medication_patient_medications", to="endoreg_db.medication"
1387
- ),
1388
- ),
1389
- (
1390
- "medication_indication",
1391
- models.ForeignKey(
1392
- null=True,
1393
- on_delete=django.db.models.deletion.CASCADE,
1394
- related_name="indication_patient_medications",
1395
- to="endoreg_db.medicationindication",
1396
- ),
1397
- ),
1398
- ("patient", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.patient")),
1399
- ("unit", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.unit")),
1224
+ name='PatientFindingIntervention',
1225
+ fields=[
1226
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1227
+ ('is_active', models.BooleanField(default=True, help_text='Indicates if the intervention is currently active.')),
1228
+ ('state', models.CharField(blank=True, max_length=100, null=True)),
1229
+ ('time_start', models.DateTimeField(blank=True, null=True)),
1230
+ ('time_end', models.DateTimeField(blank=True, null=True)),
1231
+ ('date', models.DateField(blank=True, null=True)),
1232
+ ('finding', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='interventions', to='endoreg_db.patientfinding')),
1233
+ ('intervention', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='patient_finding_interventions', to='endoreg_db.findingintervention')),
1234
+ ],
1235
+ ),
1236
+ migrations.CreateModel(
1237
+ name='PatientLabSample',
1238
+ fields=[
1239
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1240
+ ('date', models.DateTimeField()),
1241
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lab_samples', to='endoreg_db.patient')),
1242
+ ('sample_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patientlabsampletype')),
1243
+ ],
1244
+ ),
1245
+ migrations.CreateModel(
1246
+ name='PatientMedication',
1247
+ fields=[
1248
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1249
+ ('dosage', models.JSONField(blank=True, null=True)),
1250
+ ('active', models.BooleanField(default=True)),
1251
+ ('intake_times', models.ManyToManyField(blank=True, related_name='intake_time_patient_medications', to='endoreg_db.medicationintaketime')),
1252
+ ('medication', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='medication_patient_medications', to='endoreg_db.medication')),
1253
+ ('medication_indication', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='indication_patient_medications', to='endoreg_db.medicationindication')),
1254
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1255
+ ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1400
1256
  ],
1401
1257
  options={
1402
- "verbose_name": "Patient Medication",
1403
- "verbose_name_plural": "Patient Medications",
1258
+ 'verbose_name': 'Patient Medication',
1259
+ 'verbose_name_plural': 'Patient Medications',
1404
1260
  },
1405
1261
  ),
1406
1262
  migrations.CreateModel(
1407
- name="PatientMedicationSchedule",
1263
+ name='PatientMedicationSchedule',
1408
1264
  fields=[
1409
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1410
- ("created_at", models.DateTimeField(auto_now_add=True)),
1411
- ("updated_at", models.DateTimeField(auto_now=True)),
1412
- ("medication", models.ManyToManyField(blank=True, related_name="patient_medication_schedules", to="endoreg_db.patientmedication")),
1413
- ("patient", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.patient")),
1265
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1266
+ ('created_at', models.DateTimeField(auto_now_add=True)),
1267
+ ('updated_at', models.DateTimeField(auto_now=True)),
1268
+ ('medication', models.ManyToManyField(blank=True, related_name='patient_medication_schedules', to='endoreg_db.patientmedication')),
1269
+ ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patient')),
1414
1270
  ],
1415
1271
  ),
1416
1272
  migrations.CreateModel(
1417
- name="PdfMeta",
1273
+ name='PdfMeta',
1418
1274
  fields=[
1419
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1420
- ("date", models.DateField()),
1421
- ("time", models.TimeField()),
1422
- ("pdf_hash", models.CharField(max_length=255, unique=True)),
1423
- ("pdf_type", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.pdftype")),
1275
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1276
+ ('date', models.DateField()),
1277
+ ('time', models.TimeField()),
1278
+ ('pdf_hash', models.CharField(max_length=255, unique=True)),
1279
+ ('pdf_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.pdftype')),
1424
1280
  ],
1425
1281
  ),
1426
1282
  migrations.CreateModel(
1427
- name="CenterProduct",
1283
+ name='CenterProduct',
1428
1284
  fields=[
1429
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1430
- ("date_used", models.DateField()),
1431
- ("center", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="center_products", to="endoreg_db.center")),
1432
- ("product", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="center_products", to="endoreg_db.product")),
1285
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1286
+ ('date_used', models.DateField()),
1287
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_products', to='endoreg_db.center')),
1288
+ ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_products', to='endoreg_db.product')),
1433
1289
  ],
1434
1290
  options={
1435
- "verbose_name": "Center Product Usage",
1436
- "verbose_name_plural": "Center Product Usages",
1437
- "ordering": ["center", "-date_used", "product"],
1291
+ 'verbose_name': 'Center Product Usage',
1292
+ 'verbose_name_plural': 'Center Product Usages',
1293
+ 'ordering': ['center', '-date_used', 'product'],
1438
1294
  },
1439
1295
  ),
1440
1296
  migrations.AddField(
1441
- model_name="product",
1442
- name="product_group",
1443
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="products", to="endoreg_db.productgroup"),
1444
- ),
1445
- migrations.CreateModel(
1446
- name="PortalUserInfo",
1447
- fields=[
1448
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1449
- ("works_in_endoscopy", models.BooleanField(blank=True, null=True)),
1450
- (
1451
- "examiner",
1452
- models.OneToOneField(
1453
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="portal_user_info", to="endoreg_db.examiner"
1454
- ),
1455
- ),
1456
- ("user", models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
1457
- (
1458
- "profession",
1459
- models.ForeignKey(
1460
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="portal_user_infos", to="endoreg_db.profession"
1461
- ),
1462
- ),
1297
+ model_name='product',
1298
+ name='product_group',
1299
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='products', to='endoreg_db.productgroup'),
1300
+ ),
1301
+ migrations.CreateModel(
1302
+ name='PortalUserInfo',
1303
+ fields=[
1304
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1305
+ ('works_in_endoscopy', models.BooleanField(blank=True, null=True)),
1306
+ ('examiner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portal_user_info', to='endoreg_db.examiner')),
1307
+ ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
1308
+ ('profession', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='portal_user_infos', to='endoreg_db.profession')),
1463
1309
  ],
1464
1310
  ),
1465
1311
  migrations.AddField(
1466
- model_name="employeetype",
1467
- name="qualifications",
1468
- field=models.ManyToManyField(related_name="employee_types", to="endoreg_db.qualification"),
1312
+ model_name='employeetype',
1313
+ name='qualifications',
1314
+ field=models.ManyToManyField(related_name='employee_types', to='endoreg_db.qualification'),
1469
1315
  ),
1470
1316
  migrations.CreateModel(
1471
- name="EmployeeQualification",
1317
+ name='EmployeeQualification',
1472
1318
  fields=[
1473
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1474
- ("employee", models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name="qualification", to="endoreg_db.employee")),
1475
- ("qualifications", models.ManyToManyField(related_name="employee_qualifications", to="endoreg_db.qualification")),
1319
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1320
+ ('employee', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='qualification', to='endoreg_db.employee')),
1321
+ ('qualifications', models.ManyToManyField(related_name='employee_qualifications', to='endoreg_db.qualification')),
1476
1322
  ],
1477
1323
  ),
1478
1324
  migrations.AddField(
1479
- model_name="qualification",
1480
- name="qualification_types",
1481
- field=models.ManyToManyField(related_name="qualifications", to="endoreg_db.qualificationtype"),
1482
- ),
1483
- migrations.CreateModel(
1484
- name="ReferenceProduct",
1485
- fields=[
1486
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1487
- ("name", models.CharField(max_length=255)),
1488
- (
1489
- "emission_factor_package",
1490
- models.ForeignKey(
1491
- null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="reference_product_package", to="endoreg_db.emissionfactor"
1492
- ),
1493
- ),
1494
- (
1495
- "emission_factor_product",
1496
- models.ForeignKey(
1497
- null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="reference_product_product", to="endoreg_db.emissionfactor"
1498
- ),
1499
- ),
1500
- (
1501
- "emission_factor_total",
1502
- models.ForeignKey(
1503
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="reference_products", to="endoreg_db.emissionfactor"
1504
- ),
1505
- ),
1506
- ("product", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="reference_products", to="endoreg_db.product")),
1507
- (
1508
- "product_group",
1509
- models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name="reference_product", to="endoreg_db.productgroup"),
1510
- ),
1511
- ],
1512
- ),
1513
- migrations.CreateModel(
1514
- name="ReportReaderConfig",
1515
- fields=[
1516
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1517
- ("locale", models.CharField(default="de_DE", max_length=10)),
1518
- ("text_date_format", models.CharField(default="%d.%m.%Y", max_length=10)),
1519
- ("first_names", models.ManyToManyField(related_name="report_reader_configs", to="endoreg_db.firstname")),
1520
- ("last_names", models.ManyToManyField(related_name="report_reader_configs", to="endoreg_db.lastname")),
1521
- ("cut_off_above", models.ManyToManyField(related_name="report_reader_configs_cut_off_above", to="endoreg_db.reportreaderflag")),
1522
- ("cut_off_below", models.ManyToManyField(related_name="report_reader_configs_cut_off_below", to="endoreg_db.reportreaderflag")),
1523
- (
1524
- "endoscope_info_line_flag",
1525
- models.ForeignKey(
1526
- on_delete=django.db.models.deletion.CASCADE, related_name="report_reader_configs_endoscope_info_line", to="endoreg_db.reportreaderflag"
1527
- ),
1528
- ),
1529
- (
1530
- "examiner_info_line_flag",
1531
- models.ForeignKey(
1532
- on_delete=django.db.models.deletion.CASCADE, related_name="report_reader_configs_examiner_info_line", to="endoreg_db.reportreaderflag"
1533
- ),
1534
- ),
1535
- (
1536
- "patient_info_line_flag",
1537
- models.ForeignKey(
1538
- on_delete=django.db.models.deletion.CASCADE, related_name="report_reader_configs_patient_info_line", to="endoreg_db.reportreaderflag"
1539
- ),
1540
- ),
1325
+ model_name='qualification',
1326
+ name='qualification_types',
1327
+ field=models.ManyToManyField(related_name='qualifications', to='endoreg_db.qualificationtype'),
1328
+ ),
1329
+ migrations.CreateModel(
1330
+ name='ReferenceProduct',
1331
+ fields=[
1332
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1333
+ ('name', models.CharField(max_length=255)),
1334
+ ('emission_factor_package', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_product_package', to='endoreg_db.emissionfactor')),
1335
+ ('emission_factor_product', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reference_product_product', to='endoreg_db.emissionfactor')),
1336
+ ('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')),
1337
+ ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reference_products', to='endoreg_db.product')),
1338
+ ('product_group', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='reference_product', to='endoreg_db.productgroup')),
1339
+ ],
1340
+ ),
1341
+ migrations.CreateModel(
1342
+ name='ReportReaderConfig',
1343
+ fields=[
1344
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1345
+ ('locale', models.CharField(default='de_DE', max_length=10)),
1346
+ ('text_date_format', models.CharField(default='%d.%m.%Y', max_length=10)),
1347
+ ('first_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.firstname')),
1348
+ ('last_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.lastname')),
1349
+ ('cut_off_above', models.ManyToManyField(related_name='report_reader_configs_cut_off_above', to='endoreg_db.reportreaderflag')),
1350
+ ('cut_off_below', models.ManyToManyField(related_name='report_reader_configs_cut_off_below', to='endoreg_db.reportreaderflag')),
1351
+ ('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')),
1352
+ ('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')),
1353
+ ('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')),
1541
1354
  ],
1542
1355
  ),
1543
1356
  migrations.AddField(
1544
- model_name="pdftype",
1545
- name="cut_off_above_lines",
1546
- field=models.ManyToManyField(related_name="pdf_type_cut_off_above_lines", to="endoreg_db.reportreaderflag"),
1357
+ model_name='pdftype',
1358
+ name='cut_off_above_lines',
1359
+ field=models.ManyToManyField(related_name='pdf_type_cut_off_above_lines', to='endoreg_db.reportreaderflag'),
1547
1360
  ),
1548
1361
  migrations.AddField(
1549
- model_name="pdftype",
1550
- name="cut_off_below_lines",
1551
- field=models.ManyToManyField(related_name="pdf_type_cut_off_below_lines", to="endoreg_db.reportreaderflag"),
1362
+ model_name='pdftype',
1363
+ name='cut_off_below_lines',
1364
+ field=models.ManyToManyField(related_name='pdf_type_cut_off_below_lines', to='endoreg_db.reportreaderflag'),
1552
1365
  ),
1553
1366
  migrations.AddField(
1554
- model_name="pdftype",
1555
- name="endoscope_info_line",
1556
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="pdf_type_endoscopy_info_line", to="endoreg_db.reportreaderflag"),
1367
+ model_name='pdftype',
1368
+ name='endoscope_info_line',
1369
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_endoscopy_info_line', to='endoreg_db.reportreaderflag'),
1557
1370
  ),
1558
1371
  migrations.AddField(
1559
- model_name="pdftype",
1560
- name="examiner_info_line",
1561
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="pdf_type_examiner_info_line", to="endoreg_db.reportreaderflag"),
1372
+ model_name='pdftype',
1373
+ name='examiner_info_line',
1374
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_examiner_info_line', to='endoreg_db.reportreaderflag'),
1562
1375
  ),
1563
1376
  migrations.AddField(
1564
- model_name="pdftype",
1565
- name="patient_info_line",
1566
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="pdf_type_patient_info_line", to="endoreg_db.reportreaderflag"),
1567
- ),
1568
- migrations.CreateModel(
1569
- name="Requirement",
1570
- fields=[
1571
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1572
- ("name", models.CharField(max_length=100, unique=True)),
1573
- ("description", models.TextField(blank=True, null=True)),
1574
- (
1575
- "numeric_value",
1576
- models.FloatField(
1577
- blank=True, help_text="Numeric value for the requirement. If not set, the requirement is not used in calculations.", null=True
1578
- ),
1579
- ),
1580
- (
1581
- "numeric_value_min",
1582
- models.FloatField(
1583
- blank=True, help_text="Minimum numeric value for the requirement. If not set, the requirement is not used in calculations.", null=True
1584
- ),
1585
- ),
1586
- (
1587
- "numeric_value_max",
1588
- models.FloatField(
1589
- blank=True, help_text="Maximum numeric value for the requirement. If not set, the requirement is not used in calculations.", null=True
1590
- ),
1591
- ),
1592
- (
1593
- "string_value",
1594
- models.CharField(
1595
- blank=True,
1596
- help_text="String value for the requirement. If not set, the requirement is not used in calculations.",
1597
- max_length=100,
1598
- null=True,
1599
- ),
1600
- ),
1601
- (
1602
- "string_values",
1603
- models.TextField(
1604
- blank=True,
1605
- help_text=" ','-separated list of string values for the requirement.If not set, the requirement is not used in calculations.",
1606
- null=True,
1607
- ),
1608
- ),
1609
- ("disease_classification_choices", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.diseaseclassificationchoice")),
1610
- ("diseases", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.disease")),
1611
- ("events", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.event")),
1612
- ("examination_indications", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.examinationindication")),
1613
- ("examinations", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.examination")),
1614
- ("finding_classification_choices", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.findingclassificationchoice")),
1615
- ("finding_classifications", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.findingclassification")),
1616
- ("finding_interventions", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.findingintervention")),
1617
- ("findings", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.finding")),
1618
- ("genders", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.gender")),
1619
- ("lab_values", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.labvalue")),
1620
- ("medication_indications", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.medicationindication")),
1621
- ("medication_intake_times", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.medicationintaketime")),
1622
- ("medication_schedules", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.medicationschedule")),
1623
- ("medications", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.medication")),
1624
- ("operators", models.ManyToManyField(blank=True, related_name="required_in", to="endoreg_db.requirementoperator")),
1625
- ("requirement_types", models.ManyToManyField(blank=True, related_name="linked_requirements", to="endoreg_db.requirementtype")),
1626
- (
1627
- "unit",
1628
- models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="required_in", to="endoreg_db.unit"),
1629
- ),
1630
- ],
1631
- ),
1632
- migrations.CreateModel(
1633
- name="Risk",
1634
- fields=[
1635
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1636
- ("name", models.CharField(max_length=100, unique=True)),
1637
- ("name_de", models.CharField(blank=True, max_length=100, null=True)),
1638
- ("name_en", models.CharField(blank=True, max_length=100, null=True)),
1639
- ("description", models.TextField(blank=True, null=True)),
1640
- (
1641
- "risk_value",
1642
- models.FloatField(blank=True, help_text="Risk value for the risk. If not set, the risk is not used in calculations.", null=True),
1643
- ),
1644
- (
1645
- "risk_type",
1646
- models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="risks", to="endoreg_db.risktype"),
1647
- ),
1648
- ],
1649
- ),
1650
- migrations.CreateModel(
1651
- name="SensitiveMeta",
1652
- fields=[
1653
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1654
- ("examination_date", models.DateField(blank=True, null=True)),
1655
- ("examination_time", models.TimeField(blank=True, null=True)),
1656
- ("casenumber", models.CharField(blank=True, max_length=255, null=True)),
1657
- ("file_path", models.CharField(blank=True, max_length=1024, null=True)),
1658
- ("patient_first_name", models.CharField(blank=True, max_length=255, null=True)),
1659
- ("patient_last_name", models.CharField(blank=True, max_length=255, null=True)),
1660
- ("patient_dob", models.DateTimeField(blank=True, help_text="Date of birth (can be auto-generated).", null=True)),
1661
- ("examiner_first_name", models.CharField(blank=True, editable=False, max_length=255, null=True)),
1662
- ("examiner_last_name", models.CharField(blank=True, editable=False, max_length=255, null=True)),
1663
- ("patient_hash", models.CharField(blank=True, db_index=True, editable=False, max_length=64, null=True)),
1664
- ("examination_hash", models.CharField(blank=True, db_index=True, editable=False, max_length=64, null=True)),
1665
- ("endoscope_type", models.CharField(blank=True, max_length=255, null=True)),
1666
- ("endoscope_sn", models.CharField(blank=True, max_length=255, null=True)),
1667
- ("text", models.TextField(blank=True, null=True)),
1668
- ("anonymized_text", models.TextField(blank=True, null=True)),
1669
- ("center", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.center")),
1670
- ("examiners", models.ManyToManyField(blank=True, help_text="Pseudo-anonymized examiner(s)", to="endoreg_db.examiner")),
1671
- ("external_id", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.patientexternalid")),
1672
- ("patient_gender", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.gender")),
1673
- (
1674
- "pseudo_examination",
1675
- models.ForeignKey(
1676
- blank=True,
1677
- help_text="FK to the pseudo-anonymized PatientExamination record.",
1678
- null=True,
1679
- on_delete=django.db.models.deletion.CASCADE,
1680
- to="endoreg_db.patientexamination",
1681
- ),
1682
- ),
1683
- (
1684
- "pseudo_patient",
1685
- models.ForeignKey(
1686
- blank=True,
1687
- help_text="FK to the pseudo-anonymized Patient record.",
1688
- null=True,
1689
- on_delete=django.db.models.deletion.CASCADE,
1690
- to="endoreg_db.patient",
1691
- ),
1692
- ),
1693
- ],
1694
- ),
1695
- migrations.CreateModel(
1696
- name="RawPdfFile",
1697
- fields=[
1698
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1699
- ("pdf_hash", models.CharField(max_length=255, unique=True)),
1700
- ("text", models.TextField(blank=True, null=True)),
1701
- ("date_created", models.DateTimeField(auto_now_add=True)),
1702
- ("date_modified", models.DateTimeField(auto_now=True)),
1703
- ("anonymized", models.BooleanField(default=False, help_text="True if the PDF has been anonymized.")),
1704
- ("file", models.FileField(upload_to="pdfs", validators=[django.core.validators.FileExtensionValidator(allowed_extensions=["pdf"])])),
1705
- (
1706
- "anonymized_file",
1707
- models.FileField(
1708
- blank=True, null=True, upload_to="pdfs", validators=[django.core.validators.FileExtensionValidator(allowed_extensions=["pdf"])]
1709
- ),
1710
- ),
1711
- ("state_report_processing_required", models.BooleanField(default=True)),
1712
- ("state_report_processed", models.BooleanField(default=False)),
1713
- ("raw_meta", models.JSONField(blank=True, null=True)),
1714
- ("anonymized_text", models.TextField(blank=True, null=True)),
1715
- (
1716
- "anonym_examination_report",
1717
- models.OneToOneField(
1718
- blank=True,
1719
- null=True,
1720
- on_delete=django.db.models.deletion.SET_NULL,
1721
- related_name="raw_pdf_file",
1722
- to="endoreg_db.anonymexaminationreport",
1723
- ),
1724
- ),
1725
- ("center", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.center")),
1726
- (
1727
- "examination",
1728
- models.ForeignKey(
1729
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="raw_pdf_files", to="endoreg_db.patientexamination"
1730
- ),
1731
- ),
1732
- ("examiner", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.examiner")),
1733
- (
1734
- "patient",
1735
- models.ForeignKey(
1736
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="raw_pdf_files", to="endoreg_db.patient"
1737
- ),
1738
- ),
1739
- ("pdf_type", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.pdftype")),
1740
- (
1741
- "state",
1742
- models.OneToOneField(
1743
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="raw_pdf_file", to="endoreg_db.rawpdfstate"
1744
- ),
1745
- ),
1746
- (
1747
- "sensitive_meta",
1748
- models.ForeignKey(
1749
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="raw_pdf_files", to="endoreg_db.sensitivemeta"
1750
- ),
1751
- ),
1752
- ],
1753
- ),
1754
- migrations.CreateModel(
1755
- name="AnonymHistologyReport",
1756
- fields=[
1757
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1758
- ("meta", models.JSONField(blank=True, null=True)),
1759
- ("text", models.TextField(blank=True, null=True)),
1760
- ("date", models.DateField(blank=True, null=True)),
1761
- ("time", models.TimeField(blank=True, null=True)),
1762
- ("file", models.FileField(blank=True, null=True, upload_to="pdfs")),
1763
- ("center", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.center")),
1764
- ("type", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.documenttype")),
1765
- ("examiners", models.ManyToManyField(blank=True, to="endoreg_db.examiner")),
1766
- ("patient", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to="endoreg_db.patient")),
1767
- (
1768
- "patient_examination",
1769
- models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.patientexamination"),
1770
- ),
1771
- ("sensitive_meta", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.sensitivemeta")),
1377
+ model_name='pdftype',
1378
+ name='patient_info_line',
1379
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_patient_info_line', to='endoreg_db.reportreaderflag'),
1380
+ ),
1381
+ migrations.CreateModel(
1382
+ name='Requirement',
1383
+ fields=[
1384
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1385
+ ('name', models.CharField(max_length=100, unique=True)),
1386
+ ('description', models.TextField(blank=True, null=True)),
1387
+ ('operator_instructions', models.TextField(help_text='semicolon-separated list of target attributes for the requirement')),
1388
+ ('numeric_value', models.FloatField(blank=True, help_text='Numeric value for the requirement. ons.', null=True)),
1389
+ ('numeric_value_min', models.FloatField(blank=True, help_text='Minimum numeric value for the requirement. ons.', null=True)),
1390
+ ('numeric_value_max', models.FloatField(blank=True, help_text='Maximum numeric value for the requirement. ons.', null=True)),
1391
+ ('string_value', models.CharField(blank=True, help_text='String value for the requirement. ons.', max_length=100, null=True)),
1392
+ ('string_values', models.TextField(blank=True, help_text=" ','-separated list of string values for the requirement.ons.", null=True)),
1393
+ ('disease_classification_choices', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.diseaseclassificationchoice')),
1394
+ ('diseases', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.disease')),
1395
+ ('events', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.event')),
1396
+ ('examination_indications', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.examinationindication')),
1397
+ ('examinations', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.examination')),
1398
+ ('finding_classification_choices', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.findingclassificationchoice')),
1399
+ ('finding_classifications', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.findingclassification')),
1400
+ ('finding_interventions', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.findingintervention')),
1401
+ ('findings', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.finding')),
1402
+ ('genders', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.gender')),
1403
+ ('lab_values', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.labvalue')),
1404
+ ('medication_indications', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.medicationindication')),
1405
+ ('medication_intake_times', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.medicationintaketime')),
1406
+ ('medication_schedules', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.medicationschedule')),
1407
+ ('medications', models.ManyToManyField(blank=True, related_name='required_in', to='endoreg_db.medication')),
1408
+ ('operator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='required_in', to='endoreg_db.requirementoperator')),
1409
+ ('requirement_types', models.ManyToManyField(blank=True, related_name='linked_requirements', to='endoreg_db.requirementtype')),
1410
+ ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='required_in', to='endoreg_db.unit')),
1411
+ ],
1412
+ ),
1413
+ migrations.CreateModel(
1414
+ name='Risk',
1415
+ fields=[
1416
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1417
+ ('name', models.CharField(max_length=100, unique=True)),
1418
+ ('name_de', models.CharField(blank=True, max_length=100, null=True)),
1419
+ ('name_en', models.CharField(blank=True, max_length=100, null=True)),
1420
+ ('description', models.TextField(blank=True, null=True)),
1421
+ ('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)),
1422
+ ('risk_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='risks', to='endoreg_db.risktype')),
1423
+ ],
1424
+ ),
1425
+ migrations.CreateModel(
1426
+ name='SensitiveMeta',
1427
+ fields=[
1428
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1429
+ ('examination_date', models.DateField(blank=True, null=True)),
1430
+ ('examination_time', models.TimeField(blank=True, null=True)),
1431
+ ('casenumber', models.CharField(blank=True, max_length=255, null=True)),
1432
+ ('file_path', models.CharField(blank=True, max_length=1024, null=True)),
1433
+ ('patient_first_name', models.CharField(blank=True, max_length=255, null=True)),
1434
+ ('patient_last_name', models.CharField(blank=True, max_length=255, null=True)),
1435
+ ('patient_dob', models.DateTimeField(blank=True, help_text='Date of birth (can be auto-generated).', null=True)),
1436
+ ('examiner_first_name', models.CharField(blank=True, editable=False, max_length=255, null=True)),
1437
+ ('examiner_last_name', models.CharField(blank=True, editable=False, max_length=255, null=True)),
1438
+ ('patient_hash', models.CharField(blank=True, db_index=True, editable=False, max_length=64, null=True)),
1439
+ ('examination_hash', models.CharField(blank=True, db_index=True, editable=False, max_length=64, null=True)),
1440
+ ('endoscope_type', models.CharField(blank=True, max_length=255, null=True)),
1441
+ ('endoscope_sn', models.CharField(blank=True, max_length=255, null=True)),
1442
+ ('text', models.TextField(blank=True, null=True)),
1443
+ ('anonymized_text', models.TextField(blank=True, null=True)),
1444
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1445
+ ('examiners', models.ManyToManyField(blank=True, help_text='Pseudo-anonymized examiner(s)', to='endoreg_db.examiner')),
1446
+ ('external_id', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.patientexternalid')),
1447
+ ('patient_gender', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.gender')),
1448
+ ('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')),
1449
+ ('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')),
1450
+ ],
1451
+ ),
1452
+ migrations.CreateModel(
1453
+ name='RawPdfFile',
1454
+ fields=[
1455
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1456
+ ('pdf_hash', models.CharField(max_length=255, unique=True)),
1457
+ ('text', models.TextField(blank=True, null=True)),
1458
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1459
+ ('date_modified', models.DateTimeField(auto_now=True)),
1460
+ ('anonymized', models.BooleanField(default=False, help_text='True if the PDF has been anonymized.')),
1461
+ ('file', models.FileField(upload_to='pdfs', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])])),
1462
+ ('anonymized_file', models.FileField(blank=True, null=True, upload_to='pdfs', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])])),
1463
+ ('state_report_processing_required', models.BooleanField(default=True)),
1464
+ ('state_report_processed', models.BooleanField(default=False)),
1465
+ ('raw_meta', models.JSONField(blank=True, null=True)),
1466
+ ('anonymized_text', models.TextField(blank=True, null=True)),
1467
+ ('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')),
1468
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1469
+ ('examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_files', to='endoreg_db.patientexamination')),
1470
+ ('examiner', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.examiner')),
1471
+ ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_files', to='endoreg_db.patient')),
1472
+ ('pdf_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.pdftype')),
1473
+ ('state', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='raw_pdf_file', to='endoreg_db.rawpdfstate')),
1474
+ ('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')),
1475
+ ],
1476
+ ),
1477
+ migrations.CreateModel(
1478
+ name='AnonymHistologyReport',
1479
+ fields=[
1480
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1481
+ ('meta', models.JSONField(blank=True, null=True)),
1482
+ ('text', models.TextField(blank=True, null=True)),
1483
+ ('date', models.DateField(blank=True, null=True)),
1484
+ ('time', models.TimeField(blank=True, null=True)),
1485
+ ('file', models.FileField(blank=True, null=True, upload_to='pdfs')),
1486
+ ('center', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.center')),
1487
+ ('type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.documenttype')),
1488
+ ('examiners', models.ManyToManyField(blank=True, to='endoreg_db.examiner')),
1489
+ ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='endoreg_db.patient')),
1490
+ ('patient_examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.patientexamination')),
1491
+ ('sensitive_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.sensitivemeta')),
1772
1492
  ],
1773
1493
  options={
1774
- "abstract": False,
1494
+ 'abstract': False,
1775
1495
  },
1776
1496
  ),
1777
1497
  migrations.AddField(
1778
- model_name="anonymexaminationreport",
1779
- name="sensitive_meta",
1780
- field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.sensitivemeta"),
1498
+ model_name='anonymexaminationreport',
1499
+ name='sensitive_meta',
1500
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.sensitivemeta'),
1781
1501
  ),
1782
1502
  migrations.CreateModel(
1783
- name="SensitiveMetaState",
1503
+ name='SensitiveMetaState',
1784
1504
  fields=[
1785
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1786
- ("created_at", models.DateTimeField(auto_now_add=True)),
1787
- ("updated_at", models.DateTimeField(auto_now=True)),
1788
- ("dob_verified", models.BooleanField(default=False)),
1789
- ("names_verified", models.BooleanField(default=False)),
1790
- (
1791
- "origin",
1792
- models.OneToOneField(
1793
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="state", to="endoreg_db.sensitivemeta"
1794
- ),
1795
- ),
1505
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1506
+ ('created_at', models.DateTimeField(auto_now_add=True)),
1507
+ ('updated_at', models.DateTimeField(auto_now=True)),
1508
+ ('dob_verified', models.BooleanField(default=False)),
1509
+ ('names_verified', models.BooleanField(default=False)),
1510
+ ('origin', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='state', to='endoreg_db.sensitivemeta')),
1796
1511
  ],
1797
1512
  options={
1798
- "verbose_name": "Sensitive Meta State",
1799
- "verbose_name_plural": "Sensitive Meta States",
1513
+ 'verbose_name': 'Sensitive Meta State',
1514
+ 'verbose_name_plural': 'Sensitive Meta States',
1800
1515
  },
1801
1516
  ),
1802
1517
  migrations.CreateModel(
1803
- name="Shift",
1518
+ name='Shift',
1804
1519
  fields=[
1805
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1806
- ("name", models.CharField(max_length=255, unique=True)),
1807
- ("description", models.TextField(blank=True, null=True)),
1808
- ("is_active", models.BooleanField(default=True)),
1809
- ("required_qualifications", models.ManyToManyField(related_name="shifts", to="endoreg_db.qualification")),
1810
- ("shift_types", models.ManyToManyField(related_name="shifts", to="endoreg_db.shifttype")),
1520
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1521
+ ('name', models.CharField(max_length=255, unique=True)),
1522
+ ('description', models.TextField(blank=True, null=True)),
1523
+ ('is_active', models.BooleanField(default=True)),
1524
+ ('required_qualifications', models.ManyToManyField(related_name='shifts', to='endoreg_db.qualification')),
1525
+ ('shift_types', models.ManyToManyField(related_name='shifts', to='endoreg_db.shifttype')),
1811
1526
  ],
1812
1527
  ),
1813
1528
  migrations.CreateModel(
1814
- name="CenterShift",
1529
+ name='CenterShift',
1815
1530
  fields=[
1816
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1817
- ("name", models.CharField(max_length=255, unique=True)),
1818
- ("description", models.TextField(blank=True, null=True)),
1819
- ("start_time", models.TimeField()),
1820
- ("end_time", models.TimeField()),
1821
- ("estimated_presence_fraction", models.DecimalField(decimal_places=4, default=Decimal("0"), max_digits=5)),
1822
- ("center", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="center_shifts", to="endoreg_db.center")),
1823
- ("scheduled_days", models.ManyToManyField(related_name="center_shifts", to="endoreg_db.scheduleddays")),
1824
- ("shift", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="center_shifts", to="endoreg_db.shift")),
1531
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1532
+ ('name', models.CharField(max_length=255, unique=True)),
1533
+ ('description', models.TextField(blank=True, null=True)),
1534
+ ('start_time', models.TimeField()),
1535
+ ('end_time', models.TimeField()),
1536
+ ('estimated_presence_fraction', models.DecimalField(decimal_places=4, default=Decimal('0'), max_digits=5)),
1537
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_shifts', to='endoreg_db.center')),
1538
+ ('scheduled_days', models.ManyToManyField(related_name='center_shifts', to='endoreg_db.scheduleddays')),
1539
+ ('shift', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_shifts', to='endoreg_db.shift')),
1825
1540
  ],
1826
1541
  ),
1827
1542
  migrations.CreateModel(
1828
- name="RequirementSet",
1543
+ name='RequirementSet',
1829
1544
  fields=[
1830
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1831
- ("name", models.CharField(max_length=100, unique=True)),
1832
- ("description", models.TextField(blank=True, null=True)),
1833
- ("information_sources", models.ManyToManyField(blank=True, related_name="requirement_sets", to="endoreg_db.informationsource")),
1834
- ("links_to_sets", models.ManyToManyField(blank=True, related_name="links_from_sets", to="endoreg_db.requirementset")),
1835
- ("reqset_exam_links", models.ManyToManyField(blank=True, related_name="requirement_set", to="endoreg_db.examinationrequirementset")),
1836
- ("requirements", models.ManyToManyField(blank=True, related_name="requirement_sets", to="endoreg_db.requirement")),
1837
- (
1838
- "requirement_set_type",
1839
- models.ForeignKey(
1840
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="requirement_sets", to="endoreg_db.requirementsettype"
1841
- ),
1842
- ),
1843
- ("tags", models.ManyToManyField(blank=True, related_name="requirement_sets", to="endoreg_db.tag")),
1545
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1546
+ ('name', models.CharField(max_length=100, unique=True)),
1547
+ ('description', models.TextField(blank=True, null=True)),
1548
+ ('depends_on', models.ManyToManyField(blank=True, help_text="Andere RequirementSets, die zuerst erfüllt sein müssen, bevor dieses Set geprüft wird ('after').", related_name='dependents', to='endoreg_db.requirementset')),
1549
+ ('information_sources', models.ManyToManyField(blank=True, related_name='requirement_sets', to='endoreg_db.informationsource')),
1550
+ ('links_to_sets', models.ManyToManyField(blank=True, related_name='links_from_sets', to='endoreg_db.requirementset')),
1551
+ ('reqset_exam_links', models.ManyToManyField(blank=True, related_name='requirement_set', to='endoreg_db.examinationrequirementset')),
1552
+ ('requirements', models.ManyToManyField(blank=True, related_name='requirement_sets', to='endoreg_db.requirement')),
1553
+ ('requirement_set_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='requirement_sets', to='endoreg_db.requirementsettype')),
1554
+ ('tags', models.ManyToManyField(blank=True, related_name='requirement_sets', to='endoreg_db.tag')),
1844
1555
  ],
1845
1556
  ),
1846
1557
  migrations.CreateModel(
1847
- name="TransportRoute",
1558
+ name='TransportRoute',
1848
1559
  fields=[
1849
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1850
- ("distance", models.FloatField()),
1851
- ("name", models.CharField(max_length=255)),
1852
- ("emission_factor", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.emissionfactor")),
1853
- ("unit", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.unit")),
1560
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1561
+ ('distance', models.FloatField()),
1562
+ ('name', models.CharField(max_length=255)),
1563
+ ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
1564
+ ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1854
1565
  ],
1855
1566
  ),
1856
1567
  migrations.AddField(
1857
- model_name="product",
1858
- name="transport_route",
1859
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.transportroute"),
1568
+ model_name='product',
1569
+ name='transport_route',
1570
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.transportroute'),
1860
1571
  ),
1861
1572
  migrations.CreateModel(
1862
- name="ProductWeight",
1573
+ name='ProductWeight',
1863
1574
  fields=[
1864
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1865
- ("name", models.CharField(max_length=255, null=True)),
1866
- ("measured", models.FloatField(null=True)),
1867
- ("verified", models.FloatField(null=True)),
1868
- ("manufacturer", models.FloatField(null=True)),
1869
- ("product", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.product")),
1870
- ("unit", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.unit")),
1575
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1576
+ ('name', models.CharField(max_length=255, null=True)),
1577
+ ('measured', models.FloatField(null=True)),
1578
+ ('verified', models.FloatField(null=True)),
1579
+ ('manufacturer', models.FloatField(null=True)),
1580
+ ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.product')),
1581
+ ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1871
1582
  ],
1872
1583
  ),
1873
1584
  migrations.CreateModel(
1874
- name="ProductMaterial",
1585
+ name='ProductMaterial',
1875
1586
  fields=[
1876
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1877
- ("component", models.CharField(max_length=255)),
1878
- ("quantity", models.FloatField()),
1879
- (
1880
- "material",
1881
- models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="material_product_materials", to="endoreg_db.material"),
1882
- ),
1883
- ("product", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="product_product_materials", to="endoreg_db.product")),
1884
- ("unit", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="unit_product_materials", to="endoreg_db.unit")),
1587
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1588
+ ('component', models.CharField(max_length=255)),
1589
+ ('quantity', models.FloatField()),
1590
+ ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='material_product_materials', to='endoreg_db.material')),
1591
+ ('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='product_product_materials', to='endoreg_db.product')),
1592
+ ('unit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='unit_product_materials', to='endoreg_db.unit')),
1885
1593
  ],
1886
1594
  ),
1887
1595
  migrations.CreateModel(
1888
- name="PatientLabValue",
1596
+ name='PatientLabValue',
1889
1597
  fields=[
1890
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1891
- ("value", models.FloatField(blank=True, null=True)),
1892
- ("value_str", models.CharField(blank=True, max_length=255, null=True)),
1893
- ("datetime", models.DateTimeField(auto_now_add=True)),
1894
- ("normal_range", models.JSONField(default=dict)),
1895
- ("lab_value", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.labvalue")),
1896
- (
1897
- "patient",
1898
- models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="lab_values", to="endoreg_db.patient"),
1899
- ),
1900
- (
1901
- "sample",
1902
- models.ForeignKey(
1903
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="values", to="endoreg_db.patientlabsample"
1904
- ),
1905
- ),
1906
- ("unit", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.unit")),
1598
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1599
+ ('value', models.FloatField(blank=True, null=True)),
1600
+ ('value_str', models.CharField(blank=True, max_length=255, null=True)),
1601
+ ('datetime', models.DateTimeField(auto_now_add=True)),
1602
+ ('normal_range', models.JSONField(default=dict)),
1603
+ ('lab_value', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.labvalue')),
1604
+ ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='lab_values', to='endoreg_db.patient')),
1605
+ ('sample', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='values', to='endoreg_db.patientlabsample')),
1606
+ ('unit', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit')),
1907
1607
  ],
1908
1608
  ),
1909
1609
  migrations.AddField(
1910
- model_name="medication",
1911
- name="default_unit",
1912
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.unit"),
1610
+ model_name='medication',
1611
+ name='default_unit',
1612
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.unit'),
1913
1613
  ),
1914
1614
  migrations.AddField(
1915
- model_name="emissionfactor",
1916
- name="unit",
1917
- field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.unit"),
1918
- ),
1919
- migrations.CreateModel(
1920
- name="CenterResource",
1921
- fields=[
1922
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1923
- ("name", models.CharField(max_length=255, null=True)),
1924
- ("quantity", models.FloatField()),
1925
- ("year", models.IntegerField()),
1926
- ("center", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="center_resources", to="endoreg_db.center")),
1927
- (
1928
- "transport_emission_factor",
1929
- models.ForeignKey(
1930
- null=True,
1931
- on_delete=django.db.models.deletion.SET_NULL,
1932
- related_name="center_resource_transport_emission_factor",
1933
- to="endoreg_db.emissionfactor",
1934
- ),
1935
- ),
1936
- (
1937
- "use_emission_factor",
1938
- models.ForeignKey(
1939
- null=True,
1940
- on_delete=django.db.models.deletion.SET_NULL,
1941
- related_name="center_resource_use_emission_factor",
1942
- to="endoreg_db.emissionfactor",
1943
- ),
1944
- ),
1945
- ("resource", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.resource")),
1946
- ("unit", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.unit")),
1947
- ],
1948
- ),
1949
- migrations.CreateModel(
1950
- name="UploadJob",
1951
- fields=[
1952
- (
1953
- "id",
1954
- models.UUIDField(default=uuid.uuid4, editable=False, help_text="Unique identifier for the upload job", primary_key=True, serialize=False),
1955
- ),
1956
- ("file", models.FileField(help_text="Uploaded file (PDF or video)", upload_to="uploads/%Y/%m/%d/")),
1957
- (
1958
- "status",
1959
- models.CharField(
1960
- choices=[("pending", "Pending"), ("processing", "Processing"), ("anonymized", "Anonymized"), ("error", "Error")],
1961
- default="pending",
1962
- help_text="Current processing status of the upload",
1963
- max_length=20,
1964
- ),
1965
- ),
1966
- ("content_type", models.CharField(blank=True, help_text="MIME type of the uploaded file", max_length=100)),
1967
- ("error_detail", models.TextField(blank=True, help_text="Error message if processing failed")),
1968
- ("created_at", models.DateTimeField(auto_now_add=True, help_text="When the upload job was created")),
1969
- ("updated_at", models.DateTimeField(auto_now=True, help_text="When the upload job was last updated")),
1970
- (
1971
- "sensitive_meta",
1972
- models.ForeignKey(
1973
- blank=True,
1974
- help_text="Link to the created SensitiveMeta record after processing",
1975
- null=True,
1976
- on_delete=django.db.models.deletion.SET_NULL,
1977
- to="endoreg_db.sensitivemeta",
1978
- ),
1979
- ),
1615
+ model_name='emissionfactor',
1616
+ name='unit',
1617
+ field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit'),
1618
+ ),
1619
+ migrations.CreateModel(
1620
+ name='CenterResource',
1621
+ fields=[
1622
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1623
+ ('name', models.CharField(max_length=255, null=True)),
1624
+ ('quantity', models.FloatField()),
1625
+ ('year', models.IntegerField()),
1626
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_resources', to='endoreg_db.center')),
1627
+ ('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')),
1628
+ ('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')),
1629
+ ('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.resource')),
1630
+ ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1631
+ ],
1632
+ ),
1633
+ migrations.CreateModel(
1634
+ name='UploadJob',
1635
+ fields=[
1636
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unique identifier for the upload job', primary_key=True, serialize=False)),
1637
+ ('file', models.FileField(help_text='Uploaded file (PDF or video)', upload_to='uploads/%Y/%m/%d/')),
1638
+ ('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)),
1639
+ ('content_type', models.CharField(blank=True, help_text='MIME type of the uploaded file', max_length=100)),
1640
+ ('error_detail', models.TextField(blank=True, help_text='Error message if processing failed')),
1641
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='When the upload job was created')),
1642
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='When the upload job was last updated')),
1643
+ ('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')),
1980
1644
  ],
1981
1645
  options={
1982
- "verbose_name": "Upload Job",
1983
- "verbose_name_plural": "Upload Jobs",
1984
- "ordering": ["-created_at"],
1646
+ 'verbose_name': 'Upload Job',
1647
+ 'verbose_name_plural': 'Upload Jobs',
1648
+ 'ordering': ['-created_at'],
1985
1649
  },
1986
1650
  ),
1987
1651
  migrations.CreateModel(
1988
- name="VideoFile",
1989
- fields=[
1990
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
1991
- ("uuid", models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
1992
- (
1993
- "raw_file",
1994
- models.FileField(
1995
- blank=True, null=True, upload_to="videos", validators=[django.core.validators.FileExtensionValidator(allowed_extensions=["mp4"])]
1996
- ),
1997
- ),
1998
- (
1999
- "processed_file",
2000
- models.FileField(
2001
- blank=True, null=True, upload_to="videos", validators=[django.core.validators.FileExtensionValidator(allowed_extensions=["mp4"])]
2002
- ),
2003
- ),
2004
- ("video_hash", models.CharField(help_text="Hash of the raw video file.", max_length=255, unique=True)),
2005
- (
2006
- "processed_video_hash",
2007
- models.CharField(blank=True, help_text="Hash of the processed video file, unique if not null.", max_length=255, null=True, unique=True),
2008
- ),
2009
- ("original_file_name", models.CharField(blank=True, max_length=255, null=True)),
2010
- ("uploaded_at", models.DateTimeField(auto_now_add=True)),
2011
- ("frame_dir", models.CharField(blank=True, help_text="Path to frames extracted from the raw video.", max_length=512)),
2012
- ("fps", models.FloatField(blank=True, null=True)),
2013
- ("duration", models.FloatField(blank=True, null=True)),
2014
- ("frame_count", models.IntegerField(blank=True, null=True)),
2015
- ("width", models.IntegerField(blank=True, null=True)),
2016
- ("height", models.IntegerField(blank=True, null=True)),
2017
- ("suffix", models.CharField(blank=True, max_length=10, null=True)),
2018
- ("sequences", models.JSONField(blank=True, default=dict, help_text="AI prediction sequences based on raw frames.")),
2019
- ("date", models.DateField(blank=True, null=True)),
2020
- ("meta", models.JSONField(blank=True, null=True)),
2021
- ("date_created", models.DateTimeField(auto_now_add=True)),
2022
- ("date_modified", models.DateTimeField(auto_now=True)),
2023
- ("ai_model_meta", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.modelmeta")),
2024
- ("center", models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to="endoreg_db.center")),
2025
- (
2026
- "examination",
2027
- models.ForeignKey(
2028
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="video_files", to="endoreg_db.patientexamination"
2029
- ),
2030
- ),
2031
- (
2032
- "patient",
2033
- models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="video_files", to="endoreg_db.patient"),
2034
- ),
2035
- ("processor", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to="endoreg_db.endoscopyprocessor")),
2036
- (
2037
- "sensitive_meta",
2038
- models.OneToOneField(
2039
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="video_file", to="endoreg_db.sensitivemeta"
2040
- ),
2041
- ),
2042
- ("import_meta", models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.videoimportmeta")),
1652
+ name='VideoFile',
1653
+ fields=[
1654
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1655
+ ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
1656
+ ('raw_file', models.FileField(blank=True, null=True, upload_to='videos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['mp4'])])),
1657
+ ('processed_file', models.FileField(blank=True, null=True, upload_to='videos', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['mp4'])])),
1658
+ ('video_hash', models.CharField(help_text='Hash of the raw video file.', max_length=255, unique=True)),
1659
+ ('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)),
1660
+ ('original_file_name', models.CharField(blank=True, max_length=255, null=True)),
1661
+ ('uploaded_at', models.DateTimeField(auto_now_add=True)),
1662
+ ('frame_dir', models.CharField(blank=True, help_text='Path to frames extracted from the raw video.', max_length=512)),
1663
+ ('fps', models.FloatField(blank=True, null=True)),
1664
+ ('duration', models.FloatField(blank=True, null=True)),
1665
+ ('frame_count', models.IntegerField(blank=True, null=True)),
1666
+ ('width', models.IntegerField(blank=True, null=True)),
1667
+ ('height', models.IntegerField(blank=True, null=True)),
1668
+ ('suffix', models.CharField(blank=True, max_length=10, null=True)),
1669
+ ('sequences', models.JSONField(blank=True, default=dict, help_text='AI prediction sequences based on raw frames.')),
1670
+ ('date', models.DateField(blank=True, null=True)),
1671
+ ('meta', models.JSONField(blank=True, null=True)),
1672
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1673
+ ('date_modified', models.DateTimeField(auto_now=True)),
1674
+ ('ai_model_meta', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.modelmeta')),
1675
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='endoreg_db.center')),
1676
+ ('examination', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_files', to='endoreg_db.patientexamination')),
1677
+ ('patient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_files', to='endoreg_db.patient')),
1678
+ ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='endoreg_db.endoscopyprocessor')),
1679
+ ('sensitive_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_file', to='endoreg_db.sensitivemeta')),
1680
+ ('import_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videoimportmeta')),
2043
1681
  ],
2044
1682
  ),
2045
1683
  migrations.AddField(
2046
- model_name="patientexamination",
2047
- name="video",
2048
- field=models.OneToOneField(
2049
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="patient_examination", to="endoreg_db.videofile"
2050
- ),
1684
+ model_name='patientexamination',
1685
+ name='video',
1686
+ field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='patient_examination', to='endoreg_db.videofile'),
2051
1687
  ),
2052
1688
  migrations.AddField(
2053
- model_name="labelvideosegment",
2054
- name="video_file",
2055
- field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="label_video_segments", to="endoreg_db.videofile"),
1689
+ model_name='labelvideosegment',
1690
+ name='video_file',
1691
+ field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='label_video_segments', to='endoreg_db.videofile'),
2056
1692
  ),
2057
1693
  migrations.CreateModel(
2058
- name="Frame",
1694
+ name='Frame',
2059
1695
  fields=[
2060
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2061
- ("frame_number", models.PositiveIntegerField()),
2062
- ("relative_path", models.CharField(max_length=512)),
2063
- ("timestamp", models.FloatField(blank=True, null=True)),
2064
- ("is_extracted", models.BooleanField(default=False)),
2065
- ("video", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="frames", to="endoreg_db.videofile")),
1696
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1697
+ ('frame_number', models.PositiveIntegerField()),
1698
+ ('relative_path', models.CharField(max_length=512)),
1699
+ ('timestamp', models.FloatField(blank=True, null=True)),
1700
+ ('is_extracted', models.BooleanField(default=False)),
1701
+ ('video', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='frames', to='endoreg_db.videofile')),
2066
1702
  ],
2067
1703
  options={
2068
- "ordering": ["video", "frame_number"],
1704
+ 'ordering': ['video', 'frame_number'],
2069
1705
  },
2070
1706
  ),
2071
1707
  migrations.CreateModel(
2072
- name="VideoMeta",
1708
+ name='VideoMeta',
2073
1709
  fields=[
2074
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2075
- ("center", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.center")),
2076
- ("endoscope", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.endoscope")),
2077
- ("ffmpeg_meta", models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.ffmpegmeta")),
2078
- ("import_meta", models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.videoimportmeta")),
2079
- ("processor", models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.endoscopyprocessor")),
1710
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1711
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center')),
1712
+ ('endoscope', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscope')),
1713
+ ('ffmpeg_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.ffmpegmeta')),
1714
+ ('import_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videoimportmeta')),
1715
+ ('processor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.endoscopyprocessor')),
2080
1716
  ],
2081
1717
  ),
2082
1718
  migrations.AddField(
2083
- model_name="videofile",
2084
- name="video_meta",
2085
- field=models.OneToOneField(
2086
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="video_file", to="endoreg_db.videometa"
2087
- ),
2088
- ),
2089
- migrations.CreateModel(
2090
- name="VideoMetadata",
2091
- fields=[
2092
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2093
- (
2094
- "sensitive_frame_count",
2095
- models.IntegerField(blank=True, help_text="Number of frames detected as containing sensitive information", null=True),
2096
- ),
2097
- ("sensitive_ratio", models.FloatField(blank=True, help_text="Ratio of sensitive frames to total frames (0.0-1.0)", null=True)),
2098
- ("sensitive_frame_ids", models.TextField(blank=True, help_text="JSON array of sensitive frame indices (0-based)", null=True)),
2099
- ("analyzed_at", models.DateTimeField(auto_now=True, help_text="Timestamp of last analysis")),
2100
- (
2101
- "video",
2102
- models.OneToOneField(
2103
- help_text="Video file this metadata belongs to",
2104
- on_delete=django.db.models.deletion.CASCADE,
2105
- related_name="metadata",
2106
- to="endoreg_db.videofile",
2107
- ),
2108
- ),
1719
+ model_name='videofile',
1720
+ name='video_meta',
1721
+ field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_file', to='endoreg_db.videometa'),
1722
+ ),
1723
+ migrations.CreateModel(
1724
+ name='VideoMetadata',
1725
+ fields=[
1726
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1727
+ ('sensitive_frame_count', models.IntegerField(blank=True, help_text='Number of frames detected as containing sensitive information', null=True)),
1728
+ ('sensitive_ratio', models.FloatField(blank=True, help_text='Ratio of sensitive frames to total frames (0.0-1.0)', null=True)),
1729
+ ('sensitive_frame_ids', models.TextField(blank=True, help_text='JSON array of sensitive frame indices (0-based)', null=True)),
1730
+ ('analyzed_at', models.DateTimeField(auto_now=True, help_text='Timestamp of last analysis')),
1731
+ ('video', models.OneToOneField(help_text='Video file this metadata belongs to', on_delete=django.db.models.deletion.CASCADE, related_name='metadata', to='endoreg_db.videofile')),
2109
1732
  ],
2110
1733
  options={
2111
- "verbose_name": "Video Metadata",
2112
- "verbose_name_plural": "Video Metadata",
2113
- "db_table": "video_metadata",
1734
+ 'verbose_name': 'Video Metadata',
1735
+ 'verbose_name_plural': 'Video Metadata',
1736
+ 'db_table': 'video_metadata',
2114
1737
  },
2115
1738
  ),
2116
1739
  migrations.CreateModel(
2117
- name="VideoPredictionMeta",
1740
+ name='VideoPredictionMeta',
2118
1741
  fields=[
2119
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2120
- ("date_created", models.DateTimeField(auto_now_add=True)),
2121
- ("date_modified", models.DateTimeField(auto_now=True)),
2122
- ("prediction_array", models.BinaryField(blank=True, null=True)),
2123
- ("model_meta", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.modelmeta")),
2124
- ("video_file", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="video_prediction_meta", to="endoreg_db.videofile")),
1742
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1743
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1744
+ ('date_modified', models.DateTimeField(auto_now=True)),
1745
+ ('prediction_array', models.BinaryField(blank=True, null=True)),
1746
+ ('model_meta', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.modelmeta')),
1747
+ ('video_file', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_prediction_meta', to='endoreg_db.videofile')),
2125
1748
  ],
2126
1749
  ),
2127
1750
  migrations.AddField(
2128
- model_name="labelvideosegment",
2129
- name="prediction_meta",
2130
- field=models.ForeignKey(
2131
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="label_video_segments", to="endoreg_db.videopredictionmeta"
2132
- ),
2133
- ),
2134
- migrations.CreateModel(
2135
- name="VideoProcessingHistory",
2136
- fields=[
2137
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2138
- (
2139
- "operation",
2140
- models.CharField(
2141
- choices=[
2142
- ("mask_overlay", "Mask Overlay"),
2143
- ("frame_removal", "Frame Removal"),
2144
- ("analysis", "Sensitivity Analysis"),
2145
- ("reprocessing", "Full Reprocessing"),
2146
- ],
2147
- help_text="Type of processing operation",
2148
- max_length=50,
2149
- ),
2150
- ),
2151
- (
2152
- "status",
2153
- models.CharField(
2154
- choices=[("pending", "Pending"), ("running", "Running"), ("success", "Success"), ("failure", "Failure"), ("cancelled", "Cancelled")],
2155
- default="pending",
2156
- help_text="Current status of the operation",
2157
- max_length=20,
2158
- ),
2159
- ),
2160
- ("config", models.JSONField(default=dict, help_text="Operation configuration (mask settings, frame list, etc.)")),
2161
- ("output_file", models.CharField(blank=True, help_text="Path to output file (relative to MEDIA_ROOT)", max_length=500)),
2162
- ("details", models.TextField(blank=True, help_text="Additional details or error messages")),
2163
- ("task_id", models.CharField(blank=True, help_text="Celery task ID for progress tracking", max_length=100)),
2164
- ("created_at", models.DateTimeField(auto_now_add=True, help_text="When the operation was started")),
2165
- ("completed_at", models.DateTimeField(blank=True, help_text="When the operation completed (success or failure)", null=True)),
2166
- (
2167
- "video",
2168
- models.ForeignKey(
2169
- help_text="Video file this operation was performed on",
2170
- on_delete=django.db.models.deletion.CASCADE,
2171
- related_name="processing_history",
2172
- to="endoreg_db.videofile",
2173
- ),
2174
- ),
1751
+ model_name='labelvideosegment',
1752
+ name='prediction_meta',
1753
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='label_video_segments', to='endoreg_db.videopredictionmeta'),
1754
+ ),
1755
+ migrations.CreateModel(
1756
+ name='VideoProcessingHistory',
1757
+ fields=[
1758
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1759
+ ('operation', models.CharField(choices=[('mask_overlay', 'Mask Overlay'), ('frame_removal', 'Frame Removal'), ('analysis', 'Sensitivity Analysis'), ('reprocessing', 'Full Reprocessing')], help_text='Type of processing operation', max_length=50)),
1760
+ ('status', models.CharField(choices=[('pending', 'Pending'), ('running', 'Running'), ('success', 'Success'), ('failure', 'Failure'), ('cancelled', 'Cancelled')], default='pending', help_text='Current status of the operation', max_length=20)),
1761
+ ('config', models.JSONField(default=dict, help_text='Operation configuration (mask settings, frame list, etc.)')),
1762
+ ('output_file', models.CharField(blank=True, help_text='Path to output file (relative to MEDIA_ROOT)', max_length=500)),
1763
+ ('details', models.TextField(blank=True, help_text='Additional details or error messages')),
1764
+ ('task_id', models.CharField(blank=True, help_text='Celery task ID for progress tracking', max_length=100)),
1765
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='When the operation was started')),
1766
+ ('completed_at', models.DateTimeField(blank=True, help_text='When the operation completed (success or failure)', null=True)),
1767
+ ('video', models.ForeignKey(help_text='Video file this operation was performed on', on_delete=django.db.models.deletion.CASCADE, related_name='processing_history', to='endoreg_db.videofile')),
2175
1768
  ],
2176
1769
  options={
2177
- "verbose_name": "Video Processing History",
2178
- "verbose_name_plural": "Video Processing Histories",
2179
- "db_table": "video_processing_history",
2180
- "ordering": ["-created_at"],
1770
+ 'verbose_name': 'Video Processing History',
1771
+ 'verbose_name_plural': 'Video Processing Histories',
1772
+ 'db_table': 'video_processing_history',
1773
+ 'ordering': ['-created_at'],
2181
1774
  },
2182
1775
  ),
2183
1776
  migrations.CreateModel(
2184
- name="VideoSegmentationAnnotation",
1777
+ name='VideoSegmentationAnnotation',
2185
1778
  fields=[
2186
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2187
- ("start_time", models.FloatField()),
2188
- ("stop_time", models.FloatField()),
2189
- ("is_true", models.BooleanField(default=True)),
2190
- (
2191
- "video_file",
2192
- models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="video_segmentation_annotations", to="endoreg_db.videofile"),
2193
- ),
2194
- ("label", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.videosegmentationlabel")),
1779
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1780
+ ('start_time', models.FloatField()),
1781
+ ('stop_time', models.FloatField()),
1782
+ ('is_true', models.BooleanField(default=True)),
1783
+ ('video_file', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='video_segmentation_annotations', to='endoreg_db.videofile')),
1784
+ ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.videosegmentationlabel')),
2195
1785
  ],
2196
1786
  ),
2197
1787
  migrations.CreateModel(
2198
- name="VideoSegmentationLabelSet",
1788
+ name='VideoSegmentationLabelSet',
2199
1789
  fields=[
2200
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2201
- ("name", models.CharField(max_length=255)),
2202
- ("description", models.TextField(blank=True, null=True)),
2203
- ("labels", models.ManyToManyField(related_name="labelsets", to="endoreg_db.videosegmentationlabel")),
1790
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1791
+ ('name', models.CharField(max_length=255)),
1792
+ ('description', models.TextField(blank=True, null=True)),
1793
+ ('labels', models.ManyToManyField(related_name='labelsets', to='endoreg_db.videosegmentationlabel')),
2204
1794
  ],
2205
1795
  ),
2206
1796
  migrations.AddField(
2207
- model_name="aimodel",
2208
- name="video_segmentation_labelset",
2209
- field=models.ForeignKey(
2210
- blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="ai_models", to="endoreg_db.videosegmentationlabelset"
2211
- ),
1797
+ model_name='aimodel',
1798
+ name='video_segmentation_labelset',
1799
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='ai_models', to='endoreg_db.videosegmentationlabelset'),
2212
1800
  ),
2213
1801
  migrations.AddField(
2214
- model_name="videofile",
2215
- name="state",
2216
- field=models.OneToOneField(
2217
- blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="video_file", to="endoreg_db.videostate"
2218
- ),
2219
- ),
2220
- migrations.CreateModel(
2221
- name="CenterWaste",
2222
- fields=[
2223
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2224
- ("year", models.IntegerField()),
2225
- ("quantity", models.FloatField()),
2226
- ("center", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="center_wastes", to="endoreg_db.center")),
2227
- ("emission_factor", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.emissionfactor")),
2228
- ("unit", models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to="endoreg_db.unit")),
2229
- ("waste", models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="endoreg_db.waste")),
2230
- ],
2231
- ),
2232
- migrations.CreateModel(
2233
- name="ImageClassificationAnnotation",
2234
- fields=[
2235
- ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
2236
- ("value", models.BooleanField()),
2237
- ("float_value", models.FloatField(blank=True, null=True)),
2238
- ("annotator", models.CharField(blank=True, max_length=255, null=True)),
2239
- ("date_created", models.DateTimeField(auto_now_add=True)),
2240
- ("date_modified", models.DateTimeField(auto_now=True)),
2241
- (
2242
- "frame",
2243
- models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="image_classification_annotations", to="endoreg_db.frame"),
2244
- ),
2245
- (
2246
- "information_source",
2247
- models.ForeignKey(
2248
- blank=True,
2249
- default=None,
2250
- null=True,
2251
- on_delete=django.db.models.deletion.SET_NULL,
2252
- related_name="image_classification_annotations",
2253
- to="endoreg_db.informationsource",
2254
- ),
2255
- ),
2256
- (
2257
- "label",
2258
- models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name="image_classification_annotations", to="endoreg_db.label"),
2259
- ),
2260
- (
2261
- "model_meta",
2262
- models.ForeignKey(
2263
- blank=True,
2264
- default=None,
2265
- null=True,
2266
- on_delete=django.db.models.deletion.SET_NULL,
2267
- related_name="image_classification_annotations",
2268
- to="endoreg_db.modelmeta",
2269
- ),
2270
- ),
1802
+ model_name='videofile',
1803
+ name='state',
1804
+ field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_file', to='endoreg_db.videostate'),
1805
+ ),
1806
+ migrations.CreateModel(
1807
+ name='CenterWaste',
1808
+ fields=[
1809
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1810
+ ('year', models.IntegerField()),
1811
+ ('quantity', models.FloatField()),
1812
+ ('center', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='center_wastes', to='endoreg_db.center')),
1813
+ ('emission_factor', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.emissionfactor')),
1814
+ ('unit', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='endoreg_db.unit')),
1815
+ ('waste', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.waste')),
1816
+ ],
1817
+ ),
1818
+ migrations.CreateModel(
1819
+ name='ImageClassificationAnnotation',
1820
+ fields=[
1821
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
1822
+ ('value', models.BooleanField()),
1823
+ ('float_value', models.FloatField(blank=True, null=True)),
1824
+ ('annotator', models.CharField(blank=True, max_length=255, null=True)),
1825
+ ('date_created', models.DateTimeField(auto_now_add=True)),
1826
+ ('date_modified', models.DateTimeField(auto_now=True)),
1827
+ ('frame', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.frame')),
1828
+ ('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')),
1829
+ ('label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_classification_annotations', to='endoreg_db.label')),
1830
+ ('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')),
2271
1831
  ],
2272
1832
  options={
2273
- "indexes": [
2274
- models.Index(fields=["frame", "label"], name="endoreg_db__frame_i_47f916_idx"),
2275
- models.Index(fields=["frame"], name="endoreg_db__frame_i_92c75a_idx"),
2276
- ],
1833
+ 'indexes': [models.Index(fields=['frame', 'label'], name='endoreg_db__frame_i_47f916_idx'), models.Index(fields=['frame'], name='endoreg_db__frame_i_92c75a_idx')],
2277
1834
  },
2278
1835
  ),
2279
1836
  migrations.AddConstraint(
2280
- model_name="patientexternalid",
2281
- constraint=models.UniqueConstraint(fields=("origin", "external_id"), name="uniq_patient_external_id_per_origin"),
1837
+ model_name='patientexternalid',
1838
+ constraint=models.UniqueConstraint(fields=('origin', 'external_id'), name='uniq_patient_external_id_per_origin'),
2282
1839
  ),
2283
1840
  migrations.AddIndex(
2284
- model_name="patientfinding",
2285
- index=models.Index(fields=["patient_examination", "finding"], name="endoreg_db__patient_54869f_idx"),
1841
+ model_name='patientfinding',
1842
+ index=models.Index(fields=['patient_examination', 'finding'], name='endoreg_db__patient_54869f_idx'),
2286
1843
  ),
2287
1844
  migrations.AddIndex(
2288
- model_name="patientfinding",
2289
- index=models.Index(fields=["patient_examination", "is_active"], name="endoreg_db__patient_9359f8_idx"),
1845
+ model_name='patientfinding',
1846
+ index=models.Index(fields=['patient_examination', 'is_active'], name='endoreg_db__patient_9359f8_idx'),
2290
1847
  ),
2291
1848
  migrations.AddIndex(
2292
- model_name="patientfinding",
2293
- index=models.Index(fields=["created_at"], name="endoreg_db__created_b44d86_idx"),
1849
+ model_name='patientfinding',
1850
+ index=models.Index(fields=['created_at'], name='endoreg_db__created_b44d86_idx'),
2294
1851
  ),
2295
1852
  migrations.AddIndex(
2296
- model_name="patientfinding",
2297
- index=models.Index(fields=["finding", "is_active"], name="endoreg_db__finding_2f036b_idx"),
1853
+ model_name='patientfinding',
1854
+ index=models.Index(fields=['finding', 'is_active'], name='endoreg_db__finding_2f036b_idx'),
2298
1855
  ),
2299
1856
  migrations.AddConstraint(
2300
- model_name="patientfinding",
2301
- constraint=models.UniqueConstraint(
2302
- condition=models.Q(("is_active", True)), fields=("patient_examination", "finding"), name="unique_active_finding_per_examination"
2303
- ),
1857
+ model_name='patientfinding',
1858
+ constraint=models.UniqueConstraint(condition=models.Q(('is_active', True)), fields=('patient_examination', 'finding'), name='unique_active_finding_per_examination'),
2304
1859
  ),
2305
1860
  migrations.AddConstraint(
2306
- model_name="patientfinding",
2307
- constraint=models.CheckConstraint(
2308
- check=models.Q(
2309
- models.Q(("deactivated_at__isnull", True), ("deactivated_by__isnull", True)),
2310
- models.Q(("deactivated_at__isnull", False), ("deactivated_by__isnull", False), ("is_active", False)),
2311
- _connector="OR",
2312
- ),
2313
- name="deactivation_fields_consistency",
2314
- ),
1861
+ model_name='patientfinding',
1862
+ 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'),
2315
1863
  ),
2316
1864
  migrations.AlterUniqueTogether(
2317
- name="frame",
2318
- unique_together={("video", "frame_number")},
1865
+ name='frame',
1866
+ unique_together={('video', 'frame_number')},
2319
1867
  ),
2320
1868
  migrations.AddIndex(
2321
- model_name="videopredictionmeta",
2322
- index=models.Index(fields=["model_meta", "video_file"], name="endoreg_db__model_m_208dee_idx"),
1869
+ model_name='videopredictionmeta',
1870
+ index=models.Index(fields=['model_meta', 'video_file'], name='endoreg_db__model_m_208dee_idx'),
2323
1871
  ),
2324
1872
  migrations.AddConstraint(
2325
- model_name="videopredictionmeta",
2326
- constraint=models.UniqueConstraint(fields=("model_meta", "video_file"), name="unique_prediction_per_video_model"),
1873
+ model_name='videopredictionmeta',
1874
+ constraint=models.UniqueConstraint(fields=('model_meta', 'video_file'), name='unique_prediction_per_video_model'),
2327
1875
  ),
2328
1876
  migrations.AddIndex(
2329
- model_name="labelvideosegment",
2330
- index=models.Index(fields=["video_file", "label", "start_frame_number"], name="endoreg_db__video_f_fa9326_idx"),
1877
+ model_name='labelvideosegment',
1878
+ index=models.Index(fields=['video_file', 'label', 'start_frame_number'], name='endoreg_db__video_f_fa9326_idx'),
2331
1879
  ),
2332
1880
  migrations.AddIndex(
2333
- model_name="labelvideosegment",
2334
- index=models.Index(fields=["prediction_meta", "label"], name="endoreg_db__predict_2bfba4_idx"),
1881
+ model_name='labelvideosegment',
1882
+ index=models.Index(fields=['prediction_meta', 'label'], name='endoreg_db__predict_2bfba4_idx'),
2335
1883
  ),
2336
1884
  migrations.AddConstraint(
2337
- model_name="labelvideosegment",
2338
- constraint=models.CheckConstraint(check=models.Q(("start_frame_number__lt", models.F("end_frame_number"))), name="segment_start_lt_end"),
1885
+ model_name='labelvideosegment',
1886
+ constraint=models.CheckConstraint(condition=models.Q(('start_frame_number__lt', models.F('end_frame_number'))), name='segment_start_lt_end'),
2339
1887
  ),
2340
1888
  migrations.AddIndex(
2341
- model_name="videoprocessinghistory",
2342
- index=models.Index(fields=["video", "-created_at"], name="video_proce_video_i_98ffe0_idx"),
1889
+ model_name='videoprocessinghistory',
1890
+ index=models.Index(fields=['video', '-created_at'], name='video_proce_video_i_98ffe0_idx'),
2343
1891
  ),
2344
1892
  migrations.AddIndex(
2345
- model_name="videoprocessinghistory",
2346
- index=models.Index(fields=["task_id"], name="video_proce_task_id_ec8b15_idx"),
1893
+ model_name='videoprocessinghistory',
1894
+ index=models.Index(fields=['task_id'], name='video_proce_task_id_ec8b15_idx'),
2347
1895
  ),
2348
1896
  migrations.AddIndex(
2349
- model_name="videoprocessinghistory",
2350
- index=models.Index(fields=["status"], name="video_proce_status_6f71fd_idx"),
1897
+ model_name='videoprocessinghistory',
1898
+ index=models.Index(fields=['status'], name='video_proce_status_6f71fd_idx'),
2351
1899
  ),
2352
1900
  migrations.AddConstraint(
2353
- model_name="videosegmentationannotation",
2354
- constraint=models.CheckConstraint(check=models.Q(("start_time__lt", models.F("stop_time"))), name="start_time_less_than_stop_time"),
1901
+ model_name='videosegmentationannotation',
1902
+ constraint=models.CheckConstraint(condition=models.Q(('start_time__lt', models.F('stop_time'))), name='start_time_less_than_stop_time'),
2355
1903
  ),
2356
1904
  ]