agdar/psychology/admin.py
Marwan Alwali 2f1681b18c update
2025-11-11 13:44:48 +03:00

239 lines
9.1 KiB
Python

"""
Django admin configuration for psychology app.
"""
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from .models import (
PsychologyConsultation,
PsychologyAssessment,
PsychologySession,
PsychologyGoal,
PsychologyProgressReport,
)
@admin.register(PsychologyConsultation)
class PsychologyConsultationAdmin(admin.ModelAdmin):
"""Admin interface for PsychologyConsultation model."""
list_display = ['patient', 'consultation_date', 'referral_reason', 'provider',
'suicide_risk', 'homicide_risk', 'signed_by', 'signed_at', 'tenant']
list_filter = ['consultation_date', 'referral_reason', 'suicide_risk', 'homicide_risk',
'tenant', 'signed_at']
search_fields = ['patient__mrn', 'patient__first_name_en', 'patient__last_name_en',
'presenting_problem', 'provisional_diagnosis']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'consultation_date'
fieldsets = (
(_('Patient & Provider'), {
'fields': ('patient', 'tenant', 'consultation_date', 'provider', 'appointment')
}),
(_('Referral Information'), {
'fields': ('referral_reason', 'referral_source', 'presenting_problem')
}),
(_('Background Information'), {
'fields': ('family_history', 'medical_history', 'developmental_history',
'educational_history', 'social_history'),
'classes': ('collapse',)
}),
(_('Mental Status Examination'), {
'fields': ('appearance', 'behavior', 'mood', 'affect', 'speech',
'thought_process', 'thought_content', 'perception',
'cognition', 'insight', 'judgment'),
'classes': ('collapse',)
}),
(_('Risk Assessment'), {
'fields': ('suicide_risk', 'homicide_risk', 'risk_assessment_notes')
}),
(_('Clinical Impressions'), {
'fields': ('clinical_impressions', 'provisional_diagnosis')
}),
(_('Treatment Plan'), {
'fields': ('treatment_goals', 'treatment_approach', 'recommendations',
'frequency_duration', 'referrals_needed')
}),
(_('Signature'), {
'fields': ('signed_by', 'signed_at'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(PsychologyAssessment)
class PsychologyAssessmentAdmin(admin.ModelAdmin):
"""Admin interface for PsychologyAssessment model."""
list_display = ['patient', 'assessment_date', 'assessment_type', 'provider',
'signed_by', 'signed_at', 'tenant']
list_filter = ['assessment_date', 'assessment_type', 'tenant', 'signed_at']
search_fields = ['patient__mrn', 'patient__first_name_en', 'patient__last_name_en',
'reason_for_assessment', 'diagnostic_impressions']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'assessment_date'
fieldsets = (
(_('Patient & Provider'), {
'fields': ('patient', 'tenant', 'assessment_date', 'provider', 'appointment')
}),
(_('Assessment Details'), {
'fields': ('assessment_type', 'reason_for_assessment')
}),
(_('Background'), {
'fields': ('relevant_history', 'current_medications'),
'classes': ('collapse',)
}),
(_('Tests & Observations'), {
'fields': ('tests_administered', 'behavioral_observations', 'test_validity')
}),
(_('Results Summary'), {
'fields': ('cognitive_functioning', 'emotional_functioning',
'behavioral_functioning', 'social_functioning', 'adaptive_functioning')
}),
(_('Strengths & Weaknesses'), {
'fields': ('strengths', 'weaknesses')
}),
(_('Diagnosis'), {
'fields': ('diagnostic_impressions', 'dsm5_diagnosis')
}),
(_('Recommendations'), {
'fields': ('recommendations', 'treatment_recommendations',
'educational_recommendations', 'follow_up_recommendations')
}),
(_('Signature'), {
'fields': ('signed_by', 'signed_at'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(PsychologySession)
class PsychologySessionAdmin(admin.ModelAdmin):
"""Admin interface for PsychologySession model."""
list_display = ['patient', 'session_number', 'session_date', 'session_type',
'therapy_modality', 'duration_minutes', 'current_risk_level',
'provider', 'signed_by', 'signed_at', 'tenant']
list_filter = ['session_date', 'session_type', 'therapy_modality', 'current_risk_level',
'tenant', 'signed_at']
search_fields = ['patient__mrn', 'patient__first_name_en', 'patient__last_name_en',
'presenting_issues', 'interventions_used']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'session_date'
fieldsets = (
(_('Patient & Provider'), {
'fields': ('patient', 'tenant', 'session_number', 'session_date', 'provider', 'appointment')
}),
(_('Session Details'), {
'fields': ('session_type', 'therapy_modality', 'duration_minutes')
}),
(_('Session Content'), {
'fields': ('presenting_issues', 'interventions_used', 'client_response')
}),
(_('Progress Notes'), {
'fields': ('progress_toward_goals', 'behavioral_observations', 'mood_affect')
}),
(_('Risk Assessment'), {
'fields': ('current_risk_level', 'risk_notes')
}),
(_('Homework & Plan'), {
'fields': ('homework_assigned', 'plan_for_next_session')
}),
(_('Clinical Notes'), {
'fields': ('clinical_notes',),
'classes': ('collapse',)
}),
(_('Signature'), {
'fields': ('signed_by', 'signed_at'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(PsychologyGoal)
class PsychologyGoalAdmin(admin.ModelAdmin):
"""Admin interface for PsychologyGoal model."""
list_display = ['patient', 'goal_description', 'status', 'progress_percentage',
'target_date', 'achieved_date']
list_filter = ['status', 'target_date', 'patient']
search_fields = ['goal_description', 'patient__mrn', 'progress_notes']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'target_date'
fieldsets = (
(None, {
'fields': ('patient', 'consultation', 'goal_description', 'status')
}),
(_('Progress'), {
'fields': ('progress_percentage', 'target_date', 'achieved_date')
}),
(_('Progress Notes'), {
'fields': ('progress_notes',),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(PsychologyProgressReport)
class PsychologyProgressReportAdmin(admin.ModelAdmin):
"""Admin interface for PsychologyProgressReport model."""
list_display = ['patient', 'report_date', 'provider', 'sessions_scheduled',
'sessions_attended', 'attendance_rate', 'continue_treatment',
'signed_by', 'signed_at', 'tenant']
list_filter = ['report_date', 'continue_treatment', 'tenant', 'signed_at']
search_fields = ['patient__mrn', 'patient__first_name_en', 'patient__last_name_en',
'overall_progress', 'recommendations']
readonly_fields = ['id', 'created_at', 'updated_at', 'attendance_rate']
date_hierarchy = 'report_date'
fieldsets = (
(_('Patient & Provider'), {
'fields': ('patient', 'tenant', 'report_date', 'provider')
}),
(_('Treatment Summary'), {
'fields': ('treatment_start_date', 'sessions_scheduled', 'sessions_attended', 'attendance_rate')
}),
(_('Progress Summary'), {
'fields': ('presenting_problems_summary', 'treatment_provided',
'goals_progress', 'overall_progress')
}),
(_('Current Status'), {
'fields': ('current_functioning', 'current_symptoms')
}),
(_('Recommendations'), {
'fields': ('recommendations', 'continue_treatment', 'discharge_plan')
}),
(_('Prognosis'), {
'fields': ('prognosis',)
}),
(_('Signature'), {
'fields': ('signed_by', 'signed_at'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)