hospital-management/core/api/serializers.py
2025-08-12 13:33:25 +03:00

116 lines
4.5 KiB
Python

"""
Core API serializers.
"""
from rest_framework import serializers
from ..models import Tenant, AuditLogEntry, SystemConfiguration, SystemNotification, IntegrationLog
class TenantSerializer(serializers.ModelSerializer):
"""
Tenant serializer.
"""
user_count = serializers.ReadOnlyField(source='get_user_count')
patient_count = serializers.ReadOnlyField(source='get_patient_count')
is_trial_expired = serializers.ReadOnlyField()
class Meta:
model = Tenant
fields = [
'tenant_id', 'name', 'display_name', 'description',
'organization_type', 'address_line1', 'address_line2',
'city', 'state', 'postal_code', 'country',
'phone_number', 'email', 'website',
'license_number', 'accreditation_body', 'accreditation_number',
'accreditation_expiry', 'timezone', 'locale', 'currency',
'subscription_plan', 'max_users', 'max_patients',
'is_active', 'is_trial', 'trial_expires_at',
'user_count', 'patient_count', 'is_trial_expired',
'created_at', 'updated_at'
]
read_only_fields = ['tenant_id', 'created_at', 'updated_at']
class AuditLogEntrySerializer(serializers.ModelSerializer):
"""
Audit log entry serializer.
"""
tenant_name = serializers.CharField(source='tenant.name', read_only=True)
user_name = serializers.CharField(source='user.get_full_name', read_only=True)
content_type_name = serializers.CharField(source='content_type.name', read_only=True)
class Meta:
model = AuditLogEntry
fields = [
'log_id', 'tenant', 'tenant_name', 'event_type', 'event_category',
'user', 'user_name', 'user_email', 'user_role',
'session_key', 'ip_address', 'user_agent',
'content_type', 'content_type_name', 'object_id', 'object_repr',
'action', 'description', 'changes', 'additional_data',
'patient_id', 'patient_mrn', 'risk_level',
'hipaa_relevant', 'gdpr_relevant',
'is_successful', 'error_message',
'timestamp', 'created_at'
]
read_only_fields = ['log_id', 'created_at']
class SystemConfigurationSerializer(serializers.ModelSerializer):
"""
System configuration serializer.
"""
tenant_name = serializers.CharField(source='tenant.name', read_only=True)
typed_value = serializers.ReadOnlyField(source='get_typed_value')
updated_by_name = serializers.CharField(source='updated_by.get_full_name', read_only=True)
class Meta:
model = SystemConfiguration
fields = [
'id', 'tenant', 'tenant_name', 'key', 'value', 'data_type',
'category', 'description', 'validation_rules', 'default_value',
'is_sensitive', 'is_encrypted', 'required_permission',
'is_active', 'is_readonly', 'typed_value',
'created_at', 'updated_at', 'updated_by', 'updated_by_name'
]
read_only_fields = ['created_at', 'updated_at']
class SystemNotificationSerializer(serializers.ModelSerializer):
"""
System notification serializer.
"""
tenant_name = serializers.CharField(source='tenant.name', read_only=True)
created_by_name = serializers.CharField(source='created_by.get_full_name', read_only=True)
is_visible = serializers.ReadOnlyField()
class Meta:
model = SystemNotification
fields = [
'notification_id', 'tenant', 'tenant_name', 'title', 'message',
'notification_type', 'priority', 'target_audience',
'target_roles', 'is_dismissible', 'auto_dismiss_after',
'show_on_login', 'start_date', 'end_date',
'action_url', 'action_text', 'is_active', 'is_visible',
'created_at', 'created_by', 'created_by_name'
]
read_only_fields = ['notification_id', 'created_at']
class IntegrationLogSerializer(serializers.ModelSerializer):
"""
Integration log serializer.
"""
tenant_name = serializers.CharField(source='tenant.name', read_only=True)
class Meta:
model = IntegrationLog
fields = [
'log_id', 'tenant', 'tenant_name', 'integration_type', 'direction',
'external_system', 'endpoint', 'message_type', 'message_id',
'correlation_id', 'request_data', 'response_data',
'status', 'error_code', 'error_message',
'processing_time_ms', 'timestamp', 'created_at'
]
read_only_fields = ['log_id', 'created_at']