endoreg-db 0.6.0__py3-none-any.whl → 0.6.2__py3-none-any.whl

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

Potentially problematic release.


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

Files changed (416) hide show
  1. endoreg_db/case_generator/__init__.py +0 -0
  2. endoreg_db/case_generator/case_generator.py +159 -0
  3. endoreg_db/case_generator/lab_sample_factory.py +33 -0
  4. endoreg_db/case_generator/utils.py +30 -0
  5. endoreg_db/data/__init__.py +118 -0
  6. endoreg_db/data/agl_service/data.yaml +19 -0
  7. endoreg_db/data/ai_model/data.yaml +7 -0
  8. endoreg_db/data/ai_model_label/label/data.yaml +88 -0
  9. endoreg_db/data/ai_model_label/label-set/data.yaml +21 -0
  10. endoreg_db/data/ai_model_label/label-type/data.yaml +7 -0
  11. endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +5 -0
  12. endoreg_db/data/ai_model_type/data.yaml +7 -0
  13. endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml +176 -0
  14. endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml +20 -0
  15. endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +167 -0
  16. endoreg_db/data/case_template/rule/01_patient-set-age.yaml +8 -0
  17. endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +9 -0
  18. endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +23 -0
  19. endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +19 -0
  20. endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +19 -0
  21. endoreg_db/data/case_template/rule/19_create_patient.yaml +17 -0
  22. endoreg_db/data/case_template/rule_type/base_types.yaml +35 -0
  23. endoreg_db/data/case_template/rule_value/.init +0 -0
  24. endoreg_db/data/case_template/rule_value_type/base_types.yaml +59 -0
  25. endoreg_db/data/case_template/template/base.yaml +8 -0
  26. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +3 -0
  27. endoreg_db/data/case_template/tmp/_rule_value +13 -0
  28. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -0
  29. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +10 -0
  30. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +7 -0
  31. endoreg_db/data/center/data.yaml +90 -0
  32. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -0
  33. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -0
  34. endoreg_db/data/contraindication/bleeding.yaml +11 -0
  35. endoreg_db/data/disease/cardiovascular.yaml +37 -0
  36. endoreg_db/data/disease/hepatology.yaml +5 -0
  37. endoreg_db/data/disease/misc.yaml +6 -0
  38. endoreg_db/data/disease/renal.yaml +5 -0
  39. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +6 -0
  40. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +6 -0
  41. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +41 -0
  42. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +20 -0
  43. endoreg_db/data/distribution/date/patient.yaml +7 -0
  44. endoreg_db/data/distribution/multiple_categorical/.init +0 -0
  45. endoreg_db/data/distribution/numeric/data.yaml +14 -0
  46. endoreg_db/data/distribution/single_categorical/patient.yaml +7 -0
  47. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -0
  48. endoreg_db/data/endoscope/data.yaml +93 -0
  49. endoreg_db/data/endoscope_type/data.yaml +11 -0
  50. endoreg_db/data/endoscopy_processor/data.yaml +47 -0
  51. endoreg_db/data/event/cardiology.yaml +28 -0
  52. endoreg_db/data/event/neurology.yaml +14 -0
  53. endoreg_db/data/event/surgery.yaml +13 -0
  54. endoreg_db/data/event/thrombembolism.yaml +20 -0
  55. endoreg_db/data/examination/examinations/data.yaml +66 -0
  56. endoreg_db/data/examination/time/data.yaml +48 -0
  57. endoreg_db/data/examination/time-type/data.yaml +8 -0
  58. endoreg_db/data/examination/type/data.yaml +5 -0
  59. endoreg_db/data/examination_indication/endoscopy.yaml +8 -0
  60. endoreg_db/data/examination_indication_classification/endoscopy.yaml +8 -0
  61. endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +101 -0
  62. endoreg_db/data/finding/data.yaml +141 -0
  63. endoreg_db/data/finding_intervention/endoscopy.yaml +138 -0
  64. endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
  65. endoreg_db/data/finding_location_classification/colonoscopy.yaml +46 -0
  66. endoreg_db/data/finding_location_classification_choice/colonoscopy.yaml +240 -0
  67. endoreg_db/data/finding_morphology_classification/colonoscopy.yaml +48 -0
  68. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_circularity_default.yaml +34 -0
  69. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_nice.yaml +20 -0
  70. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_paris.yaml +65 -0
  71. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_planarity_default.yaml +56 -0
  72. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_surface_intact_default.yaml +39 -0
  73. endoreg_db/data/finding_morphology_classification_choice/colonoscopy_size.yaml +57 -0
  74. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +79 -0
  75. endoreg_db/data/finding_type/data.yaml +30 -0
  76. endoreg_db/data/gender/data.yaml +35 -0
  77. endoreg_db/data/information_source/data.yaml +30 -0
  78. endoreg_db/data/information_source/medication.yaml +6 -0
  79. endoreg_db/data/lab_value/cardiac_enzymes.yaml +37 -0
  80. endoreg_db/data/lab_value/coagulation.yaml +54 -0
  81. endoreg_db/data/lab_value/electrolytes.yaml +228 -0
  82. endoreg_db/data/lab_value/gastrointestinal_function.yaml +133 -0
  83. endoreg_db/data/lab_value/hematology.yaml +184 -0
  84. endoreg_db/data/lab_value/hormones.yaml +59 -0
  85. endoreg_db/data/lab_value/lipids.yaml +53 -0
  86. endoreg_db/data/lab_value/misc.yaml +33 -0
  87. endoreg_db/data/lab_value/renal_function.yaml +12 -0
  88. endoreg_db/data/log_type/data.yaml +57 -0
  89. endoreg_db/data/lx_client_tag/base.yaml +54 -0
  90. endoreg_db/data/lx_client_type/base.yaml +30 -0
  91. endoreg_db/data/lx_permission/base.yaml +24 -0
  92. endoreg_db/data/lx_permission/endoreg.yaml +52 -0
  93. endoreg_db/data/material/material.yaml +91 -0
  94. endoreg_db/data/medication/anticoagulation.yaml +65 -0
  95. endoreg_db/data/medication/tah.yaml +70 -0
  96. endoreg_db/data/medication_indication/anticoagulation.yaml +115 -0
  97. endoreg_db/data/medication_indication_type/data.yaml +11 -0
  98. endoreg_db/data/medication_indication_type/thrombembolism.yaml +41 -0
  99. endoreg_db/data/medication_intake_time/base.yaml +31 -0
  100. endoreg_db/data/medication_schedule/apixaban.yaml +95 -0
  101. endoreg_db/data/medication_schedule/ass.yaml +12 -0
  102. endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -0
  103. endoreg_db/data/names_first/first_names.yaml +51 -0
  104. endoreg_db/data/names_last/last_names.yaml +51 -0
  105. endoreg_db/data/network_device/data.yaml +59 -0
  106. endoreg_db/data/network_device_type/data.yaml +12 -0
  107. endoreg_db/data/organ/data.yaml +29 -0
  108. endoreg_db/data/patient_lab_sample_type/generic.yaml +6 -0
  109. endoreg_db/data/pdf_type/data.yaml +29 -0
  110. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -0
  111. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -0
  112. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -0
  113. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -0
  114. endoreg_db/data/profession/data.yaml +70 -0
  115. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -0
  116. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +30 -0
  117. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -0
  118. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -0
  119. endoreg_db/data/tmp/chronic_kidney_disease.yaml +0 -0
  120. endoreg_db/data/tmp/congestive_heart_failure.yaml +0 -0
  121. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -0
  122. endoreg_db/data/unit/concentration.yaml +92 -0
  123. endoreg_db/data/unit/data.yaml +17 -0
  124. endoreg_db/data/unit/length.yaml +31 -0
  125. endoreg_db/data/unit/misc.yaml +20 -0
  126. endoreg_db/data/unit/rate.yaml +6 -0
  127. endoreg_db/data/unit/time.yaml +13 -0
  128. endoreg_db/data/unit/volume.yaml +35 -0
  129. endoreg_db/data/unit/weight.yaml +38 -0
  130. endoreg_db/data/waste/data.yaml +12 -0
  131. endoreg_db/forms/__init__.py +5 -0
  132. endoreg_db/forms/examination_form.py +11 -0
  133. endoreg_db/forms/patient_finding_intervention_form.py +19 -0
  134. endoreg_db/forms/patient_form.py +26 -0
  135. endoreg_db/forms/questionnaires/__init__.py +1 -0
  136. endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -0
  137. endoreg_db/forms/settings/__init__.py +8 -0
  138. endoreg_db/forms/unit.py +6 -0
  139. endoreg_db/management/__init__.py +0 -0
  140. endoreg_db/management/commands/__init__.py +0 -0
  141. endoreg_db/management/commands/_load_model_template.py +41 -0
  142. endoreg_db/management/commands/delete_all.py +18 -0
  143. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -0
  144. endoreg_db/management/commands/fix_auth_permission.py +20 -0
  145. endoreg_db/management/commands/load_active_model_data.py +45 -0
  146. endoreg_db/management/commands/load_ai_model_data.py +79 -0
  147. endoreg_db/management/commands/load_ai_model_label_data.py +59 -0
  148. endoreg_db/management/commands/load_base_db_data.py +178 -0
  149. endoreg_db/management/commands/load_center_data.py +43 -0
  150. endoreg_db/management/commands/load_contraindication_data.py +41 -0
  151. endoreg_db/management/commands/load_disease_classification_choices_data.py +41 -0
  152. endoreg_db/management/commands/load_disease_classification_data.py +41 -0
  153. endoreg_db/management/commands/load_disease_data.py +62 -0
  154. endoreg_db/management/commands/load_distribution_data.py +66 -0
  155. endoreg_db/management/commands/load_endoscope_data.py +68 -0
  156. endoreg_db/management/commands/load_event_data.py +41 -0
  157. endoreg_db/management/commands/load_examination_data.py +75 -0
  158. endoreg_db/management/commands/load_examination_indication_data.py +65 -0
  159. endoreg_db/management/commands/load_finding_data.py +171 -0
  160. endoreg_db/management/commands/load_g_play_data.py +113 -0
  161. endoreg_db/management/commands/load_gender_data.py +44 -0
  162. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +133 -0
  163. endoreg_db/management/commands/load_information_source.py +45 -0
  164. endoreg_db/management/commands/load_lab_value_data.py +50 -0
  165. endoreg_db/management/commands/load_logging_data.py +39 -0
  166. endoreg_db/management/commands/load_lx_data.py +64 -0
  167. endoreg_db/management/commands/load_medication_data.py +103 -0
  168. endoreg_db/management/commands/load_medication_indication_data.py +63 -0
  169. endoreg_db/management/commands/load_medication_indication_type_data.py +41 -0
  170. endoreg_db/management/commands/load_medication_intake_time_data.py +41 -0
  171. endoreg_db/management/commands/load_medication_schedule_data.py +55 -0
  172. endoreg_db/management/commands/load_name_data.py +37 -0
  173. endoreg_db/management/commands/load_network_data.py +57 -0
  174. endoreg_db/management/commands/load_organ_data.py +43 -0
  175. endoreg_db/management/commands/load_pdf_type_data.py +61 -0
  176. endoreg_db/management/commands/load_profession_data.py +44 -0
  177. endoreg_db/management/commands/load_report_reader_flag_data.py +46 -0
  178. endoreg_db/management/commands/load_unit_data.py +46 -0
  179. endoreg_db/management/commands/load_user_groups.py +28 -0
  180. endoreg_db/management/commands/register_ai_model.py +64 -0
  181. endoreg_db/management/commands/reset_celery_schedule.py +9 -0
  182. endoreg_db/migrations/0001_initial.py +2045 -0
  183. endoreg_db/migrations/0002_alter_frame_image_alter_rawframe_image.py +23 -0
  184. endoreg_db/migrations/0003_alter_frame_image_alter_rawframe_image.py +23 -0
  185. endoreg_db/migrations/0004_alter_rawvideofile_file_alter_video_file.py +25 -0
  186. endoreg_db/migrations/0005_rawvideofile_frame_count_and_more.py +33 -0
  187. endoreg_db/migrations/0006_frame_extracted_rawframe_extracted.py +23 -0
  188. endoreg_db/migrations/0007_rename_pseudo_patient_video_patient_and_more.py +24 -0
  189. endoreg_db/migrations/0008_remove_reportfile_patient_examination_and_more.py +48 -0
  190. endoreg_db/migrations/__init__.py +0 -0
  191. endoreg_db/models/__init__.py +376 -0
  192. endoreg_db/models/ai_model/__init__.py +4 -0
  193. endoreg_db/models/ai_model/active_model.py +9 -0
  194. endoreg_db/models/ai_model/ai_model.py +103 -0
  195. endoreg_db/models/ai_model/lightning/__init__.py +3 -0
  196. endoreg_db/models/ai_model/lightning/inference_dataset.py +53 -0
  197. endoreg_db/models/ai_model/lightning/multilabel_classification_net.py +155 -0
  198. endoreg_db/models/ai_model/lightning/postprocess.py +53 -0
  199. endoreg_db/models/ai_model/lightning/predict.py +172 -0
  200. endoreg_db/models/ai_model/lightning/prediction_visualizer.py +55 -0
  201. endoreg_db/models/ai_model/lightning/preprocess.py +68 -0
  202. endoreg_db/models/ai_model/lightning/run_visualizer.py +21 -0
  203. endoreg_db/models/ai_model/model_meta.py +250 -0
  204. endoreg_db/models/ai_model/model_type.py +36 -0
  205. endoreg_db/models/ai_model/utils.py +8 -0
  206. endoreg_db/models/annotation/__init__.py +32 -0
  207. endoreg_db/models/annotation/anonymized_image_annotation.py +115 -0
  208. endoreg_db/models/annotation/binary_classification_annotation_task.py +117 -0
  209. endoreg_db/models/annotation/image_classification.py +86 -0
  210. endoreg_db/models/annotation/video_segmentation_annotation.py +52 -0
  211. endoreg_db/models/annotation/video_segmentation_labelset.py +20 -0
  212. endoreg_db/models/case/__init__.py +1 -0
  213. endoreg_db/models/case/case.py +34 -0
  214. endoreg_db/models/case_template/__init__.py +15 -0
  215. endoreg_db/models/case_template/case_template.py +125 -0
  216. endoreg_db/models/case_template/case_template_rule.py +276 -0
  217. endoreg_db/models/case_template/case_template_rule_value.py +88 -0
  218. endoreg_db/models/case_template/case_template_type.py +28 -0
  219. endoreg_db/models/center/__init__.py +11 -0
  220. endoreg_db/models/center/center.py +51 -0
  221. endoreg_db/models/center/center_product.py +33 -0
  222. endoreg_db/models/center/center_resource.py +33 -0
  223. endoreg_db/models/center/center_waste.py +16 -0
  224. endoreg_db/models/contraindication/__init__.py +21 -0
  225. endoreg_db/models/data_file/__init__.py +39 -0
  226. endoreg_db/models/data_file/base_classes/__init__.py +7 -0
  227. endoreg_db/models/data_file/base_classes/abstract_frame.py +100 -0
  228. endoreg_db/models/data_file/base_classes/abstract_pdf.py +136 -0
  229. endoreg_db/models/data_file/base_classes/abstract_video.py +807 -0
  230. endoreg_db/models/data_file/base_classes/frame_helpers.py +17 -0
  231. endoreg_db/models/data_file/base_classes/prepare_bulk_frames.py +19 -0
  232. endoreg_db/models/data_file/base_classes/utils.py +80 -0
  233. endoreg_db/models/data_file/frame.py +29 -0
  234. endoreg_db/models/data_file/import_classes/__init__.py +18 -0
  235. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +35 -0
  236. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -0
  237. endoreg_db/models/data_file/import_classes/processing_functions/video.py +260 -0
  238. endoreg_db/models/data_file/import_classes/raw_pdf.py +260 -0
  239. endoreg_db/models/data_file/import_classes/raw_video.py +288 -0
  240. endoreg_db/models/data_file/metadata/__init__.py +13 -0
  241. endoreg_db/models/data_file/metadata/pdf_meta.py +74 -0
  242. endoreg_db/models/data_file/metadata/sensitive_meta.py +290 -0
  243. endoreg_db/models/data_file/metadata/video_meta.py +199 -0
  244. endoreg_db/models/data_file/report_file.py +56 -0
  245. endoreg_db/models/data_file/video/__init__.py +11 -0
  246. endoreg_db/models/data_file/video/import_meta.py +25 -0
  247. endoreg_db/models/data_file/video/video.py +196 -0
  248. endoreg_db/models/data_file/video_segment.py +214 -0
  249. endoreg_db/models/disease.py +79 -0
  250. endoreg_db/models/emission/__init__.py +5 -0
  251. endoreg_db/models/emission/emission_factor.py +85 -0
  252. endoreg_db/models/event.py +73 -0
  253. endoreg_db/models/examination/__init__.py +9 -0
  254. endoreg_db/models/examination/examination.py +67 -0
  255. endoreg_db/models/examination/examination_indication.py +170 -0
  256. endoreg_db/models/examination/examination_time.py +53 -0
  257. endoreg_db/models/examination/examination_time_type.py +48 -0
  258. endoreg_db/models/examination/examination_type.py +40 -0
  259. endoreg_db/models/finding/__init__.py +11 -0
  260. endoreg_db/models/finding/finding.py +75 -0
  261. endoreg_db/models/finding/finding_intervention.py +60 -0
  262. endoreg_db/models/finding/finding_location_classification.py +94 -0
  263. endoreg_db/models/finding/finding_morphology_classification.py +89 -0
  264. endoreg_db/models/finding/finding_type.py +22 -0
  265. endoreg_db/models/hardware/__init__.py +2 -0
  266. endoreg_db/models/hardware/endoscope.py +60 -0
  267. endoreg_db/models/hardware/endoscopy_processor.py +155 -0
  268. endoreg_db/models/information_source.py +29 -0
  269. endoreg_db/models/label/__init__.py +1 -0
  270. endoreg_db/models/label/label.py +112 -0
  271. endoreg_db/models/laboratory/__init__.py +1 -0
  272. endoreg_db/models/laboratory/lab_value.py +111 -0
  273. endoreg_db/models/logging/__init__.py +11 -0
  274. endoreg_db/models/logging/agl_service.py +19 -0
  275. endoreg_db/models/logging/base.py +22 -0
  276. endoreg_db/models/logging/log_type.py +23 -0
  277. endoreg_db/models/logging/network_device.py +27 -0
  278. endoreg_db/models/lx/__init__.py +4 -0
  279. endoreg_db/models/lx/client.py +57 -0
  280. endoreg_db/models/lx/identity.py +34 -0
  281. endoreg_db/models/lx/permission.py +18 -0
  282. endoreg_db/models/lx/user.py +16 -0
  283. endoreg_db/models/medication/__init__.py +19 -0
  284. endoreg_db/models/medication/medication.py +33 -0
  285. endoreg_db/models/medication/medication_indication.py +50 -0
  286. endoreg_db/models/medication/medication_indication_type.py +34 -0
  287. endoreg_db/models/medication/medication_intake_time.py +26 -0
  288. endoreg_db/models/medication/medication_schedule.py +37 -0
  289. endoreg_db/models/network/__init__.py +9 -0
  290. endoreg_db/models/network/agl_service.py +38 -0
  291. endoreg_db/models/network/network_device.py +58 -0
  292. endoreg_db/models/network/network_device_type.py +23 -0
  293. endoreg_db/models/organ/__init__.py +38 -0
  294. endoreg_db/models/other/__init__.py +23 -0
  295. endoreg_db/models/other/distribution/__init__.py +44 -0
  296. endoreg_db/models/other/distribution/base_value_distribution.py +20 -0
  297. endoreg_db/models/other/distribution/date_value_distribution.py +91 -0
  298. endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +32 -0
  299. endoreg_db/models/other/distribution/numeric_value_distribution.py +97 -0
  300. endoreg_db/models/other/distribution/single_categorical_value_distribution.py +22 -0
  301. endoreg_db/models/other/distribution.py +5 -0
  302. endoreg_db/models/other/material.py +20 -0
  303. endoreg_db/models/other/resource.py +18 -0
  304. endoreg_db/models/other/transport_route.py +22 -0
  305. endoreg_db/models/other/waste.py +20 -0
  306. endoreg_db/models/patient/__init__.py +24 -0
  307. endoreg_db/models/patient/patient_examination.py +182 -0
  308. endoreg_db/models/patient/patient_finding.py +143 -0
  309. endoreg_db/models/patient/patient_finding_intervention.py +26 -0
  310. endoreg_db/models/patient/patient_finding_location.py +120 -0
  311. endoreg_db/models/patient/patient_finding_morphology.py +166 -0
  312. endoreg_db/models/permissions/__init__.py +44 -0
  313. endoreg_db/models/persons/__init__.py +34 -0
  314. endoreg_db/models/persons/examiner/__init__.py +2 -0
  315. endoreg_db/models/persons/examiner/examiner.py +60 -0
  316. endoreg_db/models/persons/examiner/examiner_type.py +2 -0
  317. endoreg_db/models/persons/first_name.py +18 -0
  318. endoreg_db/models/persons/gender.py +22 -0
  319. endoreg_db/models/persons/last_name.py +20 -0
  320. endoreg_db/models/persons/patient/__init__.py +8 -0
  321. endoreg_db/models/persons/patient/patient.py +389 -0
  322. endoreg_db/models/persons/patient/patient_disease.py +22 -0
  323. endoreg_db/models/persons/patient/patient_event.py +52 -0
  324. endoreg_db/models/persons/patient/patient_examination_indication.py +32 -0
  325. endoreg_db/models/persons/patient/patient_lab_sample.py +108 -0
  326. endoreg_db/models/persons/patient/patient_lab_value.py +197 -0
  327. endoreg_db/models/persons/patient/patient_medication.py +59 -0
  328. endoreg_db/models/persons/patient/patient_medication_schedule.py +88 -0
  329. endoreg_db/models/persons/person.py +31 -0
  330. endoreg_db/models/persons/portal_user_information.py +27 -0
  331. endoreg_db/models/prediction/__init__.py +8 -0
  332. endoreg_db/models/prediction/image_classification.py +51 -0
  333. endoreg_db/models/prediction/video_prediction_meta.py +306 -0
  334. endoreg_db/models/product/__init__.py +14 -0
  335. endoreg_db/models/product/product.py +110 -0
  336. endoreg_db/models/product/product_group.py +27 -0
  337. endoreg_db/models/product/product_material.py +28 -0
  338. endoreg_db/models/product/product_weight.py +38 -0
  339. endoreg_db/models/product/reference_product.py +115 -0
  340. endoreg_db/models/questionnaires/__init__.py +114 -0
  341. endoreg_db/models/quiz/__init__.py +9 -0
  342. endoreg_db/models/quiz/quiz_answer.py +41 -0
  343. endoreg_db/models/quiz/quiz_question.py +54 -0
  344. endoreg_db/models/report_reader/__init__.py +7 -0
  345. endoreg_db/models/report_reader/report_reader_config.py +53 -0
  346. endoreg_db/models/report_reader/report_reader_flag.py +20 -0
  347. endoreg_db/models/rules/__init__.py +5 -0
  348. endoreg_db/models/rules/rule.py +24 -0
  349. endoreg_db/models/rules/rule_applicator.py +224 -0
  350. endoreg_db/models/rules/rule_attribute_dtype.py +19 -0
  351. endoreg_db/models/rules/rule_type.py +22 -0
  352. endoreg_db/models/rules/ruleset.py +19 -0
  353. endoreg_db/models/unit.py +22 -0
  354. endoreg_db/queries/__init__.py +5 -0
  355. endoreg_db/queries/annotations/__init__.py +3 -0
  356. endoreg_db/queries/annotations/legacy.py +158 -0
  357. endoreg_db/queries/get/__init__.py +6 -0
  358. endoreg_db/queries/get/annotation.py +0 -0
  359. endoreg_db/queries/get/center.py +42 -0
  360. endoreg_db/queries/get/model.py +13 -0
  361. endoreg_db/queries/get/patient.py +14 -0
  362. endoreg_db/queries/get/patient_examination.py +20 -0
  363. endoreg_db/queries/get/prediction.py +0 -0
  364. endoreg_db/queries/get/report_file.py +33 -0
  365. endoreg_db/queries/get/video.py +31 -0
  366. endoreg_db/queries/get/video_import_meta.py +0 -0
  367. endoreg_db/queries/get/video_prediction_meta.py +0 -0
  368. endoreg_db/queries/sanity/__init_.py +0 -0
  369. endoreg_db/serializers/__init__.py +10 -0
  370. endoreg_db/serializers/ai_model.py +19 -0
  371. endoreg_db/serializers/annotation.py +14 -0
  372. endoreg_db/serializers/center.py +11 -0
  373. endoreg_db/serializers/examination.py +33 -0
  374. endoreg_db/serializers/frame.py +9 -0
  375. endoreg_db/serializers/hardware.py +21 -0
  376. endoreg_db/serializers/label.py +22 -0
  377. endoreg_db/serializers/patient.py +33 -0
  378. endoreg_db/serializers/prediction.py +10 -0
  379. endoreg_db/serializers/raw_video_meta_validation.py +13 -0
  380. endoreg_db/serializers/report_file.py +7 -0
  381. endoreg_db/serializers/video.py +20 -0
  382. endoreg_db/serializers/video_segmentation.py +492 -0
  383. endoreg_db/templates/admin/patient_finding_intervention.html +253 -0
  384. endoreg_db/templates/admin/start_examination.html +12 -0
  385. endoreg_db/templates/timeline.html +176 -0
  386. endoreg_db/utils/__init__.py +36 -0
  387. endoreg_db/utils/cropping.py +29 -0
  388. endoreg_db/utils/dataloader.py +118 -0
  389. endoreg_db/utils/dates.py +39 -0
  390. endoreg_db/utils/file_operations.py +30 -0
  391. endoreg_db/utils/hashs.py +152 -0
  392. endoreg_db/utils/legacy_ocr.py +201 -0
  393. endoreg_db/utils/names.py +74 -0
  394. endoreg_db/utils/ocr.py +190 -0
  395. endoreg_db/utils/parse_and_generate_yaml.py +46 -0
  396. endoreg_db/utils/pydantic_models/__init__.py +6 -0
  397. endoreg_db/utils/pydantic_models/db_config.py +57 -0
  398. endoreg_db/utils/uuid.py +4 -0
  399. endoreg_db/utils/validate_endo_roi.py +19 -0
  400. endoreg_db/utils/validate_subcategory_dict.py +91 -0
  401. endoreg_db/utils/video/__init__.py +13 -0
  402. endoreg_db/utils/video/extract_frames.py +121 -0
  403. endoreg_db/utils/video/transcode_videofile.py +111 -0
  404. endoreg_db/views/__init__.py +2 -0
  405. endoreg_db/views/csrf.py +7 -0
  406. endoreg_db/views/patient_views.py +90 -0
  407. endoreg_db/views/raw_video_meta_validation_views.py +38 -0
  408. endoreg_db/views/report_views.py +96 -0
  409. endoreg_db/views/video_segmentation_views.py +149 -0
  410. endoreg_db/views/views_for_timeline.py +46 -0
  411. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.2.dist-info}/METADATA +14 -4
  412. endoreg_db-0.6.2.dist-info/RECORD +420 -0
  413. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.2.dist-info}/WHEEL +1 -2
  414. endoreg_db-0.6.0.dist-info/RECORD +0 -11
  415. endoreg_db-0.6.0.dist-info/top_level.txt +0 -1
  416. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.2.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,51 @@
1
+ from django.db import models
2
+
3
+
4
+ class CenterManager(models.Manager):
5
+ def get_by_natural_key(self, name):
6
+ return self.get(name=name)
7
+
8
+
9
+ class Center(models.Model):
10
+ objects = CenterManager()
11
+
12
+ # import_id = models.IntegerField(primary_key=True)
13
+ name = models.CharField(max_length=255)
14
+ name_de = models.CharField(max_length=255, blank=True, null=True)
15
+ name_en = models.CharField(max_length=255, blank=True, null=True)
16
+
17
+ first_names = models.ManyToManyField(
18
+ "FirstName",
19
+ related_name="centers",
20
+ )
21
+ last_names = models.ManyToManyField("LastName", related_name="centers")
22
+
23
+ @classmethod
24
+ def get_by_name(cls, name):
25
+ return cls.objects.get(name=name)
26
+
27
+ def natural_key(self):
28
+ return (self.name,)
29
+
30
+ def __str__(self):
31
+ return self.name
32
+
33
+ def get_first_names(self):
34
+ from endoreg_db.models import FirstName
35
+
36
+ names = FirstName.objects.filter(centers=self)
37
+ return names
38
+
39
+ def get_last_names(self):
40
+ from endoreg_db.models import LastName
41
+
42
+ names = LastName.objects.filter(centers=self)
43
+ return names
44
+
45
+ def get_endoscopes(self):
46
+ from endoreg_db.models import Endoscope
47
+
48
+ endoscopes = Endoscope.objects.filter(center=self)
49
+ return endoscopes
50
+
51
+ # def get_endoscopy_processor
@@ -0,0 +1,33 @@
1
+ from django.db import models
2
+
3
+ class CenterProduct(models.Model):
4
+ product = models.ForeignKey("Product", on_delete=models.CASCADE)
5
+ date_used = models.DateField()
6
+ center = models.ForeignKey("Center", on_delete=models.CASCADE)
7
+
8
+
9
+ def get_product_group(self):
10
+ product = self.product
11
+ product_group = product.product_group
12
+
13
+ return product_group
14
+
15
+ def get_reference_product(self):
16
+ product_group = self.get_product_group()
17
+ reference_product = product_group.reference_product
18
+
19
+ return reference_product
20
+
21
+ def get_product_weight(self):
22
+ product = self.product
23
+ weight, unit = product.get_product_weight()
24
+
25
+ return weight, unit
26
+
27
+ def get_package_weight(self):
28
+ product = self.product
29
+ weight, unit = product.get_package_weight()
30
+
31
+ return weight, unit
32
+
33
+
@@ -0,0 +1,33 @@
1
+ from django.db import models
2
+
3
+ class CenterResource(models.Model):
4
+ name = models.CharField(max_length=255, null=True)
5
+ center = models.ForeignKey("Center", on_delete=models.CASCADE)
6
+ name_de = models.CharField(max_length=255, null=True)
7
+ name_en = models.CharField(max_length=255, null=True)
8
+ quantity = models.FloatField()
9
+ resource = models.ForeignKey("Resource", on_delete=models.CASCADE)
10
+ transport_emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True,
11
+ related_name="center_resource_transport_emission_factor")
12
+ use_emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True,
13
+ related_name="center_resource_use_emission_factor")
14
+ year = models.IntegerField()
15
+ unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
16
+
17
+ def __str__(self):
18
+ result_string = ""
19
+
20
+ if self.name is not None:
21
+ result_string += self.name + ":\n"
22
+
23
+ result_string += "\tCenter\t-\t" + str(self.center) + "\n"
24
+ result_string += "\tResource\t-\t" + str(self.resource) + "\n"
25
+ result_string += "\tQuantity\t-\t" + str(self.quantity) + "\n"
26
+ result_string += "\tYear\t-\t" + str(self.year) + "\n"
27
+ result_string += "\tUnit\t-\t" + str(self.unit) + "\n"
28
+ result_string += "\tTransport Emission Factor\t-\t" + str(self.transport_emission_factor) + "\n"
29
+ result_string += "\tUse Emission Factor\t-\t" + str(self.use_emission_factor) + "\n"
30
+
31
+ result_string += "\n"
32
+
33
+ return result_string
@@ -0,0 +1,16 @@
1
+ from django.db import models
2
+
3
+ class CenterWaste(models.Model):
4
+ center = models.ForeignKey("Center", on_delete=models.CASCADE)
5
+ year = models.IntegerField()
6
+ waste = models.ForeignKey("Waste", on_delete=models.CASCADE)
7
+ quantity = models.FloatField()
8
+ unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
9
+ emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True)
10
+
11
+
12
+ def __str__(self):
13
+ result = f"{self.quantity} {self.unit}"
14
+ result += f" -\t{self.waste}, EmissionFactor: {self.emission_factor}\t\t- {self.center} - {self.year}"
15
+
16
+ return result
@@ -0,0 +1,21 @@
1
+ from django.db import models
2
+
3
+ class ContraindicationManager(models.Manager):
4
+ def get_by_natural_key(self, name):
5
+ return self.get(name=name)
6
+
7
+ class Contraindication(models.Model):
8
+ name = models.CharField(max_length=100, unique=True)
9
+ name_de = models.CharField(max_length=100, blank=True, null=True)
10
+ name_en = models.CharField(max_length=100, blank=True, null=True)
11
+ description = models.TextField(blank=True, null=True)
12
+ description_de = models.TextField(blank=True, null=True)
13
+ description_en = models.TextField(blank=True, null=True)
14
+
15
+ objects = ContraindicationManager()
16
+
17
+ def natural_key(self):
18
+ return (self.name,)
19
+
20
+ def __str__(self):
21
+ return self.name
@@ -0,0 +1,39 @@
1
+ from .frame import Frame, RawFrame
2
+ from .report_file import ReportFile
3
+ from .video import Video, VideoImportMeta
4
+ from .video_segment import (
5
+ LabelVideoSegment,
6
+ LabelRawVideoSegment,
7
+ find_segments_in_prediction_array,
8
+ )
9
+ from .metadata import (
10
+ SensitiveMeta,
11
+ PdfMeta,
12
+ PdfType,
13
+ VideoMeta,
14
+ FFMpegMeta,
15
+ )
16
+
17
+ from .import_classes import (
18
+ RawPdfFile,
19
+ RawVideoFile,
20
+ )
21
+
22
+
23
+ __all__ = [
24
+ "Frame",
25
+ "ReportFile",
26
+ "Video",
27
+ "LabelVideoSegment",
28
+ "LabelRawVideoSegment",
29
+ "find_segments_in_prediction_array",
30
+ "SensitiveMeta",
31
+ "PdfMeta",
32
+ "PdfType",
33
+ "RawFrame",
34
+ "VideoMeta",
35
+ "FFMpegMeta",
36
+ "VideoImportMeta",
37
+ "RawPdfFile",
38
+ "RawVideoFile",
39
+ ]
@@ -0,0 +1,7 @@
1
+ from .abstract_frame import AbstractFrame
2
+ from .abstract_video import AbstractVideoFile
3
+
4
+ __all__ = [
5
+ "AbstractFrame",
6
+ "AbstractVideoFile",
7
+ ]
@@ -0,0 +1,100 @@
1
+ from typing import Union, TYPE_CHECKING
2
+ from endoreg_db.models.annotation.image_classification import (
3
+ ImageClassificationAnnotation,
4
+ )
5
+ from endoreg_db.models.label.label import Label
6
+
7
+ from django.db import models
8
+ from .utils import FRAME_DIR_NAME
9
+
10
+ if TYPE_CHECKING:
11
+ from endoreg_db.models import Video, RawVideoFile
12
+
13
+
14
+ class AbstractFrame(models.Model):
15
+ frame_number = models.IntegerField()
16
+ # Add any other fields you need to store frame-related information
17
+ suffix = models.CharField(max_length=255)
18
+ # ImageClassificationAnnotation has a foreign key to this model (related name: image_classification_annotations)
19
+ # image = models.ImageField(blank=True, null=True)
20
+ is_raw = models.BooleanField(default=False)
21
+ extracted = models.BooleanField(default=False)
22
+
23
+ if TYPE_CHECKING:
24
+ video: Union["Video", "RawVideoFile"]
25
+ image_classification_annotations: (
26
+ "models.QuerySet[ImageClassificationAnnotation]"
27
+ )
28
+
29
+ class Meta:
30
+ # Ensure that for each video, the frame_number is unique
31
+ abstract = True
32
+ unique_together = ("video", "frame_number")
33
+ # Optimize for retrieval in frame_number order
34
+ indexes = [models.Index(fields=["video", "frame_number"])]
35
+
36
+ # Override save method to set is_raw based on the type of frame
37
+ def save(self, *args, **kwargs):
38
+ self.is_raw = self.is_raw_frame()
39
+ super().save(*args, **kwargs)
40
+
41
+ def get_classification_annotations(self):
42
+ """
43
+ Get all image classification annotations for this frame.
44
+ """
45
+ if self.is_raw_frame():
46
+ return ImageClassificationAnnotation.objects.filter(raw_frame=self)
47
+ return ImageClassificationAnnotation.objects.filter(frame=self)
48
+
49
+ def get_classification_annotations_by_label(self, label: Label):
50
+ """
51
+ Get all image classification annotations for this frame with the given label.
52
+ """
53
+ if self.is_raw_frame():
54
+ return ImageClassificationAnnotation.objects.filter(
55
+ raw_frame=self, label=label
56
+ )
57
+ return ImageClassificationAnnotation.objects.filter(frame=self, label=label)
58
+
59
+ def get_classification_annotations_by_value(self, value: bool):
60
+ """
61
+ Get all image classification annotations for this frame with the given value.
62
+ """
63
+ if self.is_raw_frame():
64
+ return ImageClassificationAnnotation.objects.filter(
65
+ raw_frame=self, value=value
66
+ )
67
+ return ImageClassificationAnnotation.objects.filter(frame=self, value=value)
68
+
69
+ def get_classification_annotations_by_label_and_value(
70
+ self, label: Label, value: bool
71
+ ):
72
+ """
73
+ Get all image classification annotations for this frame with the given label and value.
74
+ """
75
+ if self.is_raw_frame():
76
+ return ImageClassificationAnnotation.objects.filter(
77
+ raw_frame=self, label=label, value=value
78
+ )
79
+ return ImageClassificationAnnotation.objects.filter(
80
+ frame=self, label=label, value=value
81
+ )
82
+
83
+ def __str__(self):
84
+ return self.video.file.path + " - " + str(self.frame_number)
85
+
86
+ def is_raw_frame(self):
87
+ from endoreg_db.models import RawFrame
88
+
89
+ if isinstance(self, RawFrame):
90
+ return True
91
+ else:
92
+ return False
93
+
94
+ def get_frame_model(self):
95
+ from endoreg_db.models import Frame, RawFrame
96
+
97
+ if self.is_raw_frame():
98
+ return RawFrame
99
+ else:
100
+ return Frame
@@ -0,0 +1,136 @@
1
+ # models/data_file/import_classes/raw_pdf.py
2
+ # django db model "RawPdf"
3
+ # Class to store raw pdf file using django file field
4
+ # Class contains classmethod to create object from pdf file
5
+ # objects contains methods to extract text, extract metadata from text and anonymize text from pdf file uzing agl_report_reader.ReportReader class
6
+ # ------------------------------------------------------------------------------
7
+
8
+ from django.db import models
9
+
10
+ # from django.core.files.storage import FileSystemStorage
11
+ # from django.conf import settings
12
+ from django.core.exceptions import ValidationError
13
+ # from django.core.validators import FileExtensionValidator
14
+ # from endoreg_db.utils.file_operations import get_uuid_filename
15
+ # from icecream import ic
16
+
17
+ # from agl_report_reader.report_reader import ReportReader
18
+
19
+ from endoreg_db.utils.hashs import get_pdf_hash
20
+ # from ..metadata import SensitiveMeta
21
+
22
+ # setup logging to pdf_import.log
23
+ import logging
24
+
25
+ # import shutil
26
+ from pathlib import Path
27
+ from typing import TYPE_CHECKING
28
+
29
+ from ..base_classes.utils import (
30
+ STORAGE_LOCATION,
31
+ )
32
+
33
+ if TYPE_CHECKING:
34
+ from endoreg_db.models import SensitiveMeta
35
+
36
+ logger = logging.getLogger("pdf_import")
37
+
38
+ RAW_PDF_DIR_NAME = "raw_pdf"
39
+ RAW_PDF_DIR = STORAGE_LOCATION / RAW_PDF_DIR_NAME
40
+
41
+ if not RAW_PDF_DIR.exists():
42
+ RAW_PDF_DIR.mkdir(parents=True)
43
+
44
+
45
+ class AbstractPdfFile(models.Model):
46
+ pdf_hash = models.CharField(max_length=255, unique=True)
47
+ pdf_type = models.ForeignKey(
48
+ "PdfType",
49
+ on_delete=models.SET_NULL,
50
+ blank=True,
51
+ null=True,
52
+ )
53
+ sensitive_meta = models.ForeignKey(
54
+ "SensitiveMeta",
55
+ on_delete=models.SET_NULL,
56
+ related_name="report_files",
57
+ null=True,
58
+ blank=True,
59
+ )
60
+ center = models.ForeignKey(
61
+ "Center",
62
+ on_delete=models.SET_NULL,
63
+ blank=True,
64
+ null=True,
65
+ )
66
+
67
+ patient = models.ForeignKey(
68
+ "Patient",
69
+ on_delete=models.SET_NULL,
70
+ blank=True,
71
+ null=True,
72
+ )
73
+
74
+ examination = models.ForeignKey(
75
+ "PatientExamination",
76
+ on_delete=models.SET_NULL,
77
+ blank=True,
78
+ null=True,
79
+ )
80
+
81
+ examiner = models.ForeignKey(
82
+ "Examiner",
83
+ on_delete=models.SET_NULL,
84
+ blank=True,
85
+ null=True,
86
+ )
87
+
88
+ text = models.TextField(blank=True, null=True)
89
+
90
+ created_at = models.DateTimeField(auto_now_add=True)
91
+
92
+ if TYPE_CHECKING:
93
+ sensitive_meta: "SensitiveMeta"
94
+
95
+ class Meta:
96
+ abstract = True
97
+
98
+ def __str__(self):
99
+ str_repr = f"{self.pdf_hash} ({self.pdf_type}, {self.center})"
100
+ return str_repr
101
+
102
+ def delete_with_file(self):
103
+ file_path = Path(self.file.path)
104
+ if file_path.exists():
105
+ file_path.unlink()
106
+ logger.info("File removed: %s", file_path)
107
+
108
+ r = self.delete()
109
+ return r
110
+
111
+ def update(self, save=True, verbose=True):
112
+ try:
113
+ self.text, self.anonymized_text, self.raw_meta = self.process_file(
114
+ verbose=verbose
115
+ )
116
+ self.state_report_processed = True
117
+ self.state_report_processing_required = False
118
+
119
+ if save:
120
+ self.save()
121
+
122
+ return True
123
+
124
+ except (IOError, ValueError) as e:
125
+ logger.error("Error processing file: %s", self.file.path)
126
+ logger.error(e)
127
+ return False
128
+
129
+ # override save method to get patient and examination from sensitive meta
130
+ def save(self, *args, **kwargs):
131
+ if not self.patient and self.sensitive_meta:
132
+ self.patient = self.sensitive_meta.pseudo_patient
133
+ self.examination = self.sensitive_meta.pseudo_examination
134
+ self.center = self.sensitive_meta.center
135
+
136
+ super().save(*args, **kwargs)