# Generated by Django 4.2.7 on 2025-10-07 10:35
from django.conf import settings
import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import uuid
[docs]
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
migrations.CreateModel(
name='Doctor',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('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')),
('doctor_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('specialization', models.CharField(help_text='Specializzazione medica', max_length=100)),
('department', models.CharField(help_text='Reparto di appartenenza', max_length=100)),
('license_number', models.CharField(help_text='Numero ordine medici', max_length=50, unique=True)),
('is_emergency_doctor', models.BooleanField(default=False, help_text='Abilitato al pronto soccorso')),
('created_at', models.DateTimeField(auto_now_add=True)),
('last_login_at', models.DateTimeField(blank=True, null=True)),
('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')),
],
options={
'verbose_name': 'Medico',
'verbose_name_plural': 'Medici',
'ordering': ['last_name', 'first_name'],
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
migrations.CreateModel(
name='Patient',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('patient_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('first_name', models.CharField(max_length=100, verbose_name='Nome')),
('last_name', models.CharField(max_length=100, verbose_name='Cognome')),
('date_of_birth', models.DateField(verbose_name='Data di nascita')),
('place_of_birth', models.CharField(max_length=100, verbose_name='Luogo di nascita')),
('fiscal_code', models.CharField(blank=True, max_length=16, null=True, unique=True, verbose_name='Codice fiscale')),
('gender', models.CharField(choices=[('M', 'Maschio'), ('F', 'Femmina'), ('O', 'Altro')], max_length=1, verbose_name='Sesso')),
('phone', models.CharField(blank=True, max_length=20, null=True, verbose_name='Telefono')),
('emergency_contact', models.CharField(blank=True, max_length=200, null=True, verbose_name='Contatto emergenza')),
('weight', models.FloatField(blank=True, null=True, verbose_name='Peso (kg)')),
('height', models.FloatField(blank=True, null=True, verbose_name='Altezza (cm)')),
('blood_type', models.CharField(blank=True, max_length=5, null=True, verbose_name='Gruppo sanguigno')),
('allergies', models.TextField(blank=True, null=True, verbose_name='Allergie note')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
],
options={
'verbose_name': 'Paziente',
'verbose_name_plural': 'Pazienti',
'ordering': ['last_name', 'first_name'],
'indexes': [models.Index(fields=['fiscal_code'], name='core_patien_fiscal__26fe24_idx'), models.Index(fields=['last_name', 'first_name'], name='core_patien_last_na_5d3812_idx'), models.Index(fields=['date_of_birth'], name='core_patien_date_of_7405d5_idx')],
},
),
migrations.CreateModel(
name='Encounter',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('encounter_id', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('admission_time', models.DateTimeField(default=django.utils.timezone.now, verbose_name='Ora di ammissione')),
('chief_complaint', models.TextField(verbose_name='Motivo accesso')),
('triage_priority', models.CharField(choices=[('white', 'Codice Bianco'), ('green', 'Codice Verde'), ('yellow', 'Codice Giallo'), ('red', 'Codice Rosso'), ('black', 'Codice Nero')], max_length=10, verbose_name='Codice triage')),
('status', models.CharField(choices=[('in_progress', 'In corso'), ('completed', 'Completato'), ('cancelled', 'Annullato')], default='in_progress', max_length=20)),
('discharge_time', models.DateTimeField(blank=True, null=True, verbose_name='Ora dimissione')),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('doctor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='encounters', to=settings.AUTH_USER_MODEL)),
('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='encounters', to='core.patient')),
],
options={
'verbose_name': 'Episodio di cura',
'verbose_name_plural': 'Episodi di cura',
'ordering': ['-admission_time'],
'indexes': [models.Index(fields=['admission_time'], name='core_encoun_admissi_a5e32c_idx'), models.Index(fields=['status'], name='core_encoun_status_899f27_idx'), models.Index(fields=['triage_priority'], name='core_encoun_triage__fb5685_idx')],
},
),
]