endoreg-db 0.3.5__py3-none-any.whl → 0.3.6__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 (341) hide show
  1. endoreg_db/admin.py +3 -3
  2. endoreg_db/apps.py +6 -6
  3. endoreg_db/data/__init__.py +64 -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/patient_lab_sample_type/generic.yaml +5 -5
  70. endoreg_db/data/pdf_type/data.yaml +28 -28
  71. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -66
  72. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -33
  73. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -308
  74. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -88
  75. endoreg_db/data/profession/data.yaml +70 -70
  76. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -55
  77. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +26 -26
  78. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -19
  79. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -15
  80. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -12
  81. endoreg_db/data/unit/concentration.yaml +92 -92
  82. endoreg_db/data/unit/data.yaml +17 -17
  83. endoreg_db/data/unit/length.yaml +30 -30
  84. endoreg_db/data/unit/misc.yaml +19 -19
  85. endoreg_db/data/unit/rate.yaml +5 -5
  86. endoreg_db/data/unit/time.yaml +12 -12
  87. endoreg_db/data/unit/volume.yaml +35 -35
  88. endoreg_db/data/unit/weight.yaml +37 -37
  89. endoreg_db/data/waste/data.yaml +11 -11
  90. endoreg_db/forms/__init__.py +2 -2
  91. endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -23
  92. endoreg_db/forms/settings/__init__.py +8 -8
  93. endoreg_db/forms/unit.py +5 -5
  94. endoreg_db/management/commands/_load_model_template.py +40 -40
  95. endoreg_db/management/commands/delete_all.py +18 -18
  96. endoreg_db/management/commands/delete_legacy_images.py +19 -19
  97. endoreg_db/management/commands/delete_legacy_videos.py +16 -16
  98. endoreg_db/management/commands/extract_legacy_video_frames.py +18 -18
  99. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -32
  100. endoreg_db/management/commands/fix_auth_permission.py +20 -20
  101. endoreg_db/management/commands/import_legacy_images.py +94 -94
  102. endoreg_db/management/commands/import_legacy_videos.py +76 -76
  103. endoreg_db/management/commands/load_active_model_data.py +44 -44
  104. endoreg_db/management/commands/load_ai_model_data.py +44 -44
  105. endoreg_db/management/commands/load_base_db_data.py +128 -128
  106. endoreg_db/management/commands/load_center_data.py +42 -42
  107. endoreg_db/management/commands/load_disease_classification_choices_data.py +40 -40
  108. endoreg_db/management/commands/load_disease_classification_data.py +40 -40
  109. endoreg_db/management/commands/load_disease_data.py +39 -39
  110. endoreg_db/management/commands/load_distribution_data.py +65 -65
  111. endoreg_db/management/commands/load_endoscope_type_data.py +44 -44
  112. endoreg_db/management/commands/load_endoscopy_processor_data.py +44 -44
  113. endoreg_db/management/commands/load_event_data.py +40 -40
  114. endoreg_db/management/commands/load_examination_data.py +74 -74
  115. endoreg_db/management/commands/load_g_play_data.py +112 -112
  116. endoreg_db/management/commands/load_gender_data.py +43 -43
  117. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +132 -132
  118. endoreg_db/management/commands/load_information_source.py +44 -44
  119. endoreg_db/management/commands/load_lab_value_data.py +49 -49
  120. endoreg_db/management/commands/load_label_data.py +66 -66
  121. endoreg_db/management/commands/load_medication_data.py +40 -40
  122. endoreg_db/management/commands/load_medication_indication_data.py +62 -62
  123. endoreg_db/management/commands/load_medication_indication_type_data.py +40 -40
  124. endoreg_db/management/commands/load_medication_intake_time_data.py +40 -40
  125. endoreg_db/management/commands/load_medication_schedule_data.py +54 -54
  126. endoreg_db/management/commands/load_pdf_type_data.py +60 -60
  127. endoreg_db/management/commands/load_profession_data.py +43 -43
  128. endoreg_db/management/commands/load_report_reader_flag.py +45 -45
  129. endoreg_db/management/commands/load_unit_data.py +45 -45
  130. endoreg_db/management/commands/load_user_groups.py +28 -28
  131. endoreg_db/management/commands/register_ai_model.py +65 -65
  132. endoreg_db/management/commands/reset_celery_schedule.py +9 -9
  133. endoreg_db/migrations/0001_initial.py +582 -582
  134. endoreg_db/migrations/0002_rawvideofile.py +26 -26
  135. endoreg_db/migrations/0003_rawvideofile_frames_required.py +18 -18
  136. endoreg_db/migrations/0004_rename_hash_rawvideofile_video_hash.py +18 -18
  137. endoreg_db/migrations/0005_ffmpegmeta_remove_videoimportmeta_center_and_more.py +56 -56
  138. endoreg_db/migrations/0006_rawvideofile_center_alter_videometa_processor.py +25 -25
  139. endoreg_db/migrations/0007_rawvideofile_processor.py +19 -19
  140. endoreg_db/migrations/0008_rename_frames_required_rawvideofile_state_frames_required.py +18 -18
  141. endoreg_db/migrations/0009_sensitivemeta_rawvideofile_sensitive_meta.py +31 -31
  142. endoreg_db/migrations/0010_rename_endoscope_serial_number_sensitivemeta_endoscope_sn.py +18 -18
  143. endoreg_db/migrations/0011_rawvideofile_state_sensitive_data_retrieved.py +18 -18
  144. endoreg_db/migrations/0012_rawvideofile_prediction_dir_and_more.py +109 -109
  145. endoreg_db/migrations/0013_rawpdffile.py +31 -31
  146. endoreg_db/migrations/0014_pdftype_alter_rawpdffile_file_pdfmeta.py +38 -38
  147. endoreg_db/migrations/0015_rename_report_processed_rawpdffile_state_report_processed_and_more.py +31 -31
  148. endoreg_db/migrations/0016_rawpdffile_state_report_processing_required.py +18 -18
  149. endoreg_db/migrations/0017_firstname_lastname_center_first_names_and_more.py +37 -37
  150. endoreg_db/migrations/0018_reportreaderflag_reportreaderconfig.py +37 -37
  151. endoreg_db/migrations/0019_pdftype_cut_off_above_lines_and_more.py +42 -42
  152. endoreg_db/migrations/0020_rename_endoscopy_info_line_pdftype_endoscope_info_line.py +18 -18
  153. endoreg_db/migrations/0021_alter_pdftype_endoscope_info_line.py +19 -19
  154. endoreg_db/migrations/0022_alter_pdftype_endoscope_info_line.py +19 -19
  155. endoreg_db/migrations/0023_ttoquestionnaire_alter_pdftype_endoscope_info_line.py +59 -59
  156. endoreg_db/migrations/0024_remove_ttoquestionnaire_infections_and_more.py +27 -27
  157. endoreg_db/migrations/0025_event_alter_rawpdffile_file_patientevent.py +42 -42
  158. endoreg_db/migrations/0026_disease_diseaseclassification_and_more.py +166 -166
  159. endoreg_db/migrations/0027_labvalue_abbreviation_labvalue_default_normal_range_and_more.py +38 -38
  160. endoreg_db/migrations/0028_alter_unit_abbreviation.py +18 -18
  161. endoreg_db/migrations/0029_medicationintaketime_and_more.py +75 -75
  162. endoreg_db/migrations/0030_medicationindicationtype_and_more.py +101 -101
  163. endoreg_db/migrations/0031_rename_adapt_to_liver_function_medication_adapt_to_age_and_more.py +38 -38
  164. endoreg_db/migrations/0032_alter_medicationschedule_therapy_duration_d.py +18 -18
  165. endoreg_db/migrations/0033_medicationindication_sources.py +18 -18
  166. endoreg_db/migrations/0034_alter_rawpdffile_file.py +20 -20
  167. endoreg_db/migrations/0035_alter_medicationindication_sources.py +18 -18
  168. endoreg_db/migrations/0036_alter_rawpdffile_file.py +20 -20
  169. endoreg_db/migrations/0037_alter_medicationindication_sources.py +18 -18
  170. endoreg_db/migrations/0038_emissionfactor_material_product_productgroup_and_more.py +164 -164
  171. endoreg_db/migrations/0039_referenceproduct_name.py +19 -19
  172. endoreg_db/migrations/0040_quizanswertype_quizquestiontype_quizquestion_and_more.py +50 -50
  173. endoreg_db/migrations/0041_gender_patientmedication_medication_indication_and_more.py +40 -40
  174. endoreg_db/migrations/0042_casetemplateruletype_casetemplaterulevalue_and_more.py +74 -74
  175. endoreg_db/migrations/0043_casetemplatetype_name_de_casetemplatetype_name_en.py +23 -23
  176. endoreg_db/migrations/0044_casetemplateruletype_name_de_and_more.py +23 -23
  177. endoreg_db/migrations/0045_casetemplaterulevalue_value_type.py +19 -19
  178. endoreg_db/migrations/0046_casetemplaterulevalue_target_field.py +18 -18
  179. endoreg_db/migrations/0047_casetemplaterule_target_model.py +18 -18
  180. endoreg_db/migrations/0048_remove_casetemplaterule_chained_rules_and_more.py +22 -22
  181. endoreg_db/migrations/0049_remove_casetemplaterule_rule_values.py +17 -17
  182. endoreg_db/migrations/0050_casetemplaterule_rule_values.py +18 -18
  183. endoreg_db/migrations/0051_remove_casetemplaterule_calling_rules_and_more.py +27 -27
  184. endoreg_db/migrations/0052_rename_case_template_type_casetemplate_template_type.py +18 -18
  185. endoreg_db/migrations/0053_patientlabsampletype_patientlabsample_and_more.py +38 -38
  186. endoreg_db/migrations/0054_multiplecategoricalvaluedistribution_and_more.py +69 -69
  187. endoreg_db/migrations/0055_remove_casetemplaterule_rule_values_and_more.py +59 -59
  188. endoreg_db/migrations/0056_datevaluedistribution_and_more.py +32 -32
  189. endoreg_db/migrations/0057_remove_datevaluedistribution_max_date_and_more.py +72 -72
  190. endoreg_db/migrations/0058_datevaluedistribution_description_and_more.py +28 -28
  191. endoreg_db/migrations/0059_casetemplaterule_rule_values.py +18 -18
  192. endoreg_db/migrations/0060_labvalue__default_date_value_distribution_and_more.py +44 -44
  193. endoreg_db/migrations/0061_remove_patientlabvalue_date_patientlabvalue_datetime.py +24 -24
  194. endoreg_db/migrations/0062_labvalue_numeric_precision.py +18 -18
  195. endoreg_db/migrations/0063_alter_labvalue_numeric_precision.py +18 -18
  196. endoreg_db/migrations/0064_casetemplaterule_extra_parameters_and_more.py +23 -23
  197. endoreg_db/migrations/0065_rename__date_value_distribution_casetemplaterule_date_value_distribution_and_more.py +58 -58
  198. endoreg_db/migrations/0066_alter_patientlabvalue_patient_and_more.py +29 -29
  199. endoreg_db/migrations/0067_alter_medicationindication_indication_type.py +19 -19
  200. endoreg_db/models/__init__.py +74 -74
  201. endoreg_db/models/ai_model/__init__.py +3 -3
  202. endoreg_db/models/ai_model/active_model.py +9 -9
  203. endoreg_db/models/ai_model/model_meta.py +24 -24
  204. endoreg_db/models/ai_model/model_type.py +25 -25
  205. endoreg_db/models/ai_model/utils.py +8 -8
  206. endoreg_db/models/annotation/__init__.py +1 -1
  207. endoreg_db/models/annotation/binary_classification_annotation_task.py +80 -80
  208. endoreg_db/models/annotation/image_classification.py +26 -26
  209. endoreg_db/models/case_template/__init__.py +5 -5
  210. endoreg_db/models/case_template/case_template.py +81 -81
  211. endoreg_db/models/case_template/case_template_rule.py +276 -276
  212. endoreg_db/models/case_template/case_template_rule_value.py +73 -73
  213. endoreg_db/models/case_template/case_template_type.py +27 -27
  214. endoreg_db/models/center/__init__.py +4 -4
  215. endoreg_db/models/center/center.py +24 -24
  216. endoreg_db/models/center/center_product.py +33 -33
  217. endoreg_db/models/center/center_resource.py +18 -18
  218. endoreg_db/models/center/center_waste.py +10 -10
  219. endoreg_db/models/data_file/__init__.py +5 -5
  220. endoreg_db/models/data_file/base_classes/__init__.py +2 -2
  221. endoreg_db/models/data_file/base_classes/abstract_frame.py +50 -50
  222. endoreg_db/models/data_file/base_classes/abstract_video.py +200 -200
  223. endoreg_db/models/data_file/frame.py +45 -45
  224. endoreg_db/models/data_file/import_classes/__init__.py +31 -31
  225. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +34 -34
  226. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -28
  227. endoreg_db/models/data_file/import_classes/processing_functions/video.py +260 -260
  228. endoreg_db/models/data_file/import_classes/raw_pdf.py +188 -188
  229. endoreg_db/models/data_file/import_classes/raw_video.py +343 -343
  230. endoreg_db/models/data_file/metadata/__init__.py +3 -3
  231. endoreg_db/models/data_file/metadata/pdf_meta.py +70 -70
  232. endoreg_db/models/data_file/metadata/sensitive_meta.py +31 -31
  233. endoreg_db/models/data_file/metadata/video_meta.py +132 -132
  234. endoreg_db/models/data_file/report_file.py +89 -89
  235. endoreg_db/models/data_file/video/__init__.py +6 -6
  236. endoreg_db/models/data_file/video/import_meta.py +25 -25
  237. endoreg_db/models/data_file/video/video.py +25 -25
  238. endoreg_db/models/data_file/video_segment.py +107 -107
  239. endoreg_db/models/disease.py +55 -55
  240. endoreg_db/models/emission/emission_factor.py +19 -19
  241. endoreg_db/models/event.py +21 -21
  242. endoreg_db/models/examination/__init__.py +3 -3
  243. endoreg_db/models/examination/examination.py +26 -26
  244. endoreg_db/models/examination/examination_time.py +27 -27
  245. endoreg_db/models/examination/examination_time_type.py +24 -24
  246. endoreg_db/models/examination/examination_type.py +18 -18
  247. endoreg_db/models/hardware/__init__.py +1 -1
  248. endoreg_db/models/hardware/endoscope.py +44 -44
  249. endoreg_db/models/hardware/endoscopy_processor.py +143 -143
  250. endoreg_db/models/information_source.py +29 -29
  251. endoreg_db/models/label/label.py +84 -84
  252. endoreg_db/models/laboratory/lab_value.py +102 -102
  253. endoreg_db/models/legacy_data/__init__.py +3 -3
  254. endoreg_db/models/legacy_data/image.py +34 -34
  255. endoreg_db/models/medication/medication.py +148 -148
  256. endoreg_db/models/other/__init__.py +4 -4
  257. endoreg_db/models/other/distribution.py +215 -215
  258. endoreg_db/models/other/material.py +16 -16
  259. endoreg_db/models/other/resource.py +17 -17
  260. endoreg_db/models/other/transport_route.py +20 -20
  261. endoreg_db/models/other/waste.py +20 -20
  262. endoreg_db/models/patient_examination/__init__.py +35 -35
  263. endoreg_db/models/permissions/__init__.py +44 -44
  264. endoreg_db/models/persons/__init__.py +6 -6
  265. endoreg_db/models/persons/examiner/__init__.py +1 -1
  266. endoreg_db/models/persons/examiner/examiner.py +15 -15
  267. endoreg_db/models/persons/examiner/examiner_type.py +1 -1
  268. endoreg_db/models/persons/first_name.py +17 -17
  269. endoreg_db/models/persons/gender.py +22 -22
  270. endoreg_db/models/persons/last_name.py +19 -19
  271. endoreg_db/models/persons/patient/__init__.py +7 -7
  272. endoreg_db/models/persons/patient/case/case.py +30 -30
  273. endoreg_db/models/persons/patient/patient.py +216 -216
  274. endoreg_db/models/persons/patient/patient_disease.py +16 -16
  275. endoreg_db/models/persons/patient/patient_event.py +22 -22
  276. endoreg_db/models/persons/patient/patient_lab_sample.py +106 -106
  277. endoreg_db/models/persons/patient/patient_lab_value.py +176 -176
  278. endoreg_db/models/persons/patient/patient_medication.py +43 -43
  279. endoreg_db/models/persons/patient/patient_medication_schedule.py +27 -27
  280. endoreg_db/models/persons/person.py +31 -31
  281. endoreg_db/models/persons/portal_user_information.py +27 -27
  282. endoreg_db/models/prediction/__init__.py +1 -1
  283. endoreg_db/models/prediction/image_classification.py +37 -37
  284. endoreg_db/models/prediction/video_prediction_meta.py +244 -244
  285. endoreg_db/models/product/__init__.py +4 -4
  286. endoreg_db/models/product/product.py +97 -97
  287. endoreg_db/models/product/product_group.py +19 -19
  288. endoreg_db/models/product/product_material.py +24 -24
  289. endoreg_db/models/product/product_weight.py +26 -26
  290. endoreg_db/models/product/reference_product.py +99 -99
  291. endoreg_db/models/questionnaires/__init__.py +114 -114
  292. endoreg_db/models/quiz/__init__.py +1 -1
  293. endoreg_db/models/quiz/quiz_answer.py +41 -41
  294. endoreg_db/models/quiz/quiz_question.py +54 -54
  295. endoreg_db/models/report_reader/__init__.py +1 -1
  296. endoreg_db/models/report_reader/report_reader_config.py +53 -53
  297. endoreg_db/models/report_reader/report_reader_flag.py +19 -19
  298. endoreg_db/models/rules/__init__.py +4 -4
  299. endoreg_db/models/rules/rule.py +23 -23
  300. endoreg_db/models/rules/rule_applicator.py +224 -224
  301. endoreg_db/models/rules/rule_attribute_dtype.py +18 -18
  302. endoreg_db/models/rules/rule_type.py +21 -21
  303. endoreg_db/models/rules/ruleset.py +19 -19
  304. endoreg_db/models/unit.py +21 -21
  305. endoreg_db/queries/__init__.py +4 -4
  306. endoreg_db/queries/annotations/__init__.py +2 -2
  307. endoreg_db/queries/annotations/legacy.py +159 -159
  308. endoreg_db/queries/get/__init__.py +5 -5
  309. endoreg_db/queries/get/center.py +42 -42
  310. endoreg_db/queries/get/model.py +13 -13
  311. endoreg_db/queries/get/patient.py +14 -14
  312. endoreg_db/queries/get/patient_examination.py +20 -20
  313. endoreg_db/queries/get/report_file.py +33 -33
  314. endoreg_db/queries/get/video.py +31 -31
  315. endoreg_db/serializers/__init__.py +9 -9
  316. endoreg_db/serializers/ai_model.py +18 -18
  317. endoreg_db/serializers/annotation.py +17 -17
  318. endoreg_db/serializers/center.py +11 -11
  319. endoreg_db/serializers/examination.py +32 -32
  320. endoreg_db/serializers/frame.py +13 -13
  321. endoreg_db/serializers/hardware.py +20 -20
  322. endoreg_db/serializers/label.py +22 -22
  323. endoreg_db/serializers/patient.py +10 -10
  324. endoreg_db/serializers/prediction.py +15 -15
  325. endoreg_db/serializers/report_file.py +7 -7
  326. endoreg_db/serializers/video.py +27 -27
  327. endoreg_db/tests.py +3 -3
  328. endoreg_db/utils/cropping.py +28 -28
  329. endoreg_db/utils/dataloader.py +92 -92
  330. endoreg_db/utils/file_operations.py +30 -30
  331. endoreg_db/utils/hashs.py +33 -33
  332. endoreg_db/utils/legacy_ocr.py +201 -201
  333. endoreg_db/utils/ocr.py +197 -197
  334. endoreg_db/utils/uuid.py +4 -4
  335. endoreg_db/utils/video_metadata.py +87 -87
  336. endoreg_db/views.py +3 -3
  337. {endoreg_db-0.3.5.dist-info → endoreg_db-0.3.6.dist-info}/LICENSE +674 -674
  338. {endoreg_db-0.3.5.dist-info → endoreg_db-0.3.6.dist-info}/METADATA +2 -2
  339. endoreg_db-0.3.6.dist-info/RECORD +357 -0
  340. {endoreg_db-0.3.5.dist-info → endoreg_db-0.3.6.dist-info}/WHEEL +1 -1
  341. endoreg_db-0.3.5.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