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

132 lines
6.4 KiB
Python

"""
Django REST Framework serializers for psychology app.
"""
from rest_framework import serializers
from .models import (
PsychologyConsultation,
PsychologyAssessment,
PsychologySession,
PsychologyGoal,
PsychologyProgressReport,
)
class PsychologyConsultationSerializer(serializers.ModelSerializer):
"""Serializer for PsychologyConsultation model."""
patient_name = serializers.CharField(source='patient.get_full_name', read_only=True)
provider_name = serializers.CharField(source='provider.get_full_name', read_only=True)
referral_reason_display = serializers.CharField(source='get_referral_reason_display', read_only=True)
suicide_risk_display = serializers.CharField(source='get_suicide_risk_display', read_only=True)
homicide_risk_display = serializers.CharField(source='get_homicide_risk_display', read_only=True)
class Meta:
model = PsychologyConsultation
fields = [
'id', 'patient', 'patient_name', 'tenant', 'consultation_date',
'provider', 'provider_name', 'appointment',
'referral_reason', 'referral_reason_display', 'referral_source',
'presenting_problem', 'family_history', 'medical_history',
'developmental_history', 'educational_history', 'social_history',
'appearance', 'behavior', 'mood', 'affect', 'speech',
'thought_process', 'thought_content', 'perception',
'cognition', 'insight', 'judgment',
'suicide_risk', 'suicide_risk_display',
'homicide_risk', 'homicide_risk_display',
'risk_assessment_notes', 'clinical_impressions',
'provisional_diagnosis', 'treatment_goals', 'treatment_approach',
'recommendations', 'frequency_duration', 'referrals_needed',
'signed_by', 'signed_at', 'created_at', 'updated_at',
]
read_only_fields = ['id', 'created_at', 'updated_at', 'signed_by', 'signed_at']
class PsychologyAssessmentSerializer(serializers.ModelSerializer):
"""Serializer for PsychologyAssessment model."""
patient_name = serializers.CharField(source='patient.get_full_name', read_only=True)
provider_name = serializers.CharField(source='provider.get_full_name', read_only=True)
assessment_type_display = serializers.CharField(source='get_assessment_type_display', read_only=True)
class Meta:
model = PsychologyAssessment
fields = [
'id', 'patient', 'patient_name', 'tenant', 'assessment_date',
'provider', 'provider_name', 'appointment',
'assessment_type', 'assessment_type_display', 'reason_for_assessment',
'relevant_history', 'current_medications', 'tests_administered',
'behavioral_observations', 'test_validity',
'cognitive_functioning', 'emotional_functioning',
'behavioral_functioning', 'social_functioning', 'adaptive_functioning',
'strengths', 'weaknesses', 'diagnostic_impressions', 'dsm5_diagnosis',
'recommendations', 'treatment_recommendations',
'educational_recommendations', 'follow_up_recommendations',
'signed_by', 'signed_at', 'created_at', 'updated_at',
]
read_only_fields = ['id', 'created_at', 'updated_at', 'signed_by', 'signed_at']
class PsychologySessionSerializer(serializers.ModelSerializer):
"""Serializer for PsychologySession model."""
patient_name = serializers.CharField(source='patient.get_full_name', read_only=True)
provider_name = serializers.CharField(source='provider.get_full_name', read_only=True)
session_type_display = serializers.CharField(source='get_session_type_display', read_only=True)
therapy_modality_display = serializers.CharField(source='get_therapy_modality_display', read_only=True)
current_risk_level_display = serializers.CharField(source='get_current_risk_level_display', read_only=True)
class Meta:
model = PsychologySession
fields = [
'id', 'patient', 'patient_name', 'tenant', 'session_number',
'session_date', 'provider', 'provider_name', 'appointment',
'session_type', 'session_type_display',
'therapy_modality', 'therapy_modality_display', 'duration_minutes',
'presenting_issues', 'interventions_used', 'client_response',
'progress_toward_goals', 'behavioral_observations', 'mood_affect',
'current_risk_level', 'current_risk_level_display', 'risk_notes',
'homework_assigned', 'plan_for_next_session', 'clinical_notes',
'signed_by', 'signed_at', 'created_at', 'updated_at',
]
read_only_fields = ['id', 'created_at', 'updated_at', 'signed_by', 'signed_at']
class PsychologyGoalSerializer(serializers.ModelSerializer):
"""Serializer for PsychologyGoal model."""
patient_name = serializers.CharField(source='patient.get_full_name', read_only=True)
status_display = serializers.CharField(source='get_status_display', read_only=True)
class Meta:
model = PsychologyGoal
fields = [
'id', 'patient', 'patient_name', 'consultation',
'goal_description', 'target_date', 'status', 'status_display',
'progress_percentage', 'progress_notes', 'achieved_date',
'created_at', 'updated_at',
]
read_only_fields = ['id', 'created_at', 'updated_at']
class PsychologyProgressReportSerializer(serializers.ModelSerializer):
"""Serializer for PsychologyProgressReport model."""
patient_name = serializers.CharField(source='patient.get_full_name', read_only=True)
provider_name = serializers.CharField(source='provider.get_full_name', read_only=True)
attendance_rate = serializers.DecimalField(max_digits=5, decimal_places=2, read_only=True)
class Meta:
model = PsychologyProgressReport
fields = [
'id', 'patient', 'patient_name', 'tenant', 'report_date',
'provider', 'provider_name', 'treatment_start_date',
'sessions_scheduled', 'sessions_attended', 'attendance_rate',
'presenting_problems_summary', 'treatment_provided',
'goals_progress', 'overall_progress',
'current_functioning', 'current_symptoms',
'recommendations', 'continue_treatment', 'discharge_plan', 'prognosis',
'signed_by', 'signed_at', 'created_at', 'updated_at',
]
read_only_fields = ['id', 'created_at', 'updated_at', 'signed_by', 'signed_at', 'attendance_rate']