endoreg-db 0.3.1__py3-none-any.whl → 0.3.3__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 (46) hide show
  1. endoreg_db/data/__init__.py +3 -1
  2. endoreg_db/data/center/data.yaml +45 -0
  3. endoreg_db/data/pdf_type/data.yaml +28 -0
  4. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +26 -0
  5. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -0
  6. endoreg_db/management/commands/load_base_db_data.py +12 -3
  7. endoreg_db/management/commands/load_center_data.py +3 -3
  8. endoreg_db/management/commands/load_pdf_type_data.py +61 -0
  9. endoreg_db/management/commands/load_report_reader_flag.py +46 -0
  10. endoreg_db/management/commands/reset_celery_schedule.py +9 -0
  11. endoreg_db/migrations/0013_rawpdffile.py +31 -0
  12. endoreg_db/migrations/0014_pdftype_alter_rawpdffile_file_pdfmeta.py +38 -0
  13. endoreg_db/migrations/0015_rename_report_processed_rawpdffile_state_report_processed_and_more.py +31 -0
  14. endoreg_db/migrations/0016_rawpdffile_state_report_processing_required.py +18 -0
  15. endoreg_db/migrations/0017_firstname_lastname_center_first_names_and_more.py +37 -0
  16. endoreg_db/migrations/0018_reportreaderflag_reportreaderconfig.py +37 -0
  17. endoreg_db/migrations/0019_pdftype_cut_off_above_lines_and_more.py +42 -0
  18. endoreg_db/migrations/0020_rename_endoscopy_info_line_pdftype_endoscope_info_line.py +18 -0
  19. endoreg_db/migrations/0021_alter_pdftype_endoscope_info_line.py +19 -0
  20. endoreg_db/migrations/0022_alter_pdftype_endoscope_info_line.py +19 -0
  21. endoreg_db/models/__init__.py +2 -0
  22. endoreg_db/models/center.py +6 -0
  23. endoreg_db/models/data_file/__init__.py +2 -3
  24. endoreg_db/models/data_file/import_classes/__init__.py +1 -0
  25. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +35 -0
  26. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -0
  27. endoreg_db/models/data_file/import_classes/{processing_functions.py → processing_functions/video.py} +6 -7
  28. endoreg_db/models/data_file/import_classes/raw_pdf.py +185 -0
  29. endoreg_db/models/data_file/import_classes/raw_video.py +7 -5
  30. endoreg_db/models/data_file/metadata/__init__.py +2 -132
  31. endoreg_db/models/data_file/metadata/pdf_meta.py +70 -0
  32. endoreg_db/models/data_file/metadata/sensitive_meta.py +19 -1
  33. endoreg_db/models/data_file/metadata/video_meta.py +132 -0
  34. endoreg_db/models/data_file/report_file.py +1 -0
  35. endoreg_db/models/persons/__init__.py +3 -1
  36. endoreg_db/models/persons/first_name.py +18 -0
  37. endoreg_db/models/persons/last_name.py +20 -0
  38. endoreg_db/models/report_reader/__init__.py +2 -0
  39. endoreg_db/models/report_reader/report_reader_config.py +53 -0
  40. endoreg_db/models/report_reader/report_reader_flag.py +20 -0
  41. endoreg_db/utils/dataloader.py +172 -56
  42. endoreg_db/utils/hashs.py +18 -0
  43. {endoreg_db-0.3.1.dist-info → endoreg_db-0.3.3.dist-info}/METADATA +2 -1
  44. {endoreg_db-0.3.1.dist-info → endoreg_db-0.3.3.dist-info}/RECORD +46 -20
  45. {endoreg_db-0.3.1.dist-info → endoreg_db-0.3.3.dist-info}/LICENSE +0 -0
  46. {endoreg_db-0.3.1.dist-info → endoreg_db-0.3.3.dist-info}/WHEEL +0 -0
@@ -11,4 +11,6 @@ MODEL_TYPE_DATA_DIR = DATA_DIR / "model_type"
11
11
  ENDOSCOPY_PROCESSOR_DATA_DIR = DATA_DIR / "endoscopy_processor"
12
12
  ENDOSCOPE_TYPE_DATA_DIR = DATA_DIR / "endoscope_type"
13
13
  ACTIVE_MODEL_DATA_DIR = DATA_DIR / "active_model"
14
- PROFESSION_DATA_DIR = DATA_DIR / "profession"
14
+ PROFESSION_DATA_DIR = DATA_DIR / "profession"
15
+ PDF_TYPE_DATA_DIR = DATA_DIR / "pdf_type"
16
+ REPORT_READER_FLAG_DATA_DIR = DATA_DIR / "report_reader_flag"
@@ -5,3 +5,48 @@
5
5
  name: "university_hospital_wuerzburg"
6
6
  name_de: "Universitätsklinikum Würzburg"
7
7
  name_en: "University Hospital Würzburg"
8
+
9
+ first_names: [
10
+ "Markus",
11
+ "Linhel",
12
+ "Rainer",
13
+ "Hans",
14
+ "Anja",
15
+ "Dorothea",
16
+ "Doro",
17
+ "Angelika",
18
+ "Sven",
19
+ "Theodor",
20
+ "Alexander",
21
+ "Mandy",
22
+ "Kathrin",
23
+ "Florian",
24
+ "Philip",
25
+ "Laura"
26
+ ]
27
+ last_names: [
28
+ "Kozielski",
29
+ "Reiter",
30
+ "Purrer",
31
+ "Kudlich",
32
+ "Brand",
33
+ "Weich",
34
+ "Lux",
35
+ "Meining",
36
+ "Hann",
37
+ "Retzbach",
38
+ "Hose",
39
+ "Henniger",
40
+ "Weich",
41
+ "Dela Cruz",
42
+ "Wiesemann",
43
+ "Weise",
44
+ "Sodmann"
45
+ ]
46
+ - model: endoreg_db.center
47
+ fields:
48
+ name: "rbk_stuttgart"
49
+ name_de: "Robert-Bosch-Krankenhaus Stuttgart"
50
+ name_en: "Robert Bosch Hospital Stuttgart"
51
+ first_names: [] # many to many; if foreign key, we would just have a string; strings represent "name" attribute
52
+ last_names: []
@@ -0,0 +1,28 @@
1
+
2
+ - model: endoreg_db.pdf_type
3
+ fields:
4
+ name: "ukw-endoscopy-examination-report-generic"
5
+ patient_info_line: "ukw-examination-generic-patient-info-line"
6
+ endoscope_info_line: "ukw-examination-generic-endoscope-info-line"
7
+ examiner_info_line: "ukw-examination-generic-examiner-info-line"
8
+ cut_off_above_lines: [
9
+ "ukw-examination-generic-endoscope-info-line",
10
+ "ukw-examination-generic-examiner-info-line"
11
+ ]
12
+ cut_off_below_lines: [
13
+ "ukw-examination-generic-cut-off-below-line-01"
14
+ ]
15
+
16
+
17
+ - model: endoreg_db.pdf_type
18
+ fields:
19
+ name: "ukw-endoscopy-histology-report-generic"
20
+ patient_info_line: "ukw-histology-generic-patient-info-line"
21
+ endoscope_info_line: "ukw-histology-generic-endoscope-info-line"
22
+ examiner_info_line: "ukw-histology-generic-examiner-info-line"
23
+ cut_off_above_lines: [
24
+ "ukw-histology-generic-patient-info-line"
25
+ ]
26
+ cut_off_below_lines: [
27
+ "ukw-endoscopy-histology-cut-off-below-line-flag-01"
28
+ ]
@@ -0,0 +1,26 @@
1
+ # yaml definitions for report reader flag objects
2
+ # PATIENT_INFO_LINE_FLAG = "Patient: "
3
+ # ENDOSCOPE_INFO_LINE_FLAG = "Gerät: "
4
+ # EXAMINER_INFO_LINE_FLAG = "1. Unters.:"
5
+ # CUT_OFF_BELOW_LINE_FLAG = "________________"
6
+
7
+ - model: endoreg_db.report_reader_flag
8
+ fields:
9
+ name: "ukw-examination-generic-patient-info-line"
10
+ value: "Patient: "
11
+
12
+ - model: endoreg_db.report_reader_flag
13
+ fields:
14
+ name: "ukw-examination-generic-endoscope-info-line"
15
+ value: "Gerät: "
16
+
17
+ - model: endoreg_db.report_reader_flag
18
+ fields:
19
+ name: "ukw-examination-generic-examiner-info-line"
20
+ value: "1. Unters.:"
21
+
22
+ - model: endoreg_db.report_reader_flag
23
+ fields:
24
+ name: "ukw-examination-generic-cut-off-below-line-01"
25
+ value: "________________"
26
+
@@ -0,0 +1,19 @@
1
+ - model: endoreg_db.report_reader_flag
2
+ fields:
3
+ name: "ukw-histology-generic-patient-info-line"
4
+ value: "Patient:"
5
+
6
+ - model: endoreg_db.report_reader_flag
7
+ fields:
8
+ name: "ukw-histology-generic-examiner-info-line"
9
+ value: "Eingang am:"
10
+
11
+ - model: endoreg_db.report_reader_flag
12
+ fields:
13
+ name: "ukw-histology-generic-cut-off-below-line-01"
14
+ value: "$$-3"
15
+
16
+ - model: endoreg_db.report_reader_flag
17
+ fields:
18
+ name: "ukw-histology-generic-endoscope-info-line"
19
+ value: ""
@@ -23,6 +23,14 @@ class Command(BaseCommand):
23
23
  self.stdout.write(self.style.SUCCESS("Running load_user_groups..."))
24
24
  call_command('load_user_groups', verbose=verbose)
25
25
 
26
+ # run the load_report_reader_flag command
27
+ self.stdout.write(self.style.SUCCESS("Running load_report_reader_flag..."))
28
+ call_command('load_report_reader_flag', verbose=verbose)
29
+
30
+ # Run the load_pdf_type_data command
31
+ self.stdout.write(self.style.SUCCESS("Running load_pdf_type_data..."))
32
+ call_command('load_pdf_type_data', verbose=verbose)
33
+
26
34
  # Run the load_endoscopy_processor_data command
27
35
  self.stdout.write(self.style.SUCCESS("Running load_endoscopy_processor_data..."))
28
36
  call_command('load_endoscopy_processor_data', verbose=verbose)
@@ -55,8 +63,9 @@ class Command(BaseCommand):
55
63
  self.stdout.write(self.style.SUCCESS("Running load_ai_model_data..."))
56
64
  call_command('load_ai_model_data', verbose=verbose)
57
65
 
58
- # Run the load_active_model_data command
59
- self.stdout.write(self.style.SUCCESS("Running load_active_model_data..."))
60
- call_command('load_active_model_data', verbose=verbose)
66
+ # Necessary? Migrate? FIXME
67
+ # # Run the load_active_model_data command
68
+ # self.stdout.write(self.style.SUCCESS("Running load_active_model_data..."))
69
+ # call_command('load_active_model_data', verbose=verbose)
61
70
 
62
71
  self.stdout.write(self.style.SUCCESS("All data loading commands executed successfully."))
@@ -1,6 +1,6 @@
1
1
  from django.core.management.base import BaseCommand
2
2
  from ...utils import load_model_data_from_yaml
3
- from ...models import Center
3
+ from ...models import Center, FirstName, LastName
4
4
  from ...data import CENTER_DATA_DIR
5
5
 
6
6
  SOURCE_DIR = CENTER_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
@@ -15,8 +15,8 @@ IMPORT_METADATA = {
15
15
  MODEL_0.__name__: {
16
16
  "dir": SOURCE_DIR, # e.g. "interventions"
17
17
  "model": MODEL_0, # e.g. Intervention
18
- "foreign_keys": [], # e.g. ["intervention_types"]
19
- "foreign_key_models": [] # e.g. [InterventionType]
18
+ "foreign_keys": ["first_names", "last_names"], # e.g. ["intervention_types"]
19
+ "foreign_key_models": [FirstName, LastName] # e.g. [InterventionType]
20
20
  }
21
21
  }
22
22
 
@@ -0,0 +1,61 @@
1
+ from django.conf import settings
2
+ import os
3
+ from django.core.management.base import BaseCommand
4
+
5
+ import yaml
6
+ from ...utils import load_model_data_from_yaml
7
+
8
+
9
+ #### CUSTOMIZE
10
+ from ...models import PdfType, ReportReaderFlag
11
+ from ...data import PDF_TYPE_DATA_DIR
12
+
13
+ SOURCE_DIR = PDF_TYPE_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
14
+
15
+ MODEL_0 = PdfType
16
+
17
+ IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
18
+ MODEL_0.__name__,
19
+ ]
20
+
21
+ IMPORT_METADATA = {
22
+ MODEL_0.__name__: {
23
+ "dir": SOURCE_DIR, # e.g. "interventions"
24
+ "model": MODEL_0, # e.g. Intervention
25
+ "foreign_keys": [
26
+ "patient_info_line",
27
+ "endoscope_info_line",
28
+ "examiner_info_line",
29
+ "cut_off_below_lines",
30
+ "cut_off_above_lines"
31
+ ], # e.g. ["intervention_types"]
32
+ "foreign_key_models": [
33
+ ReportReaderFlag,
34
+ ReportReaderFlag,
35
+ ReportReaderFlag,
36
+ ReportReaderFlag,
37
+ ReportReaderFlag
38
+ ] # e.g. [InterventionType]
39
+ }
40
+ }
41
+
42
+ class Command(BaseCommand):
43
+ help = f"""Load all .yaml files in the {SOURCE_DIR} directory"""
44
+
45
+ def add_arguments(self, parser):
46
+ parser.add_argument(
47
+ '--verbose',
48
+ action='store_true',
49
+ help='Display verbose output',
50
+ )
51
+
52
+ def handle(self, *args, **options):
53
+ verbose = options['verbose']
54
+ for model_name in IMPORT_MODELS:
55
+ _metadata = IMPORT_METADATA[model_name]
56
+ load_model_data_from_yaml(
57
+ self,
58
+ model_name,
59
+ _metadata,
60
+ verbose
61
+ )
@@ -0,0 +1,46 @@
1
+ from django.conf import settings
2
+ import os
3
+ from django.core.management.base import BaseCommand
4
+ from ...models import ReportReaderFlag
5
+ import yaml
6
+ from ...utils import load_model_data_from_yaml
7
+ from ...data import REPORT_READER_FLAG_DATA_DIR
8
+
9
+ SOURCE_DIR = REPORT_READER_FLAG_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
10
+
11
+ MODEL_0 = ReportReaderFlag
12
+
13
+ IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
14
+ MODEL_0.__name__,
15
+ ]
16
+
17
+ IMPORT_METADATA = {
18
+ MODEL_0.__name__: {
19
+ "dir": SOURCE_DIR, # e.g. "interventions"
20
+ "model": MODEL_0, # e.g. Intervention
21
+ "foreign_keys": [], # e.g. ["intervention_types"]
22
+ "foreign_key_models": [] # e.g. [InterventionType]
23
+ }
24
+ }
25
+
26
+ class Command(BaseCommand):
27
+ help = """Load all .yaml files in the data/intervention directory
28
+ into the Intervention and InterventionType model"""
29
+
30
+ def add_arguments(self, parser):
31
+ parser.add_argument(
32
+ '--verbose',
33
+ action='store_true',
34
+ help='Display verbose output',
35
+ )
36
+
37
+ def handle(self, *args, **options):
38
+ verbose = options['verbose']
39
+ for model_name in IMPORT_MODELS:
40
+ _metadata = IMPORT_METADATA[model_name]
41
+ load_model_data_from_yaml(
42
+ self,
43
+ model_name,
44
+ _metadata,
45
+ verbose
46
+ )
@@ -0,0 +1,9 @@
1
+ from django.core.management.base import BaseCommand
2
+ from django_celery_beat.models import PeriodicTask
3
+
4
+ class Command(BaseCommand):
5
+ help = 'Deletes all periodic tasks from the database to reset the schedule'
6
+
7
+ def handle(self, *args, **kwargs):
8
+ PeriodicTask.objects.all().delete()
9
+ self.stdout.write(self.style.SUCCESS('Successfully deleted all periodic tasks.'))
@@ -0,0 +1,31 @@
1
+ # Generated by Django 4.2.11 on 2024-03-23 15:39
2
+
3
+ import django.core.files.storage
4
+ import django.core.validators
5
+ from django.db import migrations, models
6
+ import django.db.models.deletion
7
+ import pathlib
8
+
9
+
10
+ class Migration(migrations.Migration):
11
+
12
+ dependencies = [
13
+ ('endoreg_db', '0012_rawvideofile_prediction_dir_and_more'),
14
+ ]
15
+
16
+ operations = [
17
+ migrations.CreateModel(
18
+ name='RawPdfFile',
19
+ fields=[
20
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21
+ ('file', models.FileField(storage=django.core.files.storage.FileSystemStorage(location=pathlib.PurePosixPath('/mnt/hdd-sensitive/Pseudo/import/report')), upload_to='raw_pdf/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])])),
22
+ ('pdf_hash', models.CharField(max_length=255, unique=True)),
23
+ ('report_processed', models.BooleanField(default=False)),
24
+ ('text', models.TextField(blank=True, null=True)),
25
+ ('anonymized_text', models.TextField(blank=True, null=True)),
26
+ ('raw_meta', models.JSONField(blank=True, null=True)),
27
+ ('created_at', models.DateTimeField(auto_now_add=True)),
28
+ ('sensitive_meta', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='raw_pdf_file', to='endoreg_db.sensitivemeta')),
29
+ ],
30
+ ),
31
+ ]
@@ -0,0 +1,38 @@
1
+ # Generated by Django 4.2.11 on 2024-03-23 16:45
2
+
3
+ import django.core.files.storage
4
+ import django.core.validators
5
+ from django.db import migrations, models
6
+ import django.db.models.deletion
7
+
8
+
9
+ class Migration(migrations.Migration):
10
+
11
+ dependencies = [
12
+ ('endoreg_db', '0013_rawpdffile'),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.CreateModel(
17
+ name='PdfType',
18
+ fields=[
19
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20
+ ('name', models.CharField(max_length=255)),
21
+ ],
22
+ ),
23
+ migrations.AlterField(
24
+ model_name='rawpdffile',
25
+ name='file',
26
+ field=models.FileField(storage=django.core.files.storage.FileSystemStorage(location='/mnt/hdd-sensitive/Pseudo/import/pdf'), upload_to='raw_pdf/', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['pdf'])]),
27
+ ),
28
+ migrations.CreateModel(
29
+ name='PdfMeta',
30
+ fields=[
31
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
32
+ ('date', models.DateField()),
33
+ ('time', models.TimeField()),
34
+ ('pdf_hash', models.CharField(max_length=255, unique=True)),
35
+ ('pdf_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.pdftype')),
36
+ ],
37
+ ),
38
+ ]
@@ -0,0 +1,31 @@
1
+ # Generated by Django 4.2.11 on 2024-03-24 09:20
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('endoreg_db', '0014_pdftype_alter_rawpdffile_file_pdfmeta'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.RenameField(
15
+ model_name='rawpdffile',
16
+ old_name='report_processed',
17
+ new_name='state_report_processed',
18
+ ),
19
+ migrations.AddField(
20
+ model_name='rawpdffile',
21
+ name='center',
22
+ field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.center'),
23
+ preserve_default=False,
24
+ ),
25
+ migrations.AddField(
26
+ model_name='rawpdffile',
27
+ name='pdf_type',
28
+ field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='endoreg_db.pdftype'),
29
+ preserve_default=False,
30
+ ),
31
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 4.2.11 on 2024-03-24 10:09
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('endoreg_db', '0015_rename_report_processed_rawpdffile_state_report_processed_and_more'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name='rawpdffile',
15
+ name='state_report_processing_required',
16
+ field=models.BooleanField(default=True),
17
+ ),
18
+ ]
@@ -0,0 +1,37 @@
1
+ # Generated by Django 4.2.11 on 2024-03-24 12:26
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('endoreg_db', '0016_rawpdffile_state_report_processing_required'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.CreateModel(
14
+ name='FirstName',
15
+ fields=[
16
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
17
+ ('name', models.CharField(max_length=255, unique=True)),
18
+ ],
19
+ ),
20
+ migrations.CreateModel(
21
+ name='LastName',
22
+ fields=[
23
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
24
+ ('name', models.CharField(max_length=255, unique=True)),
25
+ ],
26
+ ),
27
+ migrations.AddField(
28
+ model_name='center',
29
+ name='first_names',
30
+ field=models.ManyToManyField(related_name='centers', to='endoreg_db.firstname'),
31
+ ),
32
+ migrations.AddField(
33
+ model_name='center',
34
+ name='last_names',
35
+ field=models.ManyToManyField(related_name='centers', to='endoreg_db.lastname'),
36
+ ),
37
+ ]
@@ -0,0 +1,37 @@
1
+ # Generated by Django 4.2.11 on 2024-03-24 14:13
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('endoreg_db', '0017_firstname_lastname_center_first_names_and_more'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.CreateModel(
15
+ name='ReportReaderFlag',
16
+ fields=[
17
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
18
+ ('name', models.CharField(max_length=255, unique=True)),
19
+ ('value', models.CharField(max_length=255)),
20
+ ],
21
+ ),
22
+ migrations.CreateModel(
23
+ name='ReportReaderConfig',
24
+ fields=[
25
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
26
+ ('locale', models.CharField(default='de_DE', max_length=10)),
27
+ ('text_date_format', models.CharField(default='%d.%m.%Y', max_length=10)),
28
+ ('cut_off_above', models.ManyToManyField(related_name='report_reader_configs_cut_off_above', to='endoreg_db.reportreaderflag')),
29
+ ('cut_off_below', models.ManyToManyField(related_name='report_reader_configs_cut_off_below', to='endoreg_db.reportreaderflag')),
30
+ ('endoscope_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_endoscope_info_line', to='endoreg_db.reportreaderflag')),
31
+ ('examiner_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_examiner_info_line', to='endoreg_db.reportreaderflag')),
32
+ ('first_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.firstname')),
33
+ ('last_names', models.ManyToManyField(related_name='report_reader_configs', to='endoreg_db.lastname')),
34
+ ('patient_info_line_flag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='report_reader_configs_patient_info_line', to='endoreg_db.reportreaderflag')),
35
+ ],
36
+ ),
37
+ ]
@@ -0,0 +1,42 @@
1
+ # Generated by Django 4.2.11 on 2024-03-24 14:57
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('endoreg_db', '0018_reportreaderflag_reportreaderconfig'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddField(
15
+ model_name='pdftype',
16
+ name='cut_off_above_lines',
17
+ field=models.ManyToManyField(related_name='pdf_type_cut_off_above_lines', to='endoreg_db.reportreaderflag'),
18
+ ),
19
+ migrations.AddField(
20
+ model_name='pdftype',
21
+ name='cut_off_below_lines',
22
+ field=models.ManyToManyField(related_name='pdf_type_cut_off_below_lines', to='endoreg_db.reportreaderflag'),
23
+ ),
24
+ migrations.AddField(
25
+ model_name='pdftype',
26
+ name='endoscopy_info_line',
27
+ field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_endoscopy_info_line', to='endoreg_db.reportreaderflag'),
28
+ preserve_default=False,
29
+ ),
30
+ migrations.AddField(
31
+ model_name='pdftype',
32
+ name='examiner_info_line',
33
+ field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_examiner_info_line', to='endoreg_db.reportreaderflag'),
34
+ preserve_default=False,
35
+ ),
36
+ migrations.AddField(
37
+ model_name='pdftype',
38
+ name='patient_info_line',
39
+ field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_patient_info_line', to='endoreg_db.reportreaderflag'),
40
+ preserve_default=False,
41
+ ),
42
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 4.2.11 on 2024-03-24 15:32
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('endoreg_db', '0019_pdftype_cut_off_above_lines_and_more'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.RenameField(
14
+ model_name='pdftype',
15
+ old_name='endoscopy_info_line',
16
+ new_name='endoscope_info_line',
17
+ ),
18
+ ]
@@ -0,0 +1,19 @@
1
+ # Generated by Django 4.2.11 on 2024-03-24 19:02
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('endoreg_db', '0020_rename_endoscopy_info_line_pdftype_endoscope_info_line'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name='pdftype',
16
+ name='endoscope_info_line',
17
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_endoscopy_info_line', to='endoreg_db.reportreaderflag'),
18
+ ),
19
+ ]
@@ -0,0 +1,19 @@
1
+ # Generated by Django 4.2.11 on 2024-03-24 20:27
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('endoreg_db', '0021_alter_pdftype_endoscope_info_line'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name='pdftype',
16
+ name='endoscope_info_line',
17
+ field=models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, related_name='pdf_type_endoscopy_info_line', to='endoreg_db.reportreaderflag'),
18
+ ),
19
+ ]
@@ -1,6 +1,7 @@
1
1
  from .unit import Unit
2
2
  from .information_source import InformationSource
3
3
  from .center import Center
4
+ from .report_reader import ReportReaderConfig, ReportReaderFlag
4
5
  from .persons import (
5
6
  Person,
6
7
  Patient,
@@ -9,6 +10,7 @@ from .persons import (
9
10
  ExaminerSerializer,
10
11
  PortalUserInfo,
11
12
  Profession,
13
+ FirstName, LastName
12
14
  )
13
15
 
14
16
  from .examination import (
@@ -12,6 +12,12 @@ class Center(models.Model):
12
12
  name_de = models.CharField(max_length=255, blank=True, null=True)
13
13
  name_en = models.CharField(max_length=255, blank=True, null=True)
14
14
 
15
+ first_names = models.ManyToManyField(
16
+ 'FirstName',
17
+ related_name='centers',
18
+ )
19
+ last_names = models.ManyToManyField('LastName', related_name='centers')
20
+
15
21
  def natural_key(self):
16
22
  return (self.name,)
17
23
 
@@ -2,6 +2,5 @@ from .frame import Frame, LegacyFrame
2
2
  from .report_file import ReportFile
3
3
  from .video import Video, LegacyVideo, VideoImportMeta
4
4
  from .video_segment import LegacyLabelVideoSegment, LabelVideoSegment
5
- from .metadata import FFMpegMeta, SensitiveMeta
6
-
7
- from .import_classes import RawVideoFile
5
+ from .metadata import *
6
+ from .import_classes import *
@@ -2,6 +2,7 @@ import os
2
2
  from pathlib import Path
3
3
 
4
4
  from .raw_video import RawVideoFile
5
+ from .raw_pdf import RawPdfFile
5
6
 
6
7
  # FileImporter class
7
8
  # This class is used to import data from a file into the database.