endoreg-db 0.8.8.9__py3-none-any.whl → 0.8.9.10__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 (453) hide show
  1. endoreg_db/admin.py +10 -5
  2. endoreg_db/apps.py +4 -7
  3. endoreg_db/authz/auth.py +1 -0
  4. endoreg_db/authz/backends.py +1 -1
  5. endoreg_db/authz/management/commands/list_routes.py +2 -0
  6. endoreg_db/authz/middleware.py +8 -7
  7. endoreg_db/authz/permissions.py +21 -10
  8. endoreg_db/authz/policy.py +14 -19
  9. endoreg_db/authz/views_auth.py +14 -10
  10. endoreg_db/codemods/rename_datetime_fields.py +8 -1
  11. endoreg_db/exceptions.py +5 -2
  12. endoreg_db/forms/__init__.py +0 -1
  13. endoreg_db/forms/examination_form.py +4 -3
  14. endoreg_db/forms/patient_finding_intervention_form.py +30 -8
  15. endoreg_db/forms/patient_form.py +9 -13
  16. endoreg_db/forms/questionnaires/__init__.py +1 -1
  17. endoreg_db/forms/settings/__init__.py +4 -1
  18. endoreg_db/forms/unit.py +2 -1
  19. endoreg_db/helpers/count_db.py +17 -14
  20. endoreg_db/helpers/default_objects.py +2 -1
  21. endoreg_db/helpers/download_segmentation_model.py +4 -3
  22. endoreg_db/helpers/interact.py +0 -5
  23. endoreg_db/helpers/test_video_helper.py +33 -25
  24. endoreg_db/import_files/__init__.py +1 -1
  25. endoreg_db/import_files/context/__init__.py +1 -1
  26. endoreg_db/import_files/context/default_sensitive_meta.py +11 -9
  27. endoreg_db/import_files/context/ensure_center.py +4 -4
  28. endoreg_db/import_files/context/file_lock.py +3 -3
  29. endoreg_db/import_files/context/import_context.py +11 -12
  30. endoreg_db/import_files/context/validate_directories.py +1 -0
  31. endoreg_db/import_files/file_storage/create_report_file.py +57 -34
  32. endoreg_db/import_files/file_storage/create_video_file.py +64 -35
  33. endoreg_db/import_files/file_storage/sensitive_meta_storage.py +5 -2
  34. endoreg_db/import_files/file_storage/state_management.py +146 -83
  35. endoreg_db/import_files/file_storage/storage.py +5 -1
  36. endoreg_db/import_files/processing/report_processing/report_anonymization.py +24 -19
  37. endoreg_db/import_files/processing/sensitive_meta_adapter.py +3 -3
  38. endoreg_db/import_files/processing/video_processing/video_anonymization.py +18 -18
  39. endoreg_db/import_files/pseudonymization/k_anonymity.py +8 -9
  40. endoreg_db/import_files/pseudonymization/k_pseudonymity.py +16 -5
  41. endoreg_db/import_files/report_import_service.py +36 -30
  42. endoreg_db/import_files/video_import_service.py +27 -23
  43. endoreg_db/logger_conf.py +56 -40
  44. endoreg_db/management/__init__.py +1 -1
  45. endoreg_db/management/commands/__init__.py +1 -1
  46. endoreg_db/management/commands/check_auth.py +45 -38
  47. endoreg_db/management/commands/create_model_meta_from_huggingface.py +53 -2
  48. endoreg_db/management/commands/create_multilabel_model_meta.py +54 -19
  49. endoreg_db/management/commands/fix_missing_patient_data.py +105 -71
  50. endoreg_db/management/commands/fix_video_paths.py +75 -54
  51. endoreg_db/management/commands/import_report.py +1 -3
  52. endoreg_db/management/commands/list_routes.py +2 -0
  53. endoreg_db/management/commands/load_ai_model_data.py +8 -2
  54. endoreg_db/management/commands/load_ai_model_label_data.py +0 -1
  55. endoreg_db/management/commands/load_center_data.py +3 -3
  56. endoreg_db/management/commands/load_distribution_data.py +35 -38
  57. endoreg_db/management/commands/load_endoscope_data.py +0 -3
  58. endoreg_db/management/commands/load_examination_data.py +20 -4
  59. endoreg_db/management/commands/load_finding_data.py +18 -3
  60. endoreg_db/management/commands/load_gender_data.py +17 -24
  61. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +95 -85
  62. endoreg_db/management/commands/load_information_source.py +0 -3
  63. endoreg_db/management/commands/load_lab_value_data.py +14 -3
  64. endoreg_db/management/commands/load_legacy_data.py +303 -0
  65. endoreg_db/management/commands/load_name_data.py +1 -2
  66. endoreg_db/management/commands/load_pdf_type_data.py +4 -8
  67. endoreg_db/management/commands/load_profession_data.py +0 -1
  68. endoreg_db/management/commands/load_report_reader_flag_data.py +0 -4
  69. endoreg_db/management/commands/load_requirement_data.py +6 -2
  70. endoreg_db/management/commands/load_unit_data.py +0 -4
  71. endoreg_db/management/commands/load_user_groups.py +5 -7
  72. endoreg_db/management/commands/model_input.py +169 -0
  73. endoreg_db/management/commands/register_ai_model.py +22 -16
  74. endoreg_db/management/commands/setup_endoreg_db.py +110 -32
  75. endoreg_db/management/commands/storage_management.py +14 -8
  76. endoreg_db/management/commands/summarize_db_content.py +154 -63
  77. endoreg_db/management/commands/train_image_multilabel_model.py +144 -0
  78. endoreg_db/management/commands/validate_video_files.py +82 -50
  79. endoreg_db/management/commands/video_validation.py +4 -6
  80. endoreg_db/migrations/0001_initial.py +112 -63
  81. endoreg_db/migrations/__init__.py +0 -0
  82. endoreg_db/models/__init__.py +8 -0
  83. endoreg_db/models/administration/ai/active_model.py +5 -5
  84. endoreg_db/models/administration/ai/ai_model.py +41 -18
  85. endoreg_db/models/administration/ai/model_type.py +1 -0
  86. endoreg_db/models/administration/case/case.py +22 -22
  87. endoreg_db/models/administration/center/__init__.py +5 -5
  88. endoreg_db/models/administration/center/center.py +6 -2
  89. endoreg_db/models/administration/center/center_resource.py +18 -4
  90. endoreg_db/models/administration/center/center_shift.py +3 -1
  91. endoreg_db/models/administration/center/center_waste.py +6 -2
  92. endoreg_db/models/administration/person/__init__.py +1 -1
  93. endoreg_db/models/administration/person/employee/__init__.py +1 -1
  94. endoreg_db/models/administration/person/employee/employee_type.py +3 -1
  95. endoreg_db/models/administration/person/examiner/__init__.py +1 -1
  96. endoreg_db/models/administration/person/examiner/examiner.py +10 -2
  97. endoreg_db/models/administration/person/names/first_name.py +6 -4
  98. endoreg_db/models/administration/person/names/last_name.py +4 -3
  99. endoreg_db/models/administration/person/patient/__init__.py +1 -1
  100. endoreg_db/models/administration/person/patient/patient.py +0 -1
  101. endoreg_db/models/administration/person/patient/patient_external_id.py +0 -1
  102. endoreg_db/models/administration/person/person.py +1 -1
  103. endoreg_db/models/administration/product/__init__.py +7 -6
  104. endoreg_db/models/administration/product/product.py +6 -2
  105. endoreg_db/models/administration/product/product_group.py +9 -7
  106. endoreg_db/models/administration/product/product_material.py +9 -2
  107. endoreg_db/models/administration/product/reference_product.py +64 -15
  108. endoreg_db/models/administration/qualification/qualification.py +3 -1
  109. endoreg_db/models/administration/shift/shift.py +3 -1
  110. endoreg_db/models/administration/shift/shift_type.py +12 -4
  111. endoreg_db/models/aidataset/__init__.py +5 -0
  112. endoreg_db/models/aidataset/aidataset.py +193 -0
  113. endoreg_db/models/label/__init__.py +1 -1
  114. endoreg_db/models/label/label.py +10 -2
  115. endoreg_db/models/label/label_set.py +3 -1
  116. endoreg_db/models/label/label_video_segment/_create_from_video.py +6 -2
  117. endoreg_db/models/label/label_video_segment/label_video_segment.py +148 -44
  118. endoreg_db/models/media/__init__.py +12 -5
  119. endoreg_db/models/media/frame/__init__.py +1 -1
  120. endoreg_db/models/media/frame/frame.py +34 -8
  121. endoreg_db/models/media/pdf/__init__.py +2 -1
  122. endoreg_db/models/media/pdf/raw_pdf.py +11 -4
  123. endoreg_db/models/media/pdf/report_file.py +6 -2
  124. endoreg_db/models/media/pdf/report_reader/__init__.py +3 -3
  125. endoreg_db/models/media/pdf/report_reader/report_reader_flag.py +15 -5
  126. endoreg_db/models/media/video/create_from_file.py +20 -41
  127. endoreg_db/models/media/video/pipe_1.py +75 -30
  128. endoreg_db/models/media/video/pipe_2.py +37 -12
  129. endoreg_db/models/media/video/video_file.py +36 -24
  130. endoreg_db/models/media/video/video_file_ai.py +235 -70
  131. endoreg_db/models/media/video/video_file_anonymize.py +240 -65
  132. endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +6 -1
  133. endoreg_db/models/media/video/video_file_frames/_create_frame_object.py +3 -1
  134. endoreg_db/models/media/video/video_file_frames/_delete_frames.py +30 -9
  135. endoreg_db/models/media/video/video_file_frames/_extract_frames.py +95 -29
  136. endoreg_db/models/media/video/video_file_frames/_get_frame.py +13 -3
  137. endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +4 -1
  138. endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +15 -3
  139. endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +15 -3
  140. endoreg_db/models/media/video/video_file_frames/_get_frames.py +7 -2
  141. endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +109 -23
  142. endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +111 -27
  143. endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +46 -13
  144. endoreg_db/models/media/video/video_file_io.py +85 -33
  145. endoreg_db/models/media/video/video_file_meta/__init__.py +6 -6
  146. endoreg_db/models/media/video/video_file_meta/get_crop_template.py +17 -4
  147. endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +28 -7
  148. endoreg_db/models/media/video/video_file_meta/get_fps.py +46 -13
  149. endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +81 -20
  150. endoreg_db/models/media/video/video_file_meta/text_meta.py +61 -20
  151. endoreg_db/models/media/video/video_file_meta/video_meta.py +40 -12
  152. endoreg_db/models/media/video/video_file_segments.py +118 -27
  153. endoreg_db/models/media/video/video_metadata.py +25 -6
  154. endoreg_db/models/media/video/video_processing.py +54 -15
  155. endoreg_db/models/medical/__init__.py +3 -13
  156. endoreg_db/models/medical/contraindication/__init__.py +3 -1
  157. endoreg_db/models/medical/disease.py +18 -6
  158. endoreg_db/models/medical/event.py +6 -2
  159. endoreg_db/models/medical/examination/__init__.py +5 -1
  160. endoreg_db/models/medical/examination/examination.py +22 -6
  161. endoreg_db/models/medical/examination/examination_indication.py +23 -7
  162. endoreg_db/models/medical/examination/examination_time.py +6 -2
  163. endoreg_db/models/medical/finding/__init__.py +3 -1
  164. endoreg_db/models/medical/finding/finding.py +37 -12
  165. endoreg_db/models/medical/finding/finding_classification.py +27 -8
  166. endoreg_db/models/medical/finding/finding_intervention.py +19 -6
  167. endoreg_db/models/medical/finding/finding_type.py +3 -1
  168. endoreg_db/models/medical/hardware/__init__.py +1 -1
  169. endoreg_db/models/medical/hardware/endoscope.py +14 -2
  170. endoreg_db/models/medical/laboratory/__init__.py +1 -1
  171. endoreg_db/models/medical/laboratory/lab_value.py +139 -39
  172. endoreg_db/models/medical/medication/__init__.py +7 -3
  173. endoreg_db/models/medical/medication/medication.py +3 -1
  174. endoreg_db/models/medical/medication/medication_indication.py +3 -1
  175. endoreg_db/models/medical/medication/medication_indication_type.py +11 -3
  176. endoreg_db/models/medical/medication/medication_intake_time.py +3 -1
  177. endoreg_db/models/medical/medication/medication_schedule.py +3 -1
  178. endoreg_db/models/medical/patient/__init__.py +2 -10
  179. endoreg_db/models/medical/patient/medication_examples.py +3 -14
  180. endoreg_db/models/medical/patient/patient_disease.py +17 -5
  181. endoreg_db/models/medical/patient/patient_event.py +12 -4
  182. endoreg_db/models/medical/patient/patient_examination.py +52 -15
  183. endoreg_db/models/medical/patient/patient_examination_indication.py +15 -4
  184. endoreg_db/models/medical/patient/patient_finding.py +105 -29
  185. endoreg_db/models/medical/patient/patient_finding_classification.py +41 -12
  186. endoreg_db/models/medical/patient/patient_finding_intervention.py +11 -3
  187. endoreg_db/models/medical/patient/patient_lab_sample.py +6 -2
  188. endoreg_db/models/medical/patient/patient_lab_value.py +42 -10
  189. endoreg_db/models/medical/patient/patient_medication.py +25 -7
  190. endoreg_db/models/medical/patient/patient_medication_schedule.py +34 -10
  191. endoreg_db/models/metadata/model_meta.py +40 -12
  192. endoreg_db/models/metadata/model_meta_logic.py +51 -16
  193. endoreg_db/models/metadata/sensitive_meta.py +65 -28
  194. endoreg_db/models/metadata/sensitive_meta_logic.py +28 -26
  195. endoreg_db/models/metadata/video_meta.py +146 -39
  196. endoreg_db/models/metadata/video_prediction_logic.py +70 -21
  197. endoreg_db/models/metadata/video_prediction_meta.py +80 -27
  198. endoreg_db/models/operation_log.py +63 -0
  199. endoreg_db/models/other/__init__.py +10 -10
  200. endoreg_db/models/other/distribution/__init__.py +9 -7
  201. endoreg_db/models/other/distribution/base_value_distribution.py +3 -1
  202. endoreg_db/models/other/distribution/date_value_distribution.py +19 -5
  203. endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +3 -1
  204. endoreg_db/models/other/distribution/numeric_value_distribution.py +34 -9
  205. endoreg_db/models/other/emission/__init__.py +1 -1
  206. endoreg_db/models/other/emission/emission_factor.py +9 -3
  207. endoreg_db/models/other/information_source.py +15 -5
  208. endoreg_db/models/other/material.py +3 -1
  209. endoreg_db/models/other/transport_route.py +3 -1
  210. endoreg_db/models/other/unit.py +6 -2
  211. endoreg_db/models/report/report.py +0 -1
  212. endoreg_db/models/requirement/requirement.py +84 -27
  213. endoreg_db/models/requirement/requirement_error.py +5 -6
  214. endoreg_db/models/requirement/requirement_evaluation/__init__.py +1 -1
  215. endoreg_db/models/requirement/requirement_evaluation/evaluate_with_dependencies.py +8 -8
  216. endoreg_db/models/requirement/requirement_evaluation/get_values.py +3 -3
  217. endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +24 -8
  218. endoreg_db/models/requirement/requirement_operator.py +28 -8
  219. endoreg_db/models/requirement/requirement_set.py +34 -11
  220. endoreg_db/models/state/__init__.py +1 -0
  221. endoreg_db/models/state/audit_ledger.py +9 -2
  222. endoreg_db/models/{media → state}/processing_history/__init__.py +1 -3
  223. endoreg_db/models/state/processing_history/processing_history.py +136 -0
  224. endoreg_db/models/state/raw_pdf.py +0 -1
  225. endoreg_db/models/state/video.py +2 -3
  226. endoreg_db/models/utils.py +4 -2
  227. endoreg_db/queries/__init__.py +2 -6
  228. endoreg_db/queries/annotations/__init__.py +1 -3
  229. endoreg_db/queries/annotations/legacy.py +37 -26
  230. endoreg_db/root_urls.py +3 -4
  231. endoreg_db/schemas/examination_evaluation.py +3 -0
  232. endoreg_db/serializers/Frames_NICE_and_PARIS_classifications.py +249 -163
  233. endoreg_db/serializers/__init__.py +2 -8
  234. endoreg_db/serializers/administration/__init__.py +1 -2
  235. endoreg_db/serializers/administration/ai/__init__.py +0 -1
  236. endoreg_db/serializers/administration/ai/active_model.py +3 -1
  237. endoreg_db/serializers/administration/ai/ai_model.py +5 -3
  238. endoreg_db/serializers/administration/ai/model_type.py +3 -1
  239. endoreg_db/serializers/administration/center.py +7 -2
  240. endoreg_db/serializers/administration/gender.py +4 -2
  241. endoreg_db/serializers/anonymization.py +13 -13
  242. endoreg_db/serializers/evaluation/examination_evaluation.py +0 -1
  243. endoreg_db/serializers/examination/__init__.py +1 -1
  244. endoreg_db/serializers/examination/base.py +12 -13
  245. endoreg_db/serializers/examination/dropdown.py +6 -7
  246. endoreg_db/serializers/examination_serializer.py +3 -6
  247. endoreg_db/serializers/finding/__init__.py +1 -1
  248. endoreg_db/serializers/finding/finding.py +14 -7
  249. endoreg_db/serializers/finding_classification/__init__.py +3 -3
  250. endoreg_db/serializers/finding_classification/choice.py +3 -3
  251. endoreg_db/serializers/finding_classification/classification.py +2 -4
  252. endoreg_db/serializers/label_video_segment/__init__.py +5 -3
  253. endoreg_db/serializers/{label → label_video_segment}/image_classification_annotation.py +5 -5
  254. endoreg_db/serializers/label_video_segment/label/__init__.py +6 -0
  255. endoreg_db/serializers/{label → label_video_segment/label}/label.py +1 -1
  256. endoreg_db/serializers/label_video_segment/label_video_segment.py +338 -228
  257. endoreg_db/serializers/meta/__init__.py +1 -2
  258. endoreg_db/serializers/meta/sensitive_meta_detail.py +28 -13
  259. endoreg_db/serializers/meta/sensitive_meta_update.py +51 -46
  260. endoreg_db/serializers/meta/sensitive_meta_verification.py +19 -16
  261. endoreg_db/serializers/misc/__init__.py +2 -2
  262. endoreg_db/serializers/misc/file_overview.py +11 -7
  263. endoreg_db/serializers/misc/stats.py +10 -8
  264. endoreg_db/serializers/misc/translatable_field_mix_in.py +6 -6
  265. endoreg_db/serializers/misc/upload_job.py +32 -29
  266. endoreg_db/serializers/patient/__init__.py +2 -1
  267. endoreg_db/serializers/patient/patient.py +32 -15
  268. endoreg_db/serializers/patient/patient_dropdown.py +11 -3
  269. endoreg_db/serializers/patient_examination/__init__.py +1 -1
  270. endoreg_db/serializers/patient_examination/patient_examination.py +67 -40
  271. endoreg_db/serializers/patient_finding/__init__.py +1 -1
  272. endoreg_db/serializers/patient_finding/patient_finding.py +2 -1
  273. endoreg_db/serializers/patient_finding/patient_finding_classification.py +17 -9
  274. endoreg_db/serializers/patient_finding/patient_finding_detail.py +26 -17
  275. endoreg_db/serializers/patient_finding/patient_finding_intervention.py +7 -5
  276. endoreg_db/serializers/patient_finding/patient_finding_list.py +10 -11
  277. endoreg_db/serializers/patient_finding/patient_finding_write.py +36 -27
  278. endoreg_db/serializers/pdf/__init__.py +1 -3
  279. endoreg_db/serializers/requirements/requirement_schema.py +1 -6
  280. endoreg_db/serializers/sensitive_meta_serializer.py +100 -81
  281. endoreg_db/serializers/video/__init__.py +2 -2
  282. endoreg_db/serializers/video/{segmentation.py → video_file.py} +66 -47
  283. endoreg_db/serializers/video/video_file_brief.py +6 -2
  284. endoreg_db/serializers/video/video_file_detail.py +36 -23
  285. endoreg_db/serializers/video/video_file_list.py +4 -2
  286. endoreg_db/serializers/video/video_processing_history.py +54 -50
  287. endoreg_db/services/__init__.py +1 -1
  288. endoreg_db/services/anonymization.py +2 -2
  289. endoreg_db/services/examination_evaluation.py +40 -17
  290. endoreg_db/services/model_meta_from_hf.py +76 -0
  291. endoreg_db/services/polling_coordinator.py +101 -70
  292. endoreg_db/services/pseudonym_service.py +27 -22
  293. endoreg_db/services/report_import.py +6 -3
  294. endoreg_db/services/segment_sync.py +75 -59
  295. endoreg_db/services/video_import.py +6 -7
  296. endoreg_db/urls/__init__.py +2 -2
  297. endoreg_db/urls/ai.py +7 -25
  298. endoreg_db/urls/anonymization.py +61 -15
  299. endoreg_db/urls/auth.py +4 -4
  300. endoreg_db/urls/classification.py +4 -9
  301. endoreg_db/urls/examination.py +27 -18
  302. endoreg_db/urls/media.py +27 -34
  303. endoreg_db/urls/patient.py +11 -7
  304. endoreg_db/urls/requirements.py +3 -1
  305. endoreg_db/urls/root_urls.py +2 -3
  306. endoreg_db/urls/stats.py +24 -16
  307. endoreg_db/urls/upload.py +3 -11
  308. endoreg_db/utils/__init__.py +14 -15
  309. endoreg_db/utils/ai/__init__.py +1 -1
  310. endoreg_db/utils/ai/data_loader_for_model_input.py +262 -0
  311. endoreg_db/utils/ai/data_loader_for_model_training.py +262 -0
  312. endoreg_db/utils/ai/get.py +2 -1
  313. endoreg_db/utils/ai/inference_dataset.py +14 -15
  314. endoreg_db/utils/ai/model_training/config.py +117 -0
  315. endoreg_db/utils/ai/model_training/dataset.py +74 -0
  316. endoreg_db/utils/ai/model_training/losses.py +68 -0
  317. endoreg_db/utils/ai/model_training/metrics.py +78 -0
  318. endoreg_db/utils/ai/model_training/model_backbones.py +155 -0
  319. endoreg_db/utils/ai/model_training/model_gastronet_resnet.py +118 -0
  320. endoreg_db/utils/ai/model_training/trainer_gastronet_multilabel.py +771 -0
  321. endoreg_db/utils/ai/multilabel_classification_net.py +21 -6
  322. endoreg_db/utils/ai/predict.py +4 -4
  323. endoreg_db/utils/ai/preprocess.py +19 -11
  324. endoreg_db/utils/calc_duration_seconds.py +4 -4
  325. endoreg_db/utils/case_generator/lab_sample_factory.py +3 -4
  326. endoreg_db/utils/check_video_files.py +74 -47
  327. endoreg_db/utils/cropping.py +10 -9
  328. endoreg_db/utils/dataloader.py +11 -3
  329. endoreg_db/utils/dates.py +3 -4
  330. endoreg_db/utils/defaults/set_default_center.py +7 -6
  331. endoreg_db/utils/env.py +6 -2
  332. endoreg_db/utils/extract_specific_frames.py +24 -9
  333. endoreg_db/utils/file_operations.py +30 -18
  334. endoreg_db/utils/fix_video_path_direct.py +57 -41
  335. endoreg_db/utils/frame_anonymization_utils.py +157 -157
  336. endoreg_db/utils/hashs.py +3 -18
  337. endoreg_db/utils/links/requirement_link.py +96 -52
  338. endoreg_db/utils/ocr.py +30 -25
  339. endoreg_db/utils/operation_log.py +61 -0
  340. endoreg_db/utils/parse_and_generate_yaml.py +12 -13
  341. endoreg_db/utils/paths.py +6 -6
  342. endoreg_db/utils/permissions.py +40 -24
  343. endoreg_db/utils/pipelines/process_video_dir.py +50 -26
  344. endoreg_db/utils/product/sum_emissions.py +5 -3
  345. endoreg_db/utils/product/sum_weights.py +4 -2
  346. endoreg_db/utils/pydantic_models/__init__.py +3 -4
  347. endoreg_db/utils/requirement_operator_logic/_old/lab_value_operators.py +207 -107
  348. endoreg_db/utils/requirement_operator_logic/_old/model_evaluators.py +252 -65
  349. endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +27 -10
  350. endoreg_db/utils/setup_config.py +21 -5
  351. endoreg_db/utils/storage.py +3 -1
  352. endoreg_db/utils/translation.py +19 -15
  353. endoreg_db/utils/uuid.py +1 -0
  354. endoreg_db/utils/validate_endo_roi.py +12 -4
  355. endoreg_db/utils/validate_subcategory_dict.py +26 -24
  356. endoreg_db/utils/validate_video_detailed.py +207 -149
  357. endoreg_db/utils/video/__init__.py +7 -3
  358. endoreg_db/utils/video/extract_frames.py +30 -18
  359. endoreg_db/utils/video/ffmpeg_wrapper.py +217 -52
  360. endoreg_db/utils/video/names.py +11 -6
  361. endoreg_db/utils/video/streaming_processor.py +175 -101
  362. endoreg_db/utils/video/video_splitter.py +30 -19
  363. endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py +59 -50
  364. endoreg_db/views/__init__.py +0 -20
  365. endoreg_db/views/anonymization/__init__.py +6 -2
  366. endoreg_db/views/anonymization/media_management.py +2 -6
  367. endoreg_db/views/anonymization/overview.py +34 -1
  368. endoreg_db/views/anonymization/validate.py +79 -18
  369. endoreg_db/views/auth/__init__.py +1 -1
  370. endoreg_db/views/auth/keycloak.py +16 -14
  371. endoreg_db/views/examination/__init__.py +12 -15
  372. endoreg_db/views/examination/examination.py +5 -5
  373. endoreg_db/views/examination/examination_manifest_cache.py +5 -5
  374. endoreg_db/views/examination/get_finding_classification_choices.py +8 -5
  375. endoreg_db/views/examination/get_finding_classifications.py +9 -7
  376. endoreg_db/views/examination/get_findings.py +8 -10
  377. endoreg_db/views/examination/get_instruments.py +3 -2
  378. endoreg_db/views/examination/get_interventions.py +1 -1
  379. endoreg_db/views/finding/__init__.py +2 -2
  380. endoreg_db/views/finding/finding.py +58 -54
  381. endoreg_db/views/finding/get_classifications.py +1 -1
  382. endoreg_db/views/finding/get_interventions.py +1 -1
  383. endoreg_db/views/finding_classification/__init__.py +5 -5
  384. endoreg_db/views/finding_classification/finding_classification.py +5 -6
  385. endoreg_db/views/finding_classification/get_classification_choices.py +3 -4
  386. endoreg_db/views/media/__init__.py +13 -13
  387. endoreg_db/views/media/pdf_media.py +9 -9
  388. endoreg_db/views/media/sensitive_metadata.py +10 -7
  389. endoreg_db/views/media/video_media.py +4 -4
  390. endoreg_db/views/meta/__init__.py +1 -1
  391. endoreg_db/views/meta/sensitive_meta_list.py +20 -22
  392. endoreg_db/views/meta/sensitive_meta_verification.py +14 -11
  393. endoreg_db/views/misc/__init__.py +6 -34
  394. endoreg_db/views/misc/center.py +2 -1
  395. endoreg_db/views/misc/csrf.py +2 -1
  396. endoreg_db/views/misc/gender.py +2 -1
  397. endoreg_db/views/misc/stats.py +141 -106
  398. endoreg_db/views/patient/__init__.py +1 -3
  399. endoreg_db/views/patient/patient.py +141 -99
  400. endoreg_db/views/patient_examination/__init__.py +5 -5
  401. endoreg_db/views/patient_examination/patient_examination.py +43 -42
  402. endoreg_db/views/patient_examination/patient_examination_create.py +10 -15
  403. endoreg_db/views/patient_examination/patient_examination_detail.py +12 -15
  404. endoreg_db/views/patient_examination/patient_examination_list.py +21 -17
  405. endoreg_db/views/patient_examination/video.py +114 -80
  406. endoreg_db/views/patient_finding/__init__.py +1 -1
  407. endoreg_db/views/patient_finding/patient_finding.py +17 -10
  408. endoreg_db/views/patient_finding/patient_finding_optimized.py +127 -95
  409. endoreg_db/views/patient_finding_classification/__init__.py +1 -1
  410. endoreg_db/views/patient_finding_classification/pfc_create.py +35 -27
  411. endoreg_db/views/report/reimport.py +1 -1
  412. endoreg_db/views/report/report_stream.py +5 -8
  413. endoreg_db/views/requirement/__init__.py +2 -1
  414. endoreg_db/views/requirement/evaluate.py +7 -9
  415. endoreg_db/views/requirement/lookup.py +2 -3
  416. endoreg_db/views/requirement/lookup_store.py +0 -1
  417. endoreg_db/views/requirement/requirement_utils.py +2 -4
  418. endoreg_db/views/stats/__init__.py +4 -4
  419. endoreg_db/views/stats/stats_views.py +152 -115
  420. endoreg_db/views/video/__init__.py +18 -27
  421. endoreg_db/views/{ai → video/ai}/__init__.py +2 -2
  422. endoreg_db/views/{ai → video/ai}/label.py +20 -16
  423. endoreg_db/views/video/correction.py +5 -6
  424. endoreg_db/views/video/reimport.py +134 -99
  425. endoreg_db/views/video/segments_crud.py +134 -44
  426. endoreg_db/views/video/video_apply_mask.py +13 -12
  427. endoreg_db/views/video/video_correction.py +2 -1
  428. endoreg_db/views/video/video_download_processed.py +15 -15
  429. endoreg_db/views/video/video_meta_stats.py +7 -6
  430. endoreg_db/views/video/video_processing_history.py +3 -2
  431. endoreg_db/views/video/video_remove_frames.py +13 -12
  432. endoreg_db/views/video/video_stream.py +110 -82
  433. {endoreg_db-0.8.8.9.dist-info → endoreg_db-0.8.9.10.dist-info}/METADATA +9 -3
  434. {endoreg_db-0.8.8.9.dist-info → endoreg_db-0.8.9.10.dist-info}/RECORD +436 -433
  435. endoreg_db/import_files/processing/video_processing/video_cleanup_on_error.py +0 -119
  436. endoreg_db/management/commands/import_fallback_video.py +0 -203
  437. endoreg_db/management/commands/import_video.py +0 -422
  438. endoreg_db/management/commands/import_video_with_classification.py +0 -367
  439. endoreg_db/models/media/processing_history/processing_history.py +0 -96
  440. endoreg_db/serializers/label/__init__.py +0 -7
  441. endoreg_db/serializers/label_video_segment/_lvs_create.py +0 -149
  442. endoreg_db/serializers/label_video_segment/_lvs_update.py +0 -138
  443. endoreg_db/serializers/label_video_segment/_lvs_validate.py +0 -149
  444. endoreg_db/serializers/label_video_segment/label_video_segment_annotation.py +0 -99
  445. endoreg_db/serializers/label_video_segment/label_video_segment_update.py +0 -163
  446. endoreg_db/services/__old/pdf_import.py +0 -1487
  447. endoreg_db/services/__old/video_import.py +0 -1306
  448. endoreg_db/tasks/upload_tasks.py +0 -216
  449. endoreg_db/tasks/video_ingest.py +0 -161
  450. endoreg_db/tasks/video_processing_tasks.py +0 -327
  451. endoreg_db/views/misc/translation.py +0 -182
  452. {endoreg_db-0.8.8.9.dist-info → endoreg_db-0.8.9.10.dist-info}/WHEEL +0 -0
  453. {endoreg_db-0.8.8.9.dist-info → endoreg_db-0.8.9.10.dist-info}/licenses/LICENSE +0 -0
@@ -2,27 +2,39 @@ from rest_framework import serializers
2
2
  from endoreg_db.models import Patient, Gender, Center
3
3
  from datetime import date
4
4
 
5
+
5
6
  class PatientSerializer(serializers.ModelSerializer):
6
7
  # Use the slug field "name" so that the gender is represented by its string value
7
8
  gender = serializers.SlugRelatedField(
8
- slug_field='name',
9
+ slug_field="name",
9
10
  queryset=Gender.objects.all(),
10
11
  required=False,
11
- allow_null=True
12
+ allow_null=True,
12
13
  )
13
14
  center = serializers.SlugRelatedField(
14
- slug_field='name',
15
+ slug_field="name",
15
16
  queryset=Center.objects.all(),
16
17
  required=False,
17
- allow_null=True
18
+ allow_null=True,
18
19
  )
19
20
  age = serializers.SerializerMethodField()
20
21
 
21
22
  class Meta:
22
23
  model = Patient
23
- fields = ['id', 'first_name', 'last_name', 'dob', 'gender', 'center',
24
- 'email', 'phone', 'patient_hash', 'is_real_person', 'age']
25
- read_only_fields = ['id', 'age']
24
+ fields = [
25
+ "id",
26
+ "first_name",
27
+ "last_name",
28
+ "dob",
29
+ "gender",
30
+ "center",
31
+ "email",
32
+ "phone",
33
+ "patient_hash",
34
+ "is_real_person",
35
+ "age",
36
+ ]
37
+ read_only_fields = ["id", "age"]
26
38
 
27
39
  def get_age(self, obj):
28
40
  """Berechnet das Alter des Patienten"""
@@ -45,12 +57,14 @@ class PatientSerializer(serializers.ModelSerializer):
45
57
  def validate_dob(self, value):
46
58
  """Validiert das Geburtsdatum"""
47
59
  if value and value > date.today():
48
- raise serializers.ValidationError("Geburtsdatum kann nicht in der Zukunft liegen")
60
+ raise serializers.ValidationError(
61
+ "Geburtsdatum kann nicht in der Zukunft liegen"
62
+ )
49
63
  return value
50
64
 
51
65
  def validate_email(self, value):
52
66
  """Validiert die E-Mail-Adresse"""
53
- if value and '@' not in value:
67
+ if value and "@" not in value:
54
68
  raise serializers.ValidationError("Ungültige E-Mail-Adresse")
55
69
  return value
56
70
 
@@ -60,19 +74,21 @@ class PatientSerializer(serializers.ModelSerializer):
60
74
  patient = Patient.objects.create(**validated_data)
61
75
  return patient
62
76
  except Exception as e:
63
- raise serializers.ValidationError(f"Fehler beim Erstellen des Patienten: {str(e)}")
77
+ raise serializers.ValidationError(
78
+ f"Fehler beim Erstellen des Patienten: {str(e)}"
79
+ )
64
80
 
65
81
  def update(self, instance, validated_data):
66
82
  """
67
83
  Update an existing Patient instance with validated data.
68
-
84
+
69
85
  Parameters:
70
86
  instance (Patient): The Patient instance to update.
71
87
  validated_data (dict): Dictionary of validated data to update the instance with.
72
-
88
+
73
89
  Returns:
74
90
  Patient: The updated Patient instance.
75
-
91
+
76
92
  Raises:
77
93
  ValidationError: If an error occurs during the update process.
78
94
  """
@@ -82,5 +98,6 @@ class PatientSerializer(serializers.ModelSerializer):
82
98
  instance.save()
83
99
  return instance
84
100
  except Exception as e:
85
- raise serializers.ValidationError(f"Fehler beim Aktualisieren des Patienten: {str(e)}")
86
-
101
+ raise serializers.ValidationError(
102
+ f"Fehler beim Aktualisieren des Patienten: {str(e)}"
103
+ )
@@ -6,19 +6,27 @@ from rest_framework import serializers
6
6
 
7
7
  class PatientDropdownSerializer(serializers.ModelSerializer):
8
8
  """Serializer für Patient-Dropdown"""
9
+
9
10
  display_name = serializers.SerializerMethodField()
10
11
 
11
12
  class Meta:
12
13
  model = Patient
13
- fields = ['id', 'patient_hash', 'first_name', 'last_name', 'display_name', 'dob']
14
+ fields = [
15
+ "id",
16
+ "patient_hash",
17
+ "first_name",
18
+ "last_name",
19
+ "display_name",
20
+ "dob",
21
+ ]
14
22
 
15
23
  def get_display_name(self, obj):
16
24
  """
17
25
  Returns a user-friendly display string for a patient, combining their first and last name with a shortened patient hash or a placeholder if the hash is missing.
18
-
26
+
19
27
  Parameters:
20
28
  obj: The patient instance being serialized.
21
-
29
+
22
30
  Returns:
23
31
  str: The formatted display name for the patient.
24
32
  """
@@ -4,4 +4,4 @@ from .patient_examination import (
4
4
 
5
5
  __all__ = [
6
6
  "PatientExaminationSerializer",
7
- ]
7
+ ]
@@ -2,44 +2,58 @@ from rest_framework import serializers
2
2
  from endoreg_db.models import PatientExamination, Patient, Examination
3
3
  from datetime import date
4
4
 
5
+
5
6
  class PatientExaminationSerializer(serializers.ModelSerializer):
6
7
  # Verwende CharField für patient, um patient_hash zu empfangen
7
8
  patient = serializers.CharField(
8
9
  write_only=True, # Nur für Eingabe verwenden
9
10
  required=True,
10
- help_text="Patient Hash (z.B. 'patient_2')"
11
+ help_text="Patient Hash (z.B. 'patient_2')",
11
12
  )
12
-
13
+
13
14
  # Für die Ausgabe verwenden wir ein schreibgeschütztes Feld
14
15
  patient_data = serializers.SerializerMethodField(read_only=True)
15
-
16
+
16
17
  examination = serializers.SlugRelatedField(
17
- slug_field='name',
18
+ slug_field="name",
18
19
  queryset=Examination.objects.all(),
19
20
  required=False,
20
- allow_null=True
21
+ allow_null=True,
21
22
  )
22
-
23
+
23
24
  # Zusätzliche schreibgeschützte Felder für bessere API-Antworten
24
25
  patient_name = serializers.SerializerMethodField()
25
26
  examination_name = serializers.SerializerMethodField()
26
-
27
+
27
28
  class Meta:
28
29
  model = PatientExamination
29
30
  fields = [
30
- 'id', 'patient', 'patient_data', 'examination', 'date_start', 'date_end',
31
- 'hash', 'patient_name', 'examination_name'
31
+ "id",
32
+ "patient",
33
+ "patient_data",
34
+ "examination",
35
+ "date_start",
36
+ "date_end",
37
+ "hash",
38
+ "patient_name",
39
+ "examination_name",
40
+ ]
41
+ read_only_fields = [
42
+ "id",
43
+ "hash",
44
+ "patient_name",
45
+ "examination_name",
46
+ "patient_data",
32
47
  ]
33
- read_only_fields = ['id', 'hash', 'patient_name', 'examination_name', 'patient_data']
34
48
 
35
49
  def get_patient_data(self, obj):
36
50
  """Gibt die Patient-Daten für die Ausgabe zurück"""
37
51
  if obj.patient:
38
52
  return {
39
- 'id': obj.patient.id,
40
- 'patient_hash': obj.patient.patient_hash,
41
- 'first_name': obj.patient.first_name,
42
- 'last_name': obj.patient.last_name
53
+ "id": obj.patient.id,
54
+ "patient_hash": obj.patient.patient_hash,
55
+ "first_name": obj.patient.first_name,
56
+ "last_name": obj.patient.last_name,
43
57
  }
44
58
  return None
45
59
 
@@ -48,7 +62,7 @@ class PatientExaminationSerializer(serializers.ModelSerializer):
48
62
  if obj.patient:
49
63
  return f"{obj.patient.first_name} {obj.patient.last_name}"
50
64
  return None
51
-
65
+
52
66
  def get_examination_name(self, obj):
53
67
  """Gibt den Namen der Untersuchung zurück"""
54
68
  if obj.examination:
@@ -59,7 +73,7 @@ class PatientExaminationSerializer(serializers.ModelSerializer):
59
73
  """Validiert und erstellt Patient falls nötig"""
60
74
  if not value:
61
75
  raise serializers.ValidationError("Patient Hash ist erforderlich")
62
-
76
+
63
77
  # Versuche Patient zu finden
64
78
  try:
65
79
  patient = Patient.objects.get(patient_hash=value)
@@ -70,72 +84,85 @@ class PatientExaminationSerializer(serializers.ModelSerializer):
70
84
  patient_hash=value,
71
85
  first_name="Patient",
72
86
  last_name=value,
73
- is_real_person=False # Markiere als Pseudo-Patient
87
+ is_real_person=False, # Markiere als Pseudo-Patient
74
88
  )
75
89
  return patient
76
90
 
77
91
  def validate_date_start(self, value):
78
92
  """Validiert das Startdatum"""
79
93
  if value and value > date.today():
80
- raise serializers.ValidationError("Startdatum kann nicht in der Zukunft liegen")
94
+ raise serializers.ValidationError(
95
+ "Startdatum kann nicht in der Zukunft liegen"
96
+ )
81
97
  return value
82
98
 
83
99
  def validate_date_end(self, value):
84
100
  """Validiert das Enddatum"""
85
101
  if value and value > date.today():
86
- raise serializers.ValidationError("Enddatum kann nicht in der Zukunft liegen")
102
+ raise serializers.ValidationError(
103
+ "Enddatum kann nicht in der Zukunft liegen"
104
+ )
87
105
  return value
88
106
 
89
107
  def validate(self, data):
90
108
  """Validiert die gesamten Daten"""
91
- date_start = data.get('date_start')
92
- date_end = data.get('date_end')
93
-
109
+ date_start = data.get("date_start")
110
+ date_end = data.get("date_end")
111
+
94
112
  if date_start and date_end and date_end < date_start:
95
- raise serializers.ValidationError("Enddatum muss nach dem Startdatum liegen")
96
-
113
+ raise serializers.ValidationError(
114
+ "Enddatum muss nach dem Startdatum liegen"
115
+ )
116
+
97
117
  return data
98
118
 
99
119
  def create(self, validated_data):
100
120
  """Erstellt eine neue PatientExamination mit verbesserter Fehlerbehandlung"""
101
121
  try:
102
122
  # Patient wurde bereits in validate_patient erstellt/gefunden
103
- patient = validated_data.pop('patient') # Entferne patient aus validated_data
104
- validated_data['patient'] = patient # Füge das Patient-Objekt hinzu
105
-
123
+ patient = validated_data.pop(
124
+ "patient"
125
+ ) # Entferne patient aus validated_data
126
+ validated_data["patient"] = patient # Füge das Patient-Objekt hinzu
127
+
106
128
  patient_examination = PatientExamination.objects.create(**validated_data)
107
129
  return patient_examination
108
130
  except Exception as e:
109
- raise serializers.ValidationError(f"Fehler beim Erstellen der Patientenuntersuchung: {str(e)}")
131
+ raise serializers.ValidationError(
132
+ f"Fehler beim Erstellen der Patientenuntersuchung: {str(e)}"
133
+ )
110
134
 
111
135
  def update(self, instance, validated_data):
112
136
  """
113
137
  Update an existing PatientExamination instance with validated data.
114
-
138
+
115
139
  If a new patient is provided, updates the patient reference. Applies all other validated fields to the instance and saves changes.
116
-
140
+
117
141
  Returns:
118
142
  PatientExamination: The updated PatientExamination instance.
119
-
143
+
120
144
  Raises:
121
145
  ValidationError: If an error occurs during the update process.
122
146
  """
123
147
  try:
124
148
  # Falls Patient geändert wird
125
- if 'patient' in validated_data:
126
- patient = validated_data.pop('patient')
127
- validated_data['patient'] = patient
128
-
149
+ if "patient" in validated_data:
150
+ patient = validated_data.pop("patient")
151
+ validated_data["patient"] = patient
152
+
129
153
  for attr, value in validated_data.items():
130
154
  setattr(instance, attr, value)
131
155
  instance.save()
132
156
  return instance
133
157
  except Exception as e:
134
- raise serializers.ValidationError(f"Fehler beim Aktualisieren der Patientenuntersuchung: {str(e)}")
135
-
158
+ raise serializers.ValidationError(
159
+ f"Fehler beim Aktualisieren der Patientenuntersuchung: {str(e)}"
160
+ )
161
+
136
162
  def get_findings(self, patient_examination_id):
137
163
  """Gibt die zugehörigen Befunde zurück"""
138
- pe = PatientExamination()
139
- obj = pe.get_or_create_patient_examination_by_id(patient_examination_id)
164
+ obj = PatientExamination.objects.filter(pk=patient_examination_id).first()
165
+ if obj is None:
166
+ return []
140
167
  self.instance = obj
141
- return self.instance.get_available_findings() if self.instance else []
168
+ return self.instance.get_available_findings()
@@ -12,4 +12,4 @@ __all__ = [
12
12
  "PatientFindingInterventionSerializer",
13
13
  "PatientFindingListSerializer",
14
14
  "PatientFindingWriteSerializer",
15
- ]
15
+ ]
@@ -1,10 +1,11 @@
1
1
  from endoreg_db.models import PatientFinding
2
2
  from rest_framework import serializers
3
3
 
4
+
4
5
  class PatientFindingSerializer(serializers.ModelSerializer):
5
6
  class Meta:
6
7
  model = PatientFinding
7
- #fields = '__all__'
8
+ # fields = '__all__'
8
9
  fields = [
9
10
  "id",
10
11
  "patient_examination",
@@ -5,35 +5,43 @@ from endoreg_db.serializers.misc.translatable_field_mix_in import TranslatableFi
5
5
  from rest_framework import serializers
6
6
 
7
7
 
8
- class PatientFindingClassificationSerializer(serializers.ModelSerializer, TranslatableFieldMixin):
8
+ class PatientFindingClassificationSerializer(
9
+ serializers.ModelSerializer, TranslatableFieldMixin
10
+ ):
9
11
  """Serializer für PatientFinding-Klassifikationen"""
10
12
 
11
13
  classification_name = serializers.SerializerMethodField()
12
14
  classification_choice_name = serializers.SerializerMethodField()
15
+
13
16
  class Meta:
14
17
  model = PatientFindingClassification
15
- fields = ['id', 'classification', 'classification_name', 'classification_choice_name']
18
+ fields = [
19
+ "id",
20
+ "classification",
21
+ "classification_name",
22
+ "classification_choice_name",
23
+ ]
16
24
 
17
- def get_classification_name(self, obj:PatientFindingClassification):
25
+ def get_classification_name(self, obj: PatientFindingClassification):
18
26
  """
19
27
  Return the localized name for the classification attribute of a PatientFindingClassification instance.
20
-
28
+
21
29
  Parameters:
22
30
  obj (PatientFindingClassification): The instance whose classification name is to be localized.
23
-
31
+
24
32
  Returns:
25
33
  str: The localized classification name.
26
34
  """
27
35
  return self.get_localized_name(obj.classification)
28
36
 
29
- def get_classification_choice_name(self, obj:PatientFindingClassification):
37
+ def get_classification_choice_name(self, obj: PatientFindingClassification):
30
38
  """
31
39
  Return the localized name for the classification choice of a patient finding classification instance.
32
-
40
+
33
41
  Parameters:
34
42
  obj (PatientFindingClassification): The patient finding classification instance.
35
-
43
+
36
44
  Returns:
37
45
  str: Localized name of the classification choice.
38
46
  """
39
- return self.get_localized_name(obj.classification_choice)
47
+ return self.get_localized_name(obj.classification_choice)
@@ -3,51 +3,60 @@ from endoreg_db.models import (
3
3
  PatientFinding,
4
4
  )
5
5
  from endoreg_db.serializers.misc.translatable_field_mix_in import TranslatableFieldMixin
6
- from endoreg_db.serializers.patient_finding.patient_finding_intervention import PatientFindingInterventionSerializer
6
+ from endoreg_db.serializers.patient_finding.patient_finding_intervention import (
7
+ PatientFindingInterventionSerializer,
8
+ )
7
9
  from .patient_finding_classification import PatientFindingClassificationSerializer
8
10
 
9
- class PatientFindingDetailSerializer(serializers.ModelSerializer, TranslatableFieldMixin):
11
+
12
+ class PatientFindingDetailSerializer(
13
+ serializers.ModelSerializer, TranslatableFieldMixin
14
+ ):
10
15
  """Vollständiger Serializer mit allen verschachtelten Daten - optimiert für N+1 Vermeidung"""
11
-
12
-
16
+
13
17
  classifications = PatientFindingClassificationSerializer(many=True, read_only=True)
14
18
  interventions = PatientFindingInterventionSerializer(many=True, read_only=True)
15
-
19
+
16
20
  # Meta-Informationen für das Frontend
17
- patient_id = serializers.CharField(source='patient_examination.patient.id', read_only=True)
21
+ patient_id = serializers.CharField(
22
+ source="patient_examination.patient.id", read_only=True
23
+ )
18
24
  examination_name = serializers.SerializerMethodField()
19
25
  finding_name = serializers.SerializerMethodField()
20
26
 
21
27
  class Meta:
22
28
  model = PatientFinding
23
29
  fields = [
24
- 'id', 'patient_examination', 'finding', 'finding_name',
25
- 'patient_id', 'examination_name',
26
- 'classifications', 'interventions'
30
+ "id",
31
+ "patient_examination",
32
+ "finding",
33
+ "finding_name",
34
+ "patient_id",
35
+ "examination_name",
36
+ "classifications",
37
+ "interventions",
27
38
  ]
28
-
39
+
29
40
  def get_finding_name(self, obj):
30
41
  """
31
42
  Return the localized name of the finding associated with the given PatientFinding instance.
32
-
43
+
33
44
  Parameters:
34
45
  obj: The PatientFinding instance being serialized.
35
-
46
+
36
47
  Returns:
37
48
  str: The localized name of the related finding.
38
49
  """
39
50
  return self.get_localized_name(obj.finding)
40
-
51
+
41
52
  def get_examination_name(self, obj):
42
53
  """
43
54
  Return the localized name of the examination associated with the given PatientFinding instance.
44
-
55
+
45
56
  Parameters:
46
57
  obj: The PatientFinding instance being serialized.
47
-
58
+
48
59
  Returns:
49
60
  str: The localized name of the related examination.
50
61
  """
51
62
  return self.get_localized_name(obj.patient_examination.examination)
52
-
53
-
@@ -4,23 +4,25 @@ from endoreg_db.models import PatientFindingIntervention
4
4
  from rest_framework import serializers
5
5
 
6
6
 
7
- class PatientFindingInterventionSerializer(serializers.ModelSerializer, TranslatableFieldMixin):
7
+ class PatientFindingInterventionSerializer(
8
+ serializers.ModelSerializer, TranslatableFieldMixin
9
+ ):
8
10
  """Optimierter Serializer für PatientFindingIntervention"""
9
11
 
10
12
  intervention_name = serializers.SerializerMethodField()
11
13
 
12
14
  class Meta:
13
15
  model = PatientFindingIntervention
14
- fields = ['id', 'intervention', 'intervention_name', 'state']
16
+ fields = ["id", "intervention", "intervention_name", "state"]
15
17
 
16
18
  def get_intervention_name(self, obj):
17
19
  """
18
20
  Return the localized name of the intervention associated with the given object.
19
-
21
+
20
22
  Parameters:
21
23
  obj: The object containing the intervention to be localized.
22
-
24
+
23
25
  Returns:
24
26
  str: The localized name of the intervention.
25
27
  """
26
- return self.get_localized_name(obj.intervention)
28
+ return self.get_localized_name(obj.intervention)
@@ -10,32 +10,31 @@ class PatientFindingListSerializer(serializers.ModelSerializer, TranslatableFiel
10
10
 
11
11
  finding_name = serializers.SerializerMethodField()
12
12
  patient_name = serializers.CharField(
13
- source='patient_examination.patient.get_full_name',
14
- read_only=True
13
+ source="patient_examination.patient.get_full_name", read_only=True
15
14
  )
16
15
  examination_date = serializers.DateTimeField(
17
- source='patient_examination.date_start',
18
- read_only=True
16
+ source="patient_examination.date_start", read_only=True
19
17
  )
20
18
 
21
19
  class Meta:
22
20
  model = PatientFinding
23
21
  fields = [
24
- 'id', 'finding_name', 'patient_name', 'examination_date',
25
- 'patient_examination', 'finding'
22
+ "id",
23
+ "finding_name",
24
+ "patient_name",
25
+ "examination_date",
26
+ "patient_examination",
27
+ "finding",
26
28
  ]
27
29
 
28
30
  def get_finding_name(self, obj):
29
31
  """
30
32
  Return the localized name of the finding associated with the given PatientFinding instance.
31
-
33
+
32
34
  Parameters:
33
35
  obj: The PatientFinding instance for which to retrieve the localized finding name.
34
-
36
+
35
37
  Returns:
36
38
  str: The localized name of the related finding.
37
39
  """
38
40
  return self.get_localized_name(obj.finding)
39
-
40
-
41
-