215 lines
19 KiB
Python
215 lines
19 KiB
Python
# 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'),
|
|
),
|
|
]
|