1394 lines
56 KiB
Python
1394 lines
56 KiB
Python
# Generated by Django 5.2.7 on 2025-10-27 10:50
|
|
|
|
import django.db.models.deletion
|
|
import simple_history.models
|
|
import uuid
|
|
from django.conf import settings
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
initial = True
|
|
|
|
dependencies = [
|
|
("appointments", "0001_initial"),
|
|
("core", "0001_initial"),
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
]
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="HistoricalSLPAssessment",
|
|
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"),
|
|
),
|
|
(
|
|
"signed_at",
|
|
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
|
|
),
|
|
("assessment_date", models.DateField(verbose_name="Assessment Date")),
|
|
(
|
|
"diagnosis_statement",
|
|
models.TextField(blank=True, verbose_name="Diagnosis Statement"),
|
|
),
|
|
("case_history", models.TextField(blank=True, verbose_name="Case History")),
|
|
("prenatal_history", models.TextField(blank=True, verbose_name="Prenatal History")),
|
|
(
|
|
"perinatal_history",
|
|
models.TextField(blank=True, verbose_name="Perinatal History"),
|
|
),
|
|
(
|
|
"postnatal_history",
|
|
models.TextField(blank=True, verbose_name="Postnatal History"),
|
|
),
|
|
(
|
|
"developmental_history",
|
|
models.TextField(blank=True, verbose_name="Developmental History"),
|
|
),
|
|
("medical_status", models.TextField(blank=True, verbose_name="Medical Status")),
|
|
(
|
|
"speech_language_detail",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Detailed speech and language assessment",
|
|
verbose_name="Speech/Language Detail",
|
|
),
|
|
),
|
|
(
|
|
"gfta3_score",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Goldman-Fristoe Test of Articulation-3 score",
|
|
max_length=100,
|
|
verbose_name="GFTA-3 Score",
|
|
),
|
|
),
|
|
(
|
|
"jat_score",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Joliet Articulation Test score",
|
|
max_length=100,
|
|
verbose_name="JAT Score",
|
|
),
|
|
),
|
|
(
|
|
"ssi_score",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Stuttering Severity Instrument score",
|
|
max_length=100,
|
|
verbose_name="SSI Score",
|
|
),
|
|
),
|
|
(
|
|
"oral_mechanism",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Oral mechanism examination findings",
|
|
verbose_name="Oral Mechanism",
|
|
),
|
|
),
|
|
(
|
|
"rossetti_domains",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Rossetti Infant-Toddler Language Scale domains and age levels",
|
|
verbose_name="Rossetti Domains",
|
|
),
|
|
),
|
|
(
|
|
"joint_attention_skills",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Joint attention skills assessment (present/absent)",
|
|
verbose_name="Joint Attention Skills",
|
|
),
|
|
),
|
|
("clinical_summary", models.TextField(blank=True, verbose_name="Clinical Summary")),
|
|
("recommendations", models.TextField(blank=True, verbose_name="Recommendations")),
|
|
(
|
|
"frequency_per_week",
|
|
models.PositiveIntegerField(
|
|
blank=True,
|
|
help_text="Recommended frequency (sessions per week)",
|
|
null=True,
|
|
verbose_name="Frequency (per week)",
|
|
),
|
|
),
|
|
(
|
|
"session_duration_minutes",
|
|
models.PositiveIntegerField(
|
|
blank=True, null=True, verbose_name="Session Duration (minutes)"
|
|
),
|
|
),
|
|
(
|
|
"referral_rules",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Referral recommendations to other services",
|
|
verbose_name="Referral Rules",
|
|
),
|
|
),
|
|
("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
|
|
),
|
|
),
|
|
(
|
|
"appointment",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to="appointments.appointment",
|
|
verbose_name="Appointment",
|
|
),
|
|
),
|
|
(
|
|
"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",
|
|
),
|
|
),
|
|
(
|
|
"provider",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Provider",
|
|
),
|
|
),
|
|
(
|
|
"signed_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Signed By",
|
|
),
|
|
),
|
|
(
|
|
"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 SLP Assessment",
|
|
"verbose_name_plural": "historical SLP Assessments",
|
|
"ordering": ("-history_date", "-history_id"),
|
|
"get_latest_by": ("history_date", "history_id"),
|
|
},
|
|
bases=(simple_history.models.HistoricalChanges, models.Model),
|
|
),
|
|
migrations.CreateModel(
|
|
name="HistoricalSLPConsult",
|
|
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"),
|
|
),
|
|
(
|
|
"signed_at",
|
|
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
|
|
),
|
|
("consultation_date", models.DateField(verbose_name="Consultation Date")),
|
|
(
|
|
"consult_variant",
|
|
models.CharField(
|
|
choices=[
|
|
("ASD", "Autism Spectrum Disorder"),
|
|
("LANGUAGE_DELAY", "Language Delay"),
|
|
("FLUENCY", "Fluency Disorder"),
|
|
],
|
|
max_length=20,
|
|
verbose_name="Consultation Variant",
|
|
),
|
|
),
|
|
("primary_concern", models.TextField(blank=True, verbose_name="Primary Concern")),
|
|
(
|
|
"suspected_areas",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="List of suspected problem areas",
|
|
verbose_name="Suspected Areas",
|
|
),
|
|
),
|
|
(
|
|
"type_of_service",
|
|
models.CharField(
|
|
choices=[
|
|
("CONSULT", "Consultation"),
|
|
("EVAL", "Evaluation"),
|
|
("INTERVENTION", "Intervention"),
|
|
("PARENT_TRAINING", "Parent Training"),
|
|
],
|
|
max_length=20,
|
|
verbose_name="Type of Service",
|
|
),
|
|
),
|
|
(
|
|
"communication_modes",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Communication modes checklist (verbal, gestures, AAC, etc.)",
|
|
verbose_name="Communication Modes",
|
|
),
|
|
),
|
|
(
|
|
"screen_time_hours",
|
|
models.PositiveIntegerField(
|
|
blank=True, null=True, verbose_name="Screen Time (hours/day)"
|
|
),
|
|
),
|
|
(
|
|
"variant_questionnaire",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Variant-specific questions and answers",
|
|
verbose_name="Variant Questionnaire",
|
|
),
|
|
),
|
|
(
|
|
"skills_to_observe",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Skills observation matrix",
|
|
verbose_name="Skills to Observe",
|
|
),
|
|
),
|
|
(
|
|
"oral_motor_screening",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Oral motor screening results",
|
|
verbose_name="Oral Motor Screening",
|
|
),
|
|
),
|
|
("recommendations", models.TextField(blank=True, verbose_name="Recommendations")),
|
|
("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
|
|
),
|
|
),
|
|
(
|
|
"appointment",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to="appointments.appointment",
|
|
verbose_name="Appointment",
|
|
),
|
|
),
|
|
(
|
|
"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",
|
|
),
|
|
),
|
|
(
|
|
"provider",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Provider",
|
|
),
|
|
),
|
|
(
|
|
"signed_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Signed By",
|
|
),
|
|
),
|
|
(
|
|
"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 SLP Consultation",
|
|
"verbose_name_plural": "historical SLP Consultations",
|
|
"ordering": ("-history_date", "-history_id"),
|
|
"get_latest_by": ("history_date", "history_id"),
|
|
},
|
|
bases=(simple_history.models.HistoricalChanges, models.Model),
|
|
),
|
|
migrations.CreateModel(
|
|
name="HistoricalSLPProgressReport",
|
|
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"),
|
|
),
|
|
(
|
|
"signed_at",
|
|
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
|
|
),
|
|
("report_date", models.DateField(verbose_name="Report Date")),
|
|
(
|
|
"sessions_scheduled",
|
|
models.PositiveIntegerField(default=0, verbose_name="Sessions Scheduled"),
|
|
),
|
|
(
|
|
"sessions_attended",
|
|
models.PositiveIntegerField(default=0, verbose_name="Sessions Attended"),
|
|
),
|
|
("final_diagnosis", models.TextField(blank=True, verbose_name="Final Diagnosis")),
|
|
(
|
|
"objectives_progress",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Progress on each objective with percentage accuracy",
|
|
verbose_name="Objectives Progress",
|
|
),
|
|
),
|
|
(
|
|
"plan_details",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Plan details (continue/add/fade prompts/generalization)",
|
|
verbose_name="Plan Details",
|
|
),
|
|
),
|
|
("overall_progress", models.TextField(blank=True, verbose_name="Overall Progress")),
|
|
(
|
|
"participation_level",
|
|
models.TextField(blank=True, verbose_name="Participation Level"),
|
|
),
|
|
(
|
|
"attendance_rate",
|
|
models.DecimalField(
|
|
blank=True,
|
|
decimal_places=2,
|
|
help_text="Attendance rate percentage",
|
|
max_digits=5,
|
|
null=True,
|
|
verbose_name="Attendance Rate (%)",
|
|
),
|
|
),
|
|
("carryover_level", models.TextField(blank=True, verbose_name="Carryover Level")),
|
|
("prognosis", models.TextField(blank=True, verbose_name="Prognosis")),
|
|
("recommendations", models.TextField(blank=True, verbose_name="Recommendations")),
|
|
(
|
|
"package_sessions_count",
|
|
models.PositiveIntegerField(
|
|
blank=True,
|
|
help_text="Recommended number of sessions in package",
|
|
null=True,
|
|
verbose_name="Package Sessions Count",
|
|
),
|
|
),
|
|
(
|
|
"reassessment_needed",
|
|
models.BooleanField(default=False, verbose_name="Reassessment Needed"),
|
|
),
|
|
("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",
|
|
),
|
|
),
|
|
(
|
|
"provider",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Provider",
|
|
),
|
|
),
|
|
(
|
|
"signed_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Signed By",
|
|
),
|
|
),
|
|
(
|
|
"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 SLP Progress Report",
|
|
"verbose_name_plural": "historical SLP Progress Reports",
|
|
"ordering": ("-history_date", "-history_id"),
|
|
"get_latest_by": ("history_date", "history_id"),
|
|
},
|
|
bases=(simple_history.models.HistoricalChanges, models.Model),
|
|
),
|
|
migrations.CreateModel(
|
|
name="SLPIntervention",
|
|
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")),
|
|
(
|
|
"signed_at",
|
|
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
|
|
),
|
|
("session_number", models.PositiveIntegerField(verbose_name="Session Number")),
|
|
("session_date", models.DateField(verbose_name="Session Date")),
|
|
("session_time", models.TimeField(verbose_name="Session Time")),
|
|
(
|
|
"intervention_targets_json",
|
|
models.TextField(
|
|
blank=True,
|
|
default="[]",
|
|
help_text="JSON array of intervention targets with SOAP format",
|
|
verbose_name="Intervention Targets (JSON)",
|
|
),
|
|
),
|
|
(
|
|
"appointment",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="slp_interventions",
|
|
to="appointments.appointment",
|
|
verbose_name="Appointment",
|
|
),
|
|
),
|
|
(
|
|
"patient",
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="slp_interventions",
|
|
to="core.patient",
|
|
verbose_name="Patient",
|
|
),
|
|
),
|
|
(
|
|
"previous_session",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="next_sessions",
|
|
to="slp.slpintervention",
|
|
verbose_name="Previous Session",
|
|
),
|
|
),
|
|
(
|
|
"provider",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="slp_interventions_provided",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Provider",
|
|
),
|
|
),
|
|
(
|
|
"signed_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="%(app_label)s_%(class)s_signed",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Signed 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": "SLP Intervention",
|
|
"verbose_name_plural": "SLP Interventions",
|
|
"ordering": ["-session_date", "-session_number"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="HistoricalSLPIntervention",
|
|
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"),
|
|
),
|
|
(
|
|
"signed_at",
|
|
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
|
|
),
|
|
("session_number", models.PositiveIntegerField(verbose_name="Session Number")),
|
|
("session_date", models.DateField(verbose_name="Session Date")),
|
|
("session_time", models.TimeField(verbose_name="Session Time")),
|
|
(
|
|
"intervention_targets_json",
|
|
models.TextField(
|
|
blank=True,
|
|
default="[]",
|
|
help_text="JSON array of intervention targets with SOAP format",
|
|
verbose_name="Intervention Targets (JSON)",
|
|
),
|
|
),
|
|
("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
|
|
),
|
|
),
|
|
(
|
|
"appointment",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to="appointments.appointment",
|
|
verbose_name="Appointment",
|
|
),
|
|
),
|
|
(
|
|
"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",
|
|
),
|
|
),
|
|
(
|
|
"provider",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Provider",
|
|
),
|
|
),
|
|
(
|
|
"signed_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Signed By",
|
|
),
|
|
),
|
|
(
|
|
"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",
|
|
),
|
|
),
|
|
(
|
|
"previous_session",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
db_constraint=False,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.DO_NOTHING,
|
|
related_name="+",
|
|
to="slp.slpintervention",
|
|
verbose_name="Previous Session",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "historical SLP Intervention",
|
|
"verbose_name_plural": "historical SLP Interventions",
|
|
"ordering": ("-history_date", "-history_id"),
|
|
"get_latest_by": ("history_date", "history_id"),
|
|
},
|
|
bases=(simple_history.models.HistoricalChanges, models.Model),
|
|
),
|
|
migrations.CreateModel(
|
|
name="SLPProgressReport",
|
|
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")),
|
|
(
|
|
"signed_at",
|
|
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
|
|
),
|
|
("report_date", models.DateField(verbose_name="Report Date")),
|
|
(
|
|
"sessions_scheduled",
|
|
models.PositiveIntegerField(default=0, verbose_name="Sessions Scheduled"),
|
|
),
|
|
(
|
|
"sessions_attended",
|
|
models.PositiveIntegerField(default=0, verbose_name="Sessions Attended"),
|
|
),
|
|
("final_diagnosis", models.TextField(blank=True, verbose_name="Final Diagnosis")),
|
|
(
|
|
"objectives_progress",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Progress on each objective with percentage accuracy",
|
|
verbose_name="Objectives Progress",
|
|
),
|
|
),
|
|
(
|
|
"plan_details",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Plan details (continue/add/fade prompts/generalization)",
|
|
verbose_name="Plan Details",
|
|
),
|
|
),
|
|
("overall_progress", models.TextField(blank=True, verbose_name="Overall Progress")),
|
|
(
|
|
"participation_level",
|
|
models.TextField(blank=True, verbose_name="Participation Level"),
|
|
),
|
|
(
|
|
"attendance_rate",
|
|
models.DecimalField(
|
|
blank=True,
|
|
decimal_places=2,
|
|
help_text="Attendance rate percentage",
|
|
max_digits=5,
|
|
null=True,
|
|
verbose_name="Attendance Rate (%)",
|
|
),
|
|
),
|
|
("carryover_level", models.TextField(blank=True, verbose_name="Carryover Level")),
|
|
("prognosis", models.TextField(blank=True, verbose_name="Prognosis")),
|
|
("recommendations", models.TextField(blank=True, verbose_name="Recommendations")),
|
|
(
|
|
"package_sessions_count",
|
|
models.PositiveIntegerField(
|
|
blank=True,
|
|
help_text="Recommended number of sessions in package",
|
|
null=True,
|
|
verbose_name="Package Sessions Count",
|
|
),
|
|
),
|
|
(
|
|
"reassessment_needed",
|
|
models.BooleanField(default=False, verbose_name="Reassessment Needed"),
|
|
),
|
|
(
|
|
"patient",
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="slp_progress_reports",
|
|
to="core.patient",
|
|
verbose_name="Patient",
|
|
),
|
|
),
|
|
(
|
|
"provider",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="slp_progress_reports_provided",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Provider",
|
|
),
|
|
),
|
|
(
|
|
"signed_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="%(app_label)s_%(class)s_signed",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Signed 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": "SLP Progress Report",
|
|
"verbose_name_plural": "SLP Progress Reports",
|
|
"ordering": ["-report_date", "-created_at"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="SLPTarget",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.UUIDField(
|
|
default=uuid.uuid4,
|
|
editable=False,
|
|
primary_key=True,
|
|
serialize=False,
|
|
verbose_name="ID",
|
|
),
|
|
),
|
|
(
|
|
"target_number",
|
|
models.PositiveSmallIntegerField(
|
|
help_text="Target number (1 or 2)", verbose_name="Target Number"
|
|
),
|
|
),
|
|
(
|
|
"subjective",
|
|
models.TextField(
|
|
blank=True, help_text="Subjective observations", verbose_name="Subjective"
|
|
),
|
|
),
|
|
(
|
|
"objective",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Objective measurements and data",
|
|
verbose_name="Objective",
|
|
),
|
|
),
|
|
(
|
|
"assessment",
|
|
models.TextField(
|
|
blank=True, help_text="Assessment of progress", verbose_name="Assessment"
|
|
),
|
|
),
|
|
(
|
|
"plan",
|
|
models.TextField(
|
|
blank=True, help_text="Plan for next session", verbose_name="Plan"
|
|
),
|
|
),
|
|
(
|
|
"prompt_strategies",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="List of prompting strategies used",
|
|
verbose_name="Prompt Strategies",
|
|
),
|
|
),
|
|
(
|
|
"intervention",
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="targets",
|
|
to="slp.slpintervention",
|
|
verbose_name="Intervention",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"verbose_name": "SLP Target",
|
|
"verbose_name_plural": "SLP Targets",
|
|
"ordering": ["intervention", "target_number"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="SLPAssessment",
|
|
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")),
|
|
(
|
|
"signed_at",
|
|
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
|
|
),
|
|
("assessment_date", models.DateField(verbose_name="Assessment Date")),
|
|
(
|
|
"diagnosis_statement",
|
|
models.TextField(blank=True, verbose_name="Diagnosis Statement"),
|
|
),
|
|
("case_history", models.TextField(blank=True, verbose_name="Case History")),
|
|
("prenatal_history", models.TextField(blank=True, verbose_name="Prenatal History")),
|
|
(
|
|
"perinatal_history",
|
|
models.TextField(blank=True, verbose_name="Perinatal History"),
|
|
),
|
|
(
|
|
"postnatal_history",
|
|
models.TextField(blank=True, verbose_name="Postnatal History"),
|
|
),
|
|
(
|
|
"developmental_history",
|
|
models.TextField(blank=True, verbose_name="Developmental History"),
|
|
),
|
|
("medical_status", models.TextField(blank=True, verbose_name="Medical Status")),
|
|
(
|
|
"speech_language_detail",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Detailed speech and language assessment",
|
|
verbose_name="Speech/Language Detail",
|
|
),
|
|
),
|
|
(
|
|
"gfta3_score",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Goldman-Fristoe Test of Articulation-3 score",
|
|
max_length=100,
|
|
verbose_name="GFTA-3 Score",
|
|
),
|
|
),
|
|
(
|
|
"jat_score",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Joliet Articulation Test score",
|
|
max_length=100,
|
|
verbose_name="JAT Score",
|
|
),
|
|
),
|
|
(
|
|
"ssi_score",
|
|
models.CharField(
|
|
blank=True,
|
|
help_text="Stuttering Severity Instrument score",
|
|
max_length=100,
|
|
verbose_name="SSI Score",
|
|
),
|
|
),
|
|
(
|
|
"oral_mechanism",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Oral mechanism examination findings",
|
|
verbose_name="Oral Mechanism",
|
|
),
|
|
),
|
|
(
|
|
"rossetti_domains",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Rossetti Infant-Toddler Language Scale domains and age levels",
|
|
verbose_name="Rossetti Domains",
|
|
),
|
|
),
|
|
(
|
|
"joint_attention_skills",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Joint attention skills assessment (present/absent)",
|
|
verbose_name="Joint Attention Skills",
|
|
),
|
|
),
|
|
("clinical_summary", models.TextField(blank=True, verbose_name="Clinical Summary")),
|
|
("recommendations", models.TextField(blank=True, verbose_name="Recommendations")),
|
|
(
|
|
"frequency_per_week",
|
|
models.PositiveIntegerField(
|
|
blank=True,
|
|
help_text="Recommended frequency (sessions per week)",
|
|
null=True,
|
|
verbose_name="Frequency (per week)",
|
|
),
|
|
),
|
|
(
|
|
"session_duration_minutes",
|
|
models.PositiveIntegerField(
|
|
blank=True, null=True, verbose_name="Session Duration (minutes)"
|
|
),
|
|
),
|
|
(
|
|
"referral_rules",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Referral recommendations to other services",
|
|
verbose_name="Referral Rules",
|
|
),
|
|
),
|
|
(
|
|
"appointment",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="slp_assessments",
|
|
to="appointments.appointment",
|
|
verbose_name="Appointment",
|
|
),
|
|
),
|
|
(
|
|
"patient",
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="slp_assessments",
|
|
to="core.patient",
|
|
verbose_name="Patient",
|
|
),
|
|
),
|
|
(
|
|
"provider",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="slp_assessments_provided",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Provider",
|
|
),
|
|
),
|
|
(
|
|
"signed_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="%(app_label)s_%(class)s_signed",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Signed 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": "SLP Assessment",
|
|
"verbose_name_plural": "SLP Assessments",
|
|
"ordering": ["-assessment_date", "-created_at"],
|
|
"indexes": [
|
|
models.Index(
|
|
fields=["patient", "assessment_date"], name="slp_slpasse_patient_9192ae_idx"
|
|
),
|
|
models.Index(
|
|
fields=["provider", "assessment_date"],
|
|
name="slp_slpasse_provide_8f248f_idx",
|
|
),
|
|
models.Index(
|
|
fields=["tenant", "assessment_date"], name="slp_slpasse_tenant__714a73_idx"
|
|
),
|
|
],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="SLPConsult",
|
|
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")),
|
|
(
|
|
"signed_at",
|
|
models.DateTimeField(blank=True, null=True, verbose_name="Signed At"),
|
|
),
|
|
("consultation_date", models.DateField(verbose_name="Consultation Date")),
|
|
(
|
|
"consult_variant",
|
|
models.CharField(
|
|
choices=[
|
|
("ASD", "Autism Spectrum Disorder"),
|
|
("LANGUAGE_DELAY", "Language Delay"),
|
|
("FLUENCY", "Fluency Disorder"),
|
|
],
|
|
max_length=20,
|
|
verbose_name="Consultation Variant",
|
|
),
|
|
),
|
|
("primary_concern", models.TextField(blank=True, verbose_name="Primary Concern")),
|
|
(
|
|
"suspected_areas",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="List of suspected problem areas",
|
|
verbose_name="Suspected Areas",
|
|
),
|
|
),
|
|
(
|
|
"type_of_service",
|
|
models.CharField(
|
|
choices=[
|
|
("CONSULT", "Consultation"),
|
|
("EVAL", "Evaluation"),
|
|
("INTERVENTION", "Intervention"),
|
|
("PARENT_TRAINING", "Parent Training"),
|
|
],
|
|
max_length=20,
|
|
verbose_name="Type of Service",
|
|
),
|
|
),
|
|
(
|
|
"communication_modes",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Communication modes checklist (verbal, gestures, AAC, etc.)",
|
|
verbose_name="Communication Modes",
|
|
),
|
|
),
|
|
(
|
|
"screen_time_hours",
|
|
models.PositiveIntegerField(
|
|
blank=True, null=True, verbose_name="Screen Time (hours/day)"
|
|
),
|
|
),
|
|
(
|
|
"variant_questionnaire",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Variant-specific questions and answers",
|
|
verbose_name="Variant Questionnaire",
|
|
),
|
|
),
|
|
(
|
|
"skills_to_observe",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Skills observation matrix",
|
|
verbose_name="Skills to Observe",
|
|
),
|
|
),
|
|
(
|
|
"oral_motor_screening",
|
|
models.TextField(
|
|
blank=True,
|
|
help_text="Oral motor screening results",
|
|
verbose_name="Oral Motor Screening",
|
|
),
|
|
),
|
|
("recommendations", models.TextField(blank=True, verbose_name="Recommendations")),
|
|
(
|
|
"appointment",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="slp_consults",
|
|
to="appointments.appointment",
|
|
verbose_name="Appointment",
|
|
),
|
|
),
|
|
(
|
|
"patient",
|
|
models.ForeignKey(
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="slp_consults",
|
|
to="core.patient",
|
|
verbose_name="Patient",
|
|
),
|
|
),
|
|
(
|
|
"provider",
|
|
models.ForeignKey(
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="slp_consults_provided",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Provider",
|
|
),
|
|
),
|
|
(
|
|
"signed_by",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="%(app_label)s_%(class)s_signed",
|
|
to=settings.AUTH_USER_MODEL,
|
|
verbose_name="Signed 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": "SLP Consultation",
|
|
"verbose_name_plural": "SLP Consultations",
|
|
"ordering": ["-consultation_date", "-created_at"],
|
|
"indexes": [
|
|
models.Index(
|
|
fields=["patient", "consultation_date"],
|
|
name="slp_slpcons_patient_b4208c_idx",
|
|
),
|
|
models.Index(
|
|
fields=["provider", "consultation_date"],
|
|
name="slp_slpcons_provide_c6a43d_idx",
|
|
),
|
|
models.Index(fields=["consult_variant"], name="slp_slpcons_consult_42d58f_idx"),
|
|
models.Index(
|
|
fields=["tenant", "consultation_date"],
|
|
name="slp_slpcons_tenant__7ea989_idx",
|
|
),
|
|
],
|
|
},
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="slpintervention",
|
|
index=models.Index(
|
|
fields=["patient", "session_date"], name="slp_slpinte_patient_d50883_idx"
|
|
),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="slpintervention",
|
|
index=models.Index(
|
|
fields=["provider", "session_date"], name="slp_slpinte_provide_f9d964_idx"
|
|
),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="slpintervention",
|
|
index=models.Index(fields=["session_number"], name="slp_slpinte_session_d9281f_idx"),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="slpintervention",
|
|
index=models.Index(
|
|
fields=["tenant", "session_date"], name="slp_slpinte_tenant__050434_idx"
|
|
),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="slpprogressreport",
|
|
index=models.Index(
|
|
fields=["patient", "report_date"], name="slp_slpprog_patient_dc4316_idx"
|
|
),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="slpprogressreport",
|
|
index=models.Index(
|
|
fields=["provider", "report_date"], name="slp_slpprog_provide_eed43b_idx"
|
|
),
|
|
),
|
|
migrations.AddIndex(
|
|
model_name="slpprogressreport",
|
|
index=models.Index(
|
|
fields=["tenant", "report_date"], name="slp_slpprog_tenant__5d2e52_idx"
|
|
),
|
|
),
|
|
migrations.AlterUniqueTogether(
|
|
name="slptarget",
|
|
unique_together={("intervention", "target_number")},
|
|
),
|
|
]
|