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,106 +1,106 @@
1
- from django.db import models
2
-
3
- DEFAULT_PATIENT_LAB_SAMPLE_TYPE_NAME = "generic"
4
-
5
- class PatientLabSampleTypeManager(models.Manager):
6
- def get_by_natural_key(self, name):
7
- return self.get(name=name)
8
-
9
- class PatientLabSampleType(models.Model):
10
- """
11
- A class representing a patient lab sample type.
12
-
13
- Attributes:
14
- name (str): The name of the patient lab sample type.
15
- description (str): A description of the patient lab sample type.
16
-
17
- """
18
- name = models.CharField(max_length=255)
19
- name_de = models.CharField(max_length=255, null=True)
20
- name_en = models.CharField(max_length=255, null=True)
21
- description = models.TextField(blank=True, null=True)
22
-
23
- objects = PatientLabSampleTypeManager()
24
-
25
- def natural_key(self):
26
- return (self.name,)
27
-
28
- def __str__(self):
29
- return self.name
30
-
31
- @classmethod
32
- def get_default_sample_type(cls):
33
- """
34
- Get the default patient lab sample type.
35
-
36
- Returns:
37
- PatientLabSampleType: The default patient lab sample type.
38
-
39
- """
40
- return cls.objects.get_or_create(name="default")[0]
41
-
42
- from datetime import datetime as dt
43
- from datetime import timezone
44
- class PatientLabSample(models.Model):
45
- """
46
- A class representing a patient lab sample.
47
-
48
- Attributes:
49
- patient (Patient): The patient to which the lab sample belongs.
50
- sample_type (PatientLabSampleType): The type of the lab sample.
51
- date (datetime): The date of the lab sample.
52
- values (PatientLabValue; One2Many): The value of the lab sample.
53
- unit (Unit): The unit of the lab sample.
54
-
55
- """
56
- patient = models.ForeignKey("Patient", on_delete=models.CASCADE, related_name="lab_samples")
57
- sample_type = models.ForeignKey("PatientLabSampleType", on_delete=models.CASCADE)
58
- date = models.DateTimeField()
59
-
60
- def __str__(self):
61
- return f"{self.patient} - {self.sample_type} - {self.date} ()"
62
-
63
- def get_values(self):
64
- return self.values
65
-
66
- @classmethod
67
- def create_by_patient(cls, patient=None, sample_type=None, date=None, save = True):
68
- """
69
- Create a new patient lab sample by patient.
70
-
71
- Args:
72
- patient (Patient): The patient to which the lab sample belongs.
73
- sample_type (PatientLabSampleType): The type of the lab sample.
74
- date (datetime): The date of the lab sample.
75
-
76
- Returns:
77
- PatientLabSample: The new patient lab sample.
78
-
79
- """
80
- from endoreg_db.models.persons.patient import Patient, PatientLabSampleType
81
- from warnings import warn
82
-
83
- if not patient:
84
- warn("No patient given. Cannot create patient lab sample.")
85
- return None
86
- if not sample_type:
87
- sample_type = PatientLabSampleType.get_default_sample_type()
88
- else:
89
- sample_type = PatientLabSampleType.objects.get(name=sample_type)
90
- if not date:
91
- date = dt.now(timezone.utc)
92
-
93
- patient_lab_sample = cls.objects.create(
94
- patient=patient,
95
- sample_type=sample_type,
96
- date=date
97
- )
98
-
99
- if save:
100
- patient_lab_sample.save()
101
-
102
- return patient_lab_sample
103
-
104
-
105
-
106
-
1
+ from django.db import models
2
+
3
+ DEFAULT_PATIENT_LAB_SAMPLE_TYPE_NAME = "generic"
4
+
5
+ class PatientLabSampleTypeManager(models.Manager):
6
+ def get_by_natural_key(self, name):
7
+ return self.get(name=name)
8
+
9
+ class PatientLabSampleType(models.Model):
10
+ """
11
+ A class representing a patient lab sample type.
12
+
13
+ Attributes:
14
+ name (str): The name of the patient lab sample type.
15
+ description (str): A description of the patient lab sample type.
16
+
17
+ """
18
+ name = models.CharField(max_length=255)
19
+ name_de = models.CharField(max_length=255, null=True)
20
+ name_en = models.CharField(max_length=255, null=True)
21
+ description = models.TextField(blank=True, null=True)
22
+
23
+ objects = PatientLabSampleTypeManager()
24
+
25
+ def natural_key(self):
26
+ return (self.name,)
27
+
28
+ def __str__(self):
29
+ return self.name
30
+
31
+ @classmethod
32
+ def get_default_sample_type(cls):
33
+ """
34
+ Get the default patient lab sample type.
35
+
36
+ Returns:
37
+ PatientLabSampleType: The default patient lab sample type.
38
+
39
+ """
40
+ return cls.objects.get_or_create(name="default")[0]
41
+
42
+ from datetime import datetime as dt
43
+ from datetime import timezone
44
+ class PatientLabSample(models.Model):
45
+ """
46
+ A class representing a patient lab sample.
47
+
48
+ Attributes:
49
+ patient (Patient): The patient to which the lab sample belongs.
50
+ sample_type (PatientLabSampleType): The type of the lab sample.
51
+ date (datetime): The date of the lab sample.
52
+ values (PatientLabValue; One2Many): The value of the lab sample.
53
+ unit (Unit): The unit of the lab sample.
54
+
55
+ """
56
+ patient = models.ForeignKey("Patient", on_delete=models.CASCADE, related_name="lab_samples")
57
+ sample_type = models.ForeignKey("PatientLabSampleType", on_delete=models.CASCADE)
58
+ date = models.DateTimeField()
59
+
60
+ def __str__(self):
61
+ return f"{self.patient} - {self.sample_type} - {self.date} ()"
62
+
63
+ def get_values(self):
64
+ return self.values
65
+
66
+ @classmethod
67
+ def create_by_patient(cls, patient=None, sample_type=None, date=None, save = True):
68
+ """
69
+ Create a new patient lab sample by patient.
70
+
71
+ Args:
72
+ patient (Patient): The patient to which the lab sample belongs.
73
+ sample_type (PatientLabSampleType): The type of the lab sample.
74
+ date (datetime): The date of the lab sample.
75
+
76
+ Returns:
77
+ PatientLabSample: The new patient lab sample.
78
+
79
+ """
80
+ from endoreg_db.models.persons.patient import Patient, PatientLabSampleType
81
+ from warnings import warn
82
+
83
+ if not patient:
84
+ warn("No patient given. Cannot create patient lab sample.")
85
+ return None
86
+ if not sample_type:
87
+ sample_type = PatientLabSampleType.get_default_sample_type()
88
+ else:
89
+ sample_type = PatientLabSampleType.objects.get(name=sample_type)
90
+ if not date:
91
+ date = dt.now(timezone.utc)
92
+
93
+ patient_lab_sample = cls.objects.create(
94
+ patient=patient,
95
+ sample_type=sample_type,
96
+ date=date
97
+ )
98
+
99
+ if save:
100
+ patient_lab_sample.save()
101
+
102
+ return patient_lab_sample
103
+
104
+
105
+
106
+
@@ -1,176 +1,176 @@
1
- from django.db import models
2
-
3
- class PatientLabValue(models.Model):
4
- """
5
- A class representing a patient lab value.
6
-
7
- Attributes:
8
- patient (Patient): The patient.
9
- lab_value (LabValue): The lab value.
10
- value (float): The value of the lab value.
11
- date (datetime): The date of the lab value.
12
- """
13
- patient = models.ForeignKey('Patient', on_delete=models.CASCADE,
14
- related_name="lab_values", blank=True, null=True
15
- )
16
- lab_value = models.ForeignKey('LabValue', on_delete=models.CASCADE)
17
- value = models.FloatField(blank=True, null=True)
18
- value_str = models.CharField(max_length=255, blank=True, null=True)
19
- sample = models.ForeignKey(
20
- 'PatientLabSample', on_delete=models.CASCADE,
21
- blank=True, null=True,
22
- related_name='values'
23
- )
24
- datetime = models.DateTimeField(# if not set, use now
25
- auto_now_add=True
26
- )
27
- normal_range = models.JSONField(
28
- default = dict
29
- )
30
- unit = models.ForeignKey('Unit', on_delete=models.CASCADE, blank=True, null=True)
31
-
32
- @classmethod
33
- def create_lab_value_by_sample(cls, sample=None, lab_value_name=None, value=None, value_str=None, unit=None):
34
- from endoreg_db.models import LabValue
35
- patient = sample.patient
36
- lab_value = LabValue.objects.get(name=lab_value_name)
37
- value = value
38
- value_str = value_str
39
-
40
- pat_lab_val = cls.objects.create(
41
- patient = patient,
42
- lab_value = lab_value,
43
- value = value,
44
- value_str = value_str,
45
- sample = sample,
46
- unit = unit,
47
- )
48
-
49
- pat_lab_val.save()
50
-
51
- return pat_lab_val
52
-
53
- def __str__(self):
54
- _str = f'{self.lab_value} - {self.value} {self.unit} ({self.datetime})'
55
- print(_str)
56
- return _str
57
-
58
- def set_min_norm_value(self, value, save = True):
59
- self.normal_range["min"] = value
60
- if save:
61
- self.save()
62
-
63
- def set_max_norm_value(self, value, save = True):
64
- self.normal_range["max"] = value
65
- if save:
66
- self.save()
67
-
68
- def set_norm_values_from_default(self):
69
- age = self.patient.age()
70
- gender = self.patient.gender
71
- min_value, max_value = self.lab_value.get_normal_range(age=age, gender=gender)
72
- self.set_min_norm_value(min_value, save = False)
73
- self.set_max_norm_value(max_value, save = False)
74
- self.save()
75
-
76
-
77
- def set_unit_from_default(self):
78
- self.unit = self.lab_value.default_unit
79
- self.save()
80
-
81
- def get_value(self):
82
- if self.value:
83
- return self.value
84
- else:
85
- return self.value_str
86
-
87
- def get_value_field_name(self):
88
- if self.value:
89
- return "value"
90
- else:
91
- return "value_str"
92
-
93
- # customize save method so that if a numeric value exists, we round it to the precision of the lab value
94
- def save(self, *args, **kwargs):
95
- if self.value:
96
- precision = self.lab_value.numeric_precision
97
- self.value = round(self.value, precision)
98
- super().save(*args, **kwargs)
99
-
100
- def set_value_by_distribution(self, distribution=None, save = True):
101
- from endoreg_db.models import (
102
- Patient, LabValue, Gender,
103
- DateValueDistribution,
104
- SingleCategoricalValueDistribution,
105
- NumericValueDistribution,
106
- MultipleCategoricalValueDistribution,
107
- )
108
- import warnings
109
-
110
- patient:Patient = self.patient
111
-
112
- dob = patient.dob
113
- gender:Gender = patient.gender
114
- lab_value:LabValue = self.lab_value
115
-
116
- assert self.lab_value, "Lab value must be set to set value by distribution"
117
- self.unit = self.lab_value.default_unit
118
-
119
- if not distribution:
120
- distribution = lab_value.get_default_default_distribution()
121
-
122
- if not distribution:
123
- warnings.warn(
124
- "No distribution set for lab value, assuming uniform numeric distribution based on normal values"
125
- )
126
-
127
- if not self.normal_range.get("min", None) or not self.normal_range.get("max", None):
128
- self.set_norm_values_from_default()
129
-
130
- self.normal_range:dict
131
- _min = self.normal_range.get("min", 0.0001)
132
- _max = self.normal_range.get("max", 100)
133
- _name = "auto-" + self.lab_value.name + "-distribution-default-uniform"
134
- distribution = NumericValueDistribution(
135
- name = _name,
136
- min_value = _min,
137
- max_value = _max,
138
- distribution_type = "uniform"
139
- )
140
-
141
- value = distribution.generate_value()
142
- self.value = value
143
- if save:
144
- self.save()
145
-
146
- return value
147
-
148
- if isinstance(distribution, SingleCategoricalValueDistribution):
149
- value = distribution.generate_value()
150
- self.value_str = value
151
- if save:
152
- self.save()
153
- return value
154
-
155
- elif isinstance(distribution, NumericValueDistribution):
156
- value = distribution.generate_value()
157
- self.value = value
158
- if save:
159
- self.save()
160
- return value
161
-
162
- elif isinstance(distribution, MultipleCategoricalValueDistribution):
163
- value = distribution.generate_value()
164
- self.value_str = value
165
- if save:
166
- self.save()
167
- return value
168
-
169
- elif isinstance(distribution, DateValueDistribution):
170
- # raise not implemented error
171
- value = distribution.generate_value()
172
- self.value = value
173
- if save:
174
- self.save()
175
-
176
-
1
+ from django.db import models
2
+
3
+ class PatientLabValue(models.Model):
4
+ """
5
+ A class representing a patient lab value.
6
+
7
+ Attributes:
8
+ patient (Patient): The patient.
9
+ lab_value (LabValue): The lab value.
10
+ value (float): The value of the lab value.
11
+ date (datetime): The date of the lab value.
12
+ """
13
+ patient = models.ForeignKey('Patient', on_delete=models.CASCADE,
14
+ related_name="lab_values", blank=True, null=True
15
+ )
16
+ lab_value = models.ForeignKey('LabValue', on_delete=models.CASCADE)
17
+ value = models.FloatField(blank=True, null=True)
18
+ value_str = models.CharField(max_length=255, blank=True, null=True)
19
+ sample = models.ForeignKey(
20
+ 'PatientLabSample', on_delete=models.CASCADE,
21
+ blank=True, null=True,
22
+ related_name='values'
23
+ )
24
+ datetime = models.DateTimeField(# if not set, use now
25
+ auto_now_add=True
26
+ )
27
+ normal_range = models.JSONField(
28
+ default = dict
29
+ )
30
+ unit = models.ForeignKey('Unit', on_delete=models.CASCADE, blank=True, null=True)
31
+
32
+ @classmethod
33
+ def create_lab_value_by_sample(cls, sample=None, lab_value_name=None, value=None, value_str=None, unit=None):
34
+ from endoreg_db.models import LabValue
35
+ patient = sample.patient
36
+ lab_value = LabValue.objects.get(name=lab_value_name)
37
+ value = value
38
+ value_str = value_str
39
+
40
+ pat_lab_val = cls.objects.create(
41
+ patient = patient,
42
+ lab_value = lab_value,
43
+ value = value,
44
+ value_str = value_str,
45
+ sample = sample,
46
+ unit = unit,
47
+ )
48
+
49
+ pat_lab_val.save()
50
+
51
+ return pat_lab_val
52
+
53
+ def __str__(self):
54
+ _str = f'{self.lab_value} - {self.value} {self.unit} ({self.datetime})'
55
+ print(_str)
56
+ return _str
57
+
58
+ def set_min_norm_value(self, value, save = True):
59
+ self.normal_range["min"] = value
60
+ if save:
61
+ self.save()
62
+
63
+ def set_max_norm_value(self, value, save = True):
64
+ self.normal_range["max"] = value
65
+ if save:
66
+ self.save()
67
+
68
+ def set_norm_values_from_default(self):
69
+ age = self.patient.age()
70
+ gender = self.patient.gender
71
+ min_value, max_value = self.lab_value.get_normal_range(age=age, gender=gender)
72
+ self.set_min_norm_value(min_value, save = False)
73
+ self.set_max_norm_value(max_value, save = False)
74
+ self.save()
75
+
76
+
77
+ def set_unit_from_default(self):
78
+ self.unit = self.lab_value.default_unit
79
+ self.save()
80
+
81
+ def get_value(self):
82
+ if self.value:
83
+ return self.value
84
+ else:
85
+ return self.value_str
86
+
87
+ def get_value_field_name(self):
88
+ if self.value:
89
+ return "value"
90
+ else:
91
+ return "value_str"
92
+
93
+ # customize save method so that if a numeric value exists, we round it to the precision of the lab value
94
+ def save(self, *args, **kwargs):
95
+ if self.value:
96
+ precision = self.lab_value.numeric_precision
97
+ self.value = round(self.value, precision)
98
+ super().save(*args, **kwargs)
99
+
100
+ def set_value_by_distribution(self, distribution=None, save = True):
101
+ from endoreg_db.models import (
102
+ Patient, LabValue, Gender,
103
+ DateValueDistribution,
104
+ SingleCategoricalValueDistribution,
105
+ NumericValueDistribution,
106
+ MultipleCategoricalValueDistribution,
107
+ )
108
+ import warnings
109
+
110
+ patient:Patient = self.patient
111
+
112
+ dob = patient.dob
113
+ gender:Gender = patient.gender
114
+ lab_value:LabValue = self.lab_value
115
+
116
+ assert self.lab_value, "Lab value must be set to set value by distribution"
117
+ self.unit = self.lab_value.default_unit
118
+
119
+ if not distribution:
120
+ distribution = lab_value.get_default_default_distribution()
121
+
122
+ if not distribution:
123
+ warnings.warn(
124
+ "No distribution set for lab value, assuming uniform numeric distribution based on normal values"
125
+ )
126
+
127
+ if not self.normal_range.get("min", None) or not self.normal_range.get("max", None):
128
+ self.set_norm_values_from_default()
129
+
130
+ self.normal_range:dict
131
+ _min = self.normal_range.get("min", 0.0001)
132
+ _max = self.normal_range.get("max", 100)
133
+ _name = "auto-" + self.lab_value.name + "-distribution-default-uniform"
134
+ distribution = NumericValueDistribution(
135
+ name = _name,
136
+ min_value = _min,
137
+ max_value = _max,
138
+ distribution_type = "uniform"
139
+ )
140
+
141
+ value = distribution.generate_value()
142
+ self.value = value
143
+ if save:
144
+ self.save()
145
+
146
+ return value
147
+
148
+ if isinstance(distribution, SingleCategoricalValueDistribution):
149
+ value = distribution.generate_value()
150
+ self.value_str = value
151
+ if save:
152
+ self.save()
153
+ return value
154
+
155
+ elif isinstance(distribution, NumericValueDistribution):
156
+ value = distribution.generate_value()
157
+ self.value = value
158
+ if save:
159
+ self.save()
160
+ return value
161
+
162
+ elif isinstance(distribution, MultipleCategoricalValueDistribution):
163
+ value = distribution.generate_value()
164
+ self.value_str = value
165
+ if save:
166
+ self.save()
167
+ return value
168
+
169
+ elif isinstance(distribution, DateValueDistribution):
170
+ # raise not implemented error
171
+ value = distribution.generate_value()
172
+ self.value = value
173
+ if save:
174
+ self.save()
175
+
176
+
@@ -1,44 +1,44 @@
1
- from django.db import models
2
- from django.utils.translation import gettext_lazy as _
3
-
4
- class PatientMedication(models.Model):
5
- patient = models.ForeignKey("Patient", on_delete= models.CASCADE)
6
- medication_indication = models.ForeignKey(
7
- "MedicationIndication", on_delete=models.CASCADE,
8
- related_name="patient_medications", null=True
9
- )
10
-
11
- medication_schedules = models.ManyToManyField(
12
- 'MedicationSchedule'
13
- )
14
- unit = models.ForeignKey('Unit', on_delete=models.CASCADE)
15
- dosage = models.JSONField()
16
- active = models.BooleanField(default=True)
17
-
18
- objects = models.Manager()
19
-
20
- class Meta:
21
- verbose_name = _('Patient Medication')
22
- verbose_name_plural = _('Patient Medications')
23
-
24
- @classmethod
25
- def create_by_patient_and_indication(cls, patient, medication_indication):
26
- from endoreg_db.models import MedicationIndication
27
- medication_indication: MedicationIndication
28
- patient_medication = cls.objects.create(patient=patient, medication_indication=medication_indication)
29
- patient_medication.save()
30
- patient_medication.set_schedules_from_indication()
31
-
32
- return patient_medication
33
-
34
- def set_schedules_from_indication(self):
35
- schedules = self.medication_indication.medication_schedules.all()
36
- self.medication_schedules.set(schedules)
37
- self.save()
38
-
39
- def __str__(self):
40
- indication = self.medication_indication
41
- schedules = self.medication_schedules.all()
42
- return f'{indication} - {schedules}'
43
-
1
+ from django.db import models
2
+ from django.utils.translation import gettext_lazy as _
3
+
4
+ class PatientMedication(models.Model):
5
+ patient = models.ForeignKey("Patient", on_delete= models.CASCADE)
6
+ medication_indication = models.ForeignKey(
7
+ "MedicationIndication", on_delete=models.CASCADE,
8
+ related_name="patient_medications", null=True
9
+ )
10
+
11
+ medication_schedules = models.ManyToManyField(
12
+ 'MedicationSchedule'
13
+ )
14
+ unit = models.ForeignKey('Unit', on_delete=models.CASCADE)
15
+ dosage = models.JSONField()
16
+ active = models.BooleanField(default=True)
17
+
18
+ objects = models.Manager()
19
+
20
+ class Meta:
21
+ verbose_name = _('Patient Medication')
22
+ verbose_name_plural = _('Patient Medications')
23
+
24
+ @classmethod
25
+ def create_by_patient_and_indication(cls, patient, medication_indication):
26
+ from endoreg_db.models import MedicationIndication
27
+ medication_indication: MedicationIndication
28
+ patient_medication = cls.objects.create(patient=patient, medication_indication=medication_indication)
29
+ patient_medication.save()
30
+ patient_medication.set_schedules_from_indication()
31
+
32
+ return patient_medication
33
+
34
+ def set_schedules_from_indication(self):
35
+ schedules = self.medication_indication.medication_schedules.all()
36
+ self.medication_schedules.set(schedules)
37
+ self.save()
38
+
39
+ def __str__(self):
40
+ indication = self.medication_indication
41
+ schedules = self.medication_schedules.all()
42
+ return f'{indication} - {schedules}'
43
+
44
44