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

95 lines
6.1 KiB
Python

# Generated by Django 5.2.3 on 2025-10-30 11:01
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
('core', '0005_add_consent_template'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='DocumentTemplate',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=200, verbose_name='Template Name')),
('category', models.CharField(choices=[('medical', 'Medical'), ('nursing', 'Nursing'), ('aba', 'ABA'), ('ot', 'Occupational Therapy'), ('slp', 'Speech-Language Pathology'), ('assessment', 'Assessment'), ('progress', 'Progress Report'), ('discharge', 'Discharge Summary'), ('other', 'Other')], max_length=50, verbose_name='Category')),
('description', models.TextField(blank=True, verbose_name='Description')),
('content', models.TextField(help_text='Use {{variable_name}} for dynamic fields', verbose_name='Template Content')),
('is_active', models.BooleanField(default=True, verbose_name='Active')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
('created_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='created_templates', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'Document Template',
'verbose_name_plural': 'Document Templates',
'ordering': ['category', 'name'],
},
),
migrations.CreateModel(
name='ClinicalNote',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=200, verbose_name='Title')),
('content', models.TextField(verbose_name='Content')),
('status', models.CharField(choices=[('draft', 'Draft'), ('final', 'Final'), ('amended', 'Amended'), ('deleted', 'Deleted')], default='draft', max_length=20, verbose_name='Status')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')),
('finalized_at', models.DateTimeField(blank=True, null=True, verbose_name='Finalized At')),
('version', models.IntegerField(default=1, verbose_name='Version')),
('author', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='authored_notes', to=settings.AUTH_USER_MODEL)),
('finalized_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='finalized_notes', to=settings.AUTH_USER_MODEL)),
('parent_note', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='amendments', to='documents.clinicalnote')),
('patient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='clinical_notes', to='core.patient')),
('template', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='notes', to='documents.documenttemplate')),
],
options={
'verbose_name': 'Clinical Note',
'verbose_name_plural': 'Clinical Notes',
'ordering': ['-created_at'],
'permissions': [('can_finalize_note', 'Can finalize clinical notes'), ('can_amend_note', 'Can amend finalized notes')],
},
),
migrations.CreateModel(
name='NoteAddendum',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('content', models.TextField(verbose_name='Addendum Content')),
('reason', models.CharField(max_length=200, verbose_name='Reason')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')),
('author', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
('note', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='addendums', to='documents.clinicalnote')),
],
options={
'verbose_name': 'Note Addendum',
'verbose_name_plural': 'Note Addendums',
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='NoteAuditLog',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('action', models.CharField(choices=[('created', 'Created'), ('updated', 'Updated'), ('finalized', 'Finalized'), ('amended', 'Amended'), ('deleted', 'Deleted'), ('viewed', 'Viewed')], max_length=20, verbose_name='Action')),
('timestamp', models.DateTimeField(auto_now_add=True, verbose_name='Timestamp')),
('ip_address', models.GenericIPAddressField(blank=True, null=True, verbose_name='IP Address')),
('changes', models.JSONField(blank=True, null=True, verbose_name='Changes')),
('note', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='audit_logs', to='documents.clinicalnote')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'Note Audit Log',
'verbose_name_plural': 'Note Audit Logs',
'ordering': ['-timestamp'],
},
),
]