diff --git a/src/effect_ae/migrations/0039_alter_deathreporttmgsecond_managers.py b/src/effect_ae/migrations/0039_alter_deathreporttmgsecond_managers.py new file mode 100644 index 00000000..844b6680 --- /dev/null +++ b/src/effect_ae/migrations/0039_alter_deathreporttmgsecond_managers.py @@ -0,0 +1,25 @@ +# Generated by Django 6.0.4 on 2026-05-07 23:04 + +import edc_action_item.managers +import effect_ae.models.death_report_tmg_second +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("effect_ae", "0038_alter_deathreporttmgsecond_managers"), + ] + + operations = [ + migrations.AlterModelManagers( + name="deathreporttmgsecond", + managers=[ + ( + "objects", + effect_ae.models.death_report_tmg_second.DeathReportTmgSecondManager(), + ), + ("on_site", edc_action_item.managers.ActionIdentifierSiteManager()), + ], + ), + ] diff --git a/src/effect_prn/admin/__init__.py b/src/effect_prn/admin/__init__.py index 6df75389..2563ba43 100644 --- a/src/effect_prn/admin/__init__.py +++ b/src/effect_prn/admin/__init__.py @@ -1,3 +1,5 @@ +from .arv_summary_admin import ArvSummaryAdmin +from .autocomplete_admin import ArvRegimensAdmin from .end_of_study_admin import EndOfStudyAdmin from .hospitalization_admin import HospitalizationAdmin from .loss_to_followup_admin import LossToFollowupAdmin diff --git a/src/effect_prn/admin/arv_summary_admin.py b/src/effect_prn/admin/arv_summary_admin.py new file mode 100644 index 00000000..e23c7d60 --- /dev/null +++ b/src/effect_prn/admin/arv_summary_admin.py @@ -0,0 +1,104 @@ +from django.contrib import admin +from django_audit_fields.admin import audit_fieldset_tuple +from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin +from edc_model_admin.history import SimpleHistoryAdmin +from edc_sites.admin import SiteModelAdminMixin + +from ..admin_site import effect_prn_admin +from ..forms import ArvSummaryForm +from ..models import ArvSummary + + +@admin.register(ArvSummary, site=effect_prn_admin) +class ArvSummaryAdmin( + SiteModelAdminMixin, + ModelAdminSubjectDashboardMixin, + SimpleHistoryAdmin, +): + form = ArvSummaryForm + + autocomplete_fields = ( + "at_screening_regimen", + "cont_enrol_regimen", + "after_enrol_regimen", + ) + + fieldsets = ( + ( + None, + { + "fields": ( + "subject_identifier", + "report_datetime", + ), + }, + ), + ( + "Part 1: ARVs at screening", + { + "fields": ( + "at_screening", + "at_screening_regimen", + "at_screening_start_date_known", + "at_screening_start_date", + ), + }, + ), + ( + "Part 2: ARVs at enrolment", + { + "description": ( + "This section is applicable if the participant " + "was taking ARVs at screening (YES from above)" + ), + "fields": ( + "cont_enrol", + "cont_enrol_changed", + "cont_enrol_regimen", + ), + }, + ), + ( + "Part 3: ARVs after enrolment", + { + "description": ( + "This section is applicable if (1) the participant " + "was NOT taking ARVs at screening (NO from part 1) " + "or (2) the participant was taking ARVs at screening " + "(YES part 1) but did NOT continue at enrolment (NO from part 2) " + ), + "fields": ( + "after_enrol", + "after_enrol_regimen", + "after_enrol_start_date_known", + "after_enrol_start_date", + ), + }, + ), + audit_fieldset_tuple, + ) + + list_display = ( + "subject_identifier", + "dashboard", + "at_screening", + "cont_enrol", + "after_enrol", + ) + + list_filter = ( + "at_screening", + "cont_enrol", + "after_enrol", + ) + + radio_fields = { # noqa: RUF012 + "at_screening": admin.VERTICAL, + "at_screening_start_date_known": admin.VERTICAL, + "cont_enrol": admin.VERTICAL, + "cont_enrol_changed": admin.VERTICAL, + "after_enrol": admin.VERTICAL, + "after_enrol_start_date_known": admin.VERTICAL, + } + + search_fields = ("subject_identifier",) diff --git a/src/effect_prn/admin/autocomplete_admin.py b/src/effect_prn/admin/autocomplete_admin.py new file mode 100644 index 00000000..adf45f0a --- /dev/null +++ b/src/effect_prn/admin/autocomplete_admin.py @@ -0,0 +1,13 @@ +from django.contrib import admin +from edc_list_data.admin import ListModelAdminMixin + +from effect_lists.models import ArvRegimens + +from ..admin_site import effect_prn_admin + + +@admin.register(ArvRegimens, site=effect_prn_admin) +class ArvRegimensAdmin(ListModelAdminMixin, admin.ModelAdmin): + """Registered again for the autocomplete field""" + + pass diff --git a/src/effect_prn/choices.py b/src/effect_prn/choices.py index 6aed85b3..ad7bd059 100644 --- a/src/effect_prn/choices.py +++ b/src/effect_prn/choices.py @@ -1,7 +1,14 @@ -from clinicedc_constants import NOT_APPLICABLE, OTHER +from clinicedc_constants import NO, NOT_APPLICABLE, OTHER, UNKNOWN, YES from .constants import REMAIN_ON_STUDY_MODIFIED +ARV_CHANGE_OPTIONS = ( + (YES, "Yes, ART was changed"), + (NO, "No, ART was not changed"), + (UNKNOWN, "Unknown"), + (NOT_APPLICABLE, "Not applicable"), +) + LOSS_CHOICES = ( ("unknown_address", "Changed to an unknown address"), ("never_returned", "Did not return despite reminders"), diff --git a/src/effect_prn/forms/__init__.py b/src/effect_prn/forms/__init__.py index dfc6ecfb..c08060bb 100644 --- a/src/effect_prn/forms/__init__.py +++ b/src/effect_prn/forms/__init__.py @@ -1,3 +1,4 @@ +from .arv_summary_form import ArvSummaryForm from .end_of_study_form import EndOfStudyForm from .hospitalization_form import HospitalizationForm from .loss_to_followup_form import LossToFollowupForm diff --git a/src/effect_prn/forms/arv_summary_form.py b/src/effect_prn/forms/arv_summary_form.py new file mode 100644 index 00000000..1d622195 --- /dev/null +++ b/src/effect_prn/forms/arv_summary_form.py @@ -0,0 +1,55 @@ +from clinicedc_constants import NO, YES +from django import forms +from edc_form_validators import FormValidator, FormValidatorMixin +from edc_model_form.mixins import BaseModelFormMixin +from edc_sites.forms import SiteModelFormMixin + +from ..models import ArvSummary + + +class ArvSummaryFormValidator(FormValidator): + def clean(self): + self.required_if(YES, field="at_screening", field_required="at_screening_regimen") + self.applicable_if( + YES, field="at_screening", field_applicable="at_screening_start_date_known" + ) + self.required_if( + YES, + field="at_screening_start_date_known", + field_required="at_screening_start_date", + ) + + self.applicable_if(YES, field="at_screening", field_applicable="cont_enrol") + + self.applicable_if(YES, field="cont_enrol", field_applicable="cont_enrol_changed") + self.applicable_if( + YES, field="cont_enrol_changed", field_applicable="cont_enrol_regimen" + ) + + cond = self.cleaned_data.get("at_screening") == NO or ( + self.cleaned_data.get("at_screening") == YES + and self.cleaned_data.get("cont_enrol") == NO + ) + self.applicable_if_true(cond, field_applicable="after_enrol") + self.applicable_if(YES, field="after_enrol", field_applicable="after_enrol_regimen") + self.applicable_if( + YES, field="after_enrol", field_applicable="after_enrol_start_date_known" + ) + self.required_if( + YES, + field="after_enrol_start_date_known", + field_required="after_enrol_start_date", + ) + + +class ArvSummaryForm( + SiteModelFormMixin, + FormValidatorMixin, + BaseModelFormMixin, + forms.ModelForm, +): + form_validator_cls = ArvSummaryFormValidator + + class Meta: + model = ArvSummary + fields = "__all__" diff --git a/src/effect_prn/migrations/0031_arvsummary.py b/src/effect_prn/migrations/0031_arvsummary.py new file mode 100644 index 00000000..4abd678b --- /dev/null +++ b/src/effect_prn/migrations/0031_arvsummary.py @@ -0,0 +1,255 @@ +# Generated by Django 6.0.4 on 2026-05-07 23:04 + +import _socket +import django.db.models.deletion +import django.utils.timezone +import django_audit_fields.fields.hostname_modification_field +import django_audit_fields.fields.userfield +import django_audit_fields.fields.uuid_auto_field +import django_revision.revision_field +import edc_sites.managers +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ( + "effect_lists", + "0018_alter_antibiotics_options_alter_arvregimens_options_and_more", + ), + ( + "effect_prn", + "0030_alter_historicallosstofollowup_number_consecutive_missed_visits_and_more", + ), + ("sites", "0002_alter_domain_unique"), + ] + + operations = [ + migrations.CreateModel( + name="ArvSummary", + fields=[ + ( + "revision", + django_revision.revision_field.RevisionField( + blank=True, + default="", + editable=False, + help_text="System field. From git repository (tag:branch:commit), project metadata, project toml, project VERSION, or settings.", + max_length=75, + verbose_name="Revision", + ), + ), + ( + "created", + models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + ( + "modified", + models.DateTimeField(blank=True, default=django.utils.timezone.now), + ), + ( + "user_created", + django_audit_fields.fields.userfield.UserField( + blank=True, + default="", + help_text="Updated by admin.save_model", + max_length=50, + verbose_name="user created", + ), + ), + ( + "user_modified", + django_audit_fields.fields.userfield.UserField( + blank=True, + default="", + help_text="Updated by admin.save_model", + max_length=50, + verbose_name="user modified", + ), + ), + ( + "hostname_created", + models.CharField( + blank=True, + default=_socket.gethostname, + help_text="System field. (modified on create only)", + max_length=60, + verbose_name="Hostname created", + ), + ), + ( + "hostname_modified", + django_audit_fields.fields.hostname_modification_field.HostnameModificationField( + blank=True, + default="", + help_text="System field. (modified on every save)", + max_length=50, + verbose_name="Hostname modified", + ), + ), + ( + "device_created", + models.CharField( + blank=True, + default="", + max_length=10, + verbose_name="Device created", + ), + ), + ( + "device_modified", + models.CharField( + blank=True, + default="", + max_length=10, + verbose_name="Device modified", + ), + ), + ( + "locale_created", + models.CharField( + blank=True, + default="", + help_text="Auto-updated by Modeladmin", + max_length=10, + verbose_name="Locale created", + ), + ), + ( + "locale_modified", + models.CharField( + blank=True, + default="", + help_text="Auto-updated by Modeladmin", + max_length=10, + verbose_name="Locale modified", + ), + ), + ( + "id", + django_audit_fields.fields.uuid_auto_field.UUIDAutoField( + blank=True, + editable=False, + help_text="System auto field. UUID primary key.", + primary_key=True, + serialize=False, + ), + ), + ("subject_identifier", models.CharField(max_length=50, unique=True)), + ( + "art_at_screening", + models.CharField( + choices=[("Yes", "Yes"), ("No", "No")], + help_text="AT SCREENING, as opposed to at CrAg test or prior", + max_length=255, + verbose_name="Was ppt on ARVs at the time of SCREENING?", + ), + ), + ( + "art_start_date_known", + models.CharField( + choices=[ + ("Yes", "Yes"), + ("No", "No"), + ("N/A", "Not applicable"), + ], + max_length=255, + verbose_name="Is the most recent start/restart date of this ARV regimen known?", + ), + ), + ( + "art_start_date", + models.DateField( + blank=True, + null=True, + verbose_name="Most recent start/restart date of this ARV regimen?", + ), + ), + ( + "art_cont_enrol", + models.CharField( + choices=[ + ("Yes", "Yes"), + ("No", "No"), + ("N/A", "Not applicable"), + ], + max_length=255, + verbose_name="Were ARVs continued AT enrolment?", + ), + ), + ( + "art_changed_enrol", + models.CharField( + choices=[ + ("Yes", "Yes, ART was changed"), + ("No", "No, ART was not changed"), + ("unknown", "Unknown"), + ("N/A", "Not applicable"), + ], + max_length=255, + verbose_name="Were ARVs changed AT enrolment?", + ), + ), + ( + "art_after_enrol", + models.CharField( + choices=[ + ("Yes", "Yes"), + ("No", "No"), + ("N/A", "Not applicable"), + ], + max_length=255, + verbose_name="Were ARVs continued AFTER enrolment?", + ), + ), + ( + "art_after_enrol_startdate", + models.DateField( + blank=True, + null=True, + verbose_name="Most recent start/restart date of the ARV regimen continued AFTER enrolment?", + ), + ), + ( + "art_after_enrol_regimen", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="arv_summary_after_enrol", + to="effect_lists.arvregimens", + verbose_name="What ARV regimen did the participant continued AFTER enrolment?", + ), + ), + ( + "art_regimen_at_screening", + models.ForeignKey( + blank=True, + help_text="Required if on an ART at screening", + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="arv_summary_screening", + to="effect_lists.arvregimens", + verbose_name="What ARV regimen was the participant taking at the time of screening?", + ), + ), + ( + "site", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="+", + to="sites.site", + ), + ), + ], + options={ + "verbose_name": "Arv summary", + "verbose_name_plural": "Arv summaries", + }, + managers=[ + ("on_site", edc_sites.managers.CurrentSiteManager()), + ], + ), + ] diff --git a/src/effect_prn/migrations/0032_arvsummary_art_changed_enrol_regimen.py b/src/effect_prn/migrations/0032_arvsummary_art_changed_enrol_regimen.py new file mode 100644 index 00000000..2e543a3f --- /dev/null +++ b/src/effect_prn/migrations/0032_arvsummary_art_changed_enrol_regimen.py @@ -0,0 +1,31 @@ +# Generated by Django 6.0.4 on 2026-05-07 23:51 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ( + "effect_lists", + "0018_alter_antibiotics_options_alter_arvregimens_options_and_more", + ), + ("effect_prn", "0031_arvsummary"), + ] + + operations = [ + migrations.AddField( + model_name="arvsummary", + name="art_changed_enrol_regimen", + field=models.ForeignKey( + blank=True, + help_text="Required if on an ART at screening", + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="arv_summary_at_enrol", + to="effect_lists.arvregimens", + verbose_name="What ARV regimen was the participant taking at enrolment?", + ), + ), + ] diff --git a/src/effect_prn/migrations/0033_arvsummary_report_datetime_and_more.py b/src/effect_prn/migrations/0033_arvsummary_report_datetime_and_more.py new file mode 100644 index 00000000..b4ea6e65 --- /dev/null +++ b/src/effect_prn/migrations/0033_arvsummary_report_datetime_and_more.py @@ -0,0 +1,37 @@ +# Generated by Django 6.0.4 on 2026-05-08 00:25 + +import django.db.models.deletion +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ( + "effect_lists", + "0018_alter_antibiotics_options_alter_arvregimens_options_and_more", + ), + ("effect_prn", "0032_arvsummary_art_changed_enrol_regimen"), + ] + + operations = [ + migrations.AddField( + model_name="arvsummary", + name="report_datetime", + field=models.DateTimeField(default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name="arvsummary", + name="art_changed_enrol_regimen", + field=models.ForeignKey( + blank=True, + help_text="Required if ARV regimen changed at enrolment", + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="arv_summary_at_enrol", + to="effect_lists.arvregimens", + verbose_name="What ARV regimen was the participant taking at enrolment?", + ), + ), + ] diff --git a/src/effect_prn/migrations/0034_rename_art_at_screening_arvsummary_at_screening_and_more.py b/src/effect_prn/migrations/0034_rename_art_at_screening_arvsummary_at_screening_and_more.py new file mode 100644 index 00000000..58074ddd --- /dev/null +++ b/src/effect_prn/migrations/0034_rename_art_at_screening_arvsummary_at_screening_and_more.py @@ -0,0 +1,65 @@ +# Generated by Django 6.0.4 on 2026-05-08 00:35 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ( + "effect_lists", + "0018_alter_antibiotics_options_alter_arvregimens_options_and_more", + ), + ("effect_prn", "0033_arvsummary_report_datetime_and_more"), + ] + + operations = [ + migrations.RenameField( + model_name="arvsummary", + old_name="art_at_screening", + new_name="at_screening", + ), + migrations.RenameField( + model_name="arvsummary", + old_name="art_start_date", + new_name="at_screening_start_date", + ), + migrations.RenameField( + model_name="arvsummary", + old_name="art_start_date_known", + new_name="at_screening_start_date_known", + ), + migrations.RenameField( + model_name="arvsummary", + old_name="art_cont_enrol", + new_name="cont_enrol", + ), + migrations.RenameField( + model_name="arvsummary", + old_name="art_changed_enrol", + new_name="cont_enrol_changed", + ), + migrations.RenameField( + model_name="arvsummary", + old_name="art_changed_enrol_regimen", + new_name="cont_enrol_regimen", + ), + migrations.RemoveField( + model_name="arvsummary", + name="art_regimen_at_screening", + ), + migrations.AddField( + model_name="arvsummary", + name="at_screening_regimen", + field=models.ForeignKey( + blank=True, + help_text="Applicable if on an ART at screening", + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="arv_summary_screening", + to="effect_lists.arvregimens", + verbose_name="If Yes, what ARV regimen was the participant taking at screening?", + ), + ), + ] diff --git a/src/effect_prn/migrations/0035_rename_art_after_enrol_arvsummary_after_enrol_and_more.py b/src/effect_prn/migrations/0035_rename_art_after_enrol_arvsummary_after_enrol_and_more.py new file mode 100644 index 00000000..d2b9f55b --- /dev/null +++ b/src/effect_prn/migrations/0035_rename_art_after_enrol_arvsummary_after_enrol_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 6.0.4 on 2026-05-08 00:37 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("effect_prn", "0034_rename_art_at_screening_arvsummary_at_screening_and_more"), + ] + + operations = [ + migrations.RenameField( + model_name="arvsummary", + old_name="art_after_enrol", + new_name="after_enrol", + ), + migrations.RenameField( + model_name="arvsummary", + old_name="art_after_enrol_regimen", + new_name="after_enrol_regimen", + ), + migrations.RenameField( + model_name="arvsummary", + old_name="art_after_enrol_startdate", + new_name="after_enrol_start_date", + ), + ] diff --git a/src/effect_prn/migrations/0036_arvsummary_after_enrol_start_date_known_and_more.py b/src/effect_prn/migrations/0036_arvsummary_after_enrol_start_date_known_and_more.py new file mode 100644 index 00000000..1e647caa --- /dev/null +++ b/src/effect_prn/migrations/0036_arvsummary_after_enrol_start_date_known_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 6.0.4 on 2026-05-08 00:56 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("effect_prn", "0035_rename_art_after_enrol_arvsummary_after_enrol_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="arvsummary", + name="after_enrol_start_date_known", + field=models.CharField( + choices=[("Yes", "Yes"), ("No", "No"), ("N/A", "Not applicable")], + default="Yes", + max_length=255, + verbose_name="Is the most recent start/restart date of this ARV regimen known?", + ), + preserve_default=False, + ), + migrations.AlterField( + model_name="arvsummary", + name="after_enrol_start_date", + field=models.DateField( + blank=True, + null=True, + verbose_name="Most recent start/restart date of this ARV regimen", + ), + ), + ] diff --git a/src/effect_prn/migrations/0037_alter_arvsummary_after_enrol_regimen_and_more.py b/src/effect_prn/migrations/0037_alter_arvsummary_after_enrol_regimen_and_more.py new file mode 100644 index 00000000..c4616f92 --- /dev/null +++ b/src/effect_prn/migrations/0037_alter_arvsummary_after_enrol_regimen_and_more.py @@ -0,0 +1,44 @@ +# Generated by Django 6.0.4 on 2026-05-08 01:08 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ( + "effect_lists", + "0018_alter_antibiotics_options_alter_arvregimens_options_and_more", + ), + ("effect_prn", "0036_arvsummary_after_enrol_start_date_known_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="arvsummary", + name="after_enrol_regimen", + field=models.ForeignKey( + blank=True, + help_text="Applicable if ARV regimen was continued after enrolment", + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="arv_summary_after_enrol", + to="effect_lists.arvregimens", + verbose_name="What ARV regimen did the participant continued AFTER enrolment?", + ), + ), + migrations.AlterField( + model_name="arvsummary", + name="cont_enrol_regimen", + field=models.ForeignKey( + blank=True, + help_text="Applicable if ARV regimen changed at enrolment", + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name="arv_summary_at_enrol", + to="effect_lists.arvregimens", + verbose_name="What ARV regimen was the participant taking at enrolment?", + ), + ), + ] diff --git a/src/effect_prn/models/__init__.py b/src/effect_prn/models/__init__.py index 8a686581..ae42909a 100644 --- a/src/effect_prn/models/__init__.py +++ b/src/effect_prn/models/__init__.py @@ -1,3 +1,4 @@ +from .arv_summary import ArvSummary from .end_of_study import EndOfStudy from .hospitalization import Hospitalization from .loss_to_followup import LossToFollowup diff --git a/src/effect_prn/models/arv_summary.py b/src/effect_prn/models/arv_summary.py new file mode 100644 index 00000000..4885fee9 --- /dev/null +++ b/src/effect_prn/models/arv_summary.py @@ -0,0 +1,98 @@ +from clinicedc_constants.choices import YES_NO, YES_NO_NA +from django.db import models +from django.utils import timezone +from edc_identifier.model_mixins import UniqueSubjectIdentifierFieldMixin +from edc_model.models import BaseUuidModel +from edc_sites.model_mixins import SiteModelMixin + +from effect_lists.models import ArvRegimens + +from ..choices import ARV_CHANGE_OPTIONS + + +class ArvSummary(SiteModelMixin, UniqueSubjectIdentifierFieldMixin, BaseUuidModel): + report_datetime = models.DateTimeField(default=timezone.now) + + # does this imply adherence?? + at_screening = models.CharField( + verbose_name="Was ppt on ARVs at the time of SCREENING?", + max_length=255, + choices=YES_NO, + help_text="AT SCREENING, as opposed to at CrAg test or prior", + ) + + at_screening_regimen = models.ForeignKey( + ArvRegimens, + verbose_name=("If Yes, what ARV regimen was the participant taking at screening?"), + on_delete=models.PROTECT, + related_name="arv_summary_screening", + null=True, + blank=True, + help_text="Applicable if on an ART at screening", + ) + + at_screening_start_date_known = models.CharField( + verbose_name="Is the most recent start/restart date of this ARV regimen known?", + max_length=255, + choices=YES_NO_NA, + ) + + at_screening_start_date = models.DateField( + verbose_name="Most recent start/restart date of this ARV regimen?", + null=True, + blank=True, + ) + + cont_enrol = models.CharField( + verbose_name="Were ARVs continued AT enrolment?", + max_length=255, + choices=YES_NO_NA, + ) + + cont_enrol_changed = models.CharField( + verbose_name="Were ARVs changed AT enrolment?", + max_length=255, + choices=ARV_CHANGE_OPTIONS, + ) + + cont_enrol_regimen = models.ForeignKey( + ArvRegimens, + verbose_name="What ARV regimen was the participant taking at enrolment?", + on_delete=models.PROTECT, + related_name="arv_summary_at_enrol", + null=True, + blank=True, + help_text="Applicable if ARV regimen changed at enrolment", + ) + + after_enrol = models.CharField( + verbose_name="Were ARVs continued AFTER enrolment?", + max_length=255, + choices=YES_NO_NA, + ) + + after_enrol_regimen = models.ForeignKey( + ArvRegimens, + verbose_name="What ARV regimen did the participant continued AFTER enrolment?", + on_delete=models.PROTECT, + related_name="arv_summary_after_enrol", + null=True, + blank=True, + help_text="Applicable if ARV regimen was continued after enrolment", + ) + + after_enrol_start_date_known = models.CharField( + verbose_name="Is the most recent start/restart date of this ARV regimen known?", + max_length=255, + choices=YES_NO_NA, + ) + + after_enrol_start_date = models.DateField( + verbose_name=("Most recent start/restart date of this ARV regimen"), + null=True, + blank=True, + ) + + class Meta: + verbose_name = "Arv summary" + verbose_name_plural = "Arv summaries" diff --git a/src/effect_reports/admin/__init__.py b/src/effect_reports/admin/__init__.py index 33ed6bf7..49d358b2 100644 --- a/src/effect_reports/admin/__init__.py +++ b/src/effect_reports/admin/__init__.py @@ -1,4 +1,5 @@ from .dbviews import ( + ArvSummaryReportAdmin, BaselineVlAllAdmin, BaselineVlMissingQuantifierAdmin, OnStudyMissingLabValuesAdmin, diff --git a/src/effect_reports/admin/dbviews/__init__.py b/src/effect_reports/admin/dbviews/__init__.py index dbae00db..beac5f0b 100644 --- a/src/effect_reports/admin/dbviews/__init__.py +++ b/src/effect_reports/admin/dbviews/__init__.py @@ -1,3 +1,4 @@ +from .arv_summary_report_admin import ArvSummaryReportAdmin from .baseline_vl_all_admin import BaselineVlAllAdmin from .baseline_vl_missing_quantifier_admin import BaselineVlMissingQuantifierAdmin from .on_study_missing_lab_values_admin import OnStudyMissingLabValuesAdmin diff --git a/src/effect_reports/admin/dbviews/arv_summary_report_admin.py b/src/effect_reports/admin/dbviews/arv_summary_report_admin.py new file mode 100644 index 00000000..5d541eaf --- /dev/null +++ b/src/effect_reports/admin/dbviews/arv_summary_report_admin.py @@ -0,0 +1,82 @@ +from clinicedc_constants import NO, YES +from django.contrib import admin +from django.contrib.admin import SimpleListFilter +from django.core.exceptions import ObjectDoesNotExist +from django.db.models import Q +from django.urls import reverse +from django.utils.html import format_html +from edc_model_admin.dashboard import ModelAdminDashboardMixin +from edc_model_admin.mixins import TemplatesModelAdminMixin +from edc_qareports.modeladmin_mixins import QaReportModelAdminMixin +from edc_sites.admin import SiteModelAdminMixin + +from effect_prn.models import ArvSummary + +from ...admin_site import effect_reports_admin +from ...models import ArvSummaryReport + + +class CompletedListFilter(SimpleListFilter): + title = "Completed" + parameter_name = "completed" + + def lookups(self, request, model_admin): # noqa: ARG002 + return ( + (YES, "Yes"), + (NO, "No"), + ) + + def queryset(self, request, queryset): # noqa: ARG002 + self.value() + if self.value() == YES: + subqs = ArvSummary.objects.all().values("subject_identifier") + return queryset.filter(Q(subject_identifier__in=subqs)) + if self.value() == NO: + subqs = ArvSummary.objects.all().values("subject_identifier") + return queryset.filter(~Q(subject_identifier__in=subqs)) + return queryset + + +@admin.register(ArvSummaryReport, site=effect_reports_admin) +class ArvSummaryReportAdmin( + QaReportModelAdminMixin, + SiteModelAdminMixin, + ModelAdminDashboardMixin, + TemplatesModelAdminMixin, + admin.ModelAdmin, +): + include_note_column: bool = False + + ordering = ("subject_identifier",) + + list_display = ("subject_identifier", "arv_summary_link", "dashboard", "created") + + list_filter = (CompletedListFilter, "site") + + search_fields = ("subject_identifier",) + + @admin.display(description="Add/Edit ARV Summary", ordering="subject_identifier") + def arv_summary_link(self, obj=None): + try: + arv_summary_obj = ArvSummary.objects.get(subject_identifier=obj.subject_identifier) + except ObjectDoesNotExist: + url = reverse("effect_prn_admin:effect_prn_arvsummary_add") + label = "Add" + bg_color = "#f0ad4e" + else: + url = reverse( + "effect_prn_admin:effect_prn_arvsummary_change", args=(arv_summary_obj.id,) + ) + label = "Edit" + bg_color = "#5cb85c" + next_querystring = "effect_reports_admin:effect_reports_arvsummaryreport_changelist" + return format_html( + '{}', + bg_color, + url, + next_querystring, + obj.subject_identifier, + label, + ) diff --git a/src/effect_reports/migrations/0023_arvsummaryreport.py b/src/effect_reports/migrations/0023_arvsummaryreport.py new file mode 100644 index 00000000..30ebec7c --- /dev/null +++ b/src/effect_reports/migrations/0023_arvsummaryreport.py @@ -0,0 +1,41 @@ +# Generated by Django 6.0.4 on 2026-05-08 01:18 + +import django.utils.timezone +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("effect_reports", "0022_alter_historicalserumcragdatenote_label_and_more"), + ] + + operations = [ + migrations.CreateModel( + name="ArvSummaryReport", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("report_model", models.CharField(max_length=50)), + ("subject_identifier", models.CharField(max_length=25)), + ("visit_code", models.CharField(default="", max_length=25)), + ("visit_code_sequence", models.IntegerField(null=True)), + ("label", models.CharField(max_length=150, null=True)), + ("created", models.DateTimeField(default=django.utils.timezone.now)), + ], + options={ + "verbose_name": "Arv summary to complete", + "verbose_name_plural": "ARV Summarys to complete", + "db_table": "effect_reports_arvsummaryview", + "managed": False, + "default_permissions": ("view", "export", "viewallsites"), + }, + ), + ] diff --git a/src/effect_reports/migrations/0024_auto_20260508_0421.py b/src/effect_reports/migrations/0024_auto_20260508_0421.py new file mode 100644 index 00000000..d5761bfd --- /dev/null +++ b/src/effect_reports/migrations/0024_auto_20260508_0421.py @@ -0,0 +1,284 @@ +# Generated by Django 6.0.4 on 2026-05-08 01:21 + +import django_db_views.migration_functions +import django_db_views.operations +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("effect_reports", "0023_arvsummaryreport"), + ] + + operations = [ + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.arvsummaryreport' as `report_model` from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "", "effect_reports_arvsummaryview", engine="django.db.backends.mysql" + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "", + "effect_reports_arvsummaryview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "", "effect_reports_arvsummaryview", engine="django.db.backends.sqlite3" + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlall' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlall' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlmissingquantifier' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlmissingquantifier' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.onstudymissinglabvalues' as `report_model` from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.onstudymissinglabvalues' as `report_model` from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxgteg3other' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_gte_g3_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxgteg3other' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_gte_g3_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxother' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxother' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792sisxlistcandidates' as `report_model` from (SELECT v.site_id, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, crf.current_sx_other, '' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792sisxlistcandidates' as `report_model` from (SELECT v.site_id, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, crf.current_sx_other, '' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + ] diff --git a/src/effect_reports/migrations/0025_auto_20260508_0443.py b/src/effect_reports/migrations/0025_auto_20260508_0443.py new file mode 100644 index 00000000..24f65dd1 --- /dev/null +++ b/src/effect_reports/migrations/0025_auto_20260508_0443.py @@ -0,0 +1,288 @@ +# Generated by Django 6.0.4 on 2026-05-08 01:43 + +import django_db_views.migration_functions +import django_db_views.operations +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("effect_reports", "0024_auto_20260508_0421"), + ] + + operations = [ + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.arvsummaryreport' as `report_model` from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.arvsummaryreport' as `report_model` from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlall' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlall' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlmissingquantifier' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlmissingquantifier' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.onstudymissinglabvalues' as `report_model` from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.onstudymissinglabvalues' as `report_model` from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxgteg3other' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_gte_g3_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxgteg3other' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_gte_g3_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxother' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxother' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792sisxlistcandidates' as `report_model` from (SELECT v.site_id, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, crf.current_sx_other, '' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792sisxlistcandidates' as `report_model` from (SELECT v.site_id, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, crf.current_sx_other, '' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + ] diff --git a/src/effect_reports/migrations/0026_auto_20260508_0519.py b/src/effect_reports/migrations/0026_auto_20260508_0519.py new file mode 100644 index 00000000..185298b3 --- /dev/null +++ b/src/effect_reports/migrations/0026_auto_20260508_0519.py @@ -0,0 +1,288 @@ +# Generated by Django 6.0.4 on 2026-05-08 02:19 + +import django_db_views.migration_functions +import django_db_views.operations +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("effect_reports", "0025_auto_20260508_0443"), + ] + + operations = [ + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.arvsummaryreport' as `report_model` from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.arvsummaryreport' as `report_model` from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.arvsummaryreport' as report_model from (SELECT rs.subject_identifier, rs.user_created, rs.user_modified, rs.modified, rs.site_id AS site_id, '' AS visit_code, 0 AS visit_code_sequence, '' AS label FROM edc_registration_registeredsubject AS rs LEFT JOIN effect_prn_arvsummary AS crf ON rs.subject_identifier = crf.subject_identifier WHERE crf.subject_identifier IS NULL) as A ORDER BY subject_identifier", + "effect_reports_arvsummaryview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlall' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlall' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlall' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlallview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlmissingquantifier' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.baselinevlmissingquantifier' as `report_model` from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CASE WHEN '.' IS NULL OR v.visit_code IS NULL OR v.visit_code_sequence IS NULL THEN NULL ELSE CONCAT_WS('.', v.visit_code, v.visit_code_sequence) END AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.baselinevlmissingquantifier' as report_model from (SELECT v.subject_identifier, crf.id AS crf_id, crf.site_id, v.visit_code, v.visit_code_sequence, CONCAT_WS('.', v.visit_code, v.visit_code_sequence) AS visit_code_str, crf.has_viral_load_result, crf.viral_load_result, crf.viral_load_quantifier, crf.viral_load_date, crf.viral_load_date_estimated, crf.user_created, crf.user_modified, crf.modified, '' AS label FROM effect_subject_arvhistory AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.viral_load_quantifier IS NULL OR crf.viral_load_quantifier = '') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_baselinevlmissingquantifierview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.onstudymissinglabvalues' as `report_model` from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.onstudymissinglabvalues' as `report_model` from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, get_random_uuid() as id, now() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, datetime() as created, 'effect_reports.onstudymissinglabvalues' as report_model from (SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultschem AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'chemistry' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.lpcsf' AS label_lower, 'CSFC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_lpcsf AS crf ON req.id = crf.csf_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'csf_culture' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_bloodresultsfbc AS crf ON req.id = crf.requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'fbc' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT req.subject_identifier, req.id AS original_id, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified, 'effect_subject.tbdiagnostics' AS label_lower, 'SPM requisitioned but not entered' AS label, COUNT(*) AS records FROM effect_subject_subjectrequisition AS req LEFT JOIN effect_subject_tbdiagnostics AS crf ON req.id = crf.sputum_requisition_id LEFT JOIN effect_subject_subjectvisit AS v ON v.id = req.subject_visit_id LEFT JOIN edc_lab_panel AS panel ON req.panel_id = panel.id WHERE panel.name = 'sputum' AND req.is_drawn = 'Yes' AND crf.id IS NULL GROUP BY req.id, req.subject_identifier, req.subject_visit_id, req.report_datetime, req.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, req.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alt_value IS NULL OR crf.alt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing creatinine value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.creatinine_value IS NULL OR crf.creatinine_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing albumin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.albumin_value IS NULL OR crf.albumin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing alp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.alp_value IS NULL OR crf.alp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ast value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ast_value IS NULL OR crf.ast_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing crp value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.crp_value IS NULL OR crf.crp_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing egfr value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.egfr_value IS NULL OR crf.egfr_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing magnesium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.magnesium_value IS NULL OR crf.magnesium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing potassium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.potassium_value IS NULL OR crf.potassium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing sodium value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.sodium_value IS NULL OR crf.sodium_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing ggt value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.ggt_value IS NULL OR crf.ggt_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing urea value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.urea_value IS NULL OR crf.urea_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultschem' AS label_lower, 'CHEM: missing tbil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultschem AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.tbil_value IS NULL OR crf.tbil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing haemoglobin value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.haemoglobin_value IS NULL OR crf.haemoglobin_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing wbc value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.wbc_value IS NULL OR crf.wbc_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing platelets value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.platelets_value IS NULL OR crf.platelets_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_value IS NULL OR crf.neutrophil_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing neutrophil_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.neutrophil_diff_value IS NULL OR crf.neutrophil_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_value IS NULL OR crf.lymphocyte_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified UNION SELECT v.subject_identifier, crf.id AS original_id, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified, 'effect_subject.bloodresultsfbc' AS label_lower, 'FBC: missing lymphocyte_diff value/units' AS label, COUNT(*) AS records FROM effect_subject_bloodresultsfbc AS crf LEFT JOIN effect_subject_subjectvisit AS v ON v.id = crf.subject_visit_id WHERE crf.lymphocyte_diff_value IS NULL OR crf.lymphocyte_diff_units IS NULL GROUP BY v.subject_identifier, crf.subject_visit_id, crf.report_datetime, crf.site_id, v.visit_code, v.visit_code_sequence, v.schedule_name, crf.modified) as A ORDER BY subject_identifier, site_id", + "effect_reports_onstudymissinglabvaluesview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxgteg3other' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_gte_g3_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxgteg3other' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_gte_g3_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxgteg3other\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_gte_g3_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxgteg3otherview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxother' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792kwincurrentsxother' as `report_model` from (SELECT `v`.`site_id`, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, `crf`.`id` AS crf_id, `crf`.`current_sx_other`, `crf`.`user_created`, `crf`.`user_modified`, `crf`.`modified`, '' AS label FROM `effect_subject_signsandsymptoms` AS `crf` LEFT JOIN `effect_subject_subjectvisit` AS `v` ON `crf`.`subject_visit_id` = `v`.`id` WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792kwincurrentsxother\' as report_model from (SELECT "v"."site_id", "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", "crf"."id" AS crf_id, "crf"."current_sx_other", "crf"."user_created", "crf"."user_modified", "crf"."modified", \'\' AS label FROM "effect_subject_signsandsymptoms" AS "crf" LEFT JOIN "effect_subject_subjectvisit" AS "v" ON "crf"."subject_visit_id" = "v"."id" WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792kwincurrentsxotherview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792sisxlistcandidates' as `report_model` from (SELECT v.site_id, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, crf.current_sx_other, '' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.mysql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + "select *, uuid() as id, now() as `created`, 'effect_reports.rm792sisxlistcandidates' as `report_model` from (SELECT v.site_id, `v`.`subject_identifier`, `v`.`visit_code`, `v`.`visit_code_sequence`, crf.current_sx_other, '' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE(`current_sx_gte_g3_other`, 'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence", + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.mysql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.postgresql", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, get_random_uuid() as id, now() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE "current_sx_gte_g3_other" ~ \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\') as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.postgresql", + ), + atomic=False, + ), + django_db_views.operations.ViewRunPython( + code=django_db_views.migration_functions.ForwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.sqlite3", + ), + reverse_code=django_db_views.migration_functions.BackwardViewMigration( + 'select *, uuid() as id, datetime() as created, \'effect_reports.rm792sisxlistcandidates\' as report_model from (SELECT v.site_id, "v"."subject_identifier", "v"."visit_code", "v"."visit_code_sequence", crf.current_sx_other, \'\' AS label FROM effect_subject_signsandsymptoms AS crf LEFT JOIN effect_subject_subjectvisit AS v ON crf.subject_visit_id = v.id WHERE REGEXP_LIKE("current_sx_gte_g3_other", \'abdom|appet|back|behav|conf|consti|diar|disten|diz|dry|fatig|insom|itch|mala|nasal|neuro|nose|palp|pleur|rash|rhin|run|urin|weak\')) as A ORDER BY site_id, subject_identifier, visit_code, visit_code_sequence', + "effect_reports_rm792sisxlistcandidatesview", + engine="django.db.backends.sqlite3", + ), + atomic=False, + ), + ] diff --git a/src/effect_reports/models/__init__.py b/src/effect_reports/models/__init__.py index 9d1f2abe..56598fc8 100644 --- a/src/effect_reports/models/__init__.py +++ b/src/effect_reports/models/__init__.py @@ -1,4 +1,5 @@ from .dbviews import ( + ArvSummaryReport, BaselineVlAll, BaselineVlMissingQuantifier, OnStudyMissingLabValues, diff --git a/src/effect_reports/models/dbviews/__init__.py b/src/effect_reports/models/dbviews/__init__.py index 4f48fc27..897f4523 100644 --- a/src/effect_reports/models/dbviews/__init__.py +++ b/src/effect_reports/models/dbviews/__init__.py @@ -1,3 +1,4 @@ +from .arv_summary import ArvSummaryReport from .baseline_vl_all import BaselineVlAll from .baseline_vl_missing_quantifier import BaselineVlMissingQuantifier from .on_study_missing_lab_values import OnStudyMissingLabValues @@ -6,6 +7,7 @@ from .rm792_si_sx_list_candidates import Rm792SiSxListCandidates __all__ = [ + "ArvSummaryReport", "BaselineVlAll", "BaselineVlMissingQuantifier", "OnStudyMissingLabValues", diff --git a/src/effect_reports/models/dbviews/arv_summary/__init__.py b/src/effect_reports/models/dbviews/arv_summary/__init__.py new file mode 100644 index 00000000..7e451d1b --- /dev/null +++ b/src/effect_reports/models/dbviews/arv_summary/__init__.py @@ -0,0 +1 @@ +from .unmanaged_model import ArvSummaryReport diff --git a/src/effect_reports/models/dbviews/arv_summary/unmanaged_model.py b/src/effect_reports/models/dbviews/arv_summary/unmanaged_model.py new file mode 100644 index 00000000..1f9a799d --- /dev/null +++ b/src/effect_reports/models/dbviews/arv_summary/unmanaged_model.py @@ -0,0 +1,18 @@ +from django_db_views.db_view import DBView +from edc_qareports.model_mixins import ( + QaReportModelMixin, + qa_reports_permissions, +) + +from .view_definition import get_view_definition + + +class ArvSummaryReport(QaReportModelMixin, DBView): + view_definition = get_view_definition() + + class Meta: + managed = False + db_table = "effect_reports_arvsummaryview" + verbose_name = "Arv summary to complete" + verbose_name_plural = "ARV Summarys to complete" + default_permissions = qa_reports_permissions diff --git a/src/effect_reports/models/dbviews/arv_summary/view_definition.py b/src/effect_reports/models/dbviews/arv_summary/view_definition.py new file mode 100644 index 00000000..5933a02a --- /dev/null +++ b/src/effect_reports/models/dbviews/arv_summary/view_definition.py @@ -0,0 +1,27 @@ +from edc_qareports.sql_generator import SqlViewGenerator + + +def get_view_definition() -> dict: + subquery = """ + select rs.subject_identifier, + rs.user_created, + rs.user_modified, + rs.modified, + rs.site_id as site_id, + '' as visit_code, + 0 as visit_code_sequence, + '' as label, + from edc_registration_registeredsubject as rs + left join effect_prn_arvsummary as crf + on rs.subject_identifier = crf.subject_identifier + """ + + sql_view = SqlViewGenerator( + report_model="effect_reports.arvsummaryreport", + ordering=["subject_identifier"], + ) + return { + "django.db.backends.mysql": sql_view.as_mysql(subquery), + "django.db.backends.postgresql": sql_view.as_postgres(subquery), + "django.db.backends.sqlite3": sql_view.as_sqlite(subquery), + } diff --git a/uv.lock b/uv.lock index e8730935..1c67f9c5 100644 --- a/uv.lock +++ b/uv.lock @@ -775,7 +775,7 @@ notebook = [ [[package]] name = "clinicedc-constants" -version = "1.4.0" +version = "1.4.1" source = { editable = "../clinicedc-constants" } [[package]]