endoreg-db 0.3.6__py3-none-any.whl → 0.3.7__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.
Files changed (347) hide show
  1. endoreg_db/admin.py +3 -3
  2. endoreg_db/apps.py +6 -6
  3. endoreg_db/data/__init__.py +67 -64
  4. endoreg_db/data/active_model/data.yaml +2 -2
  5. endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +167 -167
  6. endoreg_db/data/case_template/rule/01_patient-set-age.yaml +7 -7
  7. endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +8 -8
  8. endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +22 -22
  9. endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +18 -18
  10. endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +18 -18
  11. endoreg_db/data/case_template/rule/19_create_patient.yaml +16 -16
  12. endoreg_db/data/case_template/rule_type/base_types.yaml +35 -35
  13. endoreg_db/data/case_template/rule_value_type/base_types.yaml +58 -58
  14. endoreg_db/data/case_template/template/base.yaml +7 -7
  15. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +2 -2
  16. endoreg_db/data/case_template/tmp/_rule_value +13 -13
  17. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -21
  18. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +9 -9
  19. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +6 -6
  20. endoreg_db/data/center/data.yaml +59 -59
  21. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -144
  22. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -48
  23. endoreg_db/data/disease/cardiovascular.yaml +37 -37
  24. endoreg_db/data/disease/hepatology.yaml +4 -4
  25. endoreg_db/data/disease/misc.yaml +5 -5
  26. endoreg_db/data/disease/renal.yaml +4 -4
  27. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +5 -5
  28. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +5 -5
  29. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +40 -40
  30. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +19 -19
  31. endoreg_db/data/distribution/date/patient.yaml +6 -6
  32. endoreg_db/data/distribution/single_categorical/patient.yaml +6 -6
  33. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -132
  34. endoreg_db/data/endoscope_type/data.yaml +10 -10
  35. endoreg_db/data/endoscopy_processor/data.yaml +45 -45
  36. endoreg_db/data/event/cardiology.yaml +27 -27
  37. endoreg_db/data/event/neurology.yaml +13 -13
  38. endoreg_db/data/event/surgery.yaml +12 -12
  39. endoreg_db/data/event/thrombembolism.yaml +19 -19
  40. endoreg_db/data/examination/examinations/data.yaml +65 -65
  41. endoreg_db/data/examination/time/data.yaml +47 -47
  42. endoreg_db/data/examination/time-type/data.yaml +7 -7
  43. endoreg_db/data/examination/type/data.yaml +5 -5
  44. endoreg_db/data/gender/data.yaml +18 -18
  45. endoreg_db/data/information_source/data.yaml +30 -30
  46. endoreg_db/data/information_source/medication.yaml +5 -5
  47. endoreg_db/data/lab_value/cardiac_enzymes.yaml +30 -30
  48. endoreg_db/data/lab_value/coagulation.yaml +48 -48
  49. endoreg_db/data/lab_value/electrolytes.yaml +189 -189
  50. endoreg_db/data/lab_value/gastrointestinal_function.yaml +121 -121
  51. endoreg_db/data/lab_value/hematology.yaml +169 -169
  52. endoreg_db/data/lab_value/hormones.yaml +53 -53
  53. endoreg_db/data/lab_value/lipids.yaml +44 -44
  54. endoreg_db/data/lab_value/misc.yaml +30 -30
  55. endoreg_db/data/lab_value/renal_function.yaml +10 -10
  56. endoreg_db/data/label/label/data.yaml +62 -62
  57. endoreg_db/data/label/label-set/data.yaml +17 -17
  58. endoreg_db/data/label/label-type/data.yaml +6 -6
  59. endoreg_db/data/medication/anticoagulation.yaml +64 -64
  60. endoreg_db/data/medication/tah.yaml +69 -69
  61. endoreg_db/data/medication_indication/anticoagulation.yaml +120 -120
  62. endoreg_db/data/medication_indication_type/data.yaml +10 -10
  63. endoreg_db/data/medication_indication_type/thrombembolism.yaml +40 -40
  64. endoreg_db/data/medication_intake_time/base.yaml +30 -30
  65. endoreg_db/data/medication_schedule/apixaban.yaml +94 -94
  66. endoreg_db/data/medication_schedule/ass.yaml +12 -12
  67. endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -26
  68. endoreg_db/data/model_type/data.yaml +6 -6
  69. endoreg_db/data/network_device/data.yaml +17 -0
  70. endoreg_db/data/network_device_type/data.yaml +8 -0
  71. endoreg_db/data/patient_lab_sample_type/generic.yaml +5 -5
  72. endoreg_db/data/pdf_type/data.yaml +28 -28
  73. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -66
  74. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -33
  75. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -308
  76. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -88
  77. endoreg_db/data/profession/data.yaml +70 -70
  78. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -55
  79. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +26 -26
  80. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -19
  81. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -15
  82. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -12
  83. endoreg_db/data/unit/concentration.yaml +92 -92
  84. endoreg_db/data/unit/data.yaml +17 -17
  85. endoreg_db/data/unit/length.yaml +30 -30
  86. endoreg_db/data/unit/misc.yaml +19 -19
  87. endoreg_db/data/unit/rate.yaml +5 -5
  88. endoreg_db/data/unit/time.yaml +12 -12
  89. endoreg_db/data/unit/volume.yaml +35 -35
  90. endoreg_db/data/unit/weight.yaml +37 -37
  91. endoreg_db/data/waste/data.yaml +11 -11
  92. endoreg_db/forms/__init__.py +2 -2
  93. endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -23
  94. endoreg_db/forms/settings/__init__.py +8 -8
  95. endoreg_db/forms/unit.py +5 -5
  96. endoreg_db/management/commands/_load_model_template.py +40 -40
  97. endoreg_db/management/commands/delete_all.py +18 -18
  98. endoreg_db/management/commands/delete_legacy_images.py +19 -19
  99. endoreg_db/management/commands/delete_legacy_videos.py +16 -16
  100. endoreg_db/management/commands/extract_legacy_video_frames.py +18 -18
  101. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -32
  102. endoreg_db/management/commands/fix_auth_permission.py +20 -20
  103. endoreg_db/management/commands/import_legacy_images.py +94 -94
  104. endoreg_db/management/commands/import_legacy_videos.py +76 -76
  105. endoreg_db/management/commands/load_active_model_data.py +44 -44
  106. endoreg_db/management/commands/load_ai_model_data.py +44 -44
  107. endoreg_db/management/commands/load_base_db_data.py +132 -128
  108. endoreg_db/management/commands/load_center_data.py +42 -42
  109. endoreg_db/management/commands/load_disease_classification_choices_data.py +40 -40
  110. endoreg_db/management/commands/load_disease_classification_data.py +40 -40
  111. endoreg_db/management/commands/load_disease_data.py +39 -39
  112. endoreg_db/management/commands/load_distribution_data.py +65 -65
  113. endoreg_db/management/commands/load_endoscope_type_data.py +44 -44
  114. endoreg_db/management/commands/load_endoscopy_processor_data.py +44 -44
  115. endoreg_db/management/commands/load_event_data.py +40 -40
  116. endoreg_db/management/commands/load_examination_data.py +74 -74
  117. endoreg_db/management/commands/load_g_play_data.py +112 -112
  118. endoreg_db/management/commands/load_gender_data.py +43 -43
  119. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +132 -132
  120. endoreg_db/management/commands/load_information_source.py +44 -44
  121. endoreg_db/management/commands/load_lab_value_data.py +49 -49
  122. endoreg_db/management/commands/load_label_data.py +66 -66
  123. endoreg_db/management/commands/load_medication_data.py +40 -40
  124. endoreg_db/management/commands/load_medication_indication_data.py +62 -62
  125. endoreg_db/management/commands/load_medication_indication_type_data.py +40 -40
  126. endoreg_db/management/commands/load_medication_intake_time_data.py +40 -40
  127. endoreg_db/management/commands/load_medication_schedule_data.py +54 -54
  128. endoreg_db/management/commands/load_network_data.py +49 -0
  129. endoreg_db/management/commands/load_pdf_type_data.py +60 -60
  130. endoreg_db/management/commands/load_profession_data.py +43 -43
  131. endoreg_db/management/commands/load_report_reader_flag.py +45 -45
  132. endoreg_db/management/commands/load_unit_data.py +45 -45
  133. endoreg_db/management/commands/load_user_groups.py +28 -28
  134. endoreg_db/management/commands/register_ai_model.py +65 -65
  135. endoreg_db/management/commands/reset_celery_schedule.py +9 -9
  136. endoreg_db/migrations/0001_initial.py +582 -582
  137. endoreg_db/migrations/0002_rawvideofile.py +26 -26
  138. endoreg_db/migrations/0003_rawvideofile_frames_required.py +18 -18
  139. endoreg_db/migrations/0004_rename_hash_rawvideofile_video_hash.py +18 -18
  140. endoreg_db/migrations/0005_ffmpegmeta_remove_videoimportmeta_center_and_more.py +56 -56
  141. endoreg_db/migrations/0006_rawvideofile_center_alter_videometa_processor.py +25 -25
  142. endoreg_db/migrations/0007_rawvideofile_processor.py +19 -19
  143. endoreg_db/migrations/0008_rename_frames_required_rawvideofile_state_frames_required.py +18 -18
  144. endoreg_db/migrations/0009_sensitivemeta_rawvideofile_sensitive_meta.py +31 -31
  145. endoreg_db/migrations/0010_rename_endoscope_serial_number_sensitivemeta_endoscope_sn.py +18 -18
  146. endoreg_db/migrations/0011_rawvideofile_state_sensitive_data_retrieved.py +18 -18
  147. endoreg_db/migrations/0012_rawvideofile_prediction_dir_and_more.py +109 -109
  148. endoreg_db/migrations/0013_rawpdffile.py +31 -31
  149. endoreg_db/migrations/0014_pdftype_alter_rawpdffile_file_pdfmeta.py +38 -38
  150. endoreg_db/migrations/0015_rename_report_processed_rawpdffile_state_report_processed_and_more.py +31 -31
  151. endoreg_db/migrations/0016_rawpdffile_state_report_processing_required.py +18 -18
  152. endoreg_db/migrations/0017_firstname_lastname_center_first_names_and_more.py +37 -37
  153. endoreg_db/migrations/0018_reportreaderflag_reportreaderconfig.py +37 -37
  154. endoreg_db/migrations/0019_pdftype_cut_off_above_lines_and_more.py +42 -42
  155. endoreg_db/migrations/0020_rename_endoscopy_info_line_pdftype_endoscope_info_line.py +18 -18
  156. endoreg_db/migrations/0021_alter_pdftype_endoscope_info_line.py +19 -19
  157. endoreg_db/migrations/0022_alter_pdftype_endoscope_info_line.py +19 -19
  158. endoreg_db/migrations/0023_ttoquestionnaire_alter_pdftype_endoscope_info_line.py +59 -59
  159. endoreg_db/migrations/0024_remove_ttoquestionnaire_infections_and_more.py +27 -27
  160. endoreg_db/migrations/0025_event_alter_rawpdffile_file_patientevent.py +42 -42
  161. endoreg_db/migrations/0026_disease_diseaseclassification_and_more.py +166 -166
  162. endoreg_db/migrations/0027_labvalue_abbreviation_labvalue_default_normal_range_and_more.py +38 -38
  163. endoreg_db/migrations/0028_alter_unit_abbreviation.py +18 -18
  164. endoreg_db/migrations/0029_medicationintaketime_and_more.py +75 -75
  165. endoreg_db/migrations/0030_medicationindicationtype_and_more.py +101 -101
  166. endoreg_db/migrations/0031_rename_adapt_to_liver_function_medication_adapt_to_age_and_more.py +38 -38
  167. endoreg_db/migrations/0032_alter_medicationschedule_therapy_duration_d.py +18 -18
  168. endoreg_db/migrations/0033_medicationindication_sources.py +18 -18
  169. endoreg_db/migrations/0034_alter_rawpdffile_file.py +20 -20
  170. endoreg_db/migrations/0035_alter_medicationindication_sources.py +18 -18
  171. endoreg_db/migrations/0036_alter_rawpdffile_file.py +20 -20
  172. endoreg_db/migrations/0037_alter_medicationindication_sources.py +18 -18
  173. endoreg_db/migrations/0038_emissionfactor_material_product_productgroup_and_more.py +164 -164
  174. endoreg_db/migrations/0039_referenceproduct_name.py +19 -19
  175. endoreg_db/migrations/0040_quizanswertype_quizquestiontype_quizquestion_and_more.py +50 -50
  176. endoreg_db/migrations/0041_gender_patientmedication_medication_indication_and_more.py +40 -40
  177. endoreg_db/migrations/0042_casetemplateruletype_casetemplaterulevalue_and_more.py +74 -74
  178. endoreg_db/migrations/0043_casetemplatetype_name_de_casetemplatetype_name_en.py +23 -23
  179. endoreg_db/migrations/0044_casetemplateruletype_name_de_and_more.py +23 -23
  180. endoreg_db/migrations/0045_casetemplaterulevalue_value_type.py +19 -19
  181. endoreg_db/migrations/0046_casetemplaterulevalue_target_field.py +18 -18
  182. endoreg_db/migrations/0047_casetemplaterule_target_model.py +18 -18
  183. endoreg_db/migrations/0048_remove_casetemplaterule_chained_rules_and_more.py +22 -22
  184. endoreg_db/migrations/0049_remove_casetemplaterule_rule_values.py +17 -17
  185. endoreg_db/migrations/0050_casetemplaterule_rule_values.py +18 -18
  186. endoreg_db/migrations/0051_remove_casetemplaterule_calling_rules_and_more.py +27 -27
  187. endoreg_db/migrations/0052_rename_case_template_type_casetemplate_template_type.py +18 -18
  188. endoreg_db/migrations/0053_patientlabsampletype_patientlabsample_and_more.py +38 -38
  189. endoreg_db/migrations/0054_multiplecategoricalvaluedistribution_and_more.py +69 -69
  190. endoreg_db/migrations/0055_remove_casetemplaterule_rule_values_and_more.py +59 -59
  191. endoreg_db/migrations/0056_datevaluedistribution_and_more.py +32 -32
  192. endoreg_db/migrations/0057_remove_datevaluedistribution_max_date_and_more.py +72 -72
  193. endoreg_db/migrations/0058_datevaluedistribution_description_and_more.py +28 -28
  194. endoreg_db/migrations/0059_casetemplaterule_rule_values.py +18 -18
  195. endoreg_db/migrations/0060_labvalue__default_date_value_distribution_and_more.py +44 -44
  196. endoreg_db/migrations/0061_remove_patientlabvalue_date_patientlabvalue_datetime.py +24 -24
  197. endoreg_db/migrations/0062_labvalue_numeric_precision.py +18 -18
  198. endoreg_db/migrations/0063_alter_labvalue_numeric_precision.py +18 -18
  199. endoreg_db/migrations/0064_casetemplaterule_extra_parameters_and_more.py +23 -23
  200. endoreg_db/migrations/0065_rename__date_value_distribution_casetemplaterule_date_value_distribution_and_more.py +58 -58
  201. endoreg_db/migrations/0066_alter_patientlabvalue_patient_and_more.py +29 -29
  202. endoreg_db/migrations/0067_alter_medicationindication_indication_type.py +19 -19
  203. endoreg_db/models/__init__.py +75 -74
  204. endoreg_db/models/ai_model/__init__.py +3 -3
  205. endoreg_db/models/ai_model/active_model.py +9 -9
  206. endoreg_db/models/ai_model/model_meta.py +24 -24
  207. endoreg_db/models/ai_model/model_type.py +25 -25
  208. endoreg_db/models/ai_model/utils.py +8 -8
  209. endoreg_db/models/annotation/__init__.py +1 -1
  210. endoreg_db/models/annotation/binary_classification_annotation_task.py +80 -80
  211. endoreg_db/models/annotation/image_classification.py +26 -26
  212. endoreg_db/models/case_template/__init__.py +5 -5
  213. endoreg_db/models/case_template/case_template.py +81 -81
  214. endoreg_db/models/case_template/case_template_rule.py +276 -276
  215. endoreg_db/models/case_template/case_template_rule_value.py +73 -73
  216. endoreg_db/models/case_template/case_template_type.py +27 -27
  217. endoreg_db/models/center/__init__.py +4 -4
  218. endoreg_db/models/center/center.py +24 -24
  219. endoreg_db/models/center/center_product.py +33 -33
  220. endoreg_db/models/center/center_resource.py +18 -18
  221. endoreg_db/models/center/center_waste.py +10 -10
  222. endoreg_db/models/data_file/__init__.py +5 -5
  223. endoreg_db/models/data_file/base_classes/__init__.py +2 -2
  224. endoreg_db/models/data_file/base_classes/abstract_frame.py +50 -50
  225. endoreg_db/models/data_file/base_classes/abstract_video.py +200 -200
  226. endoreg_db/models/data_file/frame.py +45 -45
  227. endoreg_db/models/data_file/import_classes/__init__.py +31 -31
  228. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +34 -34
  229. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -28
  230. endoreg_db/models/data_file/import_classes/processing_functions/video.py +260 -260
  231. endoreg_db/models/data_file/import_classes/raw_pdf.py +188 -188
  232. endoreg_db/models/data_file/import_classes/raw_video.py +343 -343
  233. endoreg_db/models/data_file/metadata/__init__.py +3 -3
  234. endoreg_db/models/data_file/metadata/pdf_meta.py +70 -70
  235. endoreg_db/models/data_file/metadata/sensitive_meta.py +31 -31
  236. endoreg_db/models/data_file/metadata/video_meta.py +132 -132
  237. endoreg_db/models/data_file/report_file.py +89 -89
  238. endoreg_db/models/data_file/video/__init__.py +6 -6
  239. endoreg_db/models/data_file/video/import_meta.py +25 -25
  240. endoreg_db/models/data_file/video/video.py +25 -25
  241. endoreg_db/models/data_file/video_segment.py +107 -107
  242. endoreg_db/models/disease.py +55 -55
  243. endoreg_db/models/emission/emission_factor.py +19 -19
  244. endoreg_db/models/event.py +21 -21
  245. endoreg_db/models/examination/__init__.py +3 -3
  246. endoreg_db/models/examination/examination.py +26 -26
  247. endoreg_db/models/examination/examination_time.py +27 -27
  248. endoreg_db/models/examination/examination_time_type.py +24 -24
  249. endoreg_db/models/examination/examination_type.py +18 -18
  250. endoreg_db/models/hardware/__init__.py +1 -1
  251. endoreg_db/models/hardware/endoscope.py +44 -44
  252. endoreg_db/models/hardware/endoscopy_processor.py +143 -143
  253. endoreg_db/models/information_source.py +29 -29
  254. endoreg_db/models/label/label.py +84 -84
  255. endoreg_db/models/laboratory/lab_value.py +102 -102
  256. endoreg_db/models/legacy_data/__init__.py +3 -3
  257. endoreg_db/models/legacy_data/image.py +34 -34
  258. endoreg_db/models/medication/medication.py +148 -148
  259. endoreg_db/models/network/__init__.py +2 -0
  260. endoreg_db/models/network/network_device.py +27 -0
  261. endoreg_db/models/network/network_device_type.py +23 -0
  262. endoreg_db/models/other/__init__.py +4 -4
  263. endoreg_db/models/other/distribution.py +215 -215
  264. endoreg_db/models/other/material.py +16 -16
  265. endoreg_db/models/other/resource.py +17 -17
  266. endoreg_db/models/other/transport_route.py +20 -20
  267. endoreg_db/models/other/waste.py +20 -20
  268. endoreg_db/models/patient_examination/__init__.py +35 -35
  269. endoreg_db/models/permissions/__init__.py +44 -44
  270. endoreg_db/models/persons/__init__.py +6 -6
  271. endoreg_db/models/persons/examiner/__init__.py +1 -1
  272. endoreg_db/models/persons/examiner/examiner.py +15 -15
  273. endoreg_db/models/persons/examiner/examiner_type.py +1 -1
  274. endoreg_db/models/persons/first_name.py +17 -17
  275. endoreg_db/models/persons/gender.py +22 -22
  276. endoreg_db/models/persons/last_name.py +19 -19
  277. endoreg_db/models/persons/patient/__init__.py +7 -7
  278. endoreg_db/models/persons/patient/case/case.py +30 -30
  279. endoreg_db/models/persons/patient/patient.py +216 -216
  280. endoreg_db/models/persons/patient/patient_disease.py +16 -16
  281. endoreg_db/models/persons/patient/patient_event.py +22 -22
  282. endoreg_db/models/persons/patient/patient_lab_sample.py +106 -106
  283. endoreg_db/models/persons/patient/patient_lab_value.py +176 -176
  284. endoreg_db/models/persons/patient/patient_medication.py +43 -43
  285. endoreg_db/models/persons/patient/patient_medication_schedule.py +27 -27
  286. endoreg_db/models/persons/person.py +31 -31
  287. endoreg_db/models/persons/portal_user_information.py +27 -27
  288. endoreg_db/models/prediction/__init__.py +1 -1
  289. endoreg_db/models/prediction/image_classification.py +37 -37
  290. endoreg_db/models/prediction/video_prediction_meta.py +244 -244
  291. endoreg_db/models/product/__init__.py +4 -4
  292. endoreg_db/models/product/product.py +97 -97
  293. endoreg_db/models/product/product_group.py +19 -19
  294. endoreg_db/models/product/product_material.py +24 -24
  295. endoreg_db/models/product/product_weight.py +26 -26
  296. endoreg_db/models/product/reference_product.py +99 -99
  297. endoreg_db/models/questionnaires/__init__.py +114 -114
  298. endoreg_db/models/quiz/__init__.py +1 -1
  299. endoreg_db/models/quiz/quiz_answer.py +41 -41
  300. endoreg_db/models/quiz/quiz_question.py +54 -54
  301. endoreg_db/models/report_reader/__init__.py +1 -1
  302. endoreg_db/models/report_reader/report_reader_config.py +53 -53
  303. endoreg_db/models/report_reader/report_reader_flag.py +19 -19
  304. endoreg_db/models/rules/__init__.py +4 -4
  305. endoreg_db/models/rules/rule.py +23 -23
  306. endoreg_db/models/rules/rule_applicator.py +224 -224
  307. endoreg_db/models/rules/rule_attribute_dtype.py +18 -18
  308. endoreg_db/models/rules/rule_type.py +21 -21
  309. endoreg_db/models/rules/ruleset.py +19 -19
  310. endoreg_db/models/unit.py +21 -21
  311. endoreg_db/queries/__init__.py +4 -4
  312. endoreg_db/queries/annotations/__init__.py +2 -2
  313. endoreg_db/queries/annotations/legacy.py +159 -159
  314. endoreg_db/queries/get/__init__.py +5 -5
  315. endoreg_db/queries/get/center.py +42 -42
  316. endoreg_db/queries/get/model.py +13 -13
  317. endoreg_db/queries/get/patient.py +14 -14
  318. endoreg_db/queries/get/patient_examination.py +20 -20
  319. endoreg_db/queries/get/report_file.py +33 -33
  320. endoreg_db/queries/get/video.py +31 -31
  321. endoreg_db/serializers/__init__.py +9 -9
  322. endoreg_db/serializers/ai_model.py +18 -18
  323. endoreg_db/serializers/annotation.py +17 -17
  324. endoreg_db/serializers/center.py +11 -11
  325. endoreg_db/serializers/examination.py +32 -32
  326. endoreg_db/serializers/frame.py +13 -13
  327. endoreg_db/serializers/hardware.py +20 -20
  328. endoreg_db/serializers/label.py +22 -22
  329. endoreg_db/serializers/patient.py +10 -10
  330. endoreg_db/serializers/prediction.py +15 -15
  331. endoreg_db/serializers/report_file.py +7 -7
  332. endoreg_db/serializers/video.py +27 -27
  333. endoreg_db/tests.py +3 -3
  334. endoreg_db/utils/cropping.py +28 -28
  335. endoreg_db/utils/dataloader.py +92 -92
  336. endoreg_db/utils/file_operations.py +30 -30
  337. endoreg_db/utils/hashs.py +33 -33
  338. endoreg_db/utils/legacy_ocr.py +201 -201
  339. endoreg_db/utils/ocr.py +197 -197
  340. endoreg_db/utils/uuid.py +4 -4
  341. endoreg_db/utils/video_metadata.py +87 -87
  342. endoreg_db/views.py +3 -3
  343. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/LICENSE +674 -674
  344. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/METADATA +2 -2
  345. endoreg_db-0.3.7.dist-info/RECORD +363 -0
  346. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.7.dist-info}/WHEEL +1 -1
  347. endoreg_db-0.3.6.dist-info/RECORD +0 -357
@@ -1,276 +1,276 @@
1
- from django.db import models
2
-
3
- class CaseTemplateRuleTypeManager(models.Manager):
4
- def get_by_natural_key(self, name):
5
- return self.get(name=name)
6
-
7
- class CaseTemplateRuleType(models.Model):
8
- """
9
- A class representing a case template rule type.
10
-
11
- Attributes:
12
- name (str): The name of the case template rule type.
13
- description (str): A description of the case template rule type.
14
-
15
- """
16
- name = models.CharField(max_length=255)
17
- name_de = models.CharField(max_length=255, null=True)
18
- name_en = models.CharField(max_length=255, null=True)
19
- description = models.TextField(blank=True, null=True)
20
-
21
- objects = CaseTemplateRuleTypeManager()
22
-
23
- def natural_key(self):
24
- return (self.name,)
25
-
26
- def __str__(self):
27
- return self.name
28
-
29
- class CaseTemplateRuleManager(models.Manager):
30
- def get_by_natural_key(self, name):
31
- return self.get(name=name)
32
-
33
- def get_default_create_patient_rule(self):
34
- """Get the default create patient rule."""
35
- return self.get(name="create-patient-default")
36
-
37
- def get_default_create_patient_lab_sample_rules(self):
38
- """Get the default create patient lab sample rules."""
39
- return self.get(name="create-patient_lab_sample-default")
40
-
41
- def get_default_create_patient_medication_schedule_rule(self):
42
- """Get the create patient medication schedule rule."""
43
- r = self.get(name="create-patient_medication_schedule")
44
- assert r, "No create patient medication schedule rule found"
45
- return r
46
-
47
- class CaseTemplateRule(models.Model):
48
- """
49
- A class representing a case template rule.
50
-
51
- Attributes:
52
- name (str): The name of the case template rule.
53
- case_template (CaseTemplate): The case template to which the rule belongs.
54
- description (str): A description of the case template rule.
55
- name_de (str): The name of the case template rule in German.
56
- name_en (str): The name of the case template rule in English.
57
- rule_type (CaseTemplateRuleType): The type of the rule.
58
- parent_model (str): The model on which the rule is applied.
59
- target_field (str): The field of the parent model on which the rule is applied.
60
- target_model (str): The model to which the foreign key points (used for foreign key and many-to-many rules).
61
- rule_values (list): A list of string values for the rule.
62
- extra_parameters (dict): A dictionary of extra parameters for the rule.
63
- value_type (CaseTemplateRuleValueType): The type of the rule value.
64
- chained_rules (QuerySet): The chained rules associated with the current rule.
65
- single_categorical_value_distribution (SingleCategoricalValueDistribution): The single categorical value distribution for the rule.
66
- numerical_value_distribution (NumericValueDistribution): The numerical value distribution for the rule.
67
- multiple_categorical_value_distribution (MultipleCategoricalValueDistribution): The multiple categorical value distribution for the rule.
68
- date_value_distribution (DateValueDistribution): The date value distribution for the rule.
69
- objects (CaseTemplateRuleManager): The manager for the CaseTemplateRule model.
70
-
71
- Methods:
72
- natural_key(): Returns the natural key of the rule.
73
- __str__(): Returns a string representation of the rule.
74
- get_rule_type(): Returns the name of the rule type.
75
- get_chained_rules(): Returns all the chained rules associated with the current rule.
76
- get_all_downward_chained_rules(): Returns all the chained rules of the current rule, including indirectly chained rules.
77
- chained_rules_has_self_reference(): Checks if any directly or indirectly chained rules reference this rule, creating a non-terminating loop.
78
- save(*args, **kwargs): Customizes the save method to check for self-references.
79
-
80
- """
81
- name = models.CharField(max_length=255)
82
- name_de = models.CharField(max_length=255, null=True)
83
- name_en = models.CharField(max_length=255, null=True)
84
- description = models.TextField(blank=True, null=True)
85
- rule_type = models.ForeignKey(
86
- "CaseTemplateRuleType", on_delete=models.CASCADE
87
- )
88
- parent_model = models.CharField(max_length=255, blank=True, null=True)
89
- parent_field = models.CharField(max_length=255, blank=True, null=True)
90
- target_field = models.CharField(max_length=255, blank=True, null=True)
91
- target_model = models.CharField(max_length=255, blank=True, null=True)
92
- rule_values = models.JSONField(blank=True, null=True)
93
- extra_parameters = models.JSONField(blank=True, null=True)
94
- value_type = models.ForeignKey("CaseTemplateRuleValueType", on_delete=models.SET_NULL, null=True)
95
- chained_rules = models.ManyToManyField(
96
- "CaseTemplateRule",
97
- related_name="calling_rules"
98
- )
99
- single_categorical_value_distribution = models.ForeignKey(
100
- "SingleCategoricalValueDistribution", on_delete=models.SET_NULL, null=True
101
- )
102
- numerical_value_distribution = models.ForeignKey(
103
- "NumericValueDistribution", on_delete=models.SET_NULL, null=True
104
- )
105
- multiple_categorical_value_distribution = models.ForeignKey(
106
- "MultipleCategoricalValueDistribution", on_delete=models.SET_NULL, null=True
107
- )
108
- date_value_distribution = models.ForeignKey(
109
- "DateValueDistribution", on_delete=models.SET_NULL, null=True
110
- )
111
- objects = CaseTemplateRuleManager()
112
-
113
- def natural_key(self):
114
- """
115
- Returns the natural key of the rule.
116
-
117
- :return: A tuple representing the natural key of the rule.
118
- """
119
- return (self.name,)
120
-
121
- def __str__(self):
122
- """
123
- Returns a string representation of the rule.
124
-
125
- :return: A string representation of the rule.
126
- """
127
- return self.name
128
-
129
- def get_rule_type(self):
130
- """
131
- Returns the name of the rule type.
132
-
133
- :return: The name of the rule type.
134
- """
135
- return self.rule_type.name
136
-
137
- def get_chained_rules(self):
138
- """
139
- Returns all the chained rules associated with the current rule.
140
-
141
- :return: A queryset of all the chained rules associated with the current rule.
142
- """
143
- return self.chained_rules.all()
144
-
145
- def get_distribution(self):
146
- """
147
- Returns the value distribution of the rule.
148
-
149
- :return: The value distribution of the rule.
150
- """
151
- DEBUG = True
152
- if DEBUG:
153
- print("Rule: ", self.name)
154
- print(f"single_categorical_value_distribution: {self.single_categorical_value_distribution}")
155
- print(f"numerical_value_distribution: {self.numerical_value_distribution}")
156
- print(f"multiple_categorical_value_distribution: {self.multiple_categorical_value_distribution}")
157
- print(f"date_value_distribution: {self.date_value_distribution}")
158
-
159
-
160
- if self.single_categorical_value_distribution:
161
- return self.single_categorical_value_distribution
162
- elif self.numerical_value_distribution:
163
- return self.numerical_value_distribution
164
- elif self.multiple_categorical_value_distribution:
165
- return self.multiple_categorical_value_distribution
166
- elif self.date_value_distribution:
167
- return self.date_value_distribution
168
- return None
169
-
170
- def get_all_downward_chained_rules(self):
171
- """
172
- Get all chained rules of the current rule, including indirectly chained rules.
173
-
174
- :return: A set of all chained rules of the current rule.
175
- """
176
- all_chained_rules = set()
177
-
178
- def traverse_chained_rules(rule):
179
- """
180
- Helper function to recursively traverse chained rules.
181
-
182
- :param rule: The current CaseTemplateRule being checked.
183
- :return: None
184
- """
185
- for chained_rule in rule.chained_rules.all():
186
- if chained_rule not in all_chained_rules:
187
- all_chained_rules.add(chained_rule)
188
- traverse_chained_rules(chained_rule)
189
-
190
- # Initialize the traversal starting with the current rule
191
- traverse_chained_rules(self)
192
- return all_chained_rules
193
-
194
- def chained_rules_has_self_reference(self):
195
- """
196
- Check if any directly or indirectly chained rules reference this rule, creating a non-terminating loop.
197
- Return a list containing a tuple (first_rule, self_referencing_rule) for each self-reference.
198
- first_rule is the most upward rule in the chain that references the rule.
199
- self_referencing_rule is the rule that references the current rule itself.
200
-
201
- :return: A list of tuples representing the self-referencing rules.
202
- """
203
- result_list = []
204
-
205
- def traverse_chained_rules(rule, visited_rules):
206
- """
207
- Helper function to recursively traverse chained rules and check for self-references.
208
-
209
- :param rule: The current CaseTemplateRule being checked.
210
- :param visited_rules: A list of tuples representing the path of rules visited so far.
211
- :return: None
212
- """
213
- for chained_rule in rule.chained_rules.all():
214
- if chained_rule == self:
215
- # A self-reference is detected
216
- first_rule = visited_rules[0][0]
217
- self_referencing_rule = visited_rules[-1][1]
218
- result_list.append((first_rule, self_referencing_rule))
219
- elif chained_rule not in [r[1] for r in visited_rules]:
220
- # Continue to check chained rules of the current chained rule
221
- traverse_chained_rules(chained_rule, visited_rules + [(rule, chained_rule)])
222
-
223
- # Initialize the traversal starting with the current rule
224
- traverse_chained_rules(self, [(self, self)])
225
- return result_list
226
-
227
- def get_target_model(self):
228
- """
229
- Returns the target model of the rule.
230
-
231
- :return: The target model of the rule.
232
- """
233
- from django.apps import apps
234
-
235
- if not self.target_model:
236
- return None
237
-
238
- try:
239
- target_model = apps.get_model("endoreg_db", self.target_model)
240
- except LookupError:
241
- raise ValueError(f"Model {self.target_model} not found.")
242
- return target_model
243
-
244
- def get_target_field(self):
245
- """
246
- Returns the target field of the rule.
247
-
248
- :return: The target field of the rule.
249
- """
250
- return self.target_field
251
-
252
- def get_parent_model(self):
253
- """
254
- Returns the parent model of the rule.
255
-
256
- :return: The parent model of the rule.
257
- """
258
- from django.apps import apps
259
-
260
- if not self.parent_model:
261
- return None
262
-
263
- try:
264
- self.parent_model = apps.get_model("endoreg_db", self.parent_model)
265
- except LookupError:
266
- raise ValueError(f"Model {self.parent_model} not found.")
267
- return self.parent_model
268
-
269
- # customize the save method to check for self-references
270
- # def save(self, *args, **kwargs):
271
- # # Check for self-references
272
- # self_referencing_rules = self.chained_rules_has_self_reference()
273
- # if self_referencing_rules:
274
- # raise ValueError(f"Self-references detected: {self_referencing_rules}")
275
- # super().save(*args, **kwargs)
276
-
1
+ from django.db import models
2
+
3
+ class CaseTemplateRuleTypeManager(models.Manager):
4
+ def get_by_natural_key(self, name):
5
+ return self.get(name=name)
6
+
7
+ class CaseTemplateRuleType(models.Model):
8
+ """
9
+ A class representing a case template rule type.
10
+
11
+ Attributes:
12
+ name (str): The name of the case template rule type.
13
+ description (str): A description of the case template rule type.
14
+
15
+ """
16
+ name = models.CharField(max_length=255)
17
+ name_de = models.CharField(max_length=255, null=True)
18
+ name_en = models.CharField(max_length=255, null=True)
19
+ description = models.TextField(blank=True, null=True)
20
+
21
+ objects = CaseTemplateRuleTypeManager()
22
+
23
+ def natural_key(self):
24
+ return (self.name,)
25
+
26
+ def __str__(self):
27
+ return self.name
28
+
29
+ class CaseTemplateRuleManager(models.Manager):
30
+ def get_by_natural_key(self, name):
31
+ return self.get(name=name)
32
+
33
+ def get_default_create_patient_rule(self):
34
+ """Get the default create patient rule."""
35
+ return self.get(name="create-patient-default")
36
+
37
+ def get_default_create_patient_lab_sample_rules(self):
38
+ """Get the default create patient lab sample rules."""
39
+ return self.get(name="create-patient_lab_sample-default")
40
+
41
+ def get_default_create_patient_medication_schedule_rule(self):
42
+ """Get the create patient medication schedule rule."""
43
+ r = self.get(name="create-patient_medication_schedule")
44
+ assert r, "No create patient medication schedule rule found"
45
+ return r
46
+
47
+ class CaseTemplateRule(models.Model):
48
+ """
49
+ A class representing a case template rule.
50
+
51
+ Attributes:
52
+ name (str): The name of the case template rule.
53
+ case_template (CaseTemplate): The case template to which the rule belongs.
54
+ description (str): A description of the case template rule.
55
+ name_de (str): The name of the case template rule in German.
56
+ name_en (str): The name of the case template rule in English.
57
+ rule_type (CaseTemplateRuleType): The type of the rule.
58
+ parent_model (str): The model on which the rule is applied.
59
+ target_field (str): The field of the parent model on which the rule is applied.
60
+ target_model (str): The model to which the foreign key points (used for foreign key and many-to-many rules).
61
+ rule_values (list): A list of string values for the rule.
62
+ extra_parameters (dict): A dictionary of extra parameters for the rule.
63
+ value_type (CaseTemplateRuleValueType): The type of the rule value.
64
+ chained_rules (QuerySet): The chained rules associated with the current rule.
65
+ single_categorical_value_distribution (SingleCategoricalValueDistribution): The single categorical value distribution for the rule.
66
+ numerical_value_distribution (NumericValueDistribution): The numerical value distribution for the rule.
67
+ multiple_categorical_value_distribution (MultipleCategoricalValueDistribution): The multiple categorical value distribution for the rule.
68
+ date_value_distribution (DateValueDistribution): The date value distribution for the rule.
69
+ objects (CaseTemplateRuleManager): The manager for the CaseTemplateRule model.
70
+
71
+ Methods:
72
+ natural_key(): Returns the natural key of the rule.
73
+ __str__(): Returns a string representation of the rule.
74
+ get_rule_type(): Returns the name of the rule type.
75
+ get_chained_rules(): Returns all the chained rules associated with the current rule.
76
+ get_all_downward_chained_rules(): Returns all the chained rules of the current rule, including indirectly chained rules.
77
+ chained_rules_has_self_reference(): Checks if any directly or indirectly chained rules reference this rule, creating a non-terminating loop.
78
+ save(*args, **kwargs): Customizes the save method to check for self-references.
79
+
80
+ """
81
+ name = models.CharField(max_length=255)
82
+ name_de = models.CharField(max_length=255, null=True)
83
+ name_en = models.CharField(max_length=255, null=True)
84
+ description = models.TextField(blank=True, null=True)
85
+ rule_type = models.ForeignKey(
86
+ "CaseTemplateRuleType", on_delete=models.CASCADE
87
+ )
88
+ parent_model = models.CharField(max_length=255, blank=True, null=True)
89
+ parent_field = models.CharField(max_length=255, blank=True, null=True)
90
+ target_field = models.CharField(max_length=255, blank=True, null=True)
91
+ target_model = models.CharField(max_length=255, blank=True, null=True)
92
+ rule_values = models.JSONField(blank=True, null=True)
93
+ extra_parameters = models.JSONField(blank=True, null=True)
94
+ value_type = models.ForeignKey("CaseTemplateRuleValueType", on_delete=models.SET_NULL, null=True)
95
+ chained_rules = models.ManyToManyField(
96
+ "CaseTemplateRule",
97
+ related_name="calling_rules"
98
+ )
99
+ single_categorical_value_distribution = models.ForeignKey(
100
+ "SingleCategoricalValueDistribution", on_delete=models.SET_NULL, null=True
101
+ )
102
+ numerical_value_distribution = models.ForeignKey(
103
+ "NumericValueDistribution", on_delete=models.SET_NULL, null=True
104
+ )
105
+ multiple_categorical_value_distribution = models.ForeignKey(
106
+ "MultipleCategoricalValueDistribution", on_delete=models.SET_NULL, null=True
107
+ )
108
+ date_value_distribution = models.ForeignKey(
109
+ "DateValueDistribution", on_delete=models.SET_NULL, null=True
110
+ )
111
+ objects = CaseTemplateRuleManager()
112
+
113
+ def natural_key(self):
114
+ """
115
+ Returns the natural key of the rule.
116
+
117
+ :return: A tuple representing the natural key of the rule.
118
+ """
119
+ return (self.name,)
120
+
121
+ def __str__(self):
122
+ """
123
+ Returns a string representation of the rule.
124
+
125
+ :return: A string representation of the rule.
126
+ """
127
+ return self.name
128
+
129
+ def get_rule_type(self):
130
+ """
131
+ Returns the name of the rule type.
132
+
133
+ :return: The name of the rule type.
134
+ """
135
+ return self.rule_type.name
136
+
137
+ def get_chained_rules(self):
138
+ """
139
+ Returns all the chained rules associated with the current rule.
140
+
141
+ :return: A queryset of all the chained rules associated with the current rule.
142
+ """
143
+ return self.chained_rules.all()
144
+
145
+ def get_distribution(self):
146
+ """
147
+ Returns the value distribution of the rule.
148
+
149
+ :return: The value distribution of the rule.
150
+ """
151
+ DEBUG = True
152
+ if DEBUG:
153
+ print("Rule: ", self.name)
154
+ print(f"single_categorical_value_distribution: {self.single_categorical_value_distribution}")
155
+ print(f"numerical_value_distribution: {self.numerical_value_distribution}")
156
+ print(f"multiple_categorical_value_distribution: {self.multiple_categorical_value_distribution}")
157
+ print(f"date_value_distribution: {self.date_value_distribution}")
158
+
159
+
160
+ if self.single_categorical_value_distribution:
161
+ return self.single_categorical_value_distribution
162
+ elif self.numerical_value_distribution:
163
+ return self.numerical_value_distribution
164
+ elif self.multiple_categorical_value_distribution:
165
+ return self.multiple_categorical_value_distribution
166
+ elif self.date_value_distribution:
167
+ return self.date_value_distribution
168
+ return None
169
+
170
+ def get_all_downward_chained_rules(self):
171
+ """
172
+ Get all chained rules of the current rule, including indirectly chained rules.
173
+
174
+ :return: A set of all chained rules of the current rule.
175
+ """
176
+ all_chained_rules = set()
177
+
178
+ def traverse_chained_rules(rule):
179
+ """
180
+ Helper function to recursively traverse chained rules.
181
+
182
+ :param rule: The current CaseTemplateRule being checked.
183
+ :return: None
184
+ """
185
+ for chained_rule in rule.chained_rules.all():
186
+ if chained_rule not in all_chained_rules:
187
+ all_chained_rules.add(chained_rule)
188
+ traverse_chained_rules(chained_rule)
189
+
190
+ # Initialize the traversal starting with the current rule
191
+ traverse_chained_rules(self)
192
+ return all_chained_rules
193
+
194
+ def chained_rules_has_self_reference(self):
195
+ """
196
+ Check if any directly or indirectly chained rules reference this rule, creating a non-terminating loop.
197
+ Return a list containing a tuple (first_rule, self_referencing_rule) for each self-reference.
198
+ first_rule is the most upward rule in the chain that references the rule.
199
+ self_referencing_rule is the rule that references the current rule itself.
200
+
201
+ :return: A list of tuples representing the self-referencing rules.
202
+ """
203
+ result_list = []
204
+
205
+ def traverse_chained_rules(rule, visited_rules):
206
+ """
207
+ Helper function to recursively traverse chained rules and check for self-references.
208
+
209
+ :param rule: The current CaseTemplateRule being checked.
210
+ :param visited_rules: A list of tuples representing the path of rules visited so far.
211
+ :return: None
212
+ """
213
+ for chained_rule in rule.chained_rules.all():
214
+ if chained_rule == self:
215
+ # A self-reference is detected
216
+ first_rule = visited_rules[0][0]
217
+ self_referencing_rule = visited_rules[-1][1]
218
+ result_list.append((first_rule, self_referencing_rule))
219
+ elif chained_rule not in [r[1] for r in visited_rules]:
220
+ # Continue to check chained rules of the current chained rule
221
+ traverse_chained_rules(chained_rule, visited_rules + [(rule, chained_rule)])
222
+
223
+ # Initialize the traversal starting with the current rule
224
+ traverse_chained_rules(self, [(self, self)])
225
+ return result_list
226
+
227
+ def get_target_model(self):
228
+ """
229
+ Returns the target model of the rule.
230
+
231
+ :return: The target model of the rule.
232
+ """
233
+ from django.apps import apps
234
+
235
+ if not self.target_model:
236
+ return None
237
+
238
+ try:
239
+ target_model = apps.get_model("endoreg_db", self.target_model)
240
+ except LookupError:
241
+ raise ValueError(f"Model {self.target_model} not found.")
242
+ return target_model
243
+
244
+ def get_target_field(self):
245
+ """
246
+ Returns the target field of the rule.
247
+
248
+ :return: The target field of the rule.
249
+ """
250
+ return self.target_field
251
+
252
+ def get_parent_model(self):
253
+ """
254
+ Returns the parent model of the rule.
255
+
256
+ :return: The parent model of the rule.
257
+ """
258
+ from django.apps import apps
259
+
260
+ if not self.parent_model:
261
+ return None
262
+
263
+ try:
264
+ self.parent_model = apps.get_model("endoreg_db", self.parent_model)
265
+ except LookupError:
266
+ raise ValueError(f"Model {self.parent_model} not found.")
267
+ return self.parent_model
268
+
269
+ # customize the save method to check for self-references
270
+ # def save(self, *args, **kwargs):
271
+ # # Check for self-references
272
+ # self_referencing_rules = self.chained_rules_has_self_reference()
273
+ # if self_referencing_rules:
274
+ # raise ValueError(f"Self-references detected: {self_referencing_rules}")
275
+ # super().save(*args, **kwargs)
276
+