endoreg-db 0.5.2__py3-none-any.whl → 0.6.0__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 (320) hide show
  1. endoreg_db/admin.py +90 -1
  2. endoreg_db/urls.py +173 -0
  3. endoreg_db/views.py +0 -3
  4. endoreg_db-0.6.0.dist-info/METADATA +151 -0
  5. endoreg_db-0.6.0.dist-info/RECORD +11 -0
  6. {endoreg_db-0.5.2.dist-info → endoreg_db-0.6.0.dist-info}/WHEEL +2 -1
  7. endoreg_db-0.6.0.dist-info/top_level.txt +1 -0
  8. endoreg_db/data/__init__.py +0 -72
  9. endoreg_db/data/active_model/data.yaml +0 -3
  10. endoreg_db/data/agl_service/data.yaml +0 -19
  11. endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +0 -167
  12. endoreg_db/data/case_template/rule/01_patient-set-age.yaml +0 -8
  13. endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +0 -9
  14. endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +0 -23
  15. endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +0 -19
  16. endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +0 -19
  17. endoreg_db/data/case_template/rule/19_create_patient.yaml +0 -17
  18. endoreg_db/data/case_template/rule_type/base_types.yaml +0 -35
  19. endoreg_db/data/case_template/rule_value/.init +0 -0
  20. endoreg_db/data/case_template/rule_value_type/base_types.yaml +0 -59
  21. endoreg_db/data/case_template/template/base.yaml +0 -8
  22. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +0 -3
  23. endoreg_db/data/case_template/tmp/_rule_value +0 -13
  24. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +0 -21
  25. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +0 -10
  26. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +0 -7
  27. endoreg_db/data/center/data.yaml +0 -60
  28. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +0 -144
  29. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +0 -48
  30. endoreg_db/data/disease/cardiovascular.yaml +0 -37
  31. endoreg_db/data/disease/hepatology.yaml +0 -5
  32. endoreg_db/data/disease/misc.yaml +0 -6
  33. endoreg_db/data/disease/renal.yaml +0 -5
  34. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +0 -6
  35. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +0 -6
  36. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +0 -41
  37. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +0 -20
  38. endoreg_db/data/distribution/date/patient.yaml +0 -7
  39. endoreg_db/data/distribution/multiple_categorical/.init +0 -0
  40. endoreg_db/data/distribution/numeric/.init +0 -0
  41. endoreg_db/data/distribution/single_categorical/patient.yaml +0 -7
  42. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +0 -132
  43. endoreg_db/data/endoscope_type/data.yaml +0 -11
  44. endoreg_db/data/endoscopy_processor/data.yaml +0 -47
  45. endoreg_db/data/event/cardiology.yaml +0 -28
  46. endoreg_db/data/event/neurology.yaml +0 -14
  47. endoreg_db/data/event/surgery.yaml +0 -13
  48. endoreg_db/data/event/thrombembolism.yaml +0 -20
  49. endoreg_db/data/examination/examinations/data.yaml +0 -66
  50. endoreg_db/data/examination/time/data.yaml +0 -48
  51. endoreg_db/data/examination/time-type/data.yaml +0 -8
  52. endoreg_db/data/examination/type/data.yaml +0 -5
  53. endoreg_db/data/gender/data.yaml +0 -18
  54. endoreg_db/data/information_source/data.yaml +0 -30
  55. endoreg_db/data/information_source/medication.yaml +0 -6
  56. endoreg_db/data/lab_value/cardiac_enzymes.yaml +0 -31
  57. endoreg_db/data/lab_value/coagulation.yaml +0 -49
  58. endoreg_db/data/lab_value/electrolytes.yaml +0 -190
  59. endoreg_db/data/lab_value/gastrointestinal_function.yaml +0 -121
  60. endoreg_db/data/lab_value/hematology.yaml +0 -169
  61. endoreg_db/data/lab_value/hormones.yaml +0 -53
  62. endoreg_db/data/lab_value/lipids.yaml +0 -44
  63. endoreg_db/data/lab_value/misc.yaml +0 -30
  64. endoreg_db/data/lab_value/renal_function.yaml +0 -11
  65. endoreg_db/data/label/label/data.yaml +0 -62
  66. endoreg_db/data/label/label-set/data.yaml +0 -18
  67. endoreg_db/data/label/label-type/data.yaml +0 -7
  68. endoreg_db/data/log_type/data.yaml +0 -57
  69. endoreg_db/data/material/material.yaml +0 -91
  70. endoreg_db/data/medication/anticoagulation.yaml +0 -65
  71. endoreg_db/data/medication/tah.yaml +0 -70
  72. endoreg_db/data/medication_indication/anticoagulation.yaml +0 -120
  73. endoreg_db/data/medication_indication_type/data.yaml +0 -11
  74. endoreg_db/data/medication_indication_type/thrombembolism.yaml +0 -41
  75. endoreg_db/data/medication_intake_time/base.yaml +0 -31
  76. endoreg_db/data/medication_schedule/apixaban.yaml +0 -95
  77. endoreg_db/data/medication_schedule/ass.yaml +0 -12
  78. endoreg_db/data/medication_schedule/enoxaparin.yaml +0 -26
  79. endoreg_db/data/model_type/data.yaml +0 -7
  80. endoreg_db/data/network_device/data.yaml +0 -29
  81. endoreg_db/data/network_device_type/data.yaml +0 -12
  82. endoreg_db/data/patient_lab_sample_type/generic.yaml +0 -6
  83. endoreg_db/data/pdf_type/data.yaml +0 -28
  84. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +0 -66
  85. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +0 -33
  86. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +0 -308
  87. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +0 -88
  88. endoreg_db/data/profession/data.yaml +0 -70
  89. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +0 -55
  90. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +0 -26
  91. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +0 -19
  92. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +0 -15
  93. endoreg_db/data/tmp/chronic_kidney_disease.yaml +0 -0
  94. endoreg_db/data/tmp/congestive_heart_failure.yaml +0 -0
  95. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +0 -12
  96. endoreg_db/data/unit/concentration.yaml +0 -92
  97. endoreg_db/data/unit/data.yaml +0 -17
  98. endoreg_db/data/unit/length.yaml +0 -31
  99. endoreg_db/data/unit/misc.yaml +0 -20
  100. endoreg_db/data/unit/rate.yaml +0 -6
  101. endoreg_db/data/unit/time.yaml +0 -13
  102. endoreg_db/data/unit/volume.yaml +0 -35
  103. endoreg_db/data/unit/weight.yaml +0 -38
  104. endoreg_db/data/waste/data.yaml +0 -12
  105. endoreg_db/forms/__init__.py +0 -3
  106. endoreg_db/forms/questionnaires/__init__.py +0 -1
  107. endoreg_db/forms/questionnaires/tto_questionnaire.py +0 -23
  108. endoreg_db/forms/settings/__init__.py +0 -8
  109. endoreg_db/forms/unit.py +0 -6
  110. endoreg_db/management/commands/_load_model_template.py +0 -41
  111. endoreg_db/management/commands/delete_all.py +0 -18
  112. endoreg_db/management/commands/delete_legacy_images.py +0 -19
  113. endoreg_db/management/commands/delete_legacy_videos.py +0 -17
  114. endoreg_db/management/commands/extract_legacy_video_frames.py +0 -18
  115. endoreg_db/management/commands/fetch_legacy_image_dataset.py +0 -32
  116. endoreg_db/management/commands/fix_auth_permission.py +0 -20
  117. endoreg_db/management/commands/import_legacy_images.py +0 -94
  118. endoreg_db/management/commands/import_legacy_videos.py +0 -76
  119. endoreg_db/management/commands/load_active_model_data.py +0 -45
  120. endoreg_db/management/commands/load_ai_model_data.py +0 -45
  121. endoreg_db/management/commands/load_base_db_data.py +0 -136
  122. endoreg_db/management/commands/load_center_data.py +0 -43
  123. endoreg_db/management/commands/load_disease_classification_choices_data.py +0 -41
  124. endoreg_db/management/commands/load_disease_classification_data.py +0 -41
  125. endoreg_db/management/commands/load_disease_data.py +0 -40
  126. endoreg_db/management/commands/load_distribution_data.py +0 -66
  127. endoreg_db/management/commands/load_endoscope_type_data.py +0 -45
  128. endoreg_db/management/commands/load_endoscopy_processor_data.py +0 -45
  129. endoreg_db/management/commands/load_event_data.py +0 -41
  130. endoreg_db/management/commands/load_examination_data.py +0 -75
  131. endoreg_db/management/commands/load_g_play_data.py +0 -113
  132. endoreg_db/management/commands/load_gender_data.py +0 -44
  133. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +0 -133
  134. endoreg_db/management/commands/load_information_source.py +0 -45
  135. endoreg_db/management/commands/load_lab_value_data.py +0 -50
  136. endoreg_db/management/commands/load_label_data.py +0 -67
  137. endoreg_db/management/commands/load_logging_data.py +0 -39
  138. endoreg_db/management/commands/load_medication_data.py +0 -41
  139. endoreg_db/management/commands/load_medication_indication_data.py +0 -63
  140. endoreg_db/management/commands/load_medication_indication_type_data.py +0 -41
  141. endoreg_db/management/commands/load_medication_intake_time_data.py +0 -41
  142. endoreg_db/management/commands/load_medication_schedule_data.py +0 -55
  143. endoreg_db/management/commands/load_network_data.py +0 -57
  144. endoreg_db/management/commands/load_pdf_type_data.py +0 -61
  145. endoreg_db/management/commands/load_profession_data.py +0 -44
  146. endoreg_db/management/commands/load_report_reader_flag.py +0 -46
  147. endoreg_db/management/commands/load_unit_data.py +0 -46
  148. endoreg_db/management/commands/load_user_groups.py +0 -28
  149. endoreg_db/management/commands/register_ai_model.py +0 -64
  150. endoreg_db/management/commands/reset_celery_schedule.py +0 -9
  151. endoreg_db/migrations/0001_initial.py +0 -1567
  152. endoreg_db/migrations/0002_anonymizedimagelabel_anonymousimageannotation_and_more.py +0 -55
  153. endoreg_db/migrations/0003_anonymousimageannotation_original_image_url_and_more.py +0 -39
  154. endoreg_db/migrations/0004_alter_rawpdffile_file.py +0 -20
  155. endoreg_db/migrations/0005_uploadedfile_alter_rawpdffile_file_anonymizedfile.py +0 -40
  156. endoreg_db/migrations/0006_alter_rawpdffile_file.py +0 -20
  157. endoreg_db/migrations/0007_networkdevicelogentry_datetime_and_more.py +0 -43
  158. endoreg_db/migrations/0008_networkdevicelogentry_aglnet_ip_and_more.py +0 -28
  159. endoreg_db/migrations/0009_alter_networkdevicelogentry_vpn_service_status.py +0 -18
  160. endoreg_db/migrations/0010_remove_networkdevicelogentry_hostname.py +0 -17
  161. endoreg_db/migrations/__init__.py +0 -0
  162. endoreg_db/models/__init__.py +0 -73
  163. endoreg_db/models/ai_model/__init__.py +0 -3
  164. endoreg_db/models/ai_model/active_model.py +0 -9
  165. endoreg_db/models/ai_model/model_meta.py +0 -24
  166. endoreg_db/models/ai_model/model_type.py +0 -26
  167. endoreg_db/models/ai_model/utils.py +0 -8
  168. endoreg_db/models/annotation/__init__.py +0 -3
  169. endoreg_db/models/annotation/anonymized_image_annotation.py +0 -60
  170. endoreg_db/models/annotation/binary_classification_annotation_task.py +0 -80
  171. endoreg_db/models/annotation/image_classification.py +0 -27
  172. endoreg_db/models/case_template/__init__.py +0 -6
  173. endoreg_db/models/case_template/case_template.py +0 -81
  174. endoreg_db/models/case_template/case_template_rule.py +0 -276
  175. endoreg_db/models/case_template/case_template_rule_value.py +0 -73
  176. endoreg_db/models/case_template/case_template_type.py +0 -28
  177. endoreg_db/models/center/__init__.py +0 -4
  178. endoreg_db/models/center/center.py +0 -25
  179. endoreg_db/models/center/center_product.py +0 -34
  180. endoreg_db/models/center/center_resource.py +0 -19
  181. endoreg_db/models/center/center_waste.py +0 -11
  182. endoreg_db/models/data_file/__init__.py +0 -6
  183. endoreg_db/models/data_file/base_classes/__init__.py +0 -2
  184. endoreg_db/models/data_file/base_classes/abstract_frame.py +0 -51
  185. endoreg_db/models/data_file/base_classes/abstract_video.py +0 -201
  186. endoreg_db/models/data_file/frame.py +0 -45
  187. endoreg_db/models/data_file/import_classes/__init__.py +0 -32
  188. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +0 -35
  189. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +0 -28
  190. endoreg_db/models/data_file/import_classes/processing_functions/video.py +0 -260
  191. endoreg_db/models/data_file/import_classes/raw_pdf.py +0 -188
  192. endoreg_db/models/data_file/import_classes/raw_video.py +0 -343
  193. endoreg_db/models/data_file/metadata/__init__.py +0 -3
  194. endoreg_db/models/data_file/metadata/pdf_meta.py +0 -70
  195. endoreg_db/models/data_file/metadata/sensitive_meta.py +0 -31
  196. endoreg_db/models/data_file/metadata/video_meta.py +0 -133
  197. endoreg_db/models/data_file/report_file.py +0 -89
  198. endoreg_db/models/data_file/video/__init__.py +0 -7
  199. endoreg_db/models/data_file/video/import_meta.py +0 -25
  200. endoreg_db/models/data_file/video/video.py +0 -25
  201. endoreg_db/models/data_file/video_segment.py +0 -107
  202. endoreg_db/models/disease.py +0 -56
  203. endoreg_db/models/emission/__init__.py +0 -1
  204. endoreg_db/models/emission/emission_factor.py +0 -20
  205. endoreg_db/models/event.py +0 -22
  206. endoreg_db/models/examination/__init__.py +0 -4
  207. endoreg_db/models/examination/examination.py +0 -26
  208. endoreg_db/models/examination/examination_time.py +0 -27
  209. endoreg_db/models/examination/examination_time_type.py +0 -24
  210. endoreg_db/models/examination/examination_type.py +0 -18
  211. endoreg_db/models/hardware/__init__.py +0 -2
  212. endoreg_db/models/hardware/endoscope.py +0 -44
  213. endoreg_db/models/hardware/endoscopy_processor.py +0 -143
  214. endoreg_db/models/information_source.py +0 -29
  215. endoreg_db/models/label/__init__.py +0 -1
  216. endoreg_db/models/label/label.py +0 -84
  217. endoreg_db/models/laboratory/__init__.py +0 -1
  218. endoreg_db/models/laboratory/lab_value.py +0 -102
  219. endoreg_db/models/legacy_data/__init__.py +0 -3
  220. endoreg_db/models/legacy_data/image.py +0 -34
  221. endoreg_db/models/logging/__init__.py +0 -4
  222. endoreg_db/models/logging/agl_service.py +0 -19
  223. endoreg_db/models/logging/base.py +0 -22
  224. endoreg_db/models/logging/log_type.py +0 -23
  225. endoreg_db/models/logging/network_device.py +0 -27
  226. endoreg_db/models/medication/__init__.py +0 -1
  227. endoreg_db/models/medication/medication.py +0 -148
  228. endoreg_db/models/network/__init__.py +0 -3
  229. endoreg_db/models/network/agl_service.py +0 -38
  230. endoreg_db/models/network/network_device.py +0 -53
  231. endoreg_db/models/network/network_device_type.py +0 -23
  232. endoreg_db/models/other/__init__.py +0 -5
  233. endoreg_db/models/other/distribution.py +0 -215
  234. endoreg_db/models/other/material.py +0 -16
  235. endoreg_db/models/other/resource.py +0 -18
  236. endoreg_db/models/other/transport_route.py +0 -21
  237. endoreg_db/models/other/waste.py +0 -20
  238. endoreg_db/models/patient_examination/__init__.py +0 -35
  239. endoreg_db/models/permissions/__init__.py +0 -44
  240. endoreg_db/models/persons/__init__.py +0 -7
  241. endoreg_db/models/persons/examiner/__init__.py +0 -2
  242. endoreg_db/models/persons/examiner/examiner.py +0 -16
  243. endoreg_db/models/persons/examiner/examiner_type.py +0 -2
  244. endoreg_db/models/persons/first_name.py +0 -18
  245. endoreg_db/models/persons/gender.py +0 -22
  246. endoreg_db/models/persons/last_name.py +0 -20
  247. endoreg_db/models/persons/patient/__init__.py +0 -8
  248. endoreg_db/models/persons/patient/case/__init__.py +0 -0
  249. endoreg_db/models/persons/patient/case/case.py +0 -30
  250. endoreg_db/models/persons/patient/patient.py +0 -216
  251. endoreg_db/models/persons/patient/patient_disease.py +0 -16
  252. endoreg_db/models/persons/patient/patient_event.py +0 -22
  253. endoreg_db/models/persons/patient/patient_lab_sample.py +0 -106
  254. endoreg_db/models/persons/patient/patient_lab_value.py +0 -176
  255. endoreg_db/models/persons/patient/patient_medication.py +0 -44
  256. endoreg_db/models/persons/patient/patient_medication_schedule.py +0 -28
  257. endoreg_db/models/persons/person.py +0 -31
  258. endoreg_db/models/persons/portal_user_information.py +0 -27
  259. endoreg_db/models/prediction/__init__.py +0 -2
  260. endoreg_db/models/prediction/image_classification.py +0 -37
  261. endoreg_db/models/prediction/video_prediction_meta.py +0 -244
  262. endoreg_db/models/product/__init__.py +0 -5
  263. endoreg_db/models/product/product.py +0 -97
  264. endoreg_db/models/product/product_group.py +0 -19
  265. endoreg_db/models/product/product_material.py +0 -24
  266. endoreg_db/models/product/product_weight.py +0 -26
  267. endoreg_db/models/product/reference_product.py +0 -99
  268. endoreg_db/models/questionnaires/__init__.py +0 -114
  269. endoreg_db/models/quiz/__init__.py +0 -2
  270. endoreg_db/models/quiz/quiz_answer.py +0 -41
  271. endoreg_db/models/quiz/quiz_question.py +0 -54
  272. endoreg_db/models/report_reader/__init__.py +0 -2
  273. endoreg_db/models/report_reader/report_reader_config.py +0 -53
  274. endoreg_db/models/report_reader/report_reader_flag.py +0 -20
  275. endoreg_db/models/rules/__init__.py +0 -5
  276. endoreg_db/models/rules/rule.py +0 -24
  277. endoreg_db/models/rules/rule_applicator.py +0 -224
  278. endoreg_db/models/rules/rule_attribute_dtype.py +0 -19
  279. endoreg_db/models/rules/rule_type.py +0 -22
  280. endoreg_db/models/rules/ruleset.py +0 -19
  281. endoreg_db/models/unit.py +0 -22
  282. endoreg_db/queries/__init__.py +0 -5
  283. endoreg_db/queries/annotations/__init__.py +0 -3
  284. endoreg_db/queries/annotations/legacy.py +0 -158
  285. endoreg_db/queries/get/__init__.py +0 -6
  286. endoreg_db/queries/get/annotation.py +0 -0
  287. endoreg_db/queries/get/center.py +0 -42
  288. endoreg_db/queries/get/model.py +0 -13
  289. endoreg_db/queries/get/patient.py +0 -14
  290. endoreg_db/queries/get/patient_examination.py +0 -20
  291. endoreg_db/queries/get/prediction.py +0 -0
  292. endoreg_db/queries/get/report_file.py +0 -33
  293. endoreg_db/queries/get/video.py +0 -31
  294. endoreg_db/queries/get/video_import_meta.py +0 -0
  295. endoreg_db/queries/get/video_prediction_meta.py +0 -0
  296. endoreg_db/queries/sanity/__init_.py +0 -0
  297. endoreg_db/serializers/__init__.py +0 -10
  298. endoreg_db/serializers/ai_model.py +0 -19
  299. endoreg_db/serializers/annotation.py +0 -17
  300. endoreg_db/serializers/center.py +0 -11
  301. endoreg_db/serializers/examination.py +0 -33
  302. endoreg_db/serializers/frame.py +0 -13
  303. endoreg_db/serializers/hardware.py +0 -21
  304. endoreg_db/serializers/label.py +0 -22
  305. endoreg_db/serializers/patient.py +0 -10
  306. endoreg_db/serializers/prediction.py +0 -15
  307. endoreg_db/serializers/report_file.py +0 -7
  308. endoreg_db/serializers/video.py +0 -27
  309. endoreg_db/utils/__init__.py +0 -1
  310. endoreg_db/utils/cropping.py +0 -29
  311. endoreg_db/utils/dataloader.py +0 -92
  312. endoreg_db/utils/file_operations.py +0 -30
  313. endoreg_db/utils/hashs.py +0 -34
  314. endoreg_db/utils/legacy_ocr.py +0 -201
  315. endoreg_db/utils/ocr.py +0 -190
  316. endoreg_db/utils/uuid.py +0 -4
  317. endoreg_db/utils/video_metadata.py +0 -87
  318. endoreg_db-0.5.2.dist-info/METADATA +0 -27
  319. endoreg_db-0.5.2.dist-info/RECORD +0 -319
  320. {endoreg_db-0.5.2.dist-info/licenses → endoreg_db-0.6.0.dist-info}/LICENSE +0 -0
@@ -1,37 +0,0 @@
1
- from django.db import models
2
-
3
- class ImageClassificationPrediction(models.Model):
4
- """
5
- A class representing an image classification prediction.
6
-
7
- Attributes:
8
- label (Label): The label of the prediction.
9
- frame (Frame): The frame of the prediction.
10
- confidence (float): The confidence of the prediction.
11
- date_created (datetime): The date the prediction was created.
12
-
13
- """
14
- label = models.ForeignKey("Label", on_delete=models.CASCADE, related_name="image_classification_predictions")
15
- frame = models.ForeignKey("Frame", on_delete=models.CASCADE, blank=True, null=True, related_name="image_classification_predictions")
16
- legacy_frame = models.ForeignKey("LegacyFrame", on_delete=models.CASCADE, blank=True, null=True, related_name="image_classification_predictions")
17
- legacy_image = models.ForeignKey("LegacyImage", on_delete=models.CASCADE, blank=True, null=True, related_name="image_classification_predictions")
18
- value = models.BooleanField()
19
- confidence = models.FloatField()
20
- model_meta = models.ForeignKey("ModelMeta", on_delete=models.CASCADE, related_name="image_classification_predictions")
21
- date_created = models.DateTimeField(auto_now_add=True)
22
-
23
- class Meta:
24
- unique_together = ('label', 'frame', 'model_meta')
25
-
26
- def get_image_object(self):
27
- """
28
- Get the image of the prediction.
29
- """
30
- if self.frame:
31
- return self.frame
32
- elif self.legacy_frame:
33
- return self.legacy_frame
34
- elif self.legacy_image:
35
- return self.legacy_image
36
- else:
37
- return None
@@ -1,244 +0,0 @@
1
- from django.db import models
2
-
3
- from endoreg_db.models.label.label import LabelSet
4
- from ..data_file.video import LegacyVideo, Video
5
- from ..data_file.frame import LegacyFrame, Frame
6
- from .image_classification import ImageClassificationPrediction
7
- from ..data_file.video_segment import LegacyLabelVideoSegment, LabelVideoSegment, find_segments_in_prediction_array
8
- from ..information_source import get_prediction_information_source
9
- import numpy as np
10
- import pickle
11
-
12
- DEFAULT_WINDOW_SIZE_IN_SECONDS_FOR_RUNNING_MEAN = 1.5
13
- DEFAULT_VIDEO_SEGMENT_LENGTH_THRESHOLD_IN_S = 1.0
14
-
15
- class AbstractVideoPredictionMeta(models.Model):
16
- model_meta = models.ForeignKey("ModelMeta", on_delete=models.CASCADE)
17
- date_created = models.DateTimeField(auto_now_add=True)
18
- date_modified = models.DateTimeField(auto_now=True)
19
- video = None # Placeholder for the video field, to be defined in derived classes
20
- prediction_array = models.BinaryField(blank=True, null=True)
21
-
22
- class Meta:
23
- abstract = True
24
- unique_together = ('model_meta', 'video')
25
-
26
- def __str__(self):
27
- return f"Video {self.video.id} - {self.model_meta.name}"
28
-
29
- def get_labelset(self):
30
- """
31
- Get the labelset of the predictions.
32
- """
33
- return self.model_meta.labelset
34
-
35
- def get_video_model(self):
36
- assert 1 == 2, "This method should be overridden in derived classes"
37
-
38
- def get_frame_model(self):
39
- assert 1 == 2, "This method should be overridden in derived classes"
40
-
41
- def get_label_list(self):
42
- """
43
- Get the label list of the predictions.
44
- """
45
- labelset:LabelSet = self.get_labelset()
46
- label_list = labelset.get_labels_in_order()
47
- return label_list
48
-
49
- def get_video_segment_model(self):
50
- assert 1 == 2, "This method should be overridden in derived classes"
51
-
52
- def save_prediction_array(self, prediction_array:np.array):
53
- """
54
- Save the prediction array to the database.
55
- """
56
- self.prediction_array = pickle.dumps(prediction_array)
57
- self.save()
58
-
59
- def get_prediction_array(self):
60
- """
61
- Get the prediction array from the database.
62
- """
63
- if self.prediction_array is None:
64
- return None
65
- else:
66
- return pickle.loads(self.prediction_array)
67
-
68
- def calculate_prediction_array(self):
69
- assert 1 == 2, "This method should be overridden in derived classes"
70
-
71
- def apply_running_mean(self, confidence_array, window_size_in_seconds: int = None):
72
- """
73
- Apply a running mean filter to the confidence array for smoothing, assuming a padding
74
- of 0.5 for the edges.
75
-
76
- Args:
77
- self: Object that has video and fps attributes, and to which this function belongs.
78
- confidence_array: A 2D numpy array with dimensions (num_frames),
79
- containing confidence scores for each label at each frame.
80
- window_size_in_seconds: The window size for the running mean in seconds.
81
-
82
- Returns:
83
- running_mean_array: A 2D numpy array with the same dimensions as confidence_array,
84
- containing the smoothed confidence scores.
85
- """
86
- video = self.video
87
- fps = video.fps
88
-
89
- if not window_size_in_seconds:
90
- window_size_in_seconds = DEFAULT_WINDOW_SIZE_IN_SECONDS_FOR_RUNNING_MEAN
91
-
92
- # Calculate window size in frames, ensuring at least one frame
93
- window_size_in_frames = int(window_size_in_seconds * fps)
94
- window_size_in_frames = max(window_size_in_frames, 1)
95
-
96
- # Define the window for the running mean
97
- window = np.ones(window_size_in_frames) / window_size_in_frames
98
-
99
- # Create running mean array with the same shape as the confidence array
100
- running_mean_array = np.zeros(confidence_array.shape)
101
-
102
- # Calculate the padding size
103
- pad_size = window_size_in_frames // 2
104
-
105
- # Pad the array with 0.5 on both sides
106
- padded_confidences = np.pad(confidence_array, (pad_size, pad_size), 'constant', constant_values=(0.5, 0.5))
107
-
108
- # Apply the running mean filter on the padded array
109
- running_mean = np.convolve(padded_confidences, window, mode='same')
110
-
111
- # Remove the padding from the result to match the original shape
112
- running_mean = running_mean[pad_size:-pad_size]
113
-
114
- return running_mean
115
-
116
-
117
- def create_video_segments_for_label(self, segments, label):
118
- """
119
- Creates video segments for the given label and segments.
120
- Segments is a list of tuples (start_frame_number, end_frame_number).
121
- Labels is a Label object.
122
- """
123
- video = self.video
124
- video_segment_model = self.get_video_segment_model()
125
- information_source = get_prediction_information_source()
126
-
127
- for segment in segments:
128
- start_frame_number, end_frame_number = segment
129
-
130
- video_segment = video_segment_model(
131
- video=video,
132
- prediction_meta=self,
133
- start_frame_number=start_frame_number,
134
- end_frame_number=end_frame_number,
135
- source=information_source,
136
- label=label,
137
- )
138
- video_segment.save()
139
-
140
- def create_video_segments(self, segment_length_threshold_in_s:float=None):
141
- if not segment_length_threshold_in_s:
142
- segment_length_threshold_in_s = DEFAULT_VIDEO_SEGMENT_LENGTH_THRESHOLD_IN_S
143
-
144
- video = self.video
145
- fps = video.fps
146
- min_frame_length = int(segment_length_threshold_in_s * fps)
147
-
148
- label_list = self.get_label_list()
149
-
150
- # if prediction array doesnt exist, create it
151
- if self.prediction_array is None:
152
- self.calculate_prediction_array()
153
-
154
- prediction_array = self.get_prediction_array()
155
-
156
- for i, label in enumerate(label_list):
157
- # get predictions for this label
158
- predictions = prediction_array[:, i]
159
- # find segments of predictions that are longer than the threshold
160
- # segments is a list of tuples (start_frame_number, end_frame_number)
161
- segments = find_segments_in_prediction_array(predictions, min_frame_length)
162
-
163
- # create video segments
164
- self.create_video_segments_for_label(segments, label)
165
-
166
- import numpy as np
167
- class VideoPredictionMeta(AbstractVideoPredictionMeta):
168
- video = models.OneToOneField("Video", on_delete=models.CASCADE, related_name="video_prediction_meta")
169
-
170
- def get_video_model(self):
171
- return Video
172
-
173
- def get_frame_model(self):
174
- return Frame
175
-
176
- def get_video_segment_model(self):
177
- return LabelVideoSegment
178
-
179
- def calculate_prediction_array(self, window_size_in_seconds:int=None):
180
- """
181
- Fetches all predictions for this video, labelset, and model meta.
182
- """
183
- video:Video = self.video
184
-
185
- model_meta = self.model_meta
186
- label_list = self.get_label_list()
187
-
188
- prediction_array = np.zeros((video.get_frame_number, len(label_list)))
189
- for i, label in enumerate(label_list):
190
- # fetch all predictions for this label, video, and model meta ordered by ImageClassificationPrediction.frame.frame_number
191
- predictions = ImageClassificationPrediction.objects.filter(label=label, frame__video=video, model_meta=model_meta).order_by('frame__frame_number')
192
- confidences = np.array([prediction.confidence for prediction in predictions])
193
- smooth_confidences = self.apply_running_mean(confidences, window_size_in_seconds)
194
- # calculate binary predictions
195
- binary_predictions = smooth_confidences > 0.5
196
- # add to prediction array
197
- prediction_array[:, i] = binary_predictions
198
-
199
- # save prediction array
200
- self.save_prediction_array(prediction_array)
201
-
202
-
203
- class LegacyVideoPredictionMeta(AbstractVideoPredictionMeta):
204
- video = models.OneToOneField("LegacyVideo", on_delete=models.CASCADE, related_name="video_prediction_meta")
205
-
206
- def get_video_model(self):
207
- return LegacyVideo
208
-
209
- def get_frame_model(self):
210
- return LegacyFrame
211
-
212
- def get_video_segment_model(self):
213
- return LegacyLabelVideoSegment
214
-
215
- def calculate_prediction_array(self, window_size_in_seconds:int=None):
216
- """
217
- Fetches all predictions for this video, labelset, and model meta.
218
- """
219
- video:LegacyVideo = self.video
220
-
221
- model_meta = self.model_meta
222
- label_list = self.get_label_list()
223
-
224
- prediction_array = np.zeros((video.get_frame_number, len(label_list)))
225
- for i, label in enumerate(label_list):
226
- # fetch all predictions for this label, video, and model meta ordered by ImageClassificationPrediction.frame.frame_number
227
- predictions = ImageClassificationPrediction.objects.filter(label=label, legacy_frame__video=video, model_meta=model_meta).order_by('legacy_frame__frame_number')
228
- confidences = np.array([prediction.confidence for prediction in predictions])
229
- smooth_confidences = self.apply_running_mean(confidences, window_size_in_seconds)
230
- # calculate binary predictions
231
- binary_predictions = smooth_confidences > 0.5
232
- # add to prediction array
233
- prediction_array[:, i] = binary_predictions
234
-
235
- # save prediction array
236
- self.save_prediction_array(prediction_array)
237
-
238
-
239
-
240
-
241
-
242
-
243
-
244
-
@@ -1,5 +0,0 @@
1
- from .product import Product
2
- from .product_material import ProductMaterial
3
- from .product_group import ProductGroup
4
- from .reference_product import ReferenceProduct
5
- from .product_weight import ProductWeight
@@ -1,97 +0,0 @@
1
- from django.db import models
2
-
3
- class ProductManager(models.Manager):
4
- def get_by_natural_key(self, name):
5
- return self.get(name=name)
6
-
7
- def sum_weights(product_materials):
8
- # sum up the weights
9
- weight = 0
10
- reference_unit = None
11
- for product_material in product_materials:
12
- if not reference_unit:
13
- reference_unit = product_material.unit
14
- else:
15
- assert reference_unit == product_material.unit, "ProductMaterial units do not match"
16
- weight += product_material.quantity
17
-
18
- return weight, reference_unit
19
-
20
- def sum_emissions(product_materials):
21
- # sum up the emissions
22
- emission = 0
23
- reference_unit = None
24
- for product_material in product_materials:
25
- if not reference_unit:
26
- reference_unit = product_material.unit
27
- else:
28
- assert reference_unit == product_material.unit, "ProductMaterial units do not match"
29
- emission, emission_unit = product_material.get_emission()
30
- assert reference_unit == emission_unit, "ProductMaterial units do not match"
31
- emission += emission
32
-
33
- return emission, reference_unit
34
-
35
- class Product(models.Model):
36
- objects = ProductManager()
37
-
38
- name = models.CharField(max_length=255)
39
- name_de = models.CharField(max_length=255, null=True)
40
- name_en = models.CharField(max_length=255, null=True)
41
-
42
- transport_route = models.ForeignKey("TransportRoute", on_delete=models.SET_NULL, null=True)
43
- product_group = models.ForeignKey("ProductGroup", on_delete=models.SET_NULL, null=True)
44
-
45
- def natural_key(self):
46
- return (self.name,)
47
-
48
- def __str__(self):
49
- return self.name
50
-
51
- def get_product_weight(self):
52
- # check if there is a product material weight
53
- from .product_material import ProductMaterial
54
- product_materials = ProductMaterial.objects.filter(product=self, component="product")
55
- if product_materials:
56
- return self.get_product_material_weight()
57
-
58
- # check if there is a product weight
59
- #TODO
60
-
61
- def get_package_weight(self):
62
- # check if there is a package material weight
63
- from .product_material import ProductMaterial
64
- product_materials = ProductMaterial.objects.filter(product=self, component="package")
65
- if product_materials:
66
- return self.get_package_material_weight()
67
-
68
- # check if there is a package weight
69
- #TODO
70
-
71
- def get_product_material_weight(self):
72
- # get all materials with component == "product"
73
- from .product_material import ProductMaterial
74
- product_materials = ProductMaterial.objects.filter(product=self, component="product")
75
-
76
- return sum_weights(product_materials)
77
-
78
- def get_package_material_weight(self):
79
- # get all materials with component == "package"
80
- from .product_material import ProductMaterial
81
- product_materials = ProductMaterial.objects.filter(product=self, component="package")
82
-
83
- return sum_weights(product_materials)
84
-
85
- def get_product_material_emission(self):
86
- # get all materials with component == "product"
87
- from .product_material import ProductMaterial
88
- product_materials = ProductMaterial.objects.filter(product=self, component="product")
89
-
90
- return sum_emissions(product_materials)
91
-
92
- def get_package_material_emission(self):
93
- # get all materials with component == "package"
94
- from .product_material import ProductMaterial
95
- product_materials = ProductMaterial.objects.filter(product=self, component="package")
96
-
97
- return sum_emissions(product_materials)
@@ -1,19 +0,0 @@
1
- from django.db import models
2
-
3
- class ProductGroupManager(models.Manager):
4
- def get_by_natural_key(self, name):
5
- return self.get(name=name)
6
-
7
- class ProductGroup(models.Model):
8
- objects = ProductGroupManager()
9
-
10
- name = models.CharField(max_length=255)
11
- name_de = models.CharField(max_length=255, null=True)
12
- name_en = models.CharField(max_length=255, null=True)
13
-
14
- def natural_key(self):
15
- return (self.name,)
16
-
17
- def __str__(self):
18
- return self.name
19
-
@@ -1,24 +0,0 @@
1
- from django.db import models
2
-
3
- class ProductMaterial(models.Model):
4
- component = models.CharField(max_length=255)
5
- material = models.ForeignKey("Material", on_delete=models.CASCADE)
6
- product = models.ForeignKey("Product", on_delete=models.CASCADE, related_name="product_materials")
7
- unit = models.ForeignKey("Unit", on_delete=models.CASCADE)
8
- quantity = models.FloatField()
9
-
10
- def get_emission(self):
11
- from ..emission import EmissionFactor
12
- emission_factor:EmissionFactor = self.material.emission_factor
13
- if emission_factor is None:
14
- raise Exception("No emission factor for material " + self.material.name + " found.")
15
-
16
- # make sure product_material.unit is the same as emission_factor.unit
17
- if self.unit != emission_factor.unit:
18
- raise Exception("Unit mismatch: " + self.unit.name + " != " + emission_factor.unit.name)
19
-
20
- emmision_value = emission_factor.value * self.quantity
21
- emission_unit = emission_factor.unit
22
- return emmision_value, emission_unit
23
-
24
-
@@ -1,26 +0,0 @@
1
- from django.db import models
2
- import pandas as pd
3
-
4
- class ProductWeightManager(models.Manager):
5
- def get_by_natural_key(self, product, product_group, weight):
6
- return self.get(product=product, product_group=product_group, weight=weight)
7
-
8
- class ProductWeight(models.Model):
9
- objects = ProductWeightManager()
10
-
11
- name = models.CharField(max_length=255, null = True)
12
- product = models.ForeignKey("Product", on_delete=models.CASCADE)
13
- measured = models.FloatField(null=True)
14
- verified = models.FloatField(null=True)
15
- manufacturer = models.FloatField(null=True)
16
- unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
17
-
18
- def get_weight(self):
19
- if not pd.isnull(self.verified):
20
- return self.verified
21
- elif not pd.isnull(self.measured):
22
- return self.measured
23
- elif not pd.isnull(self.manufacturer):
24
- return self.manufacturer
25
- else:
26
- return None
@@ -1,99 +0,0 @@
1
- from django.db import models
2
- from typing import List
3
-
4
- class ReferenceProductManager(models.Manager):
5
- def get_by_natural_key(self, product_name:str, product_group_name:str):
6
- return self.get(product__name=product_name, product_group__name=product_group_name)
7
-
8
- class ReferenceProduct(models.Model):
9
- name = models.CharField(max_length=255)
10
- product = models.ForeignKey("Product", on_delete=models.CASCADE)
11
- product_group = models.OneToOneField("ProductGroup", on_delete=models.CASCADE, related_name="reference_product")
12
- emission_factor_total = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True, blank = True)
13
- emission_factor_package = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True, related_name="reference_product_package")
14
- emission_factor_product = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True, related_name="reference_product_product")
15
-
16
- objects = ReferenceProductManager()
17
-
18
- def __str__(self):
19
- return self.product.name + " (" + self.product_group.name + ")"
20
-
21
- def set_emission_factors(self):
22
- from .product import Product
23
- from .product_material import ProductMaterial
24
- from ..emission import EmissionFactor
25
-
26
- product:Product = self.product
27
- materials = product.product_materials.all()
28
- emission_factor_name = f"{self.product_group.name}_{product.name}_total_emission_factor"
29
- emission_factor_package_name = f"{self.product_group.name}_{product.name}_package_emission_factor"
30
- emission_factor_product_name = f"{self.product_group.name}_{product.name}_product_emission_factor"
31
-
32
- product_emissions = 0
33
- package_emissions = 0
34
-
35
- product_weight, product_weight_unit = product.get_product_material_weight()
36
- package_weight, package_weight_unit = product.get_package_material_weight()
37
- product_emission, product_emission_unit = product.get_product_material_emission()
38
- package_emission, package_emission_unit = product.get_package_material_emission()
39
-
40
- total_weight = product_weight + package_weight
41
- total_emission = product_emission + package_emission
42
-
43
- reference_unit = product_weight_unit
44
- assert reference_unit == package_weight_unit, "Package weight units do not match"
45
- assert reference_unit == product_emission_unit, "Product emission units do not match"
46
- assert reference_unit == package_emission_unit, "Package emission units do not match"
47
-
48
- product_emission_factor_value = product_emission / product_weight
49
- package_emission_factor_value = package_emission / package_weight
50
- total_emission_factor_value = total_emission / total_weight
51
-
52
- emission_factor, created = EmissionFactor.objects.get_or_create(
53
- name=emission_factor_name,
54
- defaults={
55
- "name": emission_factor_name,
56
- "value": total_emission_factor_value,
57
- "unit": reference_unit
58
- }
59
- )
60
- self.emission_factor_total = emission_factor
61
-
62
- emission_factor_package, created = EmissionFactor.objects.get_or_create(
63
- name=emission_factor_package_name,
64
- defaults={
65
- "name": emission_factor_package_name,
66
- "value": package_emission_factor_value,
67
- "unit": reference_unit
68
- }
69
- )
70
- self.emission_factor_package = emission_factor_package
71
-
72
- emission_factor_product, created = EmissionFactor.objects.get_or_create(
73
- name=emission_factor_product_name,
74
- defaults={
75
- "name": emission_factor_product_name,
76
- "value": product_emission_factor_value,
77
- "unit": reference_unit
78
- }
79
- )
80
- self.emission_factor_product = emission_factor_product
81
-
82
- self.save()
83
-
84
- def get_emission_factor(self, component:str):
85
- # check if emission_factor_total exists:
86
- if self.emission_factor_total is None:
87
- self.set_emission_factors()
88
-
89
- if component == "total":
90
- return self.emission_factor_total
91
- elif component == "package":
92
- return self.emission_factor_package
93
- elif component == "product":
94
- return self.emission_factor_product
95
- else:
96
- raise Exception("Unknown component: " + component)
97
-
98
-
99
-
@@ -1,114 +0,0 @@
1
- from django.db import models
2
-
3
- YES_NO_CHOICES = (
4
- ('yes', 'Ja'),
5
- ('no', 'Nein'),
6
- )
7
-
8
- class TtoQuestionnaire(models.Model):
9
-
10
- # Patient Information
11
- patient_name = models.CharField(max_length=255, verbose_name="Identifikation des Patienten (Name)")
12
- birth_date = models.DateField(verbose_name="Geburtsdatum")
13
-
14
- # Base documentation
15
- emergency_patient = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Notfallpatient/kürzlich untersuchter Patient (Verzicht auf Team-Time-Out möglich)")
16
- consent_signed = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Einverständniserklärung unterschrieben (Arzt, Patient)")
17
- documents_present = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Alle Dokumente liegen vor (Labor, Befunde, etc.)")
18
- communication_possible = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Kommunikation mit Patient möglich")
19
- work_incapacity_certificate = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Arbeitsunfähigkeitsbescheinigung")
20
-
21
- # priority items
22
- pregnancy = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Schwangerschaft")
23
- asa_classification_checked = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="ASA-Klassifikation/Komorbidität geprüft")
24
- previous_anesthesia_complications = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Komplikationen bei bisherigen Narkosen?")
25
- last_meal_over_6_hours_ago = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Zeitpunkt letzte Mahlzeit > 6 Stunden")
26
- allergies = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Allergien, welche?")
27
- outpatient_accompaniment_post_sedation = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Nur bei ambulanter Vorstellung: Begleitung nach Sedierung?")
28
-
29
- # Possessions
30
- dental_prosthesis = models.BooleanField(default=False, verbose_name="Zahnprothese")
31
- glasses = models.BooleanField(default=False, verbose_name="Brille")
32
- implants = models.BooleanField(default=False, verbose_name="Implantate")
33
- hearing_aids = models.BooleanField(default=False, verbose_name="Hörgeräte")
34
-
35
-
36
- # Medical History
37
- anticoagulants_ass = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Antikoagulation, ASS")
38
- blood_pressure_medication = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Blutdruckmedikamente")
39
- glaucoma = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Glaukom")
40
-
41
- metal_implants = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Metallimplantate")
42
- pacemaker_icd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Herzschrittmacher/ICD")
43
-
44
- copd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="COPD")
45
- liver_cirrhosis = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Leberzirrhose")
46
-
47
- ibd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="CED (Chronisch entzündliche Darmerkrankungen)")
48
- radiation = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Bestrahlung")
49
- surgeries = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="OP´s")
50
-
51
- # preflight
52
- team_introduction = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Teamvorstellung mit Name und Aufgabe")
53
- instruments_available = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Notwendige Instrumente vorhanden?")
54
- monitoring_medications_equipment_checked = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Monitoring, Medikamente, Equipment zum Atemwegsmanagement zur Verfügung und überprüft?")
55
- complete_documentation_inclusive_care_notes = models.TextField(verbose_name="Vollständige Dokumentation inklusive Hinweise für Nachsorge")
56
-
57
- # notes
58
- notes = models.TextField(verbose_name="Bemerkungen", default = "Keine Bemerkungen")
59
-
60
- # postflight
61
- specimens_secured = models.BooleanField(default=False, verbose_name="Histologische Proben gesichert")
62
- patient_condition_documented = models.TextField(verbose_name="Patientenzustand dokumentiert (je nach Ausgangszustand)")
63
-
64
-
65
-
66
- def __str__(self):
67
- return f"Endoscopy Questionnaire for {self.patient_name} on {self.birth_date}"
68
-
69
- def get_id_attributes(self):
70
- _ = [self.patient_name, self.birth_date]
71
- return _
72
-
73
- def get_base_documentation_attributes(self):
74
- _ = [self.emergency_patient, self.consent_signed, self.documents_present, self.communication_possible, self.work_incapacity_certificate]
75
- return _
76
-
77
- def get_priority_items_attributes(self):
78
- _ = [self.pregnancy, self.asa_classification_checked, self.previous_anesthesia_complications, self.last_meal_over_6_hours_ago, self.allergies, self.outpatient_accompaniment_post_sedation]
79
- return _
80
-
81
- def get_possessions_attributes(self):
82
- _ = [self.dental_prosthesis, self.glasses, self.implants, self.hearing_aids]
83
- return _
84
-
85
- def get_medical_history_attributes(self):
86
- _ = [
87
- self.anticoagulants_ass,
88
- self.blood_pressure_medication,
89
- self.glaucoma,
90
- self.metal_implants,
91
- self.pacemaker_icd,
92
- self.copd,
93
- self.liver_cirrhosis,
94
- self.ibd,
95
- self.radiation,
96
- self.surgeries,
97
- ]
98
-
99
- def get_preflight_attributes(self):
100
- _ = [
101
- self.team_introduction,
102
- self.instruments_available,
103
- self.monitoring_medications_equipment_checked,
104
- ]
105
-
106
- def get_note_attributes(self):
107
- _ = [self.notes]
108
-
109
- def get_postflight_attributes(self):
110
- _ = [
111
- self.specimens_secured,
112
- self.patient_condition_documented
113
- ]
114
-
@@ -1,2 +0,0 @@
1
- from .quiz_answer import QuizAnswer, QuizAnswerType
2
- from .quiz_question import QuizQuestion, QuizQuestionType