agdar/medical/admin.py
2025-11-02 14:35:35 +03:00

186 lines
6.8 KiB
Python

"""
Django admin configuration for medical app.
"""
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from .models import (
MedicalConsultation,
MedicationPlan,
MedicalFollowUp,
ConsultationResponse,
ConsultationFeedback,
)
@admin.register(MedicalConsultation)
class MedicalConsultationAdmin(admin.ModelAdmin):
"""Admin interface for MedicalConsultation model."""
list_display = ['patient', 'consultation_date', 'provider', 'signed_by', 'signed_at', 'tenant']
list_filter = ['consultation_date', 'tenant', 'signed_at']
search_fields = ['patient__mrn', 'patient__first_name_en', 'patient__last_name_en',
'chief_complaint', 'clinical_summary']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'consultation_date'
fieldsets = (
(_('Patient & Provider'), {
'fields': ('patient', 'tenant', 'consultation_date', 'provider')
}),
(_('Chief Complaint'), {
'fields': ('chief_complaint', 'appointment')
}),
(_('History'), {
'fields': ('present_illness_history', 'past_medical_history', 'vaccination_status',
'family_history', 'social_history', 'pregnancy_history', 'neonatal_history')
}),
(_('Developmental Milestones'), {
'fields': ('developmental_motor_milestones', 'developmental_language_milestones',
'developmental_social_milestones', 'developmental_cognitive_milestones'),
'classes': ('collapse',)
}),
(_('Behavioral Symptoms'), {
'fields': ('behavioral_symptoms',),
'classes': ('collapse',)
}),
(_('Physical Examination'), {
'fields': ('physical_exam',),
'classes': ('collapse',)
}),
(_('Assessment & Plan'), {
'fields': ('clinical_summary', 'recommendations', 'referrals_needed')
}),
(_('Medications'), {
'fields': ('medications',),
'classes': ('collapse',)
}),
(_('Orders'), {
'fields': ('lab_orders', 'radiology_orders'),
'classes': ('collapse',)
}),
(_('Signature'), {
'fields': ('signed_by', 'signed_at'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(ConsultationResponse)
class ConsultationResponseAdmin(admin.ModelAdmin):
"""Admin interface for ConsultationResponse model."""
list_display = ['consultation', 'response_type', 'responder', 'response_date', 'follow_up_needed', 'tenant']
list_filter = ['response_type', 'response_date', 'follow_up_needed', 'tenant']
search_fields = ['consultation__patient__mrn', 'responder__first_name', 'responder__last_name', 'assessment']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'response_date'
fieldsets = (
(_('Response Information'), {
'fields': ('consultation', 'tenant', 'response_type', 'responder', 'response_date')
}),
(_('Assessment & Recommendations'), {
'fields': ('assessment', 'recommendations', 'follow_up_needed', 'notes')
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(ConsultationFeedback)
class ConsultationFeedbackAdmin(admin.ModelAdmin):
"""Admin interface for ConsultationFeedback model."""
list_display = ['consultation', 'feedback_type', 'submitted_by_name', 'feedback_date',
'satisfaction_rating', 'communication_rating', 'care_quality_rating']
list_filter = ['feedback_type', 'feedback_date', 'satisfaction_rating', 'communication_rating', 'care_quality_rating']
search_fields = ['consultation__patient__mrn', 'submitted_by_name', 'comments']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'feedback_date'
fieldsets = (
(_('Feedback Information'), {
'fields': ('consultation', 'feedback_type', 'submitted_by', 'submitted_by_name', 'feedback_date')
}),
(_('Ratings'), {
'fields': ('satisfaction_rating', 'communication_rating', 'care_quality_rating')
}),
(_('Comments & Suggestions'), {
'fields': ('comments', 'concerns', 'suggestions')
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(MedicationPlan)
class MedicationPlanAdmin(admin.ModelAdmin):
"""Admin interface for MedicationPlan model."""
list_display = ['consultation', 'drug_name', 'dose', 'frequency', 'compliance', 'improved']
list_filter = ['frequency', 'compliance', 'improved']
search_fields = ['drug_name', 'consultation__patient__mrn']
readonly_fields = ['id']
fieldsets = (
(None, {
'fields': ('consultation', 'drug_name')
}),
(_('Dosage & Administration'), {
'fields': ('dose', 'frequency', 'frequency_other')
}),
(_('Effectiveness & Compliance'), {
'fields': ('compliance', 'gains', 'side_effects', 'target_behavior', 'improved')
}),
(_('Metadata'), {
'fields': ('id',),
'classes': ('collapse',)
}),
)
@admin.register(MedicalFollowUp)
class MedicalFollowUpAdmin(admin.ModelAdmin):
"""Admin interface for MedicalFollowUp model."""
list_display = ['patient', 'followup_date', 'provider', 'family_satisfaction', 'signed_by',
'signed_at', 'tenant']
list_filter = ['followup_date', 'family_satisfaction', 'tenant', 'signed_at']
search_fields = ['patient__mrn', 'patient__first_name_en', 'patient__last_name_en']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'followup_date'
fieldsets = (
(_('Patient & Provider'), {
'fields': ('patient', 'tenant', 'followup_date', 'provider', 'previous_consultation')
}),
(_('Complaints & Status'), {
'fields': ('previous_complaints_status', 'new_complaints')
}),
(_('Vitals & Assessment'), {
'fields': ('nursing_vitals', 'assessment', 'recommendations', 'family_satisfaction')
}),
(_('Medications'), {
'fields': ('medication_snapshot',),
'classes': ('collapse',)
}),
(_('Signature'), {
'fields': ('signed_by', 'signed_at'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)