# Generated by Django 5.2.7 on 2025-10-27 10:50 import simple_history.models import uuid from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [] operations = [ migrations.CreateModel( name="Appointment", 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")), ( "appointment_number", models.CharField( editable=False, max_length=20, unique=True, verbose_name="Appointment Number", ), ), ("service_type", models.CharField(max_length=200, verbose_name="Service Type")), ("scheduled_date", models.DateField(verbose_name="Scheduled Date")), ("scheduled_time", models.TimeField(verbose_name="Scheduled Time")), ( "duration", models.PositiveIntegerField( default=30, help_text="Duration in minutes", verbose_name="Duration" ), ), ( "status", models.CharField( choices=[ ("BOOKED", "Booked"), ("CONFIRMED", "Confirmed"), ("RESCHEDULED", "Rescheduled"), ("CANCELLED", "Cancelled"), ("NO_SHOW", "No Show"), ("ARRIVED", "Arrived"), ("IN_PROGRESS", "In Progress"), ("COMPLETED", "Completed"), ], default="BOOKED", max_length=20, verbose_name="Status", ), ), ( "confirmation_sent_at", models.DateTimeField( blank=True, null=True, verbose_name="Confirmation Sent At" ), ), ( "confirmation_method", models.CharField( blank=True, choices=[ ("SMS", "SMS"), ("WHATSAPP", "WhatsApp"), ("EMAIL", "Email"), ("PHONE", "Phone Call"), ("IN_PERSON", "In Person"), ], max_length=20, verbose_name="Confirmation Method", ), ), ( "arrival_at", models.DateTimeField(blank=True, null=True, verbose_name="Arrival Time"), ), ( "start_at", models.DateTimeField(blank=True, null=True, verbose_name="Start Time"), ), ("end_at", models.DateTimeField(blank=True, null=True, verbose_name="End Time")), ( "reschedule_reason", models.TextField(blank=True, verbose_name="Reschedule Reason"), ), ( "reschedule_count", models.PositiveIntegerField(default=0, verbose_name="Reschedule Count"), ), ("cancel_reason", models.TextField(blank=True, verbose_name="Cancellation Reason")), ("notes", models.TextField(blank=True, verbose_name="Notes")), ( "finance_cleared", models.BooleanField(default=False, verbose_name="Finance Cleared"), ), ( "consent_verified", models.BooleanField(default=False, verbose_name="Consent Verified"), ), ], options={ "verbose_name": "Appointment", "verbose_name_plural": "Appointments", "ordering": ["-scheduled_date", "-scheduled_time"], }, ), migrations.CreateModel( name="AppointmentConfirmation", 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")), ( "token", models.CharField( editable=False, max_length=64, unique=True, verbose_name="Confirmation Token", ), ), ( "status", models.CharField( choices=[ ("PENDING", "Pending"), ("CONFIRMED", "Confirmed"), ("DECLINED", "Declined"), ("EXPIRED", "Expired"), ], default="PENDING", max_length=20, verbose_name="Status", ), ), ( "confirmation_method", models.CharField( blank=True, choices=[ ("LINK", "Confirmation Link"), ("SMS", "SMS Reply"), ("PHONE", "Phone Call"), ("IN_PERSON", "In Person"), ], max_length=20, verbose_name="Confirmation Method", ), ), ( "confirmed_at", models.DateTimeField(blank=True, null=True, verbose_name="Confirmed At"), ), ( "confirmed_by_ip", models.GenericIPAddressField( blank=True, null=True, verbose_name="Confirmed By IP" ), ), ( "confirmed_by_user_agent", models.TextField(blank=True, verbose_name="Confirmed By User Agent"), ), ("expires_at", models.DateTimeField(verbose_name="Expires At")), ("sent_at", models.DateTimeField(blank=True, null=True, verbose_name="Sent At")), ( "reminder_count", models.PositiveIntegerField(default=0, verbose_name="Reminder Count"), ), ( "last_reminder_at", models.DateTimeField(blank=True, null=True, verbose_name="Last Reminder At"), ), ], options={ "verbose_name": "Appointment Confirmation", "verbose_name_plural": "Appointment Confirmations", "ordering": ["-created_at"], }, ), migrations.CreateModel( name="AppointmentReminder", 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")), ( "reminder_type", models.CharField( choices=[("SMS", "SMS"), ("WHATSAPP", "WhatsApp"), ("EMAIL", "Email")], max_length=20, verbose_name="Reminder Type", ), ), ("scheduled_for", models.DateTimeField(verbose_name="Scheduled For")), ("sent_at", models.DateTimeField(blank=True, null=True, verbose_name="Sent At")), ( "status", models.CharField( choices=[ ("SCHEDULED", "Scheduled"), ("SENT", "Sent"), ("FAILED", "Failed"), ("CANCELLED", "Cancelled"), ], default="SCHEDULED", max_length=20, verbose_name="Status", ), ), ], options={ "verbose_name": "Appointment Reminder", "verbose_name_plural": "Appointment Reminders", "ordering": ["scheduled_for"], }, ), migrations.CreateModel( name="HistoricalAppointment", 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"), ), ( "appointment_number", models.CharField( db_index=True, editable=False, max_length=20, verbose_name="Appointment Number", ), ), ("service_type", models.CharField(max_length=200, verbose_name="Service Type")), ("scheduled_date", models.DateField(verbose_name="Scheduled Date")), ("scheduled_time", models.TimeField(verbose_name="Scheduled Time")), ( "duration", models.PositiveIntegerField( default=30, help_text="Duration in minutes", verbose_name="Duration" ), ), ( "status", models.CharField( choices=[ ("BOOKED", "Booked"), ("CONFIRMED", "Confirmed"), ("RESCHEDULED", "Rescheduled"), ("CANCELLED", "Cancelled"), ("NO_SHOW", "No Show"), ("ARRIVED", "Arrived"), ("IN_PROGRESS", "In Progress"), ("COMPLETED", "Completed"), ], default="BOOKED", max_length=20, verbose_name="Status", ), ), ( "confirmation_sent_at", models.DateTimeField( blank=True, null=True, verbose_name="Confirmation Sent At" ), ), ( "confirmation_method", models.CharField( blank=True, choices=[ ("SMS", "SMS"), ("WHATSAPP", "WhatsApp"), ("EMAIL", "Email"), ("PHONE", "Phone Call"), ("IN_PERSON", "In Person"), ], max_length=20, verbose_name="Confirmation Method", ), ), ( "arrival_at", models.DateTimeField(blank=True, null=True, verbose_name="Arrival Time"), ), ( "start_at", models.DateTimeField(blank=True, null=True, verbose_name="Start Time"), ), ("end_at", models.DateTimeField(blank=True, null=True, verbose_name="End Time")), ( "reschedule_reason", models.TextField(blank=True, verbose_name="Reschedule Reason"), ), ( "reschedule_count", models.PositiveIntegerField(default=0, verbose_name="Reschedule Count"), ), ("cancel_reason", models.TextField(blank=True, verbose_name="Cancellation Reason")), ("notes", models.TextField(blank=True, verbose_name="Notes")), ( "finance_cleared", models.BooleanField(default=False, verbose_name="Finance Cleared"), ), ( "consent_verified", models.BooleanField(default=False, verbose_name="Consent Verified"), ), ("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 ), ), ], options={ "verbose_name": "historical Appointment", "verbose_name_plural": "historical Appointments", "ordering": ("-history_date", "-history_id"), "get_latest_by": ("history_date", "history_id"), }, bases=(simple_history.models.HistoricalChanges, models.Model), ), migrations.CreateModel( name="Provider", 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")), ("is_available", models.BooleanField(default=True, verbose_name="Is Available")), ( "max_daily_appointments", models.PositiveIntegerField(default=20, verbose_name="Max Daily Appointments"), ), ], options={ "verbose_name": "Provider", "verbose_name_plural": "Providers", "ordering": ["user__last_name", "user__first_name"], }, ), migrations.CreateModel( name="Room", 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")), ("name", models.CharField(max_length=100, verbose_name="Name")), ("room_number", models.CharField(max_length=20, verbose_name="Room Number")), ("is_available", models.BooleanField(default=True, verbose_name="Is Available")), ], options={ "verbose_name": "Room", "verbose_name_plural": "Rooms", "ordering": ["clinic", "room_number"], }, ), migrations.CreateModel( name="Schedule", 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")), ( "day_of_week", models.IntegerField( choices=[ (0, "Sunday"), (1, "Monday"), (2, "Tuesday"), (3, "Wednesday"), (4, "Thursday"), (5, "Friday"), (6, "Saturday"), ], verbose_name="Day of Week", ), ), ("start_time", models.TimeField(verbose_name="Start Time")), ("end_time", models.TimeField(verbose_name="End Time")), ( "slot_duration", models.PositiveIntegerField( default=30, help_text="Duration of each appointment slot in minutes", verbose_name="Slot Duration (minutes)", ), ), ("is_active", models.BooleanField(default=True, verbose_name="Is Active")), ], options={ "verbose_name": "Schedule", "verbose_name_plural": "Schedules", "ordering": ["provider", "day_of_week", "start_time"], }, ), ]