Source code for endoreg_db.models.media.pdf.report_reader.report_reader_config

# ReportReaderConfig Class
# Description: This class is used to store the configuration of the ReportReader

# PATIENT_INFO_LINE_FLAG = "Patient: "
# ENDOSCOPE_INFO_LINE_FLAG = "Gerät: "
# EXAMINER_INFO_LINE_FLAG = "1. Unters.:"
# CUT_OFF_BELOW_LINE_FLAG = "________________"


# CUT_OFF_ABOVE_LINE_FLAGS = [
#     ENDOSCOPE_INFO_LINE_FLAG,
#     EXAMINER_INFO_LINE_FLAG,
# ]

# CUT_OFF_BELOW_LINE_FLAGS = [
#         CUT_OFF_BELOW_LINE_FLAG
#     ]

from django.db import models


from typing import TYPE_CHECKING
if TYPE_CHECKING:
    from .report_reader_flag import ReportReaderFlag
    from ....administration.person import FirstName, LastName
    from ....administration.center import Center
    from ....metadata import PdfType

[docs] class ReportReaderConfig(models.Model): """ Configuration settings for parsing report reports (ReportReader). Stores locale, name lists, date format, and flags used to identify key information lines and text sections to ignore. """ locale = models.CharField(default="de_DE", max_length=10) first_names = models.ManyToManyField('FirstName', related_name='report_reader_configs') last_names = models.ManyToManyField('LastName', related_name='report_reader_configs') text_date_format = models.CharField(default = "%d.%m.%Y", max_length=10) patient_info_line_flag = models.ForeignKey("ReportReaderFlag", related_name='report_reader_configs_patient_info_line', on_delete=models.CASCADE) endoscope_info_line_flag = models.ForeignKey("ReportReaderFlag", related_name='report_reader_configs_endoscope_info_line', on_delete=models.CASCADE) examiner_info_line_flag = models.ForeignKey("ReportReaderFlag", related_name='report_reader_configs_examiner_info_line', on_delete=models.CASCADE) cut_off_below = models.ManyToManyField("ReportReaderFlag", related_name='report_reader_configs_cut_off_below') cut_off_above = models.ManyToManyField("ReportReaderFlag", related_name='report_reader_configs_cut_off_above') if TYPE_CHECKING: first_names: models.QuerySet["FirstName"] last_names: models.QuerySet["LastName"] patient_info_line_flag: "ReportReaderFlag" endoscope_info_line_flag: "ReportReaderFlag" examiner_info_line_flag: "ReportReaderFlag" cut_off_below: models.QuerySet["ReportReaderFlag"] cut_off_above: models.QuerySet["ReportReaderFlag"] def __str__(self): """Returns a string representation including the locale and primary key.""" _str = f"ReportReaderConfig: {self.locale} (id: {self.pk}\n" return _str
[docs] def update_names_by_center(self, center:"Center", save = True): """Updates the first and last name lists based on the names associated with a Center.""" self.first_names.set(center.first_names.all()) self.last_names.set(center.last_names.all()) if save: self.save()
[docs] def update_flags_by_pdf_type(self, pdf_type:"PdfType", save = True): """Updates the line identification flags based on a specific PdfType.""" self.patient_info_line_flag = pdf_type.patient_info_line_flag self.endoscope_info_line_flag = pdf_type.endoscope_info_line_flag self.examiner_info_line_flag = pdf_type.examiner_info_line_flag self.cut_off_below.set(pdf_type.cut_off_below.all()) self.cut_off_above.set(pdf_type.cut_off_above.all()) if save: self.save()