HH/apps/journeys/serializers.py
2026-01-24 15:27:30 +03:00

133 lines
5.3 KiB
Python

"""
Journeys serializers
"""
from rest_framework import serializers
from .models import (
PatientJourneyInstance,
PatientJourneyStageInstance,
PatientJourneyStageTemplate,
PatientJourneyTemplate,
)
class PatientJourneyStageTemplateSerializer(serializers.ModelSerializer):
"""Journey stage template serializer"""
survey_template_name = serializers.CharField(source='survey_template.name', read_only=True)
class Meta:
model = PatientJourneyStageTemplate
fields = [
'id', 'journey_template', 'name', 'name_ar', 'code', 'order',
'trigger_event_code', 'survey_template', 'survey_template_name',
'is_optional', 'is_active',
'created_at', 'updated_at'
]
read_only_fields = ['id', 'created_at', 'updated_at']
class PatientJourneyTemplateSerializer(serializers.ModelSerializer):
"""Journey template serializer"""
hospital_name = serializers.CharField(source='hospital.name', read_only=True)
stages = PatientJourneyStageTemplateSerializer(many=True, read_only=True)
stage_count = serializers.SerializerMethodField()
class Meta:
model = PatientJourneyTemplate
fields = [
'id', 'name', 'name_ar', 'journey_type', 'description',
'hospital', 'hospital_name', 'is_active', 'is_default',
'stages', 'stage_count',
'created_at', 'updated_at'
]
read_only_fields = ['id', 'created_at', 'updated_at']
def get_stage_count(self, obj):
"""Get number of stages"""
return obj.stages.count()
class PatientJourneyStageInstanceSerializer(serializers.ModelSerializer):
"""Journey stage instance serializer"""
stage_name = serializers.CharField(source='stage_template.name', read_only=True)
stage_order = serializers.IntegerField(source='stage_template.order', read_only=True)
staff_name = serializers.SerializerMethodField()
department_name = serializers.CharField(source='department.name', read_only=True)
class Meta:
model = PatientJourneyStageInstance
fields = [
'id', 'journey_instance', 'stage_template', 'stage_name', 'stage_order',
'status', 'completed_at',
'staff', 'staff_name', 'department', 'department_name',
'metadata', 'created_at', 'updated_at'
]
read_only_fields = [
'id', 'completed_at',
'created_at', 'updated_at'
]
def get_staff_name(self, obj):
"""Get staff full name"""
if obj.staff:
return obj.staff.get_full_name()
return None
class PatientJourneyInstanceSerializer(serializers.ModelSerializer):
"""Journey instance serializer"""
journey_template_name = serializers.CharField(source='journey_template.name', read_only=True)
journey_type = serializers.CharField(source='journey_template.journey_type', read_only=True)
patient_name = serializers.CharField(source='patient.get_full_name', read_only=True)
patient_mrn = serializers.CharField(source='patient.mrn', read_only=True)
hospital_name = serializers.CharField(source='hospital.name', read_only=True)
department_name = serializers.CharField(source='department.name', read_only=True)
stage_instances = PatientJourneyStageInstanceSerializer(many=True, read_only=True)
completion_percentage = serializers.SerializerMethodField()
is_complete = serializers.SerializerMethodField()
class Meta:
model = PatientJourneyInstance
fields = [
'id', 'journey_template', 'journey_template_name', 'journey_type',
'patient', 'patient_name', 'patient_mrn', 'encounter_id',
'hospital', 'hospital_name', 'department', 'department_name',
'status', 'started_at', 'completed_at',
'stage_instances', 'completion_percentage', 'is_complete',
'metadata', 'created_at', 'updated_at'
]
read_only_fields = [
'id', 'started_at', 'completed_at',
'created_at', 'updated_at'
]
def get_completion_percentage(self, obj):
"""Get completion percentage"""
return obj.get_completion_percentage()
def get_is_complete(self, obj):
"""Check if journey is complete"""
return obj.is_complete()
class PatientJourneyInstanceListSerializer(serializers.ModelSerializer):
"""Simplified journey instance serializer for list views"""
journey_template_name = serializers.CharField(source='journey_template.name', read_only=True)
journey_type = serializers.CharField(source='journey_template.journey_type', read_only=True)
patient_name = serializers.CharField(source='patient.get_full_name', read_only=True)
patient_mrn = serializers.CharField(source='patient.mrn', read_only=True)
hospital_name = serializers.CharField(source='hospital.name', read_only=True)
completion_percentage = serializers.SerializerMethodField()
class Meta:
model = PatientJourneyInstance
fields = [
'id', 'encounter_id', 'journey_template_name', 'journey_type',
'patient_name', 'patient_mrn', 'hospital_name',
'status', 'completion_percentage', 'started_at'
]
def get_completion_percentage(self, obj):
"""Get completion percentage"""
return obj.get_completion_percentage()