endoreg-db 0.3.6__py3-none-any.whl → 0.3.8__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 (351) 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/.init +0 -0
  14. endoreg_db/data/case_template/rule_value_type/base_types.yaml +58 -58
  15. endoreg_db/data/case_template/template/base.yaml +7 -7
  16. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +2 -2
  17. endoreg_db/data/case_template/tmp/_rule_value +13 -13
  18. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -21
  19. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +9 -9
  20. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +6 -6
  21. endoreg_db/data/center/data.yaml +59 -59
  22. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -144
  23. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -48
  24. endoreg_db/data/disease/cardiovascular.yaml +37 -37
  25. endoreg_db/data/disease/hepatology.yaml +4 -4
  26. endoreg_db/data/disease/misc.yaml +5 -5
  27. endoreg_db/data/disease/renal.yaml +4 -4
  28. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +5 -5
  29. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +5 -5
  30. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +40 -40
  31. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +19 -19
  32. endoreg_db/data/distribution/date/patient.yaml +6 -6
  33. endoreg_db/data/distribution/multiple_categorical/.init +0 -0
  34. endoreg_db/data/distribution/numeric/.init +0 -0
  35. endoreg_db/data/distribution/single_categorical/patient.yaml +6 -6
  36. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -132
  37. endoreg_db/data/endoscope_type/data.yaml +10 -10
  38. endoreg_db/data/endoscopy_processor/data.yaml +45 -45
  39. endoreg_db/data/event/cardiology.yaml +27 -27
  40. endoreg_db/data/event/neurology.yaml +13 -13
  41. endoreg_db/data/event/surgery.yaml +12 -12
  42. endoreg_db/data/event/thrombembolism.yaml +19 -19
  43. endoreg_db/data/examination/examinations/data.yaml +65 -65
  44. endoreg_db/data/examination/time/data.yaml +47 -47
  45. endoreg_db/data/examination/time-type/data.yaml +7 -7
  46. endoreg_db/data/examination/type/data.yaml +5 -5
  47. endoreg_db/data/gender/data.yaml +18 -18
  48. endoreg_db/data/information_source/data.yaml +30 -30
  49. endoreg_db/data/information_source/medication.yaml +5 -5
  50. endoreg_db/data/lab_value/cardiac_enzymes.yaml +30 -30
  51. endoreg_db/data/lab_value/coagulation.yaml +48 -48
  52. endoreg_db/data/lab_value/electrolytes.yaml +189 -189
  53. endoreg_db/data/lab_value/gastrointestinal_function.yaml +121 -121
  54. endoreg_db/data/lab_value/hematology.yaml +169 -169
  55. endoreg_db/data/lab_value/hormones.yaml +53 -53
  56. endoreg_db/data/lab_value/lipids.yaml +44 -44
  57. endoreg_db/data/lab_value/misc.yaml +30 -30
  58. endoreg_db/data/lab_value/renal_function.yaml +10 -10
  59. endoreg_db/data/label/label/data.yaml +62 -62
  60. endoreg_db/data/label/label-set/data.yaml +17 -17
  61. endoreg_db/data/label/label-type/data.yaml +6 -6
  62. endoreg_db/data/medication/anticoagulation.yaml +64 -64
  63. endoreg_db/data/medication/tah.yaml +69 -69
  64. endoreg_db/data/medication_indication/anticoagulation.yaml +120 -120
  65. endoreg_db/data/medication_indication_type/data.yaml +10 -10
  66. endoreg_db/data/medication_indication_type/thrombembolism.yaml +40 -40
  67. endoreg_db/data/medication_intake_time/base.yaml +30 -30
  68. endoreg_db/data/medication_schedule/apixaban.yaml +94 -94
  69. endoreg_db/data/medication_schedule/ass.yaml +12 -12
  70. endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -26
  71. endoreg_db/data/model_type/data.yaml +6 -6
  72. endoreg_db/data/network_device/data.yaml +17 -0
  73. endoreg_db/data/network_device_type/data.yaml +8 -0
  74. endoreg_db/data/patient_lab_sample_type/generic.yaml +5 -5
  75. endoreg_db/data/pdf_type/data.yaml +28 -28
  76. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -66
  77. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -33
  78. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -308
  79. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -88
  80. endoreg_db/data/profession/data.yaml +70 -70
  81. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -55
  82. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +26 -26
  83. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -19
  84. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -15
  85. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -12
  86. endoreg_db/data/unit/concentration.yaml +92 -92
  87. endoreg_db/data/unit/data.yaml +17 -17
  88. endoreg_db/data/unit/length.yaml +30 -30
  89. endoreg_db/data/unit/misc.yaml +19 -19
  90. endoreg_db/data/unit/rate.yaml +5 -5
  91. endoreg_db/data/unit/time.yaml +12 -12
  92. endoreg_db/data/unit/volume.yaml +35 -35
  93. endoreg_db/data/unit/weight.yaml +37 -37
  94. endoreg_db/data/waste/data.yaml +11 -11
  95. endoreg_db/forms/__init__.py +2 -2
  96. endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -23
  97. endoreg_db/forms/settings/__init__.py +8 -8
  98. endoreg_db/forms/unit.py +5 -5
  99. endoreg_db/management/commands/_load_model_template.py +40 -40
  100. endoreg_db/management/commands/delete_all.py +18 -18
  101. endoreg_db/management/commands/delete_legacy_images.py +19 -19
  102. endoreg_db/management/commands/delete_legacy_videos.py +16 -16
  103. endoreg_db/management/commands/extract_legacy_video_frames.py +18 -18
  104. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -32
  105. endoreg_db/management/commands/fix_auth_permission.py +20 -20
  106. endoreg_db/management/commands/import_legacy_images.py +94 -94
  107. endoreg_db/management/commands/import_legacy_videos.py +76 -76
  108. endoreg_db/management/commands/load_active_model_data.py +44 -44
  109. endoreg_db/management/commands/load_ai_model_data.py +44 -44
  110. endoreg_db/management/commands/load_base_db_data.py +132 -128
  111. endoreg_db/management/commands/load_center_data.py +42 -42
  112. endoreg_db/management/commands/load_disease_classification_choices_data.py +40 -40
  113. endoreg_db/management/commands/load_disease_classification_data.py +40 -40
  114. endoreg_db/management/commands/load_disease_data.py +39 -39
  115. endoreg_db/management/commands/load_distribution_data.py +65 -65
  116. endoreg_db/management/commands/load_endoscope_type_data.py +44 -44
  117. endoreg_db/management/commands/load_endoscopy_processor_data.py +44 -44
  118. endoreg_db/management/commands/load_event_data.py +40 -40
  119. endoreg_db/management/commands/load_examination_data.py +74 -74
  120. endoreg_db/management/commands/load_g_play_data.py +112 -112
  121. endoreg_db/management/commands/load_gender_data.py +43 -43
  122. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +132 -132
  123. endoreg_db/management/commands/load_information_source.py +44 -44
  124. endoreg_db/management/commands/load_lab_value_data.py +49 -49
  125. endoreg_db/management/commands/load_label_data.py +66 -66
  126. endoreg_db/management/commands/load_medication_data.py +40 -40
  127. endoreg_db/management/commands/load_medication_indication_data.py +62 -62
  128. endoreg_db/management/commands/load_medication_indication_type_data.py +40 -40
  129. endoreg_db/management/commands/load_medication_intake_time_data.py +40 -40
  130. endoreg_db/management/commands/load_medication_schedule_data.py +54 -54
  131. endoreg_db/management/commands/load_network_data.py +49 -0
  132. endoreg_db/management/commands/load_pdf_type_data.py +60 -60
  133. endoreg_db/management/commands/load_profession_data.py +43 -43
  134. endoreg_db/management/commands/load_report_reader_flag.py +45 -45
  135. endoreg_db/management/commands/load_unit_data.py +45 -45
  136. endoreg_db/management/commands/load_user_groups.py +28 -28
  137. endoreg_db/management/commands/register_ai_model.py +65 -65
  138. endoreg_db/management/commands/reset_celery_schedule.py +9 -9
  139. endoreg_db/migrations/0001_initial.py +582 -582
  140. endoreg_db/migrations/0002_rawvideofile.py +26 -26
  141. endoreg_db/migrations/0003_rawvideofile_frames_required.py +18 -18
  142. endoreg_db/migrations/0004_rename_hash_rawvideofile_video_hash.py +18 -18
  143. endoreg_db/migrations/0005_ffmpegmeta_remove_videoimportmeta_center_and_more.py +56 -56
  144. endoreg_db/migrations/0006_rawvideofile_center_alter_videometa_processor.py +25 -25
  145. endoreg_db/migrations/0007_rawvideofile_processor.py +19 -19
  146. endoreg_db/migrations/0008_rename_frames_required_rawvideofile_state_frames_required.py +18 -18
  147. endoreg_db/migrations/0009_sensitivemeta_rawvideofile_sensitive_meta.py +31 -31
  148. endoreg_db/migrations/0010_rename_endoscope_serial_number_sensitivemeta_endoscope_sn.py +18 -18
  149. endoreg_db/migrations/0011_rawvideofile_state_sensitive_data_retrieved.py +18 -18
  150. endoreg_db/migrations/0012_rawvideofile_prediction_dir_and_more.py +109 -109
  151. endoreg_db/migrations/0013_rawpdffile.py +31 -31
  152. endoreg_db/migrations/0014_pdftype_alter_rawpdffile_file_pdfmeta.py +38 -38
  153. endoreg_db/migrations/0015_rename_report_processed_rawpdffile_state_report_processed_and_more.py +31 -31
  154. endoreg_db/migrations/0016_rawpdffile_state_report_processing_required.py +18 -18
  155. endoreg_db/migrations/0017_firstname_lastname_center_first_names_and_more.py +37 -37
  156. endoreg_db/migrations/0018_reportreaderflag_reportreaderconfig.py +37 -37
  157. endoreg_db/migrations/0019_pdftype_cut_off_above_lines_and_more.py +42 -42
  158. endoreg_db/migrations/0020_rename_endoscopy_info_line_pdftype_endoscope_info_line.py +18 -18
  159. endoreg_db/migrations/0021_alter_pdftype_endoscope_info_line.py +19 -19
  160. endoreg_db/migrations/0022_alter_pdftype_endoscope_info_line.py +19 -19
  161. endoreg_db/migrations/0023_ttoquestionnaire_alter_pdftype_endoscope_info_line.py +59 -59
  162. endoreg_db/migrations/0024_remove_ttoquestionnaire_infections_and_more.py +27 -27
  163. endoreg_db/migrations/0025_event_alter_rawpdffile_file_patientevent.py +42 -42
  164. endoreg_db/migrations/0026_disease_diseaseclassification_and_more.py +166 -166
  165. endoreg_db/migrations/0027_labvalue_abbreviation_labvalue_default_normal_range_and_more.py +38 -38
  166. endoreg_db/migrations/0028_alter_unit_abbreviation.py +18 -18
  167. endoreg_db/migrations/0029_medicationintaketime_and_more.py +75 -75
  168. endoreg_db/migrations/0030_medicationindicationtype_and_more.py +101 -101
  169. endoreg_db/migrations/0031_rename_adapt_to_liver_function_medication_adapt_to_age_and_more.py +38 -38
  170. endoreg_db/migrations/0032_alter_medicationschedule_therapy_duration_d.py +18 -18
  171. endoreg_db/migrations/0033_medicationindication_sources.py +18 -18
  172. endoreg_db/migrations/0034_alter_rawpdffile_file.py +20 -20
  173. endoreg_db/migrations/0035_alter_medicationindication_sources.py +18 -18
  174. endoreg_db/migrations/0036_alter_rawpdffile_file.py +20 -20
  175. endoreg_db/migrations/0037_alter_medicationindication_sources.py +18 -18
  176. endoreg_db/migrations/0038_emissionfactor_material_product_productgroup_and_more.py +164 -164
  177. endoreg_db/migrations/0039_referenceproduct_name.py +19 -19
  178. endoreg_db/migrations/0040_quizanswertype_quizquestiontype_quizquestion_and_more.py +50 -50
  179. endoreg_db/migrations/0041_gender_patientmedication_medication_indication_and_more.py +40 -40
  180. endoreg_db/migrations/0042_casetemplateruletype_casetemplaterulevalue_and_more.py +74 -74
  181. endoreg_db/migrations/0043_casetemplatetype_name_de_casetemplatetype_name_en.py +23 -23
  182. endoreg_db/migrations/0044_casetemplateruletype_name_de_and_more.py +23 -23
  183. endoreg_db/migrations/0045_casetemplaterulevalue_value_type.py +19 -19
  184. endoreg_db/migrations/0046_casetemplaterulevalue_target_field.py +18 -18
  185. endoreg_db/migrations/0047_casetemplaterule_target_model.py +18 -18
  186. endoreg_db/migrations/0048_remove_casetemplaterule_chained_rules_and_more.py +22 -22
  187. endoreg_db/migrations/0049_remove_casetemplaterule_rule_values.py +17 -17
  188. endoreg_db/migrations/0050_casetemplaterule_rule_values.py +18 -18
  189. endoreg_db/migrations/0051_remove_casetemplaterule_calling_rules_and_more.py +27 -27
  190. endoreg_db/migrations/0052_rename_case_template_type_casetemplate_template_type.py +18 -18
  191. endoreg_db/migrations/0053_patientlabsampletype_patientlabsample_and_more.py +38 -38
  192. endoreg_db/migrations/0054_multiplecategoricalvaluedistribution_and_more.py +69 -69
  193. endoreg_db/migrations/0055_remove_casetemplaterule_rule_values_and_more.py +59 -59
  194. endoreg_db/migrations/0056_datevaluedistribution_and_more.py +32 -32
  195. endoreg_db/migrations/0057_remove_datevaluedistribution_max_date_and_more.py +72 -72
  196. endoreg_db/migrations/0058_datevaluedistribution_description_and_more.py +28 -28
  197. endoreg_db/migrations/0059_casetemplaterule_rule_values.py +18 -18
  198. endoreg_db/migrations/0060_labvalue__default_date_value_distribution_and_more.py +44 -44
  199. endoreg_db/migrations/0061_remove_patientlabvalue_date_patientlabvalue_datetime.py +24 -24
  200. endoreg_db/migrations/0062_labvalue_numeric_precision.py +18 -18
  201. endoreg_db/migrations/0063_alter_labvalue_numeric_precision.py +18 -18
  202. endoreg_db/migrations/0064_casetemplaterule_extra_parameters_and_more.py +23 -23
  203. endoreg_db/migrations/0065_rename__date_value_distribution_casetemplaterule_date_value_distribution_and_more.py +58 -58
  204. endoreg_db/migrations/0066_alter_patientlabvalue_patient_and_more.py +29 -29
  205. endoreg_db/migrations/0067_alter_medicationindication_indication_type.py +19 -19
  206. endoreg_db/migrations/0068_networkdevicetype_networkdevicetypemanager_and_more.py +57 -0
  207. endoreg_db/models/__init__.py +75 -74
  208. endoreg_db/models/ai_model/__init__.py +3 -3
  209. endoreg_db/models/ai_model/active_model.py +9 -9
  210. endoreg_db/models/ai_model/model_meta.py +24 -24
  211. endoreg_db/models/ai_model/model_type.py +25 -25
  212. endoreg_db/models/ai_model/utils.py +8 -8
  213. endoreg_db/models/annotation/__init__.py +1 -1
  214. endoreg_db/models/annotation/binary_classification_annotation_task.py +80 -80
  215. endoreg_db/models/annotation/image_classification.py +26 -26
  216. endoreg_db/models/case_template/__init__.py +5 -5
  217. endoreg_db/models/case_template/case_template.py +81 -81
  218. endoreg_db/models/case_template/case_template_rule.py +276 -276
  219. endoreg_db/models/case_template/case_template_rule_value.py +73 -73
  220. endoreg_db/models/case_template/case_template_type.py +27 -27
  221. endoreg_db/models/center/__init__.py +4 -4
  222. endoreg_db/models/center/center.py +24 -24
  223. endoreg_db/models/center/center_product.py +33 -33
  224. endoreg_db/models/center/center_resource.py +18 -18
  225. endoreg_db/models/center/center_waste.py +10 -10
  226. endoreg_db/models/data_file/__init__.py +5 -5
  227. endoreg_db/models/data_file/base_classes/__init__.py +2 -2
  228. endoreg_db/models/data_file/base_classes/abstract_frame.py +50 -50
  229. endoreg_db/models/data_file/base_classes/abstract_video.py +200 -200
  230. endoreg_db/models/data_file/frame.py +45 -45
  231. endoreg_db/models/data_file/import_classes/__init__.py +31 -31
  232. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +34 -34
  233. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -28
  234. endoreg_db/models/data_file/import_classes/processing_functions/video.py +260 -260
  235. endoreg_db/models/data_file/import_classes/raw_pdf.py +188 -188
  236. endoreg_db/models/data_file/import_classes/raw_video.py +343 -343
  237. endoreg_db/models/data_file/metadata/__init__.py +3 -3
  238. endoreg_db/models/data_file/metadata/pdf_meta.py +70 -70
  239. endoreg_db/models/data_file/metadata/sensitive_meta.py +31 -31
  240. endoreg_db/models/data_file/metadata/video_meta.py +132 -132
  241. endoreg_db/models/data_file/report_file.py +89 -89
  242. endoreg_db/models/data_file/video/__init__.py +6 -6
  243. endoreg_db/models/data_file/video/import_meta.py +25 -25
  244. endoreg_db/models/data_file/video/video.py +25 -25
  245. endoreg_db/models/data_file/video_segment.py +107 -107
  246. endoreg_db/models/disease.py +55 -55
  247. endoreg_db/models/emission/emission_factor.py +19 -19
  248. endoreg_db/models/event.py +21 -21
  249. endoreg_db/models/examination/__init__.py +3 -3
  250. endoreg_db/models/examination/examination.py +26 -26
  251. endoreg_db/models/examination/examination_time.py +27 -27
  252. endoreg_db/models/examination/examination_time_type.py +24 -24
  253. endoreg_db/models/examination/examination_type.py +18 -18
  254. endoreg_db/models/hardware/__init__.py +1 -1
  255. endoreg_db/models/hardware/endoscope.py +44 -44
  256. endoreg_db/models/hardware/endoscopy_processor.py +143 -143
  257. endoreg_db/models/information_source.py +29 -29
  258. endoreg_db/models/label/label.py +84 -84
  259. endoreg_db/models/laboratory/lab_value.py +102 -102
  260. endoreg_db/models/legacy_data/__init__.py +3 -3
  261. endoreg_db/models/legacy_data/image.py +34 -34
  262. endoreg_db/models/medication/medication.py +148 -148
  263. endoreg_db/models/network/__init__.py +2 -0
  264. endoreg_db/models/network/network_device.py +27 -0
  265. endoreg_db/models/network/network_device_type.py +23 -0
  266. endoreg_db/models/other/__init__.py +4 -4
  267. endoreg_db/models/other/distribution.py +215 -215
  268. endoreg_db/models/other/material.py +16 -16
  269. endoreg_db/models/other/resource.py +17 -17
  270. endoreg_db/models/other/transport_route.py +20 -20
  271. endoreg_db/models/other/waste.py +20 -20
  272. endoreg_db/models/patient_examination/__init__.py +35 -35
  273. endoreg_db/models/permissions/__init__.py +44 -44
  274. endoreg_db/models/persons/__init__.py +6 -6
  275. endoreg_db/models/persons/examiner/__init__.py +1 -1
  276. endoreg_db/models/persons/examiner/examiner.py +15 -15
  277. endoreg_db/models/persons/examiner/examiner_type.py +1 -1
  278. endoreg_db/models/persons/first_name.py +17 -17
  279. endoreg_db/models/persons/gender.py +22 -22
  280. endoreg_db/models/persons/last_name.py +19 -19
  281. endoreg_db/models/persons/patient/__init__.py +7 -7
  282. endoreg_db/models/persons/patient/case/case.py +30 -30
  283. endoreg_db/models/persons/patient/patient.py +216 -216
  284. endoreg_db/models/persons/patient/patient_disease.py +16 -16
  285. endoreg_db/models/persons/patient/patient_event.py +22 -22
  286. endoreg_db/models/persons/patient/patient_lab_sample.py +106 -106
  287. endoreg_db/models/persons/patient/patient_lab_value.py +176 -176
  288. endoreg_db/models/persons/patient/patient_medication.py +43 -43
  289. endoreg_db/models/persons/patient/patient_medication_schedule.py +27 -27
  290. endoreg_db/models/persons/person.py +31 -31
  291. endoreg_db/models/persons/portal_user_information.py +27 -27
  292. endoreg_db/models/prediction/__init__.py +1 -1
  293. endoreg_db/models/prediction/image_classification.py +37 -37
  294. endoreg_db/models/prediction/video_prediction_meta.py +244 -244
  295. endoreg_db/models/product/__init__.py +4 -4
  296. endoreg_db/models/product/product.py +97 -97
  297. endoreg_db/models/product/product_group.py +19 -19
  298. endoreg_db/models/product/product_material.py +24 -24
  299. endoreg_db/models/product/product_weight.py +26 -26
  300. endoreg_db/models/product/reference_product.py +99 -99
  301. endoreg_db/models/questionnaires/__init__.py +114 -114
  302. endoreg_db/models/quiz/__init__.py +1 -1
  303. endoreg_db/models/quiz/quiz_answer.py +41 -41
  304. endoreg_db/models/quiz/quiz_question.py +54 -54
  305. endoreg_db/models/report_reader/__init__.py +1 -1
  306. endoreg_db/models/report_reader/report_reader_config.py +53 -53
  307. endoreg_db/models/report_reader/report_reader_flag.py +19 -19
  308. endoreg_db/models/rules/__init__.py +4 -4
  309. endoreg_db/models/rules/rule.py +23 -23
  310. endoreg_db/models/rules/rule_applicator.py +224 -224
  311. endoreg_db/models/rules/rule_attribute_dtype.py +18 -18
  312. endoreg_db/models/rules/rule_type.py +21 -21
  313. endoreg_db/models/rules/ruleset.py +19 -19
  314. endoreg_db/models/unit.py +21 -21
  315. endoreg_db/queries/__init__.py +4 -4
  316. endoreg_db/queries/annotations/__init__.py +2 -2
  317. endoreg_db/queries/annotations/legacy.py +159 -159
  318. endoreg_db/queries/get/__init__.py +5 -5
  319. endoreg_db/queries/get/center.py +42 -42
  320. endoreg_db/queries/get/model.py +13 -13
  321. endoreg_db/queries/get/patient.py +14 -14
  322. endoreg_db/queries/get/patient_examination.py +20 -20
  323. endoreg_db/queries/get/report_file.py +33 -33
  324. endoreg_db/queries/get/video.py +31 -31
  325. endoreg_db/serializers/__init__.py +9 -9
  326. endoreg_db/serializers/ai_model.py +18 -18
  327. endoreg_db/serializers/annotation.py +17 -17
  328. endoreg_db/serializers/center.py +11 -11
  329. endoreg_db/serializers/examination.py +32 -32
  330. endoreg_db/serializers/frame.py +13 -13
  331. endoreg_db/serializers/hardware.py +20 -20
  332. endoreg_db/serializers/label.py +22 -22
  333. endoreg_db/serializers/patient.py +10 -10
  334. endoreg_db/serializers/prediction.py +15 -15
  335. endoreg_db/serializers/report_file.py +7 -7
  336. endoreg_db/serializers/video.py +27 -27
  337. endoreg_db/tests.py +3 -3
  338. endoreg_db/utils/cropping.py +28 -28
  339. endoreg_db/utils/dataloader.py +92 -92
  340. endoreg_db/utils/file_operations.py +30 -30
  341. endoreg_db/utils/hashs.py +33 -33
  342. endoreg_db/utils/legacy_ocr.py +201 -201
  343. endoreg_db/utils/ocr.py +197 -197
  344. endoreg_db/utils/uuid.py +4 -4
  345. endoreg_db/utils/video_metadata.py +87 -87
  346. endoreg_db/views.py +3 -3
  347. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.8.dist-info}/LICENSE +674 -674
  348. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.8.dist-info}/METADATA +3 -1
  349. endoreg_db-0.3.8.dist-info/RECORD +367 -0
  350. {endoreg_db-0.3.6.dist-info → endoreg_db-0.3.8.dist-info}/WHEEL +1 -1
  351. endoreg_db-0.3.6.dist-info/RECORD +0 -357
@@ -1,188 +1,188 @@
1
- # models/data_file/import_classes/raw_pdf.py
2
- # django db model "RawPdf"
3
- # Class to store raw pdf file using django file field
4
- # Class contains classmethod to create object from pdf file
5
- # objects contains methods to extract text, extract metadata from text and anonymize text from pdf file uzing agl_report_reader.ReportReader class
6
- # ------------------------------------------------------------------------------
7
-
8
- from django.db import models
9
- from django.core.files.storage import FileSystemStorage
10
- from django.core.files import File
11
- from django.conf import settings
12
- from django.utils import timezone
13
- from django.core.exceptions import ValidationError
14
- from django.core.validators import FileExtensionValidator
15
- from endoreg_db.utils.file_operations import get_uuid_filename
16
-
17
- from agl_report_reader.report_reader import ReportReader
18
-
19
- from endoreg_db.utils.hashs import get_pdf_hash
20
- from ..metadata import SensitiveMeta
21
-
22
- # setup logging to pdf_import.log
23
- import logging
24
- logger = logging.getLogger('pdf_import')
25
-
26
- import shutil
27
-
28
- # get pdf location from settings, default to ~/erc_data/raw_pdf and create if not exists
29
- PSEUDO_DIR_RAW_PDF = getattr(settings, 'PSEUDO_DIR_RAW_PDF', settings.BASE_DIR / 'erc_data/raw_pdf')
30
-
31
- class RawPdfFile(models.Model):
32
- file = models.FileField(
33
- upload_to='raw_pdf/',
34
- validators=[FileExtensionValidator(allowed_extensions=['pdf'])],
35
- storage=FileSystemStorage(location=PSEUDO_DIR_RAW_PDF.resolve().as_posix()),
36
- )
37
-
38
- pdf_hash = models.CharField(max_length=255, unique=True)
39
- pdf_type = models.ForeignKey('PdfType', on_delete=models.CASCADE)
40
- center = models.ForeignKey('Center', on_delete=models.CASCADE)
41
-
42
- state_report_processing_required = models.BooleanField(default = True)
43
- state_report_processed = models.BooleanField(default=False)
44
-
45
- # report_file = models.OneToOneField("ReportFile", on_delete=models.CASCADE, null=True, blank=True)
46
- sensitive_meta = models.OneToOneField(
47
- 'SensitiveMeta',
48
- on_delete=models.CASCADE,
49
- related_name='raw_pdf_file',
50
- null=True,
51
- blank=True,
52
- )
53
-
54
- text = models.TextField(blank=True, null=True)
55
- anonymized_text = models.TextField(blank=True, null=True)
56
-
57
- raw_meta = models.JSONField(blank=True, null=True)
58
-
59
- created_at = models.DateTimeField(auto_now_add=True)
60
-
61
- def __str__(self):
62
- str_repr = f"RawPdfFile: {self.file.name}"
63
- return str_repr
64
-
65
- @classmethod
66
- def create_from_file(
67
- cls,
68
- file_path,
69
- center_name,
70
- pdf_type_name,
71
- destination_dir,
72
- save=True,
73
- ):
74
- from endoreg_db.models import PdfType, Center
75
- logger.info(f"Creating RawPdfFile object from file: {file_path}")
76
- original_file_name = file_path.name
77
-
78
- new_file_name, uuid = get_uuid_filename(file_path)
79
-
80
- if not destination_dir.exists():
81
- destination_dir.mkdir(parents=True)
82
-
83
- pdf_hash = get_pdf_hash(file_path)
84
-
85
- # check if pdf file already exists
86
- if cls.objects.filter(pdf_hash=pdf_hash).exists():
87
- logger.warning(f"RawPdfFile with hash {pdf_hash} already exists")
88
- return None
89
-
90
- assert pdf_type_name is not None, "pdf_type_name is required"
91
- assert center_name is not None, "center_name is required"
92
-
93
- pdf_type = PdfType.objects.get(name=pdf_type_name)
94
- center = Center.objects.get(name=center_name)
95
-
96
- new_file_path = destination_dir / new_file_name
97
-
98
- logger.info(f"Copying file to {new_file_path}")
99
- success = shutil.copy(file_path, new_file_path)
100
-
101
- # validate copy operation by comparing hashs
102
- assert get_pdf_hash(new_file_path) == pdf_hash, "Copy operation failed"
103
-
104
- raw_pdf = cls(
105
- file=new_file_path.resolve().as_posix(),
106
- pdf_hash=pdf_hash,
107
- pdf_type=pdf_type,
108
- center=center,
109
- )
110
- logger.info(f"RawPdfFile object created: {raw_pdf}")
111
-
112
- # remove source file
113
- file_path.unlink()
114
- logger.info(f"Source file removed: {file_path}")
115
-
116
- if save:
117
- raw_pdf.save()
118
-
119
-
120
- return raw_pdf
121
-
122
- def process_file(self, verbose = False):
123
-
124
- pdf_path = self.file.path
125
- rr_config = self.get_report_reader_config()
126
-
127
- rr = ReportReader(**rr_config) #FIXME In future we need to pass a configuration file
128
- # This configuration file should be associated with pdf type
129
-
130
- text, anonymized_text, report_meta = rr.process_report(pdf_path, verbose=verbose)
131
- if not self.sensitive_meta:
132
- sensitive_meta = SensitiveMeta.create_from_dict(report_meta)
133
- sensitive_meta.save()
134
- self.sensitive_meta = sensitive_meta
135
-
136
- else:
137
- # update existing sensitive meta
138
- sensitive_meta = self.sensitive_meta
139
- sensitive_meta.update_from_dict(report_meta)
140
-
141
- return text, anonymized_text, report_meta
142
-
143
- def update(self, save=True, verbose = True):
144
- try:
145
- self.text, self.anonymized_text, self.raw_meta = self.process_file(verbose = verbose)
146
- self.state_report_processed = True
147
- self.state_report_processing_required = False
148
-
149
- if save:
150
-
151
- self.save()
152
-
153
- return True
154
-
155
- except:
156
- logger.error(f"Error processing file: {self.file.path}")
157
- return False
158
-
159
- def save(self, *args, **kwargs):
160
- if not self.file.name.endswith('.pdf'):
161
- raise ValidationError('Only PDF files are allowed')
162
-
163
- if not self.pdf_hash:
164
- self.pdf_hash = get_pdf_hash(self.file.path)
165
-
166
- super().save(*args, **kwargs)
167
-
168
-
169
- def get_report_reader_config(self):
170
- if self.pdf_type.endoscope_info_line:
171
- endoscope_info_line = self.pdf_type.endoscope_info_line.value
172
- else:
173
- endoscope_info_line = None
174
- settings_dict = {
175
- "locale": "de_DE",
176
- "employee_first_names": [_.name for _ in self.center.first_names.all()],
177
- "employee_last_names": [_.name for _ in self.center.last_names.all()],
178
- "text_date_format":'%d.%m.%Y',
179
- "flags": {
180
- "patient_info_line": self.pdf_type.patient_info_line.value,
181
- "endoscope_info_line": endoscope_info_line,
182
- "examiner_info_line": self.pdf_type.examiner_info_line.value,
183
- "cut_off_below": [_.value for _ in self.pdf_type.cut_off_below_lines.all()],
184
- "cut_off_above": [_.value for _ in self.pdf_type.cut_off_above_lines.all()],
185
- }
186
- }
187
-
188
- return settings_dict
1
+ # models/data_file/import_classes/raw_pdf.py
2
+ # django db model "RawPdf"
3
+ # Class to store raw pdf file using django file field
4
+ # Class contains classmethod to create object from pdf file
5
+ # objects contains methods to extract text, extract metadata from text and anonymize text from pdf file uzing agl_report_reader.ReportReader class
6
+ # ------------------------------------------------------------------------------
7
+
8
+ from django.db import models
9
+ from django.core.files.storage import FileSystemStorage
10
+ from django.core.files import File
11
+ from django.conf import settings
12
+ from django.utils import timezone
13
+ from django.core.exceptions import ValidationError
14
+ from django.core.validators import FileExtensionValidator
15
+ from endoreg_db.utils.file_operations import get_uuid_filename
16
+
17
+ from agl_report_reader.report_reader import ReportReader
18
+
19
+ from endoreg_db.utils.hashs import get_pdf_hash
20
+ from ..metadata import SensitiveMeta
21
+
22
+ # setup logging to pdf_import.log
23
+ import logging
24
+ logger = logging.getLogger('pdf_import')
25
+
26
+ import shutil
27
+
28
+ # get pdf location from settings, default to ~/erc_data/raw_pdf and create if not exists
29
+ PSEUDO_DIR_RAW_PDF = getattr(settings, 'PSEUDO_DIR_RAW_PDF', settings.BASE_DIR / 'erc_data/raw_pdf')
30
+
31
+ class RawPdfFile(models.Model):
32
+ file = models.FileField(
33
+ upload_to='raw_pdf/',
34
+ validators=[FileExtensionValidator(allowed_extensions=['pdf'])],
35
+ storage=FileSystemStorage(location=PSEUDO_DIR_RAW_PDF.resolve().as_posix()),
36
+ )
37
+
38
+ pdf_hash = models.CharField(max_length=255, unique=True)
39
+ pdf_type = models.ForeignKey('PdfType', on_delete=models.CASCADE)
40
+ center = models.ForeignKey('Center', on_delete=models.CASCADE)
41
+
42
+ state_report_processing_required = models.BooleanField(default = True)
43
+ state_report_processed = models.BooleanField(default=False)
44
+
45
+ # report_file = models.OneToOneField("ReportFile", on_delete=models.CASCADE, null=True, blank=True)
46
+ sensitive_meta = models.OneToOneField(
47
+ 'SensitiveMeta',
48
+ on_delete=models.CASCADE,
49
+ related_name='raw_pdf_file',
50
+ null=True,
51
+ blank=True,
52
+ )
53
+
54
+ text = models.TextField(blank=True, null=True)
55
+ anonymized_text = models.TextField(blank=True, null=True)
56
+
57
+ raw_meta = models.JSONField(blank=True, null=True)
58
+
59
+ created_at = models.DateTimeField(auto_now_add=True)
60
+
61
+ def __str__(self):
62
+ str_repr = f"RawPdfFile: {self.file.name}"
63
+ return str_repr
64
+
65
+ @classmethod
66
+ def create_from_file(
67
+ cls,
68
+ file_path,
69
+ center_name,
70
+ pdf_type_name,
71
+ destination_dir,
72
+ save=True,
73
+ ):
74
+ from endoreg_db.models import PdfType, Center
75
+ logger.info(f"Creating RawPdfFile object from file: {file_path}")
76
+ original_file_name = file_path.name
77
+
78
+ new_file_name, uuid = get_uuid_filename(file_path)
79
+
80
+ if not destination_dir.exists():
81
+ destination_dir.mkdir(parents=True)
82
+
83
+ pdf_hash = get_pdf_hash(file_path)
84
+
85
+ # check if pdf file already exists
86
+ if cls.objects.filter(pdf_hash=pdf_hash).exists():
87
+ logger.warning(f"RawPdfFile with hash {pdf_hash} already exists")
88
+ return None
89
+
90
+ assert pdf_type_name is not None, "pdf_type_name is required"
91
+ assert center_name is not None, "center_name is required"
92
+
93
+ pdf_type = PdfType.objects.get(name=pdf_type_name)
94
+ center = Center.objects.get(name=center_name)
95
+
96
+ new_file_path = destination_dir / new_file_name
97
+
98
+ logger.info(f"Copying file to {new_file_path}")
99
+ success = shutil.copy(file_path, new_file_path)
100
+
101
+ # validate copy operation by comparing hashs
102
+ assert get_pdf_hash(new_file_path) == pdf_hash, "Copy operation failed"
103
+
104
+ raw_pdf = cls(
105
+ file=new_file_path.resolve().as_posix(),
106
+ pdf_hash=pdf_hash,
107
+ pdf_type=pdf_type,
108
+ center=center,
109
+ )
110
+ logger.info(f"RawPdfFile object created: {raw_pdf}")
111
+
112
+ # remove source file
113
+ file_path.unlink()
114
+ logger.info(f"Source file removed: {file_path}")
115
+
116
+ if save:
117
+ raw_pdf.save()
118
+
119
+
120
+ return raw_pdf
121
+
122
+ def process_file(self, verbose = False):
123
+
124
+ pdf_path = self.file.path
125
+ rr_config = self.get_report_reader_config()
126
+
127
+ rr = ReportReader(**rr_config) #FIXME In future we need to pass a configuration file
128
+ # This configuration file should be associated with pdf type
129
+
130
+ text, anonymized_text, report_meta = rr.process_report(pdf_path, verbose=verbose)
131
+ if not self.sensitive_meta:
132
+ sensitive_meta = SensitiveMeta.create_from_dict(report_meta)
133
+ sensitive_meta.save()
134
+ self.sensitive_meta = sensitive_meta
135
+
136
+ else:
137
+ # update existing sensitive meta
138
+ sensitive_meta = self.sensitive_meta
139
+ sensitive_meta.update_from_dict(report_meta)
140
+
141
+ return text, anonymized_text, report_meta
142
+
143
+ def update(self, save=True, verbose = True):
144
+ try:
145
+ self.text, self.anonymized_text, self.raw_meta = self.process_file(verbose = verbose)
146
+ self.state_report_processed = True
147
+ self.state_report_processing_required = False
148
+
149
+ if save:
150
+
151
+ self.save()
152
+
153
+ return True
154
+
155
+ except:
156
+ logger.error(f"Error processing file: {self.file.path}")
157
+ return False
158
+
159
+ def save(self, *args, **kwargs):
160
+ if not self.file.name.endswith('.pdf'):
161
+ raise ValidationError('Only PDF files are allowed')
162
+
163
+ if not self.pdf_hash:
164
+ self.pdf_hash = get_pdf_hash(self.file.path)
165
+
166
+ super().save(*args, **kwargs)
167
+
168
+
169
+ def get_report_reader_config(self):
170
+ if self.pdf_type.endoscope_info_line:
171
+ endoscope_info_line = self.pdf_type.endoscope_info_line.value
172
+ else:
173
+ endoscope_info_line = None
174
+ settings_dict = {
175
+ "locale": "de_DE",
176
+ "employee_first_names": [_.name for _ in self.center.first_names.all()],
177
+ "employee_last_names": [_.name for _ in self.center.last_names.all()],
178
+ "text_date_format":'%d.%m.%Y',
179
+ "flags": {
180
+ "patient_info_line": self.pdf_type.patient_info_line.value,
181
+ "endoscope_info_line": endoscope_info_line,
182
+ "examiner_info_line": self.pdf_type.examiner_info_line.value,
183
+ "cut_off_below": [_.value for _ in self.pdf_type.cut_off_below_lines.all()],
184
+ "cut_off_above": [_.value for _ in self.pdf_type.cut_off_above_lines.all()],
185
+ }
186
+ }
187
+
188
+ return settings_dict