agdar/core/migrations/0001_initial.py
2025-11-02 14:35:35 +03:00

1206 lines
48 KiB
Python

# Generated by Django 5.2.7 on 2025-10-27 10:50
import django.contrib.auth.models
import django.contrib.auth.validators
import django.db.models.deletion
import django.utils.timezone
import phonenumber_field.modelfields
import simple_history.models
import uuid
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
("auth", "0012_alter_user_first_name_max_length"),
("contenttypes", "0002_remove_content_type_name"),
]
operations = [
migrations.CreateModel(
name="Patient",
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")),
(
"mrn",
models.CharField(
editable=False, max_length=20, unique=True, verbose_name="MRN"
),
),
(
"national_id",
models.CharField(blank=True, max_length=20, verbose_name="National ID"),
),
(
"first_name_en",
models.CharField(max_length=100, verbose_name="First Name (English)"),
),
(
"father_name_en",
models.CharField(
blank=True, max_length=100, verbose_name="Father Name (English)"
),
),
(
"grandfather_name_en",
models.CharField(
blank=True, max_length=100, verbose_name="Grandfather Name (English)"
),
),
(
"last_name_en",
models.CharField(max_length=100, verbose_name="Last Name (English)"),
),
(
"first_name_ar",
models.CharField(
blank=True, max_length=100, verbose_name="First Name (Arabic)"
),
),
(
"father_name_ar",
models.CharField(
blank=True, max_length=100, verbose_name="Father Name (Arabic)"
),
),
(
"grandfather_name_ar",
models.CharField(
blank=True, max_length=100, verbose_name="Grandfather Name (Arabic)"
),
),
(
"last_name_ar",
models.CharField(blank=True, max_length=100, verbose_name="Last Name (Arabic)"),
),
("date_of_birth", models.DateField(verbose_name="Date of Birth")),
(
"sex",
models.CharField(
choices=[("M", "Male"), ("F", "Female")], max_length=1, verbose_name="Sex"
),
),
(
"phone",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None, verbose_name="Phone Number"
),
),
("email", models.EmailField(blank=True, max_length=254, verbose_name="Email")),
(
"caregiver_name",
models.CharField(blank=True, max_length=200, verbose_name="Caregiver Name"),
),
(
"caregiver_phone",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None, verbose_name="Caregiver Phone"
),
),
(
"caregiver_relationship",
models.CharField(
blank=True, max_length=100, verbose_name="Caregiver Relationship"
),
),
("address", models.TextField(blank=True, verbose_name="Address")),
("city", models.CharField(blank=True, max_length=100, verbose_name="City")),
(
"postal_code",
models.CharField(blank=True, max_length=20, verbose_name="Postal Code"),
),
(
"emergency_contact",
models.TextField(blank=True, verbose_name="Emergency Contact"),
),
],
options={
"verbose_name": "Patient",
"verbose_name_plural": "Patients",
"ordering": ["-created_at"],
},
),
migrations.CreateModel(
name="Tenant",
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=200, verbose_name="Name")),
("code", models.CharField(max_length=50, unique=True, verbose_name="Code")),
("is_active", models.BooleanField(default=True, verbose_name="Is Active")),
("settings", models.JSONField(blank=True, default=dict, verbose_name="Settings")),
],
options={
"verbose_name": "Tenant",
"verbose_name_plural": "Tenants",
"ordering": ["name"],
},
),
migrations.CreateModel(
name="User",
fields=[
("password", models.CharField(max_length=128, verbose_name="password")),
(
"last_login",
models.DateTimeField(blank=True, null=True, verbose_name="last login"),
),
(
"is_superuser",
models.BooleanField(
default=False,
help_text="Designates that this user has all permissions without explicitly assigning them.",
verbose_name="superuser status",
),
),
(
"username",
models.CharField(
error_messages={"unique": "A user with that username already exists."},
help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
max_length=150,
unique=True,
validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
verbose_name="username",
),
),
(
"first_name",
models.CharField(blank=True, max_length=150, verbose_name="first name"),
),
(
"last_name",
models.CharField(blank=True, max_length=150, verbose_name="last name"),
),
(
"email",
models.EmailField(blank=True, max_length=254, verbose_name="email address"),
),
(
"is_staff",
models.BooleanField(
default=False,
help_text="Designates whether the user can log into this admin site.",
verbose_name="staff status",
),
),
(
"is_active",
models.BooleanField(
default=True,
help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
verbose_name="active",
),
),
(
"date_joined",
models.DateTimeField(
default=django.utils.timezone.now, verbose_name="date joined"
),
),
(
"id",
models.UUIDField(
default=uuid.uuid4,
editable=False,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"role",
models.CharField(
choices=[
("ADMIN", "Administrator"),
("DOCTOR", "Doctor"),
("NURSE", "Nurse"),
("OT", "Occupational Therapist"),
("SLP", "Speech-Language Pathologist"),
("ABA", "ABA Therapist"),
("FRONT_DESK", "Front Desk"),
("FINANCE", "Finance"),
],
default="FRONT_DESK",
max_length=20,
verbose_name="Role",
),
),
(
"phone_number",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None, verbose_name="Phone Number"
),
),
(
"employee_id",
models.CharField(blank=True, max_length=50, verbose_name="Employee ID"),
),
(
"groups",
models.ManyToManyField(
blank=True,
help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
related_name="user_set",
related_query_name="user",
to="auth.group",
verbose_name="groups",
),
),
(
"user_permissions",
models.ManyToManyField(
blank=True,
help_text="Specific permissions for this user.",
related_name="user_set",
related_query_name="user",
to="auth.permission",
verbose_name="user permissions",
),
),
(
"tenant",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="users",
to="core.tenant",
verbose_name="Tenant",
),
),
],
options={
"verbose_name": "User",
"verbose_name_plural": "Users",
"ordering": ["last_name", "first_name"],
},
managers=[
("objects", django.contrib.auth.models.UserManager()),
],
),
migrations.CreateModel(
name="File",
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")),
(
"file_number",
models.CharField(
editable=False, max_length=20, unique=True, verbose_name="File Number"
),
),
("opened_date", models.DateField(auto_now_add=True, verbose_name="Opened Date")),
(
"status",
models.CharField(
choices=[
("ACTIVE", "Active"),
("CLOSED", "Closed"),
("ARCHIVED", "Archived"),
],
default="ACTIVE",
max_length=20,
verbose_name="Status",
),
),
(
"patient",
models.OneToOneField(
on_delete=django.db.models.deletion.CASCADE,
related_name="file",
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": "File",
"verbose_name_plural": "Files",
"ordering": ["-opened_date"],
},
),
migrations.AddField(
model_name="patient",
name="tenant",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="%(app_label)s_%(class)s_related",
to="core.tenant",
verbose_name="Tenant",
),
),
migrations.CreateModel(
name="HistoricalUser",
fields=[
("password", models.CharField(max_length=128, verbose_name="password")),
(
"last_login",
models.DateTimeField(blank=True, null=True, verbose_name="last login"),
),
(
"is_superuser",
models.BooleanField(
default=False,
help_text="Designates that this user has all permissions without explicitly assigning them.",
verbose_name="superuser status",
),
),
(
"username",
models.CharField(
db_index=True,
error_messages={"unique": "A user with that username already exists."},
help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
max_length=150,
validators=[django.contrib.auth.validators.UnicodeUsernameValidator()],
verbose_name="username",
),
),
(
"first_name",
models.CharField(blank=True, max_length=150, verbose_name="first name"),
),
(
"last_name",
models.CharField(blank=True, max_length=150, verbose_name="last name"),
),
(
"email",
models.EmailField(blank=True, max_length=254, verbose_name="email address"),
),
(
"is_staff",
models.BooleanField(
default=False,
help_text="Designates whether the user can log into this admin site.",
verbose_name="staff status",
),
),
(
"is_active",
models.BooleanField(
default=True,
help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
verbose_name="active",
),
),
(
"date_joined",
models.DateTimeField(
default=django.utils.timezone.now, verbose_name="date joined"
),
),
(
"id",
models.UUIDField(
db_index=True, default=uuid.uuid4, editable=False, verbose_name="ID"
),
),
(
"role",
models.CharField(
choices=[
("ADMIN", "Administrator"),
("DOCTOR", "Doctor"),
("NURSE", "Nurse"),
("OT", "Occupational Therapist"),
("SLP", "Speech-Language Pathologist"),
("ABA", "ABA Therapist"),
("FRONT_DESK", "Front Desk"),
("FINANCE", "Finance"),
],
default="FRONT_DESK",
max_length=20,
verbose_name="Role",
),
),
(
"phone_number",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None, verbose_name="Phone Number"
),
),
(
"employee_id",
models.CharField(blank=True, max_length=50, verbose_name="Employee ID"),
),
("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,
),
),
(
"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 User",
"verbose_name_plural": "historical Users",
"ordering": ("-history_date", "-history_id"),
"get_latest_by": ("history_date", "history_id"),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name="HistoricalPatient",
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"),
),
(
"mrn",
models.CharField(
db_index=True, editable=False, max_length=20, verbose_name="MRN"
),
),
(
"national_id",
models.CharField(blank=True, max_length=20, verbose_name="National ID"),
),
(
"first_name_en",
models.CharField(max_length=100, verbose_name="First Name (English)"),
),
(
"father_name_en",
models.CharField(
blank=True, max_length=100, verbose_name="Father Name (English)"
),
),
(
"grandfather_name_en",
models.CharField(
blank=True, max_length=100, verbose_name="Grandfather Name (English)"
),
),
(
"last_name_en",
models.CharField(max_length=100, verbose_name="Last Name (English)"),
),
(
"first_name_ar",
models.CharField(
blank=True, max_length=100, verbose_name="First Name (Arabic)"
),
),
(
"father_name_ar",
models.CharField(
blank=True, max_length=100, verbose_name="Father Name (Arabic)"
),
),
(
"grandfather_name_ar",
models.CharField(
blank=True, max_length=100, verbose_name="Grandfather Name (Arabic)"
),
),
(
"last_name_ar",
models.CharField(blank=True, max_length=100, verbose_name="Last Name (Arabic)"),
),
("date_of_birth", models.DateField(verbose_name="Date of Birth")),
(
"sex",
models.CharField(
choices=[("M", "Male"), ("F", "Female")], max_length=1, verbose_name="Sex"
),
),
(
"phone",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None, verbose_name="Phone Number"
),
),
("email", models.EmailField(blank=True, max_length=254, verbose_name="Email")),
(
"caregiver_name",
models.CharField(blank=True, max_length=200, verbose_name="Caregiver Name"),
),
(
"caregiver_phone",
phonenumber_field.modelfields.PhoneNumberField(
blank=True, max_length=128, region=None, verbose_name="Caregiver Phone"
),
),
(
"caregiver_relationship",
models.CharField(
blank=True, max_length=100, verbose_name="Caregiver Relationship"
),
),
("address", models.TextField(blank=True, verbose_name="Address")),
("city", models.CharField(blank=True, max_length=100, verbose_name="City")),
(
"postal_code",
models.CharField(blank=True, max_length=20, verbose_name="Postal Code"),
),
(
"emergency_contact",
models.TextField(blank=True, verbose_name="Emergency Contact"),
),
("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,
),
),
(
"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",
"verbose_name_plural": "historical Patients",
"ordering": ("-history_date", "-history_id"),
"get_latest_by": ("history_date", "history_id"),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name="HistoricalConsent",
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"),
),
(
"consent_type",
models.CharField(
choices=[
("GENERAL_TREATMENT", "General Treatment"),
("SERVICE_SPECIFIC", "Service Specific"),
("PHOTO_VIDEO", "Photo/Video"),
("DATA_SHARING", "Data Sharing"),
],
max_length=30,
verbose_name="Consent Type",
),
),
("content_text", models.TextField(verbose_name="Content Text")),
(
"signed_by_name",
models.CharField(blank=True, max_length=200, verbose_name="Signed By Name"),
),
(
"signed_by_relationship",
models.CharField(
blank=True, max_length=100, verbose_name="Relationship to Patient"
),
),
(
"signed_at",
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
),
(
"signature_method",
models.CharField(
blank=True,
choices=[
("DRAWN", "Drawn"),
("TYPED", "Typed"),
("UPLOADED", "Uploaded"),
("EXTERNAL", "External Provider"),
],
max_length=20,
verbose_name="Signature Method",
),
),
(
"signature_image",
models.TextField(
blank=True, max_length=100, null=True, verbose_name="Signature Image"
),
),
(
"signature_hash",
models.CharField(blank=True, max_length=64, verbose_name="Signature Hash"),
),
(
"signed_ip",
models.GenericIPAddressField(
blank=True, null=True, verbose_name="Signed IP Address"
),
),
(
"signed_user_agent",
models.TextField(blank=True, verbose_name="Signed User Agent"),
),
("version", models.PositiveIntegerField(default=1, verbose_name="Version")),
("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",
),
),
],
options={
"verbose_name": "historical Consent",
"verbose_name_plural": "historical Consents",
"ordering": ("-history_date", "-history_id"),
"get_latest_by": ("history_date", "history_id"),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name="Consent",
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")),
(
"consent_type",
models.CharField(
choices=[
("GENERAL_TREATMENT", "General Treatment"),
("SERVICE_SPECIFIC", "Service Specific"),
("PHOTO_VIDEO", "Photo/Video"),
("DATA_SHARING", "Data Sharing"),
],
max_length=30,
verbose_name="Consent Type",
),
),
("content_text", models.TextField(verbose_name="Content Text")),
(
"signed_by_name",
models.CharField(blank=True, max_length=200, verbose_name="Signed By Name"),
),
(
"signed_by_relationship",
models.CharField(
blank=True, max_length=100, verbose_name="Relationship to Patient"
),
),
(
"signed_at",
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
),
(
"signature_method",
models.CharField(
blank=True,
choices=[
("DRAWN", "Drawn"),
("TYPED", "Typed"),
("UPLOADED", "Uploaded"),
("EXTERNAL", "External Provider"),
],
max_length=20,
verbose_name="Signature Method",
),
),
(
"signature_image",
models.ImageField(
blank=True,
null=True,
upload_to="consents/signatures/",
verbose_name="Signature Image",
),
),
(
"signature_hash",
models.CharField(blank=True, max_length=64, verbose_name="Signature Hash"),
),
(
"signed_ip",
models.GenericIPAddressField(
blank=True, null=True, verbose_name="Signed IP Address"
),
),
(
"signed_user_agent",
models.TextField(blank=True, verbose_name="Signed User Agent"),
),
("version", models.PositiveIntegerField(default=1, verbose_name="Version")),
("is_active", models.BooleanField(default=True, verbose_name="Is Active")),
(
"patient",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="consents",
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": "Consent",
"verbose_name_plural": "Consents",
"ordering": ["-created_at"],
},
),
migrations.CreateModel(
name="Clinic",
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_en", models.CharField(max_length=200, verbose_name="Name (English)")),
(
"name_ar",
models.CharField(blank=True, max_length=200, verbose_name="Name (Arabic)"),
),
(
"specialty",
models.CharField(
choices=[
("MEDICAL", "Medical"),
("NURSING", "Nursing"),
("ABA", "ABA Therapy"),
("OT", "Occupational Therapy"),
("SLP", "Speech-Language Pathology"),
],
max_length=20,
verbose_name="Specialty",
),
),
("code", models.CharField(max_length=50, verbose_name="Code")),
("is_active", models.BooleanField(default=True, verbose_name="Is Active")),
(
"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": "Clinic",
"verbose_name_plural": "Clinics",
"ordering": ["name_en"],
},
),
migrations.CreateModel(
name="AuditLog",
fields=[
(
"id",
models.UUIDField(
default=uuid.uuid4,
editable=False,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("object_id", models.UUIDField(blank=True, null=True, verbose_name="Object ID")),
(
"action",
models.CharField(
choices=[
("CREATE", "Create"),
("UPDATE", "Update"),
("DELETE", "Delete"),
("VIEW", "View"),
("EXPORT", "Export"),
("PRINT", "Print"),
],
max_length=20,
verbose_name="Action",
),
),
("timestamp", models.DateTimeField(auto_now_add=True, verbose_name="Timestamp")),
("changes", models.JSONField(blank=True, default=dict, verbose_name="Changes")),
(
"ip_address",
models.GenericIPAddressField(blank=True, null=True, verbose_name="IP Address"),
),
(
"content_type",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="contenttypes.contenttype",
verbose_name="Content Type",
),
),
(
"user",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="audit_logs",
to=settings.AUTH_USER_MODEL,
verbose_name="User",
),
),
(
"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": "Audit Log",
"verbose_name_plural": "Audit Logs",
"ordering": ["-timestamp"],
},
),
migrations.CreateModel(
name="Attachment",
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")),
("object_id", models.UUIDField(verbose_name="Object ID")),
("file", models.FileField(upload_to="attachments/%Y/%m/%d/", verbose_name="File")),
(
"file_type",
models.CharField(
choices=[
("PDF", "PDF"),
("IMAGE", "Image"),
("DOCUMENT", "Document"),
("OTHER", "Other"),
],
max_length=20,
verbose_name="File Type",
),
),
("description", models.TextField(blank=True, verbose_name="Description")),
(
"content_type",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to="contenttypes.contenttype",
verbose_name="Content Type",
),
),
(
"uploaded_by",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="uploaded_attachments",
to=settings.AUTH_USER_MODEL,
verbose_name="Uploaded 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": "Attachment",
"verbose_name_plural": "Attachments",
"ordering": ["-created_at"],
},
),
migrations.CreateModel(
name="SubFile",
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")),
(
"sub_file_number",
models.CharField(max_length=20, verbose_name="Sub-File Number"),
),
("opened_date", models.DateField(auto_now_add=True, verbose_name="Opened Date")),
(
"status",
models.CharField(
choices=[("ACTIVE", "Active"), ("CLOSED", "Closed")],
default="ACTIVE",
max_length=20,
verbose_name="Status",
),
),
(
"assigned_provider",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="assigned_subfiles",
to=settings.AUTH_USER_MODEL,
verbose_name="Assigned Provider",
),
),
(
"clinic",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="subfiles",
to="core.clinic",
verbose_name="Clinic",
),
),
(
"file",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="subfiles",
to="core.file",
verbose_name="File",
),
),
],
options={
"verbose_name": "Sub-File",
"verbose_name_plural": "Sub-Files",
"ordering": ["-opened_date"],
"unique_together": {("file", "clinic")},
},
),
migrations.AddIndex(
model_name="patient",
index=models.Index(fields=["mrn"], name="core_patien_mrn_bf2689_idx"),
),
migrations.AddIndex(
model_name="patient",
index=models.Index(fields=["national_id"], name="core_patien_nationa_914a52_idx"),
),
migrations.AddIndex(
model_name="patient",
index=models.Index(
fields=["tenant", "created_at"], name="core_patien_tenant__444b99_idx"
),
),
migrations.AddIndex(
model_name="file",
index=models.Index(fields=["file_number"], name="core_file_file_nu_1ef7fc_idx"),
),
migrations.AddIndex(
model_name="file",
index=models.Index(fields=["patient"], name="core_file_patient_e15715_idx"),
),
migrations.AddIndex(
model_name="consent",
index=models.Index(
fields=["patient", "consent_type"], name="core_consen_patient_53785b_idx"
),
),
migrations.AlterUniqueTogether(
name="clinic",
unique_together={("tenant", "code")},
),
migrations.AddIndex(
model_name="auditlog",
index=models.Index(
fields=["content_type", "object_id"], name="core_auditl_content_fec0c4_idx"
),
),
migrations.AddIndex(
model_name="auditlog",
index=models.Index(fields=["user", "timestamp"], name="core_auditl_user_id_7b678c_idx"),
),
migrations.AddIndex(
model_name="auditlog",
index=models.Index(
fields=["action", "timestamp"], name="core_auditl_action_096de0_idx"
),
),
migrations.AddIndex(
model_name="attachment",
index=models.Index(
fields=["content_type", "object_id"], name="core_attach_content_d3cac2_idx"
),
),
]