# Generated by Django 5.2.7 on 2025-10-27 10:50 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): initial = True dependencies = [ ("appointments", "0001_initial"), ("core", "0001_initial"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name="HistoricalNursingEncounter", 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"), ), ( "signed_at", models.DateTimeField(blank=True, null=True, verbose_name="Signed At"), ), ("encounter_date", models.DateField(verbose_name="Encounter Date")), ( "height_cm", models.DecimalField( blank=True, decimal_places=2, help_text="Height in centimeters", max_digits=5, null=True, verbose_name="Height (cm)", ), ), ( "weight_kg", models.DecimalField( blank=True, decimal_places=2, help_text="Weight in kilograms", max_digits=5, null=True, verbose_name="Weight (kg)", ), ), ( "head_circumference_cm", models.DecimalField( blank=True, decimal_places=2, help_text="Head circumference in centimeters", max_digits=5, null=True, verbose_name="Head Circumference (cm)", ), ), ( "hr_bpm", models.PositiveIntegerField( blank=True, help_text="Heart rate in beats per minute", null=True, verbose_name="Heart Rate (bpm)", ), ), ( "bp_systolic", models.PositiveIntegerField( blank=True, help_text="Systolic blood pressure in mmHg", null=True, verbose_name="BP Systolic (mmHg)", ), ), ( "bp_diastolic", models.PositiveIntegerField( blank=True, help_text="Diastolic blood pressure in mmHg", null=True, verbose_name="BP Diastolic (mmHg)", ), ), ( "respiratory_rate", models.PositiveIntegerField( blank=True, help_text="Respiratory rate per minute", null=True, verbose_name="Respiratory Rate (/min)", ), ), ( "spo2", models.PositiveIntegerField( blank=True, help_text="Oxygen saturation percentage", null=True, verbose_name="SpO2 (%)", ), ), ( "temperature", models.DecimalField( blank=True, decimal_places=1, help_text="Temperature in Celsius", max_digits=4, null=True, verbose_name="Temperature (°C)", ), ), ( "crt", models.CharField( blank=True, choices=[("LESS_THAN_2S", "< 2 seconds"), ("MORE_THAN_2S", "> 2 seconds")], help_text="Capillary Refill Time", max_length=20, verbose_name="CRT", ), ), ( "pain_score", models.PositiveSmallIntegerField( blank=True, help_text="Pain score from 0 (no pain) to 10 (worst pain)", null=True, verbose_name="Pain Score (0-10)", ), ), ( "allergy_present", models.BooleanField(default=False, verbose_name="Allergy Present"), ), ("allergy_details", models.TextField(blank=True, verbose_name="Allergy Details")), ("observations", models.TextField(blank=True, verbose_name="Observations")), ("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 ), ), ( "appointment", models.ForeignKey( blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name="+", to="appointments.appointment", verbose_name="Appointment", ), ), ( "filled_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="Filled 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", ), ), ( "signed_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="Signed 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", ), ), ], options={ "verbose_name": "historical Nursing Encounter", "verbose_name_plural": "historical Nursing Encounters", "ordering": ("-history_date", "-history_id"), "get_latest_by": ("history_date", "history_id"), }, bases=(simple_history.models.HistoricalChanges, models.Model), ), migrations.CreateModel( name="NursingEncounter", 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")), ( "signed_at", models.DateTimeField(blank=True, null=True, verbose_name="Signed At"), ), ("encounter_date", models.DateField(verbose_name="Encounter Date")), ( "height_cm", models.DecimalField( blank=True, decimal_places=2, help_text="Height in centimeters", max_digits=5, null=True, verbose_name="Height (cm)", ), ), ( "weight_kg", models.DecimalField( blank=True, decimal_places=2, help_text="Weight in kilograms", max_digits=5, null=True, verbose_name="Weight (kg)", ), ), ( "head_circumference_cm", models.DecimalField( blank=True, decimal_places=2, help_text="Head circumference in centimeters", max_digits=5, null=True, verbose_name="Head Circumference (cm)", ), ), ( "hr_bpm", models.PositiveIntegerField( blank=True, help_text="Heart rate in beats per minute", null=True, verbose_name="Heart Rate (bpm)", ), ), ( "bp_systolic", models.PositiveIntegerField( blank=True, help_text="Systolic blood pressure in mmHg", null=True, verbose_name="BP Systolic (mmHg)", ), ), ( "bp_diastolic", models.PositiveIntegerField( blank=True, help_text="Diastolic blood pressure in mmHg", null=True, verbose_name="BP Diastolic (mmHg)", ), ), ( "respiratory_rate", models.PositiveIntegerField( blank=True, help_text="Respiratory rate per minute", null=True, verbose_name="Respiratory Rate (/min)", ), ), ( "spo2", models.PositiveIntegerField( blank=True, help_text="Oxygen saturation percentage", null=True, verbose_name="SpO2 (%)", ), ), ( "temperature", models.DecimalField( blank=True, decimal_places=1, help_text="Temperature in Celsius", max_digits=4, null=True, verbose_name="Temperature (°C)", ), ), ( "crt", models.CharField( blank=True, choices=[("LESS_THAN_2S", "< 2 seconds"), ("MORE_THAN_2S", "> 2 seconds")], help_text="Capillary Refill Time", max_length=20, verbose_name="CRT", ), ), ( "pain_score", models.PositiveSmallIntegerField( blank=True, help_text="Pain score from 0 (no pain) to 10 (worst pain)", null=True, verbose_name="Pain Score (0-10)", ), ), ( "allergy_present", models.BooleanField(default=False, verbose_name="Allergy Present"), ), ("allergy_details", models.TextField(blank=True, verbose_name="Allergy Details")), ("observations", models.TextField(blank=True, verbose_name="Observations")), ( "appointment", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="nursing_encounters", to="appointments.appointment", verbose_name="Appointment", ), ), ( "filled_by", models.ForeignKey( null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="nursing_encounters_filled", to=settings.AUTH_USER_MODEL, verbose_name="Filled By", ), ), ( "patient", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="nursing_encounters", to="core.patient", verbose_name="Patient", ), ), ( "signed_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="%(app_label)s_%(class)s_signed", to=settings.AUTH_USER_MODEL, verbose_name="Signed 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", ), ), ], options={ "verbose_name": "Nursing Encounter", "verbose_name_plural": "Nursing Encounters", "ordering": ["-encounter_date", "-created_at"], }, ), migrations.CreateModel( name="GrowthChart", 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")), ("measurement_date", models.DateField(verbose_name="Measurement Date")), ( "age_months", models.PositiveIntegerField( help_text="Age in months at time of measurement", verbose_name="Age (months)", ), ), ( "height_cm", models.DecimalField( blank=True, decimal_places=2, max_digits=5, null=True, verbose_name="Height (cm)", ), ), ( "weight_kg", models.DecimalField( blank=True, decimal_places=2, max_digits=5, null=True, verbose_name="Weight (kg)", ), ), ( "head_circumference_cm", models.DecimalField( blank=True, decimal_places=2, max_digits=5, null=True, verbose_name="Head Circumference (cm)", ), ), ( "percentile_height", models.DecimalField( blank=True, decimal_places=2, help_text="Height percentile (0-100)", max_digits=5, null=True, verbose_name="Height Percentile", ), ), ( "percentile_weight", models.DecimalField( blank=True, decimal_places=2, help_text="Weight percentile (0-100)", max_digits=5, null=True, verbose_name="Weight Percentile", ), ), ( "percentile_head_circumference", models.DecimalField( blank=True, decimal_places=2, help_text="Head circumference percentile (0-100)", max_digits=5, null=True, verbose_name="Head Circumference Percentile", ), ), ( "percentile_bmi", models.DecimalField( blank=True, decimal_places=2, help_text="BMI percentile (0-100)", max_digits=5, null=True, verbose_name="BMI Percentile", ), ), ( "patient", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="growth_chart_data", to="core.patient", verbose_name="Patient", ), ), ( "nursing_encounter", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="growth_chart_entries", to="nursing.nursingencounter", verbose_name="Nursing Encounter", ), ), ], options={ "verbose_name": "Growth Chart Entry", "verbose_name_plural": "Growth Chart Entries", "ordering": ["patient", "measurement_date"], }, ), migrations.CreateModel( name="VitalSignsAlert", 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")), ( "vital_sign", models.CharField( help_text="Which vital sign triggered the alert", max_length=50, verbose_name="Vital Sign", ), ), ("value", models.CharField(max_length=50, verbose_name="Value")), ( "severity", models.CharField( choices=[ ("LOW", "Low"), ("MEDIUM", "Medium"), ("HIGH", "High"), ("CRITICAL", "Critical"), ], max_length=20, verbose_name="Severity", ), ), ( "status", models.CharField( choices=[ ("ACTIVE", "Active"), ("ACKNOWLEDGED", "Acknowledged"), ("RESOLVED", "Resolved"), ], default="ACTIVE", max_length=20, verbose_name="Status", ), ), ( "acknowledged_at", models.DateTimeField(blank=True, null=True, verbose_name="Acknowledged At"), ), ("notes", models.TextField(blank=True, verbose_name="Notes")), ( "acknowledged_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="acknowledged_alerts", to=settings.AUTH_USER_MODEL, verbose_name="Acknowledged By", ), ), ( "nursing_encounter", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="alerts", to="nursing.nursingencounter", verbose_name="Nursing Encounter", ), ), ( "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": "Vital Signs Alert", "verbose_name_plural": "Vital Signs Alerts", "ordering": ["-created_at"], }, ), migrations.AddIndex( model_name="nursingencounter", index=models.Index( fields=["patient", "encounter_date"], name="nursing_nur_patient_2c68f5_idx" ), ), migrations.AddIndex( model_name="nursingencounter", index=models.Index(fields=["appointment"], name="nursing_nur_appoint_136cbd_idx"), ), migrations.AddIndex( model_name="nursingencounter", index=models.Index( fields=["tenant", "encounter_date"], name="nursing_nur_tenant__cdc9d2_idx" ), ), migrations.AddIndex( model_name="growthchart", index=models.Index( fields=["patient", "measurement_date"], name="nursing_gro_patient_dc9a1a_idx" ), ), migrations.AddIndex( model_name="growthchart", index=models.Index( fields=["patient", "age_months"], name="nursing_gro_patient_8fc1a4_idx" ), ), migrations.AddIndex( model_name="vitalsignsalert", index=models.Index(fields=["status", "severity"], name="nursing_vit_status_90c6e8_idx"), ), migrations.AddIndex( model_name="vitalsignsalert", index=models.Index(fields=["nursing_encounter"], name="nursing_vit_nursing_cb0843_idx"), ), migrations.AddIndex( model_name="vitalsignsalert", index=models.Index(fields=["tenant", "status"], name="nursing_vit_tenant__2ce47f_idx"), ), ]