""" 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']