# Generated by Django 5.2.3 on 2025-11-09 19:02 import django.db.models.deletion import simple_history.models import uuid from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ('core', '0007_contactmessage'), ] operations = [ migrations.CreateModel( name='HistoricalPatientSafetyFlag', fields=[ ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, verbose_name='ID')), ('created_at', models.DateTimeField(blank=True, editable=False, verbose_name='Created At')), ('updated_at', models.DateTimeField(blank=True, editable=False, verbose_name='Updated At')), ('flag_type', models.CharField(choices=[('AGGRESSION', 'Aggression Risk'), ('ELOPEMENT', 'Elopement Risk'), ('SELF_HARM', 'Self-Harm Risk'), ('ALLERGY', 'Allergy Alert'), ('MEDICAL', 'Medical Alert'), ('SEIZURE', 'Seizure Risk'), ('SENSORY', 'Sensory Sensitivity'), ('COMMUNICATION', 'Communication Needs'), ('DIETARY', 'Dietary Restriction'), ('OTHER', 'Other')], max_length=20, verbose_name='Flag Type')), ('severity', models.CharField(choices=[('LOW', 'Low'), ('MEDIUM', 'Medium'), ('HIGH', 'High'), ('CRITICAL', 'Critical')], default='MEDIUM', max_length=10, verbose_name='Severity')), ('title', models.CharField(help_text='Brief description of the safety concern', max_length=200, verbose_name='Title')), ('description', models.TextField(help_text='Detailed description of the safety concern and protocols', verbose_name='Description')), ('protocols', models.TextField(blank=True, help_text='Specific protocols or procedures to follow', verbose_name='Safety Protocols')), ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), ('deactivated_at', models.DateTimeField(blank=True, null=True, verbose_name='Deactivated At')), ('deactivation_reason', models.TextField(blank=True, verbose_name='Deactivation Reason')), ('history_id', models.AutoField(primary_key=True, serialize=False)), ('history_date', models.DateTimeField(db_index=True)), ('history_change_reason', models.CharField(max_length=100, null=True)), ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), ('created_by', models.ForeignKey(blank=True, db_constraint=False, help_text='Must be Senior Therapist or Administrator', null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), ('deactivated_by', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Deactivated By')), ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('patient', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='core.patient', verbose_name='Patient')), ('tenant', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='core.tenant', verbose_name='Tenant')), ], options={ 'verbose_name': 'historical Patient Safety Flag', 'verbose_name_plural': 'historical Patient Safety Flags', 'ordering': ('-history_date', '-history_id'), 'get_latest_by': ('history_date', 'history_id'), }, bases=(simple_history.models.HistoricalChanges, models.Model), ), migrations.CreateModel( name='PatientSafetyFlag', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), ('flag_type', models.CharField(choices=[('AGGRESSION', 'Aggression Risk'), ('ELOPEMENT', 'Elopement Risk'), ('SELF_HARM', 'Self-Harm Risk'), ('ALLERGY', 'Allergy Alert'), ('MEDICAL', 'Medical Alert'), ('SEIZURE', 'Seizure Risk'), ('SENSORY', 'Sensory Sensitivity'), ('COMMUNICATION', 'Communication Needs'), ('DIETARY', 'Dietary Restriction'), ('OTHER', 'Other')], max_length=20, verbose_name='Flag Type')), ('severity', models.CharField(choices=[('LOW', 'Low'), ('MEDIUM', 'Medium'), ('HIGH', 'High'), ('CRITICAL', 'Critical')], default='MEDIUM', max_length=10, verbose_name='Severity')), ('title', models.CharField(help_text='Brief description of the safety concern', max_length=200, verbose_name='Title')), ('description', models.TextField(help_text='Detailed description of the safety concern and protocols', verbose_name='Description')), ('protocols', models.TextField(blank=True, help_text='Specific protocols or procedures to follow', verbose_name='Safety Protocols')), ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), ('deactivated_at', models.DateTimeField(blank=True, null=True, verbose_name='Deactivated At')), ('deactivation_reason', models.TextField(blank=True, verbose_name='Deactivation Reason')), ('created_by', models.ForeignKey(help_text='Must be Senior Therapist or Administrator', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_safety_flags', to=settings.AUTH_USER_MODEL, verbose_name='Created By')), ('deactivated_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='deactivated_safety_flags', to=settings.AUTH_USER_MODEL, verbose_name='Deactivated By')), ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='safety_flags', to='core.patient', verbose_name='Patient')), ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_related', to='core.tenant', verbose_name='Tenant')), ], options={ 'verbose_name': 'Patient Safety Flag', 'verbose_name_plural': 'Patient Safety Flags', 'ordering': ['-severity', '-created_at'], }, ), migrations.CreateModel( name='PatientAllergy', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), ('allergy_type', models.CharField(choices=[('FOOD', 'Food Allergy'), ('MEDICATION', 'Medication Allergy'), ('ENVIRONMENTAL', 'Environmental Allergy'), ('LATEX', 'Latex Allergy'), ('OTHER', 'Other')], max_length=20, verbose_name='Allergy Type')), ('allergen', models.CharField(help_text='Specific allergen (e.g., peanuts, penicillin)', max_length=200, verbose_name='Allergen')), ('severity', models.CharField(choices=[('MILD', 'Mild'), ('MODERATE', 'Moderate'), ('SEVERE', 'Severe'), ('ANAPHYLAXIS', 'Anaphylaxis Risk')], max_length=15, verbose_name='Severity')), ('reaction_description', models.TextField(help_text='Describe the allergic reaction', verbose_name='Reaction Description')), ('treatment', models.TextField(blank=True, help_text='Treatment protocol (e.g., EpiPen, antihistamine)', verbose_name='Treatment')), ('verified_by_doctor', models.BooleanField(default=False, verbose_name='Verified by Doctor')), ('verification_date', models.DateField(blank=True, null=True, verbose_name='Verification Date')), ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='allergies', to='core.patient', verbose_name='Patient')), ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_related', to='core.tenant', verbose_name='Tenant')), ('safety_flag', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='allergies', to='core.patientsafetyflag', verbose_name='Related Safety Flag')), ], options={ 'verbose_name': 'Patient Allergy', 'verbose_name_plural': 'Patient Allergies', 'ordering': ['-severity', 'allergen'], }, ), migrations.CreateModel( name='HistoricalPatientAllergy', fields=[ ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, verbose_name='ID')), ('created_at', models.DateTimeField(blank=True, editable=False, verbose_name='Created At')), ('updated_at', models.DateTimeField(blank=True, editable=False, verbose_name='Updated At')), ('allergy_type', models.CharField(choices=[('FOOD', 'Food Allergy'), ('MEDICATION', 'Medication Allergy'), ('ENVIRONMENTAL', 'Environmental Allergy'), ('LATEX', 'Latex Allergy'), ('OTHER', 'Other')], max_length=20, verbose_name='Allergy Type')), ('allergen', models.CharField(help_text='Specific allergen (e.g., peanuts, penicillin)', max_length=200, verbose_name='Allergen')), ('severity', models.CharField(choices=[('MILD', 'Mild'), ('MODERATE', 'Moderate'), ('SEVERE', 'Severe'), ('ANAPHYLAXIS', 'Anaphylaxis Risk')], max_length=15, verbose_name='Severity')), ('reaction_description', models.TextField(help_text='Describe the allergic reaction', verbose_name='Reaction Description')), ('treatment', models.TextField(blank=True, help_text='Treatment protocol (e.g., EpiPen, antihistamine)', verbose_name='Treatment')), ('verified_by_doctor', models.BooleanField(default=False, verbose_name='Verified by Doctor')), ('verification_date', models.DateField(blank=True, null=True, verbose_name='Verification Date')), ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), ('history_id', models.AutoField(primary_key=True, serialize=False)), ('history_date', models.DateTimeField(db_index=True)), ('history_change_reason', models.CharField(max_length=100, null=True)), ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('patient', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='core.patient', verbose_name='Patient')), ('tenant', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='core.tenant', verbose_name='Tenant')), ('safety_flag', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='core.patientsafetyflag', verbose_name='Related Safety Flag')), ], options={ 'verbose_name': 'historical Patient Allergy', 'verbose_name_plural': 'historical Patient Allergies', 'ordering': ('-history_date', '-history_id'), 'get_latest_by': ('history_date', 'history_id'), }, bases=(simple_history.models.HistoricalChanges, models.Model), ), migrations.CreateModel( name='HistoricalCrisisBehaviorProtocol', fields=[ ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, verbose_name='ID')), ('created_at', models.DateTimeField(blank=True, editable=False, verbose_name='Created At')), ('updated_at', models.DateTimeField(blank=True, editable=False, verbose_name='Updated At')), ('trigger_description', models.TextField(help_text='What triggers this behavior?', verbose_name='Trigger Description')), ('warning_signs', models.TextField(help_text='Early warning signs to watch for', verbose_name='Warning Signs')), ('intervention_steps', models.TextField(help_text='Step-by-step intervention protocol', verbose_name='Intervention Steps')), ('de_escalation_techniques', models.TextField(blank=True, verbose_name='De-escalation Techniques')), ('emergency_contacts', models.TextField(blank=True, help_text='Who to contact in case of crisis', verbose_name='Emergency Contacts')), ('medications', models.TextField(blank=True, help_text='Any emergency medications or medical interventions', verbose_name='Emergency Medications')), ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), ('last_reviewed', models.DateField(blank=True, editable=False, verbose_name='Last Reviewed')), ('history_id', models.AutoField(primary_key=True, serialize=False)), ('history_date', models.DateTimeField(db_index=True)), ('history_change_reason', models.CharField(max_length=100, null=True)), ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), ('patient', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='core.patient', verbose_name='Patient')), ('reviewed_by', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Reviewed By')), ('tenant', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='core.tenant', verbose_name='Tenant')), ('safety_flag', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='core.patientsafetyflag', verbose_name='Related Safety Flag')), ], options={ 'verbose_name': 'historical Crisis Behavior Protocol', 'verbose_name_plural': 'historical Crisis Behavior Protocols', 'ordering': ('-history_date', '-history_id'), 'get_latest_by': ('history_date', 'history_id'), }, bases=(simple_history.models.HistoricalChanges, models.Model), ), migrations.CreateModel( name='CrisisBehaviorProtocol', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), ('trigger_description', models.TextField(help_text='What triggers this behavior?', verbose_name='Trigger Description')), ('warning_signs', models.TextField(help_text='Early warning signs to watch for', verbose_name='Warning Signs')), ('intervention_steps', models.TextField(help_text='Step-by-step intervention protocol', verbose_name='Intervention Steps')), ('de_escalation_techniques', models.TextField(blank=True, verbose_name='De-escalation Techniques')), ('emergency_contacts', models.TextField(blank=True, help_text='Who to contact in case of crisis', verbose_name='Emergency Contacts')), ('medications', models.TextField(blank=True, help_text='Any emergency medications or medical interventions', verbose_name='Emergency Medications')), ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), ('last_reviewed', models.DateField(auto_now=True, verbose_name='Last Reviewed')), ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='crisis_protocols', to='core.patient', verbose_name='Patient')), ('reviewed_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviewed_protocols', to=settings.AUTH_USER_MODEL, verbose_name='Reviewed By')), ('tenant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_related', to='core.tenant', verbose_name='Tenant')), ('safety_flag', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='crisis_protocols', to='core.patientsafetyflag', verbose_name='Related Safety Flag')), ], options={ 'verbose_name': 'Crisis Behavior Protocol', 'verbose_name_plural': 'Crisis Behavior Protocols', 'ordering': ['-last_reviewed'], }, ), migrations.AddIndex( model_name='patientsafetyflag', index=models.Index(fields=['patient', 'is_active'], name='core_patien_patient_04d4ce_idx'), ), migrations.AddIndex( model_name='patientsafetyflag', index=models.Index(fields=['flag_type', 'severity'], name='core_patien_flag_ty_21ba16_idx'), ), migrations.AddIndex( model_name='patientsafetyflag', index=models.Index(fields=['tenant', 'is_active'], name='core_patien_tenant__94c040_idx'), ), migrations.AddIndex( model_name='patientallergy', index=models.Index(fields=['patient', 'is_active'], name='core_patien_patient_b07cba_idx'), ), migrations.AddIndex( model_name='patientallergy', index=models.Index(fields=['allergy_type', 'severity'], name='core_patien_allergy_f7285d_idx'), ), migrations.AddIndex( model_name='crisisbehaviorprotocol', index=models.Index(fields=['patient', 'is_active'], name='core_crisis_patient_8b0425_idx'), ), migrations.AddIndex( model_name='crisisbehaviorprotocol', index=models.Index(fields=['tenant', 'is_active'], name='core_crisis_tenant__9b352b_idx'), ), ]