# Generated manually by ChatGPT
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings

def lab_upload_to(instance, filename):
    return f"emr/labs/patient_{instance.encounter.patient_id}/encounter_{instance.encounter_id}/{filename}"

class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='PatientProfile',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('full_name', models.CharField(max_length=200)),
                ('email', models.EmailField(blank=True, max_length=254)),
                ('phone', models.CharField(blank=True, max_length=50)),
                ('date_of_birth', models.DateField(blank=True, null=True)),
                ('gender', models.CharField(blank=True, max_length=30)),
                ('address', models.TextField(blank=True)),
                ('blood_group', models.CharField(blank=True, max_length=10)),
                ('allergies', models.TextField(blank=True)),
                ('medical_history', models.TextField(blank=True)),
                ('emergency_contact_name', models.CharField(blank=True, max_length=200)),
                ('emergency_contact_phone', models.CharField(blank=True, max_length=50)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('user', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='patient_profile', to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='Encounter',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('visit_datetime', models.DateTimeField(default=django.utils.timezone.now)),
                ('chief_complaint', models.CharField(blank=True, max_length=255)),
                ('assessment_notes', models.TextField(blank=True)),
                ('plan_notes', models.TextField(blank=True)),
                ('is_closed', models.BooleanField(default=False)),
                ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='emr_encounters', to=settings.AUTH_USER_MODEL)),
                ('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='encounters', to='emr.patientprofile')),
            ],
        ),
        migrations.CreateModel(
            name='VitalSign',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('recorded_at', models.DateTimeField(auto_now_add=True)),
                ('temperature_c', models.DecimalField(blank=True, decimal_places=1, max_digits=4, null=True)),
                ('pulse_bpm', models.PositiveIntegerField(blank=True, null=True)),
                ('respiration_rpm', models.PositiveIntegerField(blank=True, null=True)),
                ('systolic_mmHg', models.PositiveIntegerField(blank=True, null=True)),
                ('diastolic_mmHg', models.PositiveIntegerField(blank=True, null=True)),
                ('spo2_percent', models.PositiveIntegerField(blank=True, null=True)),
                ('weight_kg', models.DecimalField(blank=True, decimal_places=2, max_digits=6, null=True)),
                ('height_cm', models.DecimalField(blank=True, decimal_places=1, max_digits=6, null=True)),
                ('notes', models.TextField(blank=True)),
                ('encounter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vitals', to='emr.encounter')),
                ('recorded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='emr_vitals', to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='Diagnosis',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('title', models.CharField(max_length=255)),
                ('icd_code', models.CharField(blank=True, max_length=30)),
                ('notes', models.TextField(blank=True)),
                ('diagnosed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='emr_diagnoses', to=settings.AUTH_USER_MODEL)),
                ('encounter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='diagnoses', to='emr.encounter')),
            ],
        ),
        migrations.CreateModel(
            name='Prescription',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('medication_name', models.CharField(max_length=255)),
                ('dosage', models.CharField(blank=True, max_length=120)),
                ('frequency', models.CharField(blank=True, max_length=120)),
                ('duration', models.CharField(blank=True, max_length=120)),
                ('instructions', models.TextField(blank=True)),
                ('is_active', models.BooleanField(default=True)),
                ('encounter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='prescriptions', to='emr.encounter')),
                ('prescribed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='emr_prescriptions', to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='LabResult',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('title', models.CharField(max_length=255)),
                ('result_notes', models.TextField(blank=True)),
                ('file', models.FileField(blank=True, null=True, upload_to=lab_upload_to)),
                ('encounter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lab_results', to='emr.encounter')),
                ('uploaded_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='emr_lab_results', to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='AuditEvent',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('action', models.CharField(choices=[('create', 'Create'), ('update', 'Update'), ('delete', 'Delete'), ('login', 'Login'), ('logout', 'Logout'), ('view', 'View')], max_length=20)),
                ('model_label', models.CharField(blank=True, max_length=120)),
                ('object_id', models.CharField(blank=True, max_length=64)),
                ('object_repr', models.CharField(blank=True, max_length=255)),
                ('changes', models.JSONField(blank=True, default=dict)),
                ('ip_address', models.CharField(blank=True, max_length=64, null=True)),
                ('user_agent', models.TextField(blank=True, null=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('actor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='emr_audit_events', to=settings.AUTH_USER_MODEL)),
            ],
            options={'ordering': ['-created_at']},
        ),
    ]
