95 lines
6.1 KiB
Python
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'],
|
|
},
|
|
),
|
|
]
|