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

190 lines
6.1 KiB
Python

"""
Django admin configuration for integrations app.
"""
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from .models import (
ExternalOrder,
NphiesMessage,
NphiesEncounterLink,
PayerContract,
EInvoice,
ZatcaCredential,
)
@admin.register(ExternalOrder)
class ExternalOrderAdmin(admin.ModelAdmin):
"""Admin interface for ExternalOrder model."""
list_display = ['patient', 'order_type', 'status', 'ordered_by', 'ordered_at', 'tenant']
list_filter = ['order_type', 'status', 'tenant', 'ordered_at']
search_fields = ['patient__mrn', 'patient__first_name_en', 'patient__last_name_en']
readonly_fields = ['id', 'ordered_at', 'created_at', 'updated_at']
date_hierarchy = 'ordered_at'
fieldsets = (
(None, {
'fields': ('patient', 'order_type', 'tenant', 'status')
}),
(_('Order Details'), {
'fields': ('order_details', 'ordered_by', 'ordered_at')
}),
(_('Results'), {
'fields': ('result_url', 'result_data', 'completed_at'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(NphiesMessage)
class NphiesMessageAdmin(admin.ModelAdmin):
"""Admin interface for NphiesMessage model."""
list_display = ['direction', 'resource_type', 'status', 'correlation_id', 'sent_at', 'tenant']
list_filter = ['direction', 'resource_type', 'status', 'tenant', 'sent_at']
search_fields = ['correlation_id', 'error_code']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'created_at'
fieldsets = (
(None, {
'fields': ('direction', 'resource_type', 'tenant', 'status')
}),
(_('FHIR Data'), {
'fields': ('fhir_json',)
}),
(_('Correlation'), {
'fields': ('correlation_id', 'sent_at')
}),
(_('Response'), {
'fields': ('response_http_status',),
'classes': ('collapse',)
}),
(_('Error Information'), {
'fields': ('error_code', 'error_message'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(NphiesEncounterLink)
class NphiesEncounterLinkAdmin(admin.ModelAdmin):
"""Admin interface for NphiesEncounterLink model."""
list_display = ['patient', 'appointment', 'encounter_id', 'claim_id', 'tenant']
list_filter = ['tenant']
search_fields = ['patient__mrn', 'encounter_id', 'claim_id', 'claim_response_id']
readonly_fields = ['id']
fieldsets = (
(None, {
'fields': ('patient', 'appointment', 'tenant')
}),
(_('NPHIES Identifiers'), {
'fields': ('encounter_id', 'claim_id', 'claim_response_id')
}),
(_('Metadata'), {
'fields': ('id',),
'classes': ('collapse',)
}),
)
@admin.register(PayerContract)
class PayerContractAdmin(admin.ModelAdmin):
"""Admin interface for PayerContract model."""
list_display = ['payer_name', 'payer_code', 'supports_eligibility', 'supports_prior_auth',
'supports_claims', 'is_active', 'tenant']
list_filter = ['is_active', 'supports_eligibility', 'supports_prior_auth', 'supports_claims', 'tenant']
search_fields = ['payer_name', 'payer_code']
readonly_fields = ['id', 'created_at', 'updated_at']
fieldsets = (
(None, {
'fields': ('payer_name', 'payer_code', 'tenant', 'is_active')
}),
(_('Capabilities'), {
'fields': ('supports_eligibility', 'supports_prior_auth', 'supports_claims')
}),
(_('Configuration'), {
'fields': ('credentials', 'endpoints'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(EInvoice)
class EInvoiceAdmin(admin.ModelAdmin):
"""Admin interface for EInvoice model."""
list_display = ['invoice', 'uuid', 'clearance_status', 'submission_mode', 'submitted_at', 'tenant']
list_filter = ['clearance_status', 'submission_mode', 'tenant', 'submitted_at']
search_fields = ['invoice__invoice_number', 'uuid', 'zatca_document_type']
readonly_fields = ['id', 'created_at', 'updated_at']
date_hierarchy = 'created_at'
fieldsets = (
(None, {
'fields': ('invoice', 'uuid', 'tenant', 'clearance_status', 'submission_mode')
}),
(_('ZATCA Details'), {
'fields': ('zatca_document_type', 'submitted_at')
}),
(_('XML & QR'), {
'fields': ('xml_payload', 'qr_base64'),
'classes': ('collapse',)
}),
(_('Response'), {
'fields': ('response_payload',),
'classes': ('collapse',)
}),
(_('Error Information'), {
'fields': ('error_code', 'error_message'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
@admin.register(ZatcaCredential)
class ZatcaCredentialAdmin(admin.ModelAdmin):
"""Admin interface for ZatcaCredential model."""
list_display = ['tenant', 'environment', 'is_active', 'expires_at', 'is_expired']
list_filter = ['environment', 'is_active', 'tenant', 'expires_at']
search_fields = ['tenant__name']
readonly_fields = ['id', 'is_expired', 'created_at', 'updated_at']
fieldsets = (
(None, {
'fields': ('tenant', 'environment', 'is_active')
}),
(_('Credentials'), {
'fields': ('csid', 'certificate', 'private_key', 'expires_at', 'is_expired'),
'classes': ('collapse',)
}),
(_('Metadata'), {
'fields': ('id', 'created_at', 'updated_at'),
'classes': ('collapse',)
}),
)