endoreg-db 0.3.4__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 (350) hide show
  1. endoreg_db/admin.py +3 -3
  2. endoreg_db/apps.py +6 -6
  3. endoreg_db/data/__init__.py +65 -16
  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 -0
  6. endoreg_db/data/case_template/rule/01_patient-set-age.yaml +8 -0
  7. endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +9 -0
  8. endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +23 -0
  9. endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +19 -0
  10. endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +19 -0
  11. endoreg_db/data/case_template/rule/19_create_patient.yaml +17 -0
  12. endoreg_db/data/case_template/rule_type/base_types.yaml +35 -0
  13. endoreg_db/data/case_template/rule_value_type/base_types.yaml +59 -0
  14. endoreg_db/data/case_template/template/base.yaml +8 -0
  15. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +3 -0
  16. endoreg_db/data/case_template/tmp/_rule_value +13 -0
  17. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -0
  18. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +10 -0
  19. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +7 -0
  20. endoreg_db/data/center/data.yaml +60 -52
  21. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -0
  22. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -0
  23. endoreg_db/data/disease/cardiovascular.yaml +37 -0
  24. endoreg_db/data/disease/hepatology.yaml +5 -0
  25. endoreg_db/data/disease/misc.yaml +6 -0
  26. endoreg_db/data/disease/renal.yaml +5 -0
  27. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +6 -0
  28. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +6 -0
  29. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +41 -0
  30. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +20 -0
  31. endoreg_db/data/distribution/date/patient.yaml +7 -0
  32. endoreg_db/data/distribution/single_categorical/patient.yaml +7 -0
  33. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -0
  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 +28 -0
  37. endoreg_db/data/event/neurology.yaml +14 -0
  38. endoreg_db/data/event/surgery.yaml +13 -0
  39. endoreg_db/data/event/thrombembolism.yaml +20 -0
  40. endoreg_db/data/examination/examinations/data.yaml +65 -16
  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 -0
  45. endoreg_db/data/information_source/data.yaml +30 -30
  46. endoreg_db/data/information_source/medication.yaml +6 -0
  47. endoreg_db/data/lab_value/cardiac_enzymes.yaml +31 -0
  48. endoreg_db/data/lab_value/coagulation.yaml +49 -0
  49. endoreg_db/data/lab_value/electrolytes.yaml +190 -0
  50. endoreg_db/data/lab_value/gastrointestinal_function.yaml +121 -0
  51. endoreg_db/data/lab_value/hematology.yaml +169 -0
  52. endoreg_db/data/lab_value/hormones.yaml +53 -0
  53. endoreg_db/data/lab_value/lipids.yaml +44 -0
  54. endoreg_db/data/lab_value/misc.yaml +30 -0
  55. endoreg_db/data/lab_value/renal_function.yaml +11 -0
  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/material/material.yaml +91 -0
  60. endoreg_db/data/medication/anticoagulation.yaml +65 -0
  61. endoreg_db/data/medication/tah.yaml +70 -0
  62. endoreg_db/data/medication_indication/anticoagulation.yaml +120 -0
  63. endoreg_db/data/medication_indication_type/data.yaml +11 -0
  64. endoreg_db/data/medication_indication_type/thrombembolism.yaml +41 -0
  65. endoreg_db/data/medication_intake_time/base.yaml +31 -0
  66. endoreg_db/data/medication_schedule/apixaban.yaml +95 -0
  67. endoreg_db/data/medication_schedule/ass.yaml +12 -0
  68. endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -0
  69. endoreg_db/data/model_type/data.yaml +6 -6
  70. endoreg_db/data/patient_lab_sample_type/generic.yaml +6 -0
  71. endoreg_db/data/pdf_type/data.yaml +28 -28
  72. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -0
  73. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -0
  74. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -0
  75. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -0
  76. endoreg_db/data/profession/data.yaml +70 -70
  77. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -0
  78. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +26 -26
  79. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -19
  80. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -0
  81. endoreg_db/data/tmp/chronic_kidney_disease.yaml +0 -0
  82. endoreg_db/data/tmp/congestive_heart_failure.yaml +0 -0
  83. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -0
  84. endoreg_db/data/unit/concentration.yaml +92 -0
  85. endoreg_db/data/unit/data.yaml +17 -17
  86. endoreg_db/data/unit/length.yaml +30 -30
  87. endoreg_db/data/unit/misc.yaml +20 -0
  88. endoreg_db/data/unit/rate.yaml +6 -0
  89. endoreg_db/data/unit/time.yaml +13 -0
  90. endoreg_db/data/unit/volume.yaml +35 -26
  91. endoreg_db/data/unit/weight.yaml +37 -30
  92. endoreg_db/data/waste/data.yaml +12 -0
  93. endoreg_db/forms/__init__.py +2 -2
  94. endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -23
  95. endoreg_db/forms/settings/__init__.py +8 -8
  96. endoreg_db/forms/unit.py +5 -5
  97. endoreg_db/management/commands/_load_model_template.py +40 -40
  98. endoreg_db/management/commands/delete_all.py +18 -18
  99. endoreg_db/management/commands/delete_legacy_images.py +19 -19
  100. endoreg_db/management/commands/delete_legacy_videos.py +16 -16
  101. endoreg_db/management/commands/extract_legacy_video_frames.py +18 -18
  102. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -32
  103. endoreg_db/management/commands/fix_auth_permission.py +20 -20
  104. endoreg_db/management/commands/import_legacy_images.py +94 -94
  105. endoreg_db/management/commands/import_legacy_videos.py +76 -76
  106. endoreg_db/management/commands/load_active_model_data.py +44 -44
  107. endoreg_db/management/commands/load_ai_model_data.py +44 -44
  108. endoreg_db/management/commands/load_base_db_data.py +128 -71
  109. endoreg_db/management/commands/load_center_data.py +42 -42
  110. endoreg_db/management/commands/load_disease_classification_choices_data.py +41 -0
  111. endoreg_db/management/commands/load_disease_classification_data.py +41 -0
  112. endoreg_db/management/commands/load_disease_data.py +40 -0
  113. endoreg_db/management/commands/load_distribution_data.py +66 -0
  114. endoreg_db/management/commands/load_endoscope_type_data.py +44 -44
  115. endoreg_db/management/commands/load_endoscopy_processor_data.py +44 -44
  116. endoreg_db/management/commands/load_event_data.py +41 -0
  117. endoreg_db/management/commands/load_examination_data.py +74 -74
  118. endoreg_db/management/commands/load_g_play_data.py +113 -0
  119. endoreg_db/management/commands/load_gender_data.py +44 -0
  120. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +133 -0
  121. endoreg_db/management/commands/load_information_source.py +44 -44
  122. endoreg_db/management/commands/load_lab_value_data.py +50 -0
  123. endoreg_db/management/commands/load_label_data.py +66 -66
  124. endoreg_db/management/commands/load_medication_data.py +41 -0
  125. endoreg_db/management/commands/load_medication_indication_data.py +63 -0
  126. endoreg_db/management/commands/load_medication_indication_type_data.py +41 -0
  127. endoreg_db/management/commands/load_medication_intake_time_data.py +41 -0
  128. endoreg_db/management/commands/load_medication_schedule_data.py +55 -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 -0
  161. endoreg_db/migrations/0026_disease_diseaseclassification_and_more.py +166 -0
  162. endoreg_db/migrations/0027_labvalue_abbreviation_labvalue_default_normal_range_and_more.py +38 -0
  163. endoreg_db/migrations/0028_alter_unit_abbreviation.py +18 -0
  164. endoreg_db/migrations/0029_medicationintaketime_and_more.py +75 -0
  165. endoreg_db/migrations/0030_medicationindicationtype_and_more.py +101 -0
  166. endoreg_db/migrations/0031_rename_adapt_to_liver_function_medication_adapt_to_age_and_more.py +38 -0
  167. endoreg_db/migrations/0032_alter_medicationschedule_therapy_duration_d.py +18 -0
  168. endoreg_db/migrations/0033_medicationindication_sources.py +18 -0
  169. endoreg_db/migrations/0034_alter_rawpdffile_file.py +20 -0
  170. endoreg_db/migrations/0035_alter_medicationindication_sources.py +18 -0
  171. endoreg_db/migrations/0036_alter_rawpdffile_file.py +20 -0
  172. endoreg_db/migrations/0037_alter_medicationindication_sources.py +18 -0
  173. endoreg_db/migrations/0038_emissionfactor_material_product_productgroup_and_more.py +164 -0
  174. endoreg_db/migrations/0039_referenceproduct_name.py +19 -0
  175. endoreg_db/migrations/0040_quizanswertype_quizquestiontype_quizquestion_and_more.py +50 -0
  176. endoreg_db/migrations/0041_gender_patientmedication_medication_indication_and_more.py +40 -0
  177. endoreg_db/migrations/0042_casetemplateruletype_casetemplaterulevalue_and_more.py +74 -0
  178. endoreg_db/migrations/0043_casetemplatetype_name_de_casetemplatetype_name_en.py +23 -0
  179. endoreg_db/migrations/0044_casetemplateruletype_name_de_and_more.py +23 -0
  180. endoreg_db/migrations/0045_casetemplaterulevalue_value_type.py +19 -0
  181. endoreg_db/migrations/0046_casetemplaterulevalue_target_field.py +18 -0
  182. endoreg_db/migrations/0047_casetemplaterule_target_model.py +18 -0
  183. endoreg_db/migrations/0048_remove_casetemplaterule_chained_rules_and_more.py +22 -0
  184. endoreg_db/migrations/0049_remove_casetemplaterule_rule_values.py +17 -0
  185. endoreg_db/migrations/0050_casetemplaterule_rule_values.py +18 -0
  186. endoreg_db/migrations/0051_remove_casetemplaterule_calling_rules_and_more.py +27 -0
  187. endoreg_db/migrations/0052_rename_case_template_type_casetemplate_template_type.py +18 -0
  188. endoreg_db/migrations/0053_patientlabsampletype_patientlabsample_and_more.py +38 -0
  189. endoreg_db/migrations/0054_multiplecategoricalvaluedistribution_and_more.py +69 -0
  190. endoreg_db/migrations/0055_remove_casetemplaterule_rule_values_and_more.py +59 -0
  191. endoreg_db/migrations/0056_datevaluedistribution_and_more.py +32 -0
  192. endoreg_db/migrations/0057_remove_datevaluedistribution_max_date_and_more.py +72 -0
  193. endoreg_db/migrations/0058_datevaluedistribution_description_and_more.py +28 -0
  194. endoreg_db/migrations/0059_casetemplaterule_rule_values.py +18 -0
  195. endoreg_db/migrations/0060_labvalue__default_date_value_distribution_and_more.py +44 -0
  196. endoreg_db/migrations/0061_remove_patientlabvalue_date_patientlabvalue_datetime.py +24 -0
  197. endoreg_db/migrations/0062_labvalue_numeric_precision.py +18 -0
  198. endoreg_db/migrations/0063_alter_labvalue_numeric_precision.py +18 -0
  199. endoreg_db/migrations/0064_casetemplaterule_extra_parameters_and_more.py +23 -0
  200. endoreg_db/migrations/0065_rename__date_value_distribution_casetemplaterule_date_value_distribution_and_more.py +58 -0
  201. endoreg_db/migrations/0066_alter_patientlabvalue_patient_and_more.py +29 -0
  202. endoreg_db/migrations/0067_alter_medicationindication_indication_type.py +19 -0
  203. endoreg_db/models/__init__.py +74 -57
  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 +6 -0
  213. endoreg_db/models/case_template/case_template.py +81 -0
  214. endoreg_db/models/case_template/case_template_rule.py +276 -0
  215. endoreg_db/models/case_template/case_template_rule_value.py +73 -0
  216. endoreg_db/models/case_template/case_template_type.py +28 -0
  217. endoreg_db/models/center/__init__.py +4 -0
  218. endoreg_db/models/{center.py → center/center.py} +24 -24
  219. endoreg_db/models/center/center_product.py +34 -0
  220. endoreg_db/models/center/center_resource.py +19 -0
  221. endoreg_db/models/center/center_waste.py +11 -0
  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 -185
  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 -131
  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 +56 -0
  243. endoreg_db/models/emission/__init__.py +1 -0
  244. endoreg_db/models/emission/emission_factor.py +20 -0
  245. endoreg_db/models/event.py +22 -0
  246. endoreg_db/models/examination/__init__.py +3 -3
  247. endoreg_db/models/examination/examination.py +26 -26
  248. endoreg_db/models/examination/examination_time.py +27 -27
  249. endoreg_db/models/examination/examination_time_type.py +24 -24
  250. endoreg_db/models/examination/examination_type.py +18 -18
  251. endoreg_db/models/hardware/__init__.py +1 -1
  252. endoreg_db/models/hardware/endoscope.py +44 -44
  253. endoreg_db/models/hardware/endoscopy_processor.py +143 -143
  254. endoreg_db/models/information_source.py +29 -22
  255. endoreg_db/models/label/label.py +84 -84
  256. endoreg_db/models/laboratory/__init__.py +1 -0
  257. endoreg_db/models/laboratory/lab_value.py +102 -0
  258. endoreg_db/models/legacy_data/__init__.py +3 -3
  259. endoreg_db/models/legacy_data/image.py +34 -34
  260. endoreg_db/models/medication/__init__.py +1 -0
  261. endoreg_db/models/medication/medication.py +148 -0
  262. endoreg_db/models/other/__init__.py +5 -0
  263. endoreg_db/models/other/distribution.py +215 -0
  264. endoreg_db/models/other/material.py +16 -0
  265. endoreg_db/models/other/resource.py +18 -0
  266. endoreg_db/models/other/transport_route.py +21 -0
  267. endoreg_db/models/other/waste.py +20 -0
  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 +7 -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 -0
  276. endoreg_db/models/persons/last_name.py +19 -19
  277. endoreg_db/models/persons/patient/__init__.py +8 -0
  278. endoreg_db/models/persons/patient/case/__init__.py +0 -0
  279. endoreg_db/models/persons/patient/case/case.py +30 -0
  280. endoreg_db/models/persons/patient/patient.py +216 -0
  281. endoreg_db/models/persons/patient/patient_disease.py +16 -0
  282. endoreg_db/models/persons/patient/patient_event.py +22 -0
  283. endoreg_db/models/persons/patient/patient_lab_sample.py +106 -0
  284. endoreg_db/models/persons/patient/patient_lab_value.py +176 -0
  285. endoreg_db/models/persons/patient/patient_medication.py +44 -0
  286. endoreg_db/models/persons/patient/patient_medication_schedule.py +28 -0
  287. endoreg_db/models/persons/person.py +31 -34
  288. endoreg_db/models/persons/portal_user_information.py +27 -29
  289. endoreg_db/models/prediction/__init__.py +1 -1
  290. endoreg_db/models/prediction/image_classification.py +37 -37
  291. endoreg_db/models/prediction/video_prediction_meta.py +244 -244
  292. endoreg_db/models/product/__init__.py +5 -0
  293. endoreg_db/models/product/product.py +97 -0
  294. endoreg_db/models/product/product_group.py +19 -0
  295. endoreg_db/models/product/product_material.py +24 -0
  296. endoreg_db/models/product/product_weight.py +26 -0
  297. endoreg_db/models/product/reference_product.py +99 -0
  298. endoreg_db/models/questionnaires/__init__.py +114 -114
  299. endoreg_db/models/quiz/__init__.py +2 -0
  300. endoreg_db/models/quiz/quiz_answer.py +41 -0
  301. endoreg_db/models/quiz/quiz_question.py +54 -0
  302. endoreg_db/models/report_reader/__init__.py +1 -1
  303. endoreg_db/models/report_reader/report_reader_config.py +53 -53
  304. endoreg_db/models/report_reader/report_reader_flag.py +19 -19
  305. endoreg_db/models/rules/__init__.py +5 -0
  306. endoreg_db/models/rules/rule.py +24 -0
  307. endoreg_db/models/rules/rule_applicator.py +224 -0
  308. endoreg_db/models/rules/rule_attribute_dtype.py +19 -0
  309. endoreg_db/models/rules/rule_type.py +22 -0
  310. endoreg_db/models/rules/ruleset.py +19 -0
  311. endoreg_db/models/unit.py +21 -19
  312. endoreg_db/queries/__init__.py +4 -4
  313. endoreg_db/queries/annotations/__init__.py +2 -2
  314. endoreg_db/queries/annotations/legacy.py +159 -159
  315. endoreg_db/queries/get/__init__.py +5 -5
  316. endoreg_db/queries/get/center.py +42 -42
  317. endoreg_db/queries/get/model.py +13 -13
  318. endoreg_db/queries/get/patient.py +14 -14
  319. endoreg_db/queries/get/patient_examination.py +20 -20
  320. endoreg_db/queries/get/report_file.py +33 -33
  321. endoreg_db/queries/get/video.py +31 -31
  322. endoreg_db/serializers/__init__.py +9 -9
  323. endoreg_db/serializers/ai_model.py +18 -18
  324. endoreg_db/serializers/annotation.py +17 -17
  325. endoreg_db/serializers/center.py +11 -11
  326. endoreg_db/serializers/examination.py +32 -32
  327. endoreg_db/serializers/frame.py +13 -13
  328. endoreg_db/serializers/hardware.py +20 -20
  329. endoreg_db/serializers/label.py +22 -22
  330. endoreg_db/serializers/patient.py +10 -10
  331. endoreg_db/serializers/prediction.py +15 -15
  332. endoreg_db/serializers/report_file.py +7 -7
  333. endoreg_db/serializers/video.py +27 -27
  334. endoreg_db/tests.py +3 -3
  335. endoreg_db/utils/cropping.py +28 -28
  336. endoreg_db/utils/dataloader.py +92 -185
  337. endoreg_db/utils/file_operations.py +30 -30
  338. endoreg_db/utils/hashs.py +33 -33
  339. endoreg_db/utils/legacy_ocr.py +201 -201
  340. endoreg_db/utils/ocr.py +197 -197
  341. endoreg_db/utils/uuid.py +4 -4
  342. endoreg_db/utils/video_metadata.py +87 -87
  343. endoreg_db/views.py +3 -3
  344. {endoreg_db-0.3.4.dist-info → endoreg_db-0.3.6.dist-info}/LICENSE +674 -674
  345. {endoreg_db-0.3.4.dist-info → endoreg_db-0.3.6.dist-info}/METADATA +2 -2
  346. endoreg_db-0.3.6.dist-info/RECORD +357 -0
  347. {endoreg_db-0.3.4.dist-info → endoreg_db-0.3.6.dist-info}/WHEEL +1 -1
  348. endoreg_db/models/persons/patient.py +0 -58
  349. endoreg_db/models.py +0 -3
  350. endoreg_db-0.3.4.dist-info/RECORD +0 -185
@@ -0,0 +1,99 @@
1
+ from django.db import models
2
+ from typing import List
3
+
4
+ class ReferenceProductManager(models.Manager):
5
+ def get_by_natural_key(self, product_name:str, product_group_name:str):
6
+ return self.get(product__name=product_name, product_group__name=product_group_name)
7
+
8
+ class ReferenceProduct(models.Model):
9
+ name = models.CharField(max_length=255)
10
+ product = models.ForeignKey("Product", on_delete=models.CASCADE)
11
+ product_group = models.OneToOneField("ProductGroup", on_delete=models.CASCADE, related_name="reference_product")
12
+ emission_factor_total = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True, blank = True)
13
+ emission_factor_package = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True, related_name="reference_product_package")
14
+ emission_factor_product = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True, related_name="reference_product_product")
15
+
16
+ objects = ReferenceProductManager()
17
+
18
+ def __str__(self):
19
+ return self.product.name + " (" + self.product_group.name + ")"
20
+
21
+ def set_emission_factors(self):
22
+ from .product import Product
23
+ from .product_material import ProductMaterial
24
+ from ..emission import EmissionFactor
25
+
26
+ product:Product = self.product
27
+ materials = product.product_materials.all()
28
+ emission_factor_name = f"{self.product_group.name}_{product.name}_total_emission_factor"
29
+ emission_factor_package_name = f"{self.product_group.name}_{product.name}_package_emission_factor"
30
+ emission_factor_product_name = f"{self.product_group.name}_{product.name}_product_emission_factor"
31
+
32
+ product_emissions = 0
33
+ package_emissions = 0
34
+
35
+ product_weight, product_weight_unit = product.get_product_material_weight()
36
+ package_weight, package_weight_unit = product.get_package_material_weight()
37
+ product_emission, product_emission_unit = product.get_product_material_emission()
38
+ package_emission, package_emission_unit = product.get_package_material_emission()
39
+
40
+ total_weight = product_weight + package_weight
41
+ total_emission = product_emission + package_emission
42
+
43
+ reference_unit = product_weight_unit
44
+ assert reference_unit == package_weight_unit, "Package weight units do not match"
45
+ assert reference_unit == product_emission_unit, "Product emission units do not match"
46
+ assert reference_unit == package_emission_unit, "Package emission units do not match"
47
+
48
+ product_emission_factor_value = product_emission / product_weight
49
+ package_emission_factor_value = package_emission / package_weight
50
+ total_emission_factor_value = total_emission / total_weight
51
+
52
+ emission_factor, created = EmissionFactor.objects.get_or_create(
53
+ name=emission_factor_name,
54
+ defaults={
55
+ "name": emission_factor_name,
56
+ "value": total_emission_factor_value,
57
+ "unit": reference_unit
58
+ }
59
+ )
60
+ self.emission_factor_total = emission_factor
61
+
62
+ emission_factor_package, created = EmissionFactor.objects.get_or_create(
63
+ name=emission_factor_package_name,
64
+ defaults={
65
+ "name": emission_factor_package_name,
66
+ "value": package_emission_factor_value,
67
+ "unit": reference_unit
68
+ }
69
+ )
70
+ self.emission_factor_package = emission_factor_package
71
+
72
+ emission_factor_product, created = EmissionFactor.objects.get_or_create(
73
+ name=emission_factor_product_name,
74
+ defaults={
75
+ "name": emission_factor_product_name,
76
+ "value": product_emission_factor_value,
77
+ "unit": reference_unit
78
+ }
79
+ )
80
+ self.emission_factor_product = emission_factor_product
81
+
82
+ self.save()
83
+
84
+ def get_emission_factor(self, component:str):
85
+ # check if emission_factor_total exists:
86
+ if self.emission_factor_total is None:
87
+ self.set_emission_factors()
88
+
89
+ if component == "total":
90
+ return self.emission_factor_total
91
+ elif component == "package":
92
+ return self.emission_factor_package
93
+ elif component == "product":
94
+ return self.emission_factor_product
95
+ else:
96
+ raise Exception("Unknown component: " + component)
97
+
98
+
99
+
@@ -1,114 +1,114 @@
1
- from django.db import models
2
-
3
- YES_NO_CHOICES = (
4
- ('yes', 'Ja'),
5
- ('no', 'Nein'),
6
- )
7
-
8
- class TtoQuestionnaire(models.Model):
9
-
10
- # Patient Information
11
- patient_name = models.CharField(max_length=255, verbose_name="Identifikation des Patienten (Name)")
12
- birth_date = models.DateField(verbose_name="Geburtsdatum")
13
-
14
- # Base documentation
15
- emergency_patient = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Notfallpatient/kürzlich untersuchter Patient (Verzicht auf Team-Time-Out möglich)")
16
- consent_signed = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Einverständniserklärung unterschrieben (Arzt, Patient)")
17
- documents_present = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Alle Dokumente liegen vor (Labor, Befunde, etc.)")
18
- communication_possible = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Kommunikation mit Patient möglich")
19
- work_incapacity_certificate = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Arbeitsunfähigkeitsbescheinigung")
20
-
21
- # priority items
22
- pregnancy = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Schwangerschaft")
23
- asa_classification_checked = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="ASA-Klassifikation/Komorbidität geprüft")
24
- previous_anesthesia_complications = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Komplikationen bei bisherigen Narkosen?")
25
- last_meal_over_6_hours_ago = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Zeitpunkt letzte Mahlzeit > 6 Stunden")
26
- allergies = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Allergien, welche?")
27
- outpatient_accompaniment_post_sedation = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Nur bei ambulanter Vorstellung: Begleitung nach Sedierung?")
28
-
29
- # Possessions
30
- dental_prosthesis = models.BooleanField(default=False, verbose_name="Zahnprothese")
31
- glasses = models.BooleanField(default=False, verbose_name="Brille")
32
- implants = models.BooleanField(default=False, verbose_name="Implantate")
33
- hearing_aids = models.BooleanField(default=False, verbose_name="Hörgeräte")
34
-
35
-
36
- # Medical History
37
- anticoagulants_ass = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Antikoagulation, ASS")
38
- blood_pressure_medication = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Blutdruckmedikamente")
39
- glaucoma = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Glaukom")
40
-
41
- metal_implants = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Metallimplantate")
42
- pacemaker_icd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Herzschrittmacher/ICD")
43
-
44
- copd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="COPD")
45
- liver_cirrhosis = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Leberzirrhose")
46
-
47
- ibd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="CED (Chronisch entzündliche Darmerkrankungen)")
48
- radiation = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Bestrahlung")
49
- surgeries = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="OP´s")
50
-
51
- # preflight
52
- team_introduction = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Teamvorstellung mit Name und Aufgabe")
53
- instruments_available = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Notwendige Instrumente vorhanden?")
54
- monitoring_medications_equipment_checked = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Monitoring, Medikamente, Equipment zum Atemwegsmanagement zur Verfügung und überprüft?")
55
- complete_documentation_inclusive_care_notes = models.TextField(verbose_name="Vollständige Dokumentation inklusive Hinweise für Nachsorge")
56
-
57
- # notes
58
- notes = models.TextField(verbose_name="Bemerkungen", default = "Keine Bemerkungen")
59
-
60
- # postflight
61
- specimens_secured = models.BooleanField(default=False, verbose_name="Histologische Proben gesichert")
62
- patient_condition_documented = models.TextField(verbose_name="Patientenzustand dokumentiert (je nach Ausgangszustand)")
63
-
64
-
65
-
66
- def __str__(self):
67
- return f"Endoscopy Questionnaire for {self.patient_name} on {self.birth_date}"
68
-
69
- def get_id_attributes(self):
70
- _ = [self.patient_name, self.birth_date]
71
- return _
72
-
73
- def get_base_documentation_attributes(self):
74
- _ = [self.emergency_patient, self.consent_signed, self.documents_present, self.communication_possible, self.work_incapacity_certificate]
75
- return _
76
-
77
- def get_priority_items_attributes(self):
78
- _ = [self.pregnancy, self.asa_classification_checked, self.previous_anesthesia_complications, self.last_meal_over_6_hours_ago, self.allergies, self.outpatient_accompaniment_post_sedation]
79
- return _
80
-
81
- def get_possessions_attributes(self):
82
- _ = [self.dental_prosthesis, self.glasses, self.implants, self.hearing_aids]
83
- return _
84
-
85
- def get_medical_history_attributes(self):
86
- _ = [
87
- self.anticoagulants_ass,
88
- self.blood_pressure_medication,
89
- self.glaucoma,
90
- self.metal_implants,
91
- self.pacemaker_icd,
92
- self.copd,
93
- self.liver_cirrhosis,
94
- self.ibd,
95
- self.radiation,
96
- self.surgeries,
97
- ]
98
-
99
- def get_preflight_attributes(self):
100
- _ = [
101
- self.team_introduction,
102
- self.instruments_available,
103
- self.monitoring_medications_equipment_checked,
104
- ]
105
-
106
- def get_note_attributes(self):
107
- _ = [self.notes]
108
-
109
- def get_postflight_attributes(self):
110
- _ = [
111
- self.specimens_secured,
112
- self.patient_condition_documented
113
- ]
114
-
1
+ from django.db import models
2
+
3
+ YES_NO_CHOICES = (
4
+ ('yes', 'Ja'),
5
+ ('no', 'Nein'),
6
+ )
7
+
8
+ class TtoQuestionnaire(models.Model):
9
+
10
+ # Patient Information
11
+ patient_name = models.CharField(max_length=255, verbose_name="Identifikation des Patienten (Name)")
12
+ birth_date = models.DateField(verbose_name="Geburtsdatum")
13
+
14
+ # Base documentation
15
+ emergency_patient = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Notfallpatient/kürzlich untersuchter Patient (Verzicht auf Team-Time-Out möglich)")
16
+ consent_signed = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Einverständniserklärung unterschrieben (Arzt, Patient)")
17
+ documents_present = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Alle Dokumente liegen vor (Labor, Befunde, etc.)")
18
+ communication_possible = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Kommunikation mit Patient möglich")
19
+ work_incapacity_certificate = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Arbeitsunfähigkeitsbescheinigung")
20
+
21
+ # priority items
22
+ pregnancy = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Schwangerschaft")
23
+ asa_classification_checked = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="ASA-Klassifikation/Komorbidität geprüft")
24
+ previous_anesthesia_complications = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Komplikationen bei bisherigen Narkosen?")
25
+ last_meal_over_6_hours_ago = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Zeitpunkt letzte Mahlzeit > 6 Stunden")
26
+ allergies = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Allergien, welche?")
27
+ outpatient_accompaniment_post_sedation = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Nur bei ambulanter Vorstellung: Begleitung nach Sedierung?")
28
+
29
+ # Possessions
30
+ dental_prosthesis = models.BooleanField(default=False, verbose_name="Zahnprothese")
31
+ glasses = models.BooleanField(default=False, verbose_name="Brille")
32
+ implants = models.BooleanField(default=False, verbose_name="Implantate")
33
+ hearing_aids = models.BooleanField(default=False, verbose_name="Hörgeräte")
34
+
35
+
36
+ # Medical History
37
+ anticoagulants_ass = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Antikoagulation, ASS")
38
+ blood_pressure_medication = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Blutdruckmedikamente")
39
+ glaucoma = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Glaukom")
40
+
41
+ metal_implants = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Metallimplantate")
42
+ pacemaker_icd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Herzschrittmacher/ICD")
43
+
44
+ copd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="COPD")
45
+ liver_cirrhosis = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Leberzirrhose")
46
+
47
+ ibd = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="CED (Chronisch entzündliche Darmerkrankungen)")
48
+ radiation = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Bestrahlung")
49
+ surgeries = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="OP´s")
50
+
51
+ # preflight
52
+ team_introduction = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Teamvorstellung mit Name und Aufgabe")
53
+ instruments_available = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Notwendige Instrumente vorhanden?")
54
+ monitoring_medications_equipment_checked = models.CharField(max_length=3, choices=YES_NO_CHOICES, verbose_name="Monitoring, Medikamente, Equipment zum Atemwegsmanagement zur Verfügung und überprüft?")
55
+ complete_documentation_inclusive_care_notes = models.TextField(verbose_name="Vollständige Dokumentation inklusive Hinweise für Nachsorge")
56
+
57
+ # notes
58
+ notes = models.TextField(verbose_name="Bemerkungen", default = "Keine Bemerkungen")
59
+
60
+ # postflight
61
+ specimens_secured = models.BooleanField(default=False, verbose_name="Histologische Proben gesichert")
62
+ patient_condition_documented = models.TextField(verbose_name="Patientenzustand dokumentiert (je nach Ausgangszustand)")
63
+
64
+
65
+
66
+ def __str__(self):
67
+ return f"Endoscopy Questionnaire for {self.patient_name} on {self.birth_date}"
68
+
69
+ def get_id_attributes(self):
70
+ _ = [self.patient_name, self.birth_date]
71
+ return _
72
+
73
+ def get_base_documentation_attributes(self):
74
+ _ = [self.emergency_patient, self.consent_signed, self.documents_present, self.communication_possible, self.work_incapacity_certificate]
75
+ return _
76
+
77
+ def get_priority_items_attributes(self):
78
+ _ = [self.pregnancy, self.asa_classification_checked, self.previous_anesthesia_complications, self.last_meal_over_6_hours_ago, self.allergies, self.outpatient_accompaniment_post_sedation]
79
+ return _
80
+
81
+ def get_possessions_attributes(self):
82
+ _ = [self.dental_prosthesis, self.glasses, self.implants, self.hearing_aids]
83
+ return _
84
+
85
+ def get_medical_history_attributes(self):
86
+ _ = [
87
+ self.anticoagulants_ass,
88
+ self.blood_pressure_medication,
89
+ self.glaucoma,
90
+ self.metal_implants,
91
+ self.pacemaker_icd,
92
+ self.copd,
93
+ self.liver_cirrhosis,
94
+ self.ibd,
95
+ self.radiation,
96
+ self.surgeries,
97
+ ]
98
+
99
+ def get_preflight_attributes(self):
100
+ _ = [
101
+ self.team_introduction,
102
+ self.instruments_available,
103
+ self.monitoring_medications_equipment_checked,
104
+ ]
105
+
106
+ def get_note_attributes(self):
107
+ _ = [self.notes]
108
+
109
+ def get_postflight_attributes(self):
110
+ _ = [
111
+ self.specimens_secured,
112
+ self.patient_condition_documented
113
+ ]
114
+
@@ -0,0 +1,2 @@
1
+ from .quiz_answer import QuizAnswer, QuizAnswerType
2
+ from .quiz_question import QuizQuestion, QuizQuestionType
@@ -0,0 +1,41 @@
1
+ from django.db import models
2
+
3
+ class QuizAnswerTypeManager(models.Manager):
4
+ def get_by_natural_key(self, name):
5
+ return self.get(name=name)
6
+
7
+ class QuizAnswerType(models.Model):
8
+ objects = QuizAnswerTypeManager()
9
+
10
+ name = models.CharField(max_length=255)
11
+ description = models.TextField(blank=True, null=True)
12
+
13
+ def natural_key(self):
14
+ return (self.name,)
15
+
16
+ def __str__(self):
17
+ return self.name
18
+
19
+ class QuizAnswerManager(models.Manager):
20
+ def get_by_natural_key(self, text):
21
+ return self.get(text=text)
22
+
23
+ class QuizAnswer(models.Model):
24
+ objects = QuizAnswerManager()
25
+
26
+ text_value = models.CharField(max_length=255, null=True, blank=True)
27
+ number_value = models.FloatField(null=True, blank=True)
28
+ answer_type = models.ForeignKey("QuizAnswerType", on_delete=models.CASCADE)
29
+ question = models.ForeignKey("QuizQuestion", on_delete=models.CASCADE)
30
+
31
+ last_updated = models.DateTimeField(auto_now=True)
32
+
33
+ #TODO add user as foreign key
34
+
35
+ def natural_key(self):
36
+ return (self.text,)
37
+
38
+ def __str__(self):
39
+ return self.text
40
+
41
+
@@ -0,0 +1,54 @@
1
+ from django.db import models
2
+
3
+ class QuizQuestionTypeManager(models.Manager):
4
+ def get_by_natural_key(self, name):
5
+ return self.get(name=name)
6
+
7
+ class QuizQuestionType(models.Model):
8
+ """
9
+ A class representing a quiz question type.
10
+
11
+ Attributes:
12
+ name (str): The name of the quiz question type.
13
+ description (str): A description of the quiz question type.
14
+
15
+ """
16
+ name = models.CharField(max_length=255)
17
+ description = models.TextField(blank=True, null=True)
18
+
19
+ objects = QuizQuestionTypeManager()
20
+
21
+ def natural_key(self):
22
+ return (self.name,)
23
+
24
+ def __str__(self):
25
+ return self.name
26
+
27
+ class QuizQuestionManager(models.Manager):
28
+ def get_by_natural_key(self, text):
29
+ return self.get(text=text)
30
+
31
+ class QuizQuestion(models.Model):
32
+ """
33
+ A class representing a quiz question.
34
+
35
+ Attributes:
36
+ text (str): The text of the quiz question.
37
+ question_type (QuizQuestionType): The type of the quiz question.
38
+ description (str): A description of the quiz question.
39
+
40
+ """
41
+ text = models.TextField()
42
+ description = models.TextField(blank=True, null=True)
43
+ question_type = models.ForeignKey("QuizQuestionType", on_delete=models.CASCADE)
44
+
45
+ objects = QuizQuestionManager()
46
+
47
+ def natural_key(self):
48
+ return (self.text,)
49
+
50
+ def __str__(self):
51
+ return self.text
52
+
53
+ def get_question_type(self):
54
+ return self.question_type.name
@@ -1,2 +1,2 @@
1
- from .report_reader_config import ReportReaderConfig
1
+ from .report_reader_config import ReportReaderConfig
2
2
  from .report_reader_flag import ReportReaderFlag
@@ -1,53 +1,53 @@
1
- # ReportReaderConfig Class
2
- # Description: This class is used to store the configuration of the ReportReader
3
-
4
- # PATIENT_INFO_LINE_FLAG = "Patient: "
5
- # ENDOSCOPE_INFO_LINE_FLAG = "Gerät: "
6
- # EXAMINER_INFO_LINE_FLAG = "1. Unters.:"
7
- # CUT_OFF_BELOW_LINE_FLAG = "________________"
8
-
9
-
10
- # CUT_OFF_ABOVE_LINE_FLAGS = [
11
- # ENDOSCOPE_INFO_LINE_FLAG,
12
- # EXAMINER_INFO_LINE_FLAG,
13
- # ]
14
-
15
- # CUT_OFF_BELOW_LINE_FLAGS = [
16
- # CUT_OFF_BELOW_LINE_FLAG
17
- # ]
18
-
19
- from django.db import models
20
- from .report_reader_flag import ReportReaderFlag
21
- from ..center import Center
22
- from ..data_file import PdfType
23
-
24
- class ReportReaderConfig(models.Model):
25
-
26
- locale = models.CharField(default="de_DE", max_length=10)
27
- first_names = models.ManyToManyField('FirstName', related_name='report_reader_configs')
28
- last_names = models.ManyToManyField('LastName', related_name='report_reader_configs')
29
- text_date_format = models.CharField(default = "%d.%m.%Y", max_length=10)
30
- patient_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_patient_info_line', on_delete=models.CASCADE)
31
- endoscope_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_endoscope_info_line', on_delete=models.CASCADE)
32
- examiner_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_examiner_info_line', on_delete=models.CASCADE)
33
- cut_off_below = models.ManyToManyField(ReportReaderFlag, related_name='report_reader_configs_cut_off_below')
34
- cut_off_above = models.ManyToManyField(ReportReaderFlag, related_name='report_reader_configs_cut_off_above')
35
-
36
- def __str__(self):
37
- return self.locale
38
-
39
- def update_names_by_center(self, center:Center, save = True):
40
- self.first_names.set(center.first_names.all())
41
- self.last_names.set(center.last_names.all())
42
- if save:
43
- self.save()
44
-
45
- def update_flags_by_pdf_type(self, pdf_type:PdfType, save = True):
46
- self.patient_info_line_flag = pdf_type.patient_info_line_flag
47
- self.endoscope_info_line_flag = pdf_type.endoscope_info_line_flag
48
- self.examiner_info_line_flag = pdf_type.examiner_info_line_flag
49
- self.cut_off_below.set(pdf_type.cut_off_below.all())
50
- self.cut_off_above.set(pdf_type.cut_off_above.all())
51
- if save:
52
- self.save()
53
-
1
+ # ReportReaderConfig Class
2
+ # Description: This class is used to store the configuration of the ReportReader
3
+
4
+ # PATIENT_INFO_LINE_FLAG = "Patient: "
5
+ # ENDOSCOPE_INFO_LINE_FLAG = "Gerät: "
6
+ # EXAMINER_INFO_LINE_FLAG = "1. Unters.:"
7
+ # CUT_OFF_BELOW_LINE_FLAG = "________________"
8
+
9
+
10
+ # CUT_OFF_ABOVE_LINE_FLAGS = [
11
+ # ENDOSCOPE_INFO_LINE_FLAG,
12
+ # EXAMINER_INFO_LINE_FLAG,
13
+ # ]
14
+
15
+ # CUT_OFF_BELOW_LINE_FLAGS = [
16
+ # CUT_OFF_BELOW_LINE_FLAG
17
+ # ]
18
+
19
+ from django.db import models
20
+ from .report_reader_flag import ReportReaderFlag
21
+ from ..center import Center
22
+ from ..data_file import PdfType
23
+
24
+ class ReportReaderConfig(models.Model):
25
+
26
+ locale = models.CharField(default="de_DE", max_length=10)
27
+ first_names = models.ManyToManyField('FirstName', related_name='report_reader_configs')
28
+ last_names = models.ManyToManyField('LastName', related_name='report_reader_configs')
29
+ text_date_format = models.CharField(default = "%d.%m.%Y", max_length=10)
30
+ patient_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_patient_info_line', on_delete=models.CASCADE)
31
+ endoscope_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_endoscope_info_line', on_delete=models.CASCADE)
32
+ examiner_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_examiner_info_line', on_delete=models.CASCADE)
33
+ cut_off_below = models.ManyToManyField(ReportReaderFlag, related_name='report_reader_configs_cut_off_below')
34
+ cut_off_above = models.ManyToManyField(ReportReaderFlag, related_name='report_reader_configs_cut_off_above')
35
+
36
+ def __str__(self):
37
+ return self.locale
38
+
39
+ def update_names_by_center(self, center:Center, save = True):
40
+ self.first_names.set(center.first_names.all())
41
+ self.last_names.set(center.last_names.all())
42
+ if save:
43
+ self.save()
44
+
45
+ def update_flags_by_pdf_type(self, pdf_type:PdfType, save = True):
46
+ self.patient_info_line_flag = pdf_type.patient_info_line_flag
47
+ self.endoscope_info_line_flag = pdf_type.endoscope_info_line_flag
48
+ self.examiner_info_line_flag = pdf_type.examiner_info_line_flag
49
+ self.cut_off_below.set(pdf_type.cut_off_below.all())
50
+ self.cut_off_above.set(pdf_type.cut_off_above.all())
51
+ if save:
52
+ self.save()
53
+
@@ -1,20 +1,20 @@
1
- # Django model for the report reader flag
2
- # have name and value
3
- # name is natural key
4
-
5
- from django.db import models
6
-
7
- class ReportReaderFlagManager(models.Manager):
8
- def get_by_natural_key(self, name):
9
- return self.get(name=name)
10
-
11
- class ReportReaderFlag(models.Model):
12
- objects = ReportReaderFlagManager()
13
- name = models.CharField(max_length=255, unique=True)
14
- value = models.CharField(max_length=255)
15
-
16
- def natural_key(self):
17
- return (self.name,)
18
-
19
- def __str__(self):
1
+ # Django model for the report reader flag
2
+ # have name and value
3
+ # name is natural key
4
+
5
+ from django.db import models
6
+
7
+ class ReportReaderFlagManager(models.Manager):
8
+ def get_by_natural_key(self, name):
9
+ return self.get(name=name)
10
+
11
+ class ReportReaderFlag(models.Model):
12
+ objects = ReportReaderFlagManager()
13
+ name = models.CharField(max_length=255, unique=True)
14
+ value = models.CharField(max_length=255)
15
+
16
+ def natural_key(self):
17
+ return (self.name,)
18
+
19
+ def __str__(self):
20
20
  return self.name
@@ -0,0 +1,5 @@
1
+ from .rule_type import RuleType
2
+ from .rule import Rule
3
+ from .ruleset import Ruleset
4
+ from .rule_attribute_dtype import RuleAttributeDType
5
+ from .rule_applicator import RuleApplicator
@@ -0,0 +1,24 @@
1
+ from django.db import models
2
+
3
+ class RuleManager(models.Manager):
4
+ def get_by_natural_key(self, name):
5
+ return self.get(name=name)
6
+
7
+ class Rule(models.Model):
8
+ name = models.CharField(max_length=255, unique=True)
9
+ name_de = models.CharField(max_length=255, blank=True, null=True)
10
+ name_en = models.CharField(max_length=255, blank=True, null=True)
11
+ description = models.TextField(blank=True, null=True)
12
+ attribute_key = models.CharField(max_length=255)
13
+ rule_type = models.ForeignKey("RuleType", on_delete=models.CASCADE)
14
+ attribute_dtype = models.ForeignKey("RuleAttributeDType", on_delete=models.CASCADE)
15
+
16
+ objects = RuleManager()
17
+
18
+ class Meta:
19
+ verbose_name = 'Rule'
20
+ verbose_name_plural = 'Rules'
21
+
22
+ def natural_key(self):
23
+ return (self.name,)
24
+