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,197 @@
1
+ from django.db import models
2
+
3
+ class PatientLabValue(models.Model):
4
+ """
5
+ A class representing a patient lab value.
6
+
7
+ Attributes:
8
+ patient (Patient): The patient.
9
+ lab_value (LabValue): The lab value.
10
+ value (float): The value of the lab value.
11
+ date (datetime): The date of the lab value.
12
+ """
13
+ patient = models.ForeignKey('Patient', on_delete=models.CASCADE,
14
+ related_name="lab_values", blank=True, null=True
15
+ )
16
+ lab_value = models.ForeignKey('LabValue', on_delete=models.CASCADE)
17
+ value = models.FloatField(blank=True, null=True)
18
+ value_str = models.CharField(max_length=255, blank=True, null=True)
19
+ sample = models.ForeignKey(
20
+ 'PatientLabSample', on_delete=models.CASCADE,
21
+ blank=True, null=True,
22
+ related_name='values'
23
+ )
24
+ datetime = models.DateTimeField(# if not set, use now
25
+ auto_now_add=True
26
+ )
27
+ normal_range = models.JSONField(
28
+ default = dict
29
+ )
30
+ unit = models.ForeignKey('Unit', on_delete=models.CASCADE, blank=True, null=True)
31
+
32
+ @classmethod
33
+ def create_lab_value_by_sample(
34
+ cls, sample=None, lab_value_name=None,
35
+ value=None, value_str=None,
36
+ unit=None
37
+ ):
38
+ from endoreg_db.models import LabValue
39
+ patient = sample.patient
40
+ lab_value = LabValue.objects.get(name=lab_value_name)
41
+ value = value
42
+ value_str = value_str
43
+
44
+ pat_lab_val = cls.objects.create(
45
+ patient = patient,
46
+ lab_value = lab_value,
47
+ value = value,
48
+ value_str = value_str,
49
+ sample = sample,
50
+ unit = unit,
51
+ )
52
+
53
+ pat_lab_val.save()
54
+
55
+ return pat_lab_val
56
+
57
+ def __str__(self):
58
+ formatted_datetime = self.datetime.strftime('%Y-%m-%d %H:%M')
59
+ # normal_range = self.get_normal_range()
60
+ norm_range_string = f'[{self.normal_range.get("min", "")} - {self.normal_range.get("max", "")}]'
61
+ _str = f'{self.lab_value} - {self.value} {self.unit} - {norm_range_string} ({formatted_datetime})'
62
+ return _str
63
+
64
+ def get_normal_range(self):
65
+ from endoreg_db.models import LabValue, Patient
66
+ lab_value:LabValue = self.lab_value
67
+ patient:Patient = self.patient
68
+
69
+ age = patient.age()
70
+ gender = patient.gender
71
+
72
+ normal_range_dict = lab_value.get_normal_range(
73
+ age,gender
74
+ )
75
+ return normal_range_dict
76
+
77
+
78
+ def set_min_norm_value(self, value, save = True):
79
+ self.normal_range["min"] = value
80
+ if save:
81
+ self.save()
82
+
83
+ def set_max_norm_value(self, value, save = True):
84
+ self.normal_range["max"] = value
85
+ if save:
86
+ self.save()
87
+
88
+ def set_norm_values_from_default(self):
89
+
90
+ normal_range_dict = self.get_normal_range()
91
+ self.set_min_norm_value(normal_range_dict["min"], save = False)
92
+ self.set_max_norm_value(normal_range_dict["max"], save = False)
93
+ self.save()
94
+
95
+ def set_unit_from_default(self):
96
+ self.unit = self.lab_value.default_unit
97
+ self.save()
98
+
99
+ def get_value(self):
100
+ if self.value:
101
+ return self.value
102
+ else:
103
+ return self.value_str
104
+
105
+ def get_value_field_name(self):
106
+ if self.value:
107
+ return "value"
108
+ else:
109
+ return "value_str"
110
+
111
+ # customize save method so that if a numeric value exists, we round it to the precision of the lab value
112
+ def save(self, *args, **kwargs):
113
+ if self.value:
114
+ precision = self.lab_value.numeric_precision
115
+ self.value = round(self.value, precision)
116
+ super().save(*args, **kwargs)
117
+
118
+ def set_value_by_distribution(self, distribution=None, save = True):
119
+ from endoreg_db.models import (
120
+ Patient, LabValue, Gender,
121
+ DateValueDistribution,
122
+ SingleCategoricalValueDistribution,
123
+ NumericValueDistribution,
124
+ MultipleCategoricalValueDistribution,
125
+ )
126
+ import warnings
127
+
128
+ patient:Patient = self.patient
129
+
130
+ dob = patient.dob #TODO: age specific norm values
131
+ gender:Gender = patient.gender # TODO: gender specific norm values
132
+ lab_value:LabValue = self.lab_value
133
+
134
+ assert self.lab_value, "Lab value must be set to set value by distribution"
135
+ self.unit = self.lab_value.default_unit
136
+
137
+ if not distribution:
138
+ distribution = lab_value.get_default_default_distribution()
139
+
140
+ if not distribution:
141
+ warnings.warn(
142
+ f"No distribution set for lab value {lab_value}, assuming uniform numeric distribution based on normal values"
143
+ )
144
+
145
+ if not self.normal_range.get("min", None) or not self.normal_range.get("max", None):
146
+ self.set_norm_values_from_default()
147
+
148
+ self.normal_range:dict
149
+ _min = self.normal_range.get("min", 0.0001)
150
+ _max = self.normal_range.get("max", 100)
151
+ _name = "auto-" + self.lab_value.name + "-distribution-default-uniform"
152
+ distribution = NumericValueDistribution(
153
+ name = _name,
154
+ min_descriptor = _min,
155
+ max_max_desciptor = _max,
156
+ distribution_type = "uniform"
157
+ )
158
+
159
+ value = distribution.generate_value(lab_value=lab_value)
160
+ self.value = value
161
+ if save:
162
+ self.save()
163
+
164
+ return value
165
+
166
+ if isinstance(distribution, SingleCategoricalValueDistribution):
167
+ value = distribution.generate_value()
168
+ self.value_str = value
169
+ if save:
170
+ self.save()
171
+ return value
172
+
173
+ elif isinstance(distribution, NumericValueDistribution):
174
+ value = distribution.generate_value(
175
+ lab_value=lab_value,
176
+ patient=patient
177
+ )
178
+ self.value = value
179
+ if save:
180
+ self.save()
181
+ return value
182
+
183
+ elif isinstance(distribution, MultipleCategoricalValueDistribution):
184
+ value = distribution.generate_value()
185
+ self.value_str = value
186
+ if save:
187
+ self.save()
188
+ return value
189
+
190
+ elif isinstance(distribution, DateValueDistribution):
191
+ # raise not implemented error
192
+ value = distribution.generate_value()
193
+ self.value = value
194
+ if save:
195
+ self.save()
196
+
197
+
@@ -0,0 +1,59 @@
1
+ from django.db import models
2
+ from django.utils.translation import gettext_lazy as _
3
+
4
+ class PatientMedication(models.Model):
5
+ patient = models.ForeignKey("Patient", on_delete= models.CASCADE)
6
+ medication_indication = models.ForeignKey(
7
+ "MedicationIndication", on_delete=models.CASCADE,
8
+ related_name="patient_medications", null=True
9
+ )
10
+
11
+ medication = models.ForeignKey(
12
+ 'Medication', on_delete=models.CASCADE,
13
+ blank=True,
14
+ related_name='patient_medications'
15
+ )
16
+
17
+ intake_times = models.ManyToManyField(
18
+ 'MedicationIntakeTime',
19
+ related_name='patient_medications',
20
+ blank=True,
21
+ )
22
+
23
+ unit = models.ForeignKey(
24
+ 'Unit', on_delete=models.CASCADE,
25
+ null=True, blank=True
26
+ )
27
+ dosage = models.JSONField(
28
+ null=True, blank=True
29
+ )
30
+ active = models.BooleanField(default=True)
31
+
32
+ objects = models.Manager()
33
+
34
+ class Meta:
35
+ verbose_name = _('Patient Medication')
36
+ verbose_name_plural = _('Patient Medications')
37
+
38
+ @classmethod
39
+ def create_by_patient_and_indication(cls, patient, medication_indication):
40
+ from endoreg_db.models import MedicationIndication
41
+ medication_indication: MedicationIndication
42
+ patient_medication = cls.objects.create(patient=patient, medication_indication=medication_indication)
43
+ patient_medication.save()
44
+
45
+ return patient_medication
46
+
47
+
48
+ def __str__(self):
49
+ intake_times = self.intake_times.all()
50
+ out = f"{self.medication} (Indication {self.medication_indication}) - "
51
+ out += f"{self.dosage} - {self.unit} - "
52
+
53
+
54
+ for intake_time in intake_times:
55
+ out += f"{intake_time} - "
56
+
57
+ return out
58
+
59
+
@@ -0,0 +1,88 @@
1
+ from django.db import models
2
+
3
+ class PatientMedicationSchedule(models.Model):
4
+ patient = models.ForeignKey("Patient", on_delete= models.CASCADE)
5
+ medication = models.ManyToManyField(
6
+ 'PatientMedication',
7
+ related_name='patient_medication_schedules',
8
+ blank=True
9
+ )
10
+
11
+ created_at = models.DateTimeField(auto_now_add=True)
12
+ updated_at = models.DateTimeField(auto_now=True)
13
+
14
+ def __str__(self):
15
+ return f'{self.patient} - {self.medication.all()}'
16
+
17
+ @classmethod
18
+ def create_by_patient_and_indication_type(cls, patient, indication_type):
19
+ from endoreg_db.models import MedicationIndicationType, PatientMedication
20
+
21
+ medication_indication = MedicationIndicationType.get_random_indication_by_type(name=indication_type)
22
+
23
+ patient_medication_schedule = cls.objects.create(patient=patient)
24
+ patient_medication_schedule.save()
25
+
26
+ patient_medication = PatientMedication.create_by_patient_and_indication(patient, medication_indication)
27
+ patient_medication_schedule.medication.add(patient_medication)
28
+ patient_medication_schedule.save()
29
+
30
+ return patient_medication_schedule
31
+
32
+ @classmethod
33
+ def create_by_patient_and_indication(cls, patient, medication_indication):
34
+ from endoreg_db.models import (
35
+ MedicationIndication, PatientMedication,
36
+ Patient
37
+ )
38
+
39
+ assert isinstance(medication_indication, MedicationIndication)
40
+ assert isinstance(patient, Patient)
41
+ patient_medication_schedule = cls.objects.create(patient=patient)
42
+ patient_medication_schedule.save()
43
+
44
+ patient_medication = PatientMedication.create_by_patient_and_indication(patient, medication_indication)
45
+ patient_medication_schedule.medication.add(patient_medication)
46
+ patient_medication_schedule.save()
47
+
48
+ return patient_medication_schedule
49
+
50
+ def create_patient_medication_from_medication_schedule(
51
+ self,
52
+ medication_schedule,
53
+ medication_indication=None,
54
+ start_date=None,
55
+ ):
56
+
57
+ from endoreg_db.models import MedicationSchedule, PatientMedication
58
+ from datetime import datetime as dt
59
+
60
+ assert isinstance(medication_schedule, MedicationSchedule)
61
+
62
+ if not start_date:
63
+ start_date = dt.now()
64
+
65
+ drug = medication_schedule.medication
66
+ unit = medication_schedule.unit
67
+ dosage = medication_schedule.dose
68
+ intake_times = medication_schedule.get_intake_times()
69
+
70
+ patient_medication = PatientMedication.objects.create(
71
+ patient=self.patient,
72
+ medication=drug,
73
+ medication_indication=medication_indication,
74
+ unit=unit,
75
+ dosage=dosage
76
+ )
77
+
78
+ patient_medication.intake_times.set(intake_times)
79
+ patient_medication.save()
80
+
81
+ self.medication.add(patient_medication)
82
+ self.save()
83
+
84
+ return patient_medication
85
+
86
+
87
+ def get_patient_medication(self):
88
+ return self.medication.all()
@@ -0,0 +1,31 @@
1
+ from abc import abstractmethod
2
+ from django.db import models
3
+
4
+ class Person(models.Model):
5
+ """
6
+ Abstract base class for a person.
7
+
8
+ Attributes:
9
+ first_name (str): The first name of the person.
10
+ last_name (str): The last name of the person.
11
+ dob (date): The date of birth of the person.
12
+ gender (str): The gender of the person.
13
+ email (str): The email address of the person.
14
+ phone (str): The phone number of the person.
15
+ """
16
+
17
+ first_name = models.CharField(max_length=255)
18
+ last_name = models.CharField(max_length=255)
19
+ dob = models.DateField("Date of Birth", blank=True, null=True)
20
+ gender = models.ForeignKey("Gender", on_delete=models.SET_NULL, null=True)
21
+ email = models.EmailField(max_length=255, blank=True, null=True)
22
+ phone = models.CharField(max_length=255, blank=True, null=True)
23
+ is_real_person = models.BooleanField(default=True)
24
+
25
+ @abstractmethod
26
+ def __str__(self):
27
+ pass
28
+
29
+ class Meta:
30
+ abstract = True
31
+
@@ -0,0 +1,27 @@
1
+ from django.db import models
2
+
3
+ # models.py in your main app
4
+ from django.contrib.auth.models import User
5
+
6
+ class ProfessionManager(models.Manager):
7
+ def get_by_natural_key(self, name):
8
+ return self.get(name=name)
9
+
10
+ class Profession(models.Model):
11
+ objects = ProfessionManager()
12
+ name = models.CharField(max_length=100)
13
+ name_de = models.CharField(max_length=100, blank=True, null=True)
14
+ name_en = models.CharField(max_length=100, blank=True, null=True)
15
+ description = models.TextField(blank=True, null=True)
16
+
17
+ def __str__(self):
18
+ return self.name_de
19
+
20
+ class PortalUserInfo(models.Model):
21
+ user = models.OneToOneField(User, on_delete=models.CASCADE)
22
+ profession = models.ForeignKey('Profession', on_delete=models.CASCADE, blank=True, null=True)
23
+ works_in_endoscopy = models.BooleanField(blank=True, null=True)
24
+ # Add other fields as needed
25
+
26
+ def __str__(self):
27
+ return self.user.username
@@ -0,0 +1,8 @@
1
+ from .image_classification import ImageClassificationPrediction
2
+ from .video_prediction_meta import RawVideoPredictionMeta, VideoPredictionMeta
3
+
4
+ __all__ = [
5
+ "ImageClassificationPrediction",
6
+ "RawVideoPredictionMeta",
7
+ "VideoPredictionMeta",
8
+ ]
@@ -0,0 +1,51 @@
1
+ from django.db import models
2
+
3
+
4
+ class ImageClassificationPrediction(models.Model):
5
+ """
6
+ A class representing an image classification prediction.
7
+
8
+ Attributes:
9
+ label (Label): The label of the prediction.
10
+ frame (Frame): The frame of the prediction.
11
+ confidence (float): The confidence of the prediction.
12
+ date_created (datetime): The date the prediction was created.
13
+
14
+ """
15
+
16
+ label = models.ForeignKey(
17
+ "Label",
18
+ on_delete=models.CASCADE,
19
+ related_name="image_classification_predictions",
20
+ )
21
+ frame = models.ForeignKey(
22
+ "Frame",
23
+ on_delete=models.CASCADE,
24
+ blank=True,
25
+ null=True,
26
+ related_name="image_classification_predictions",
27
+ )
28
+ value = models.BooleanField()
29
+ confidence = models.FloatField()
30
+ model_meta = models.ForeignKey(
31
+ "ModelMeta",
32
+ on_delete=models.CASCADE,
33
+ related_name="image_classification_predictions",
34
+ )
35
+ date_created = models.DateTimeField(auto_now_add=True)
36
+
37
+ class Meta:
38
+ unique_together = ("label", "frame", "model_meta")
39
+
40
+ def get_image_object(self):
41
+ """
42
+ Get the image of the prediction.
43
+ """
44
+ if self.frame:
45
+ return self.frame
46
+ elif self.legacy_frame:
47
+ return self.legacy_frame
48
+ elif self.legacy_image:
49
+ return self.legacy_image
50
+ else:
51
+ return None