2025-08-12 13:33:25 +03:00

535 lines
24 KiB
HTML

{% extends "base.html" %}
{% load static %}
{% block title %}Insurance Details - Patients{% endblock %}
{% block content %}
<!-- BEGIN breadcrumb -->
<ol class="breadcrumb float-xl-end">
<li class="breadcrumb-item"><a href="{% url 'core:dashboard' %}">Dashboard</a></li>
<li class="breadcrumb-item"><a href="{% url 'patients:patient_list' %}">Patients</a></li>
<li class="breadcrumb-item"><a href="{% url 'patients:patient_detail' object.patient.pk %}">{{ object.patient.get_full_name }}</a></li>
<li class="breadcrumb-item"><a href="{% url 'patients:insurance_list' %}">Insurance</a></li>
<li class="breadcrumb-item active">{{ object.insurance_provider }}</li>
</ol>
<!-- END breadcrumb -->
<!-- BEGIN page-header -->
<h1 class="page-header">
Insurance Details
<small>{{ object.insurance_provider }}</small>
</h1>
<!-- END page-header -->
<div class="row">
<div class="col-xl-8">
<!-- BEGIN panel -->
<div class="panel panel-inverse">
<div class="panel-heading">
<h4 class="panel-title">Insurance Information</h4>
<div class="panel-heading-btn">
<a href="{% url 'patients:insurance_update' object.pk %}" class="btn btn-xs btn-primary me-2">
<i class="fa fa-edit"></i> Edit
</a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
</div>
</div>
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<td class="fw-bold" width="150">Provider:</td>
<td>{{ object.insurance_provider }}</td>
</tr>
<tr>
<td class="fw-bold">Policy Number:</td>
<td><code>{{ object.policy_number }}</code></td>
</tr>
<tr>
<td class="fw-bold">Member ID:</td>
<td>
{% if object.member_id %}
<code>{{ object.member_id }}</code>
{% else %}
<span class="text-muted">Not provided</span>
{% endif %}
</td>
</tr>
<tr>
<td class="fw-bold">Group Number:</td>
<td>
{% if object.group_number %}
<code>{{ object.group_number }}</code>
{% else %}
<span class="text-muted">Not provided</span>
{% endif %}
</td>
</tr>
<tr>
<td class="fw-bold">Insurance Type:</td>
<td>
<span class="badge bg-{% if object.insurance_type == 'PRIMARY' %}primary{% elif object.insurance_type == 'SECONDARY' %}info{% else %}secondary{% endif %}">
{{ object.get_insurance_type_display }}
</span>
</td>
</tr>
<tr>
<td class="fw-bold">Status:</td>
<td>
<span class="badge bg-{% if object.status == 'ACTIVE' %}success{% elif object.status == 'EXPIRED' %}danger{% elif object.status == 'PENDING' %}warning{% else %}secondary{% endif %}">
{{ object.get_status_display }}
</span>
{% if object.status == 'ACTIVE' and object.is_expiring_soon %}
<br><small class="text-warning mt-1">
<i class="fa fa-exclamation-triangle"></i> Expires in {{ object.days_until_expiration }} days
</small>
{% endif %}
</td>
</tr>
</table>
</div>
<div class="col-md-6">
<table class="table table-borderless">
<tr>
<td class="fw-bold" width="150">Effective Date:</td>
<td>
{% if object.effective_date %}
{{ object.effective_date|date:"M d, Y" }}
{% else %}
<span class="text-muted">Not set</span>
{% endif %}
</td>
</tr>
<tr>
<td class="fw-bold">Expiration Date:</td>
<td>
{% if object.expiration_date %}
{{ object.expiration_date|date:"M d, Y" }}
{% if object.is_expired %}
<br><small class="text-danger">
<i class="fa fa-exclamation-circle"></i> Expired
</small>
{% elif object.is_expiring_soon %}
<br><small class="text-warning">
<i class="fa fa-clock"></i> {{ object.days_until_expiration }} days remaining
</small>
{% endif %}
{% else %}
<span class="text-muted">No expiration</span>
{% endif %}
</td>
</tr>
<tr>
<td class="fw-bold">Copay:</td>
<td>
{% if object.copay %}
${{ object.copay }}
{% else %}
<span class="text-muted">Not specified</span>
{% endif %}
</td>
</tr>
<tr>
<td class="fw-bold">Deductible:</td>
<td>
{% if object.deductible %}
${{ object.deductible }}
{% else %}
<span class="text-muted">Not specified</span>
{% endif %}
</td>
</tr>
<tr>
<td class="fw-bold">Created:</td>
<td>{{ object.created_at|date:"M d, Y H:i" }}</td>
</tr>
<tr>
<td class="fw-bold">Last Updated:</td>
<td>{{ object.updated_at|date:"M d, Y H:i" }}</td>
</tr>
</table>
</div>
</div>
{% if object.coverage_details %}
<div class="mt-4">
<h6 class="border-bottom pb-2">Coverage Details</h6>
<div class="bg-light p-3 rounded">
{{ object.coverage_details|linebreaks }}
</div>
</div>
{% endif %}
{% if object.notes %}
<div class="mt-4">
<h6 class="border-bottom pb-2">Additional Notes</h6>
<div class="bg-light p-3 rounded">
{{ object.notes|linebreaks }}
</div>
</div>
{% endif %}
</div>
</div>
<!-- END panel -->
<!-- BEGIN panel -->
<div class="panel panel-inverse">
<div class="panel-heading">
<h4 class="panel-title">Claims History</h4>
</div>
<div class="panel-body">
<div id="claims-history">
<div class="timeline">
<!-- Claims history will be loaded here -->
<div class="timeline-item">
<div class="timeline-marker bg-primary"></div>
<div class="timeline-content">
<h6 class="timeline-title">Insurance Added</h6>
<p class="timeline-description">Insurance policy was added to patient record</p>
<small class="text-muted">{{ object.created_at|date:"M d, Y H:i" }}</small>
</div>
</div>
{% if object.updated_at != object.created_at %}
<div class="timeline-item">
<div class="timeline-marker bg-info"></div>
<div class="timeline-content">
<h6 class="timeline-title">Insurance Updated</h6>
<p class="timeline-description">Insurance information was modified</p>
<small class="text-muted">{{ object.updated_at|date:"M d, Y H:i" }}</small>
</div>
</div>
{% endif %}
</div>
</div>
</div>
</div>
<!-- END panel -->
</div>
<div class="col-xl-4">
<!-- BEGIN panel -->
<div class="panel panel-inverse">
<div class="panel-heading">
<h4 class="panel-title">Quick Actions</h4>
</div>
<div class="panel-body">
<div class="d-grid gap-2">
<button type="button" class="btn btn-success" onclick="verifyInsurance()">
<i class="fa fa-check-circle me-2"></i>Verify Insurance
</button>
<button type="button" class="btn btn-info" onclick="checkEligibility()">
<i class="fa fa-search me-2"></i>Check Eligibility
</button>
<a href="{% url 'patients:insurance_update' object.pk %}" class="btn btn-primary">
<i class="fa fa-edit me-2"></i>Edit Insurance
</a>
<button type="button" class="btn btn-warning" onclick="renewInsurance()">
<i class="fa fa-refresh me-2"></i>Renew Policy
</button>
<button type="button" class="btn btn-secondary" onclick="printInsurance()">
<i class="fa fa-print me-2"></i>Print Card
</button>
<a href="{% url 'patients:insurance_delete' object.pk %}" class="btn btn-outline-danger">
<i class="fa fa-trash me-2"></i>Delete Insurance
</a>
</div>
</div>
</div>
<!-- END panel -->
<!-- BEGIN panel -->
<div class="panel panel-inverse">
<div class="panel-heading">
<h4 class="panel-title">Patient Information</h4>
</div>
<div class="panel-body">
<div class="text-center mb-3">
<div class="w-80px h-80px bg-primary rounded-circle d-flex align-items-center justify-content-center mx-auto mb-2">
<i class="fa fa-user fa-2x text-white"></i>
</div>
<h6 class="mb-1">{{ object.patient.get_full_name }}</h6>
<small class="text-muted">{{ object.patient.patient_id }}</small>
</div>
<table class="table table-borderless table-sm">
<tr>
<td class="fw-bold" width="80">DOB:</td>
<td>{{ object.patient.date_of_birth|date:"M d, Y" }}</td>
</tr>
<tr>
<td class="fw-bold">Age:</td>
<td>{{ object.patient.age }} years</td>
</tr>
<tr>
<td class="fw-bold">Gender:</td>
<td>{{ object.patient.get_gender_display }}</td>
</tr>
<tr>
<td class="fw-bold">Phone:</td>
<td>
{% if object.patient.phone_number %}
<a href="tel:{{ object.patient.phone_number }}" class="text-decoration-none">
{{ object.patient.phone_number }}
</a>
{% else %}
<span class="text-muted">Not provided</span>
{% endif %}
</td>
</tr>
</table>
<div class="d-grid">
<a href="{% url 'patients:patient_detail' object.patient.pk %}" class="btn btn-outline-primary btn-sm">
<i class="fa fa-user me-2"></i>View Patient
</a>
</div>
</div>
</div>
<!-- END panel -->
<!-- BEGIN panel -->
<div class="panel panel-inverse">
<div class="panel-heading">
<h4 class="panel-title">Other Insurance Policies</h4>
</div>
<div class="panel-body">
<div id="other-insurance">
{% for insurance in object.patient.insurance_information.all %}
{% if insurance.pk != object.pk %}
<div class="d-flex align-items-center mb-2 p-2 border rounded">
<div class="flex-fill">
<div class="fw-bold">{{ insurance.insurance_provider }}</div>
<small class="text-muted">{{ insurance.get_insurance_type_display }}</small>
<span class="badge bg-{% if insurance.status == 'ACTIVE' %}success{% elif insurance.status == 'EXPIRED' %}danger{% else %}secondary{% endif %} ms-1">
{{ insurance.get_status_display }}
</span>
</div>
<div>
<a href="{% url 'patients:insurance_detail' insurance.pk %}" class="btn btn-xs btn-outline-primary">
<i class="fa fa-eye"></i>
</a>
</div>
</div>
{% endif %}
{% empty %}
<p class="text-muted text-center">No other insurance policies</p>
{% endfor %}
</div>
<div class="d-grid mt-3">
<a href="{% url 'patients:insurance_create' %}?patient={{ object.patient.pk }}" class="btn btn-outline-primary btn-sm">
<i class="fa fa-plus me-2"></i>Add Insurance
</a>
</div>
</div>
</div>
<!-- END panel -->
<!-- BEGIN panel -->
<div class="panel panel-inverse">
<div class="panel-heading">
<h4 class="panel-title">Insurance Validation</h4>
</div>
<div class="panel-body">
<div class="alert alert-info">
<h6 class="alert-heading">Validation Status</h6>
<ul class="mb-0 small">
<li class="{% if object.policy_number %}text-success{% else %}text-danger{% endif %}">
<i class="fa fa-{% if object.policy_number %}check{% else %}times{% endif %} me-1"></i>
Policy Number
</li>
<li class="{% if object.member_id %}text-success{% else %}text-warning{% endif %}">
<i class="fa fa-{% if object.member_id %}check{% else %}exclamation-triangle{% endif %} me-1"></i>
Member ID
</li>
<li class="{% if object.effective_date %}text-success{% else %}text-warning{% endif %}">
<i class="fa fa-{% if object.effective_date %}check{% else %}exclamation-triangle{% endif %} me-1"></i>
Effective Date
</li>
<li class="{% if not object.is_expired %}text-success{% else %}text-danger{% endif %}">
<i class="fa fa-{% if not object.is_expired %}check{% else %}times{% endif %} me-1"></i>
Not Expired
</li>
</ul>
</div>
<div class="text-center">
<small class="text-muted">Last verified: {% if object.last_verified %}{{ object.last_verified|date:"M d, Y" }}{% else %}Never{% endif %}</small>
</div>
</div>
</div>
<!-- END panel -->
</div>
</div>
<!-- Verify Insurance Modal -->
<div class="modal fade" id="verifyModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Verify Insurance</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form id="verify-form">
<div class="mb-3">
<label class="form-label">Verification Method</label>
<div class="form-check">
<input class="form-check-input" type="radio" name="verification_method" value="online" id="verify-online">
<label class="form-check-label" for="verify-online">
Online Verification
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="verification_method" value="phone" id="verify-phone">
<label class="form-check-label" for="verify-phone">
Phone Verification
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="verification_method" value="manual" id="verify-manual">
<label class="form-check-label" for="verify-manual">
Manual Verification
</label>
</div>
</div>
<div class="mb-3">
<label class="form-label">Verification Notes</label>
<textarea class="form-control" name="verification_notes" rows="3" placeholder="Enter verification details..."></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-success" onclick="saveVerification()">
<i class="fa fa-check-circle me-2"></i>Mark as Verified
</button>
</div>
</div>
</div>
</div>
<!-- Eligibility Check Modal -->
<div class="modal fade" id="eligibilityModal" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Insurance Eligibility Check</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body" id="eligibility-results">
<!-- Eligibility results will be loaded here -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
{% endblock %}
{% block js %}
<script>
function verifyInsurance() {
$('#verifyModal').modal('show');
}
function saveVerification() {
var method = $('input[name="verification_method"]:checked').val();
var notes = $('textarea[name="verification_notes"]').val();
if (!method) {
toastr.error('Please select a verification method');
return;
}
$.ajax({
url: '{% url "patients:verify_insurance" object.pk %}',
method: 'POST',
data: {
'csrfmiddlewaretoken': '{{ csrf_token }}',
'verification_method': method,
'verification_notes': notes
},
success: function(response) {
toastr.success('Insurance verification saved');
$('#verifyModal').modal('hide');
location.reload();
},
error: function() {
toastr.error('Failed to save verification');
}
});
}
function checkEligibility() {
$.ajax({
url: '{% url "patients:check_eligibility" object.pk %}',
method: 'POST',
data: {
'csrfmiddlewaretoken': '{{ csrf_token }}'
},
beforeSend: function() {
$('#eligibility-results').html('<div class="text-center"><i class="fa fa-spinner fa-spin fa-2x"></i><br>Checking eligibility...</div>');
$('#eligibilityModal').modal('show');
},
success: function(response) {
$('#eligibility-results').html(response.html);
},
error: function() {
$('#eligibility-results').html('<div class="alert alert-danger">Failed to check eligibility. Please try again.</div>');
}
});
}
function renewInsurance() {
if (confirm('Mark this insurance policy for renewal?')) {
$.ajax({
url: '{% url "patients:renew_insurance" object.pk %}',
method: 'POST',
data: {
'csrfmiddlewaretoken': '{{ csrf_token }}'
},
success: function(response) {
toastr.success('Insurance marked for renewal');
location.reload();
},
error: function() {
toastr.error('Failed to mark insurance for renewal');
}
});
}
}
function printInsurance() {
window.print();
}
$(document).ready(function() {
// Auto-refresh claims history every 30 seconds
setInterval(function() {
loadClaimsHistory();
}, 30000);
});
function loadClaimsHistory() {
$.ajax({
url: '{% url "patients:insurance_claims_history" object.pk %}',
method: 'GET',
success: function(response) {
if (response.html) {
$('#claims-history').html(response.html);
}
}
});
}
</script>
{% endblock %}