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,216 +1,216 @@
1
- from ..person import Person
2
- from django import forms
3
- from django.forms import DateInput
4
- from rest_framework import serializers
5
- from ...patient_examination import PatientExamination
6
- from ...data_file import ReportFile
7
- from django.db import models
8
- from faker import Faker
9
- import random
10
- from datetime import datetime
11
-
12
- class Patient(Person):
13
- """
14
- A class representing a patient.
15
-
16
- Attributes inhereted from Person:
17
- first_name (str): The first name of the patient.
18
- last_name (str): The last name of the patient.
19
- dob (datetime.date): The date of birth of the patient.
20
- gender (Foreign Key): The gender of the patient.
21
- email (str): The email address of the patient.
22
- phone (str): The phone number of the patient.
23
-
24
- """
25
- center = models.ForeignKey("Center", on_delete=models.CASCADE, blank=True, null=True)
26
-
27
-
28
- def __str__(self):
29
- return self.first_name + " " + self.last_name + " (" + str(self.dob) + ")"
30
-
31
- def get_unmatched_report_files(self): #field: self.report_files; filter: report_file.patient_examination = None
32
- '''Returns all report files for this patient that are not matched to a patient examination.'''
33
-
34
- return self.reportfile_set.filter(patient_examination=None)
35
-
36
- def get_unmatched_video_files(self): #field: self.videos; filter: video.patient_examination = None
37
- '''Returns all video files for this patient that are not matched to a patient examination.'''
38
- return self.videos.filter(patient_examination=None)
39
-
40
- def get_patient_examinations(self): #field: self.patient_examinations
41
- '''Returns all patient examinations for this patient ordered by date (most recent is first).'''
42
- return self.patient_examinations.order_by('-date')
43
-
44
- def create_examination_by_report_file(self, report_file:ReportFile):
45
- '''Creates a patient examination for this patient based on the given report file.'''
46
- patient_examination = PatientExamination(patient=self, report_file=report_file)
47
- patient_examination.save()
48
- return patient_examination
49
-
50
- @classmethod
51
- def get_random_gender(self, p_male=0.5, p_female=0.5):
52
- """
53
- Get a Gender object by name (male, female) from the database with given probability.
54
-
55
- :param p_male: Probability of selecting 'male' gender.
56
- :param p_female: Probability of selecting 'female' gender.
57
- :return: Gender object selected based on given probabilities.
58
- """
59
- from endoreg_db.models import Gender
60
-
61
- # Extract names and probabilities
62
- gender_names = ["male", "female"]
63
- probabilities = [0.5, 0.5]
64
-
65
- # Debug: print the names and probabilities
66
- print(f"Gender names: {gender_names}")
67
- print(f"Probabilities: {probabilities}")
68
-
69
- # Select a gender based on the given probabilities
70
- selected_gender = random.choices(gender_names, probabilities)[0]
71
- # Debug: print the selected gender
72
- print(f"Selected gender: {selected_gender}")
73
-
74
- # Fetch the corresponding Gender object from the database
75
- gender_obj = Gender.objects.get(name=selected_gender)
76
-
77
- return gender_obj
78
-
79
-
80
- @classmethod
81
- def get_random_age(self,
82
- min_age = 55,
83
- max_age = 90,
84
- mean_age = 65,
85
- std_age = 10,
86
- distribution = "normal"
87
- ):
88
- """
89
- Get a random age based on the given distribution.
90
-
91
- :param min_age: Minimum age.
92
- :param max_age: Maximum age.
93
- :param mean_age: Mean age.
94
- :param std_age: Standard deviation of the age.
95
- :param distribution: Distribution of the age.
96
- :return: Random age based on the given distribution.
97
- """
98
- if distribution == "normal":
99
- age = int(random.normalvariate(mean_age, std_age))
100
- else:
101
- age = int(random.uniform(min_age, max_age))
102
-
103
- return age
104
-
105
- @classmethod
106
- def get_dob_from_age(self, age, current_date=None):
107
- """
108
- Get a date of birth based on the given age and current date.
109
-
110
- :param age: Age of the patient.
111
- :param current_date: Current date.
112
- :return: Date of birth based on the given age and current date.
113
- """
114
- if current_date is None:
115
- current_date = datetime.now()
116
- dob = current_date.replace(year=current_date.year - age).date()
117
-
118
- # TODO
119
- # randomize the day and month by adding a random number of days (0-364) to the date
120
-
121
- return dob
122
-
123
- @classmethod
124
- def get_random_name_for_gender(self, gender_obj, locale="de_DE"):
125
- gender = gender_obj.name
126
- fake = Faker(locale)
127
-
128
- if gender == "male":
129
- first_name = fake.first_name_male()
130
- last_name = fake.last_name_male()
131
-
132
- else:
133
- first_name = fake.first_name_female()
134
- last_name = fake.last_name_female()
135
-
136
- return last_name, first_name
137
-
138
- @classmethod
139
- def create_generic(self, center="gplay_case_generator"):
140
- """
141
- Create a generic patient with random attributes.
142
-
143
- :param center: The center of the patient.
144
- :return: The created patient.
145
- """
146
- from endoreg_db.models import Center
147
- gender = Patient.get_random_gender()
148
- last_name, first_name = Patient.get_random_name_for_gender(gender)
149
-
150
- age = Patient.get_random_age()
151
- dob = Patient.get_dob_from_age(age)
152
-
153
- center = Center.objects.get(name=center)
154
-
155
- patient = Patient.objects.create(
156
- first_name=first_name,
157
- last_name=last_name,
158
- dob=dob
159
- )
160
- patient.save()
161
- return patient
162
-
163
- def age(self):
164
- """
165
- Get the age of the patient.
166
-
167
- :return: The age of the patient.
168
- """
169
- # calculate correct age based on current date including day and month
170
- current_date = datetime.now()
171
- dob = self.dob
172
- age = current_date.year - dob.year - ((current_date.month, current_date.day) < (dob.month, dob.day))
173
- return age
174
-
175
- def create_lab_sample(self, sample_type="generic", date=None, save=True):
176
- """
177
- Create a lab sample for this patient.
178
-
179
- :param sample_type: The sample type. Should be either string of the sample types
180
- name or the sample type object. If not set, the default sample type ("generic") is used.
181
- :param date: The date of the lab sample.
182
- :return: The created lab sample.
183
- """
184
- from endoreg_db.models import PatientLabSample, PatientLabSampleType
185
- if date is None:
186
- date = datetime.now()
187
-
188
- if isinstance(sample_type, str):
189
- sample_type = PatientLabSampleType.objects.get(name=sample_type)
190
- assert sample_type is not None, f"Sample type with name '{sample_type}' not found."#
191
- elif not isinstance(sample_type, PatientLabSampleType):
192
- raise ValueError("Sample type must be either a string or a PatientLabSampleType object.")
193
-
194
- patient_lab_sample = PatientLabSample.objects.create(
195
- patient=self,
196
- sample_type=sample_type,
197
- date=date
198
- )
199
-
200
- if save:
201
- patient_lab_sample.save()
202
-
203
- return patient_lab_sample
204
-
205
- class PatientForm(forms.ModelForm):
206
- class Meta:
207
- model = Patient
208
- fields = '__all__'
209
- widgets = {
210
- 'dob': DateInput(attrs={'type': 'date'}),
211
- }
212
-
213
- def __init__(self, *args, **kwargs):
214
- super().__init__(*args, **kwargs)
215
- for field in self.fields.values():
216
- field.widget.attrs['class'] = 'form-control'
1
+ from ..person import Person
2
+ from django import forms
3
+ from django.forms import DateInput
4
+ from rest_framework import serializers
5
+ from ...patient_examination import PatientExamination
6
+ from ...data_file import ReportFile
7
+ from django.db import models
8
+ from faker import Faker
9
+ import random
10
+ from datetime import datetime
11
+
12
+ class Patient(Person):
13
+ """
14
+ A class representing a patient.
15
+
16
+ Attributes inhereted from Person:
17
+ first_name (str): The first name of the patient.
18
+ last_name (str): The last name of the patient.
19
+ dob (datetime.date): The date of birth of the patient.
20
+ gender (Foreign Key): The gender of the patient.
21
+ email (str): The email address of the patient.
22
+ phone (str): The phone number of the patient.
23
+
24
+ """
25
+ center = models.ForeignKey("Center", on_delete=models.CASCADE, blank=True, null=True)
26
+
27
+
28
+ def __str__(self):
29
+ return self.first_name + " " + self.last_name + " (" + str(self.dob) + ")"
30
+
31
+ def get_unmatched_report_files(self): #field: self.report_files; filter: report_file.patient_examination = None
32
+ '''Returns all report files for this patient that are not matched to a patient examination.'''
33
+
34
+ return self.reportfile_set.filter(patient_examination=None)
35
+
36
+ def get_unmatched_video_files(self): #field: self.videos; filter: video.patient_examination = None
37
+ '''Returns all video files for this patient that are not matched to a patient examination.'''
38
+ return self.videos.filter(patient_examination=None)
39
+
40
+ def get_patient_examinations(self): #field: self.patient_examinations
41
+ '''Returns all patient examinations for this patient ordered by date (most recent is first).'''
42
+ return self.patient_examinations.order_by('-date')
43
+
44
+ def create_examination_by_report_file(self, report_file:ReportFile):
45
+ '''Creates a patient examination for this patient based on the given report file.'''
46
+ patient_examination = PatientExamination(patient=self, report_file=report_file)
47
+ patient_examination.save()
48
+ return patient_examination
49
+
50
+ @classmethod
51
+ def get_random_gender(self, p_male=0.5, p_female=0.5):
52
+ """
53
+ Get a Gender object by name (male, female) from the database with given probability.
54
+
55
+ :param p_male: Probability of selecting 'male' gender.
56
+ :param p_female: Probability of selecting 'female' gender.
57
+ :return: Gender object selected based on given probabilities.
58
+ """
59
+ from endoreg_db.models import Gender
60
+
61
+ # Extract names and probabilities
62
+ gender_names = ["male", "female"]
63
+ probabilities = [0.5, 0.5]
64
+
65
+ # Debug: print the names and probabilities
66
+ print(f"Gender names: {gender_names}")
67
+ print(f"Probabilities: {probabilities}")
68
+
69
+ # Select a gender based on the given probabilities
70
+ selected_gender = random.choices(gender_names, probabilities)[0]
71
+ # Debug: print the selected gender
72
+ print(f"Selected gender: {selected_gender}")
73
+
74
+ # Fetch the corresponding Gender object from the database
75
+ gender_obj = Gender.objects.get(name=selected_gender)
76
+
77
+ return gender_obj
78
+
79
+
80
+ @classmethod
81
+ def get_random_age(self,
82
+ min_age = 55,
83
+ max_age = 90,
84
+ mean_age = 65,
85
+ std_age = 10,
86
+ distribution = "normal"
87
+ ):
88
+ """
89
+ Get a random age based on the given distribution.
90
+
91
+ :param min_age: Minimum age.
92
+ :param max_age: Maximum age.
93
+ :param mean_age: Mean age.
94
+ :param std_age: Standard deviation of the age.
95
+ :param distribution: Distribution of the age.
96
+ :return: Random age based on the given distribution.
97
+ """
98
+ if distribution == "normal":
99
+ age = int(random.normalvariate(mean_age, std_age))
100
+ else:
101
+ age = int(random.uniform(min_age, max_age))
102
+
103
+ return age
104
+
105
+ @classmethod
106
+ def get_dob_from_age(self, age, current_date=None):
107
+ """
108
+ Get a date of birth based on the given age and current date.
109
+
110
+ :param age: Age of the patient.
111
+ :param current_date: Current date.
112
+ :return: Date of birth based on the given age and current date.
113
+ """
114
+ if current_date is None:
115
+ current_date = datetime.now()
116
+ dob = current_date.replace(year=current_date.year - age).date()
117
+
118
+ # TODO
119
+ # randomize the day and month by adding a random number of days (0-364) to the date
120
+
121
+ return dob
122
+
123
+ @classmethod
124
+ def get_random_name_for_gender(self, gender_obj, locale="de_DE"):
125
+ gender = gender_obj.name
126
+ fake = Faker(locale)
127
+
128
+ if gender == "male":
129
+ first_name = fake.first_name_male()
130
+ last_name = fake.last_name_male()
131
+
132
+ else:
133
+ first_name = fake.first_name_female()
134
+ last_name = fake.last_name_female()
135
+
136
+ return last_name, first_name
137
+
138
+ @classmethod
139
+ def create_generic(self, center="gplay_case_generator"):
140
+ """
141
+ Create a generic patient with random attributes.
142
+
143
+ :param center: The center of the patient.
144
+ :return: The created patient.
145
+ """
146
+ from endoreg_db.models import Center
147
+ gender = Patient.get_random_gender()
148
+ last_name, first_name = Patient.get_random_name_for_gender(gender)
149
+
150
+ age = Patient.get_random_age()
151
+ dob = Patient.get_dob_from_age(age)
152
+
153
+ center = Center.objects.get(name=center)
154
+
155
+ patient = Patient.objects.create(
156
+ first_name=first_name,
157
+ last_name=last_name,
158
+ dob=dob
159
+ )
160
+ patient.save()
161
+ return patient
162
+
163
+ def age(self):
164
+ """
165
+ Get the age of the patient.
166
+
167
+ :return: The age of the patient.
168
+ """
169
+ # calculate correct age based on current date including day and month
170
+ current_date = datetime.now()
171
+ dob = self.dob
172
+ age = current_date.year - dob.year - ((current_date.month, current_date.day) < (dob.month, dob.day))
173
+ return age
174
+
175
+ def create_lab_sample(self, sample_type="generic", date=None, save=True):
176
+ """
177
+ Create a lab sample for this patient.
178
+
179
+ :param sample_type: The sample type. Should be either string of the sample types
180
+ name or the sample type object. If not set, the default sample type ("generic") is used.
181
+ :param date: The date of the lab sample.
182
+ :return: The created lab sample.
183
+ """
184
+ from endoreg_db.models import PatientLabSample, PatientLabSampleType
185
+ if date is None:
186
+ date = datetime.now()
187
+
188
+ if isinstance(sample_type, str):
189
+ sample_type = PatientLabSampleType.objects.get(name=sample_type)
190
+ assert sample_type is not None, f"Sample type with name '{sample_type}' not found."#
191
+ elif not isinstance(sample_type, PatientLabSampleType):
192
+ raise ValueError("Sample type must be either a string or a PatientLabSampleType object.")
193
+
194
+ patient_lab_sample = PatientLabSample.objects.create(
195
+ patient=self,
196
+ sample_type=sample_type,
197
+ date=date
198
+ )
199
+
200
+ if save:
201
+ patient_lab_sample.save()
202
+
203
+ return patient_lab_sample
204
+
205
+ class PatientForm(forms.ModelForm):
206
+ class Meta:
207
+ model = Patient
208
+ fields = '__all__'
209
+ widgets = {
210
+ 'dob': DateInput(attrs={'type': 'date'}),
211
+ }
212
+
213
+ def __init__(self, *args, **kwargs):
214
+ super().__init__(*args, **kwargs)
215
+ for field in self.fields.values():
216
+ field.widget.attrs['class'] = 'form-control'
@@ -1,16 +1,16 @@
1
- from django.db import models
2
-
3
-
4
-
5
- class PatientDisease(models.Model):
6
- patient = models.ForeignKey("Patient", on_delete=models.CASCADE)
7
- disease = models.ForeignKey("Disease", on_delete=models.CASCADE)
8
- classification_choices = models.ManyToManyField("DiseaseClassificationChoice")
9
- start_date = models.DateField(blank=True, null=True)
10
- end_date = models.DateField(blank=True, null=True)
11
-
12
- last_update = models.DateTimeField(auto_now=True)
13
-
14
- def __str__(self):
15
- return f"{self.patient} - {self.disease}"
16
-
1
+ from django.db import models
2
+
3
+
4
+
5
+ class PatientDisease(models.Model):
6
+ patient = models.ForeignKey("Patient", on_delete=models.CASCADE)
7
+ disease = models.ForeignKey("Disease", on_delete=models.CASCADE)
8
+ classification_choices = models.ManyToManyField("DiseaseClassificationChoice")
9
+ start_date = models.DateField(blank=True, null=True)
10
+ end_date = models.DateField(blank=True, null=True)
11
+
12
+ last_update = models.DateTimeField(auto_now=True)
13
+
14
+ def __str__(self):
15
+ return f"{self.patient} - {self.disease}"
16
+
@@ -1,22 +1,22 @@
1
- from django.db import models
2
- from .patient import Patient
3
-
4
- class PatientEvent(models.Model):
5
- """
6
- A class representing an event for a patient.
7
-
8
- Attributes:
9
- patient (Patient): The patient associated with this event.
10
- date (datetime.date): The date of the event.
11
- description (str): A description of the event.
12
- """
13
- patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
14
- event = models.ForeignKey("Event", on_delete=models.CASCADE)
15
- date_start = models.DateField()
16
- date_end = models.DateField(blank=True, null=True)
17
- description = models.TextField(blank=True, null=True)
18
-
19
- last_update = models.DateTimeField(auto_now=True)
20
-
21
- def __str__(self):
22
- return str(self.date_start) + ": " + self.event
1
+ from django.db import models
2
+ from .patient import Patient
3
+
4
+ class PatientEvent(models.Model):
5
+ """
6
+ A class representing an event for a patient.
7
+
8
+ Attributes:
9
+ patient (Patient): The patient associated with this event.
10
+ date (datetime.date): The date of the event.
11
+ description (str): A description of the event.
12
+ """
13
+ patient = models.ForeignKey(Patient, on_delete=models.CASCADE)
14
+ event = models.ForeignKey("Event", on_delete=models.CASCADE)
15
+ date_start = models.DateField()
16
+ date_end = models.DateField(blank=True, null=True)
17
+ description = models.TextField(blank=True, null=True)
18
+
19
+ last_update = models.DateTimeField(auto_now=True)
20
+
21
+ def __str__(self):
22
+ return str(self.date_start) + ": " + self.event