355 lines
20 KiB
HTML
355 lines
20 KiB
HTML
{% extends 'base.html' %}
|
|
{% load static %}
|
|
|
|
{% block title %}Submit Bill{% endblock %}
|
|
|
|
{% block content %}
|
|
<div id="content" class="app-content">
|
|
<div class="container">
|
|
<div class="row justify-content-center">
|
|
<div class="col-xl-8">
|
|
<ul class="breadcrumb">
|
|
<li class="breadcrumb-item"><a href="{% url 'core:dashboard' %}">Dashboard</a></li>
|
|
<li class="breadcrumb-item"><a href="{% url 'billing:bill_list' %}">Bills</a></li>
|
|
<li class="breadcrumb-item"><a href="{% url 'billing:bill_detail' bill.bill_id %}">{{ bill.bill_number }}</a></li>
|
|
<li class="breadcrumb-item active">Submit</li>
|
|
</ul>
|
|
|
|
<h1 class="page-header">Submit Bill for Processing</h1>
|
|
|
|
<!-- Bill Summary -->
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h4 class="card-title">Bill Summary</h4>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<div class="row mb-2">
|
|
<div class="col-4"><strong>Bill Number:</strong></div>
|
|
<div class="col-8">{{ bill.bill_number }}</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-4"><strong>Patient:</strong></div>
|
|
<div class="col-8">{{ bill.patient.first_name }} {{ bill.patient.last_name }}</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-4"><strong>Patient ID:</strong></div>
|
|
<div class="col-8">{{ bill.patient.patient_id }}</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-4"><strong>Service Date:</strong></div>
|
|
<div class="col-8">{{ bill.service_date|date:"M d, Y" }}</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<div class="row mb-2">
|
|
<div class="col-4"><strong>Total Amount:</strong></div>
|
|
<div class="col-8"><strong class="text-primary">${{ bill.total_amount|floatformat:2 }}</strong></div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-4"><strong>Insurance:</strong></div>
|
|
<div class="col-8">{{ bill.insurance_plan.name|default:"Self-Pay" }}</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-4"><strong>Current Status:</strong></div>
|
|
<div class="col-8">
|
|
{% if bill.status == 'draft' %}
|
|
<span class="badge bg-secondary">Draft</span>
|
|
{% elif bill.status == 'pending' %}
|
|
<span class="badge bg-warning">Pending</span>
|
|
{% elif bill.status == 'submitted' %}
|
|
<span class="badge bg-primary">Submitted</span>
|
|
{% elif bill.status == 'paid' %}
|
|
<span class="badge bg-success">Paid</span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-4"><strong>Created:</strong></div>
|
|
<div class="col-8">{{ bill.created_at|date:"M d, Y g:i A" }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Pre-submission Validation -->
|
|
<div class="card mb-4">
|
|
<div class="card-header">
|
|
<h4 class="card-title">Pre-submission Validation</h4>
|
|
</div>
|
|
<div class="card-body">
|
|
<div id="validationResults">
|
|
<div class="text-center py-3">
|
|
<div class="spinner-border text-primary" role="status">
|
|
<span class="visually-hidden">Validating...</span>
|
|
</div>
|
|
<div class="mt-2">Running validation checks...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Submission Form -->
|
|
<div class="card" id="submissionForm" style="display: none;">
|
|
<div class="card-header">
|
|
<h4 class="card-title">Submission Details</h4>
|
|
</div>
|
|
<div class="card-body">
|
|
{% if messages %}
|
|
{% for message in messages %}
|
|
<div class="alert alert-{{ message.tags }} alert-dismissible fade show" role="alert">
|
|
{{ message }}
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
|
|
</div>
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
<form method="post" class="form-horizontal">
|
|
{% csrf_token %}
|
|
|
|
<div class="row mb-3">
|
|
<label class="col-form-label col-md-3">Submission Method <span class="text-danger">*</span></label>
|
|
<div class="col-md-9">
|
|
<select name="submission_method" class="form-select" required>
|
|
<option value="">Select Method</option>
|
|
<option value="electronic">Electronic (EDI)</option>
|
|
<option value="paper">Paper/Mail</option>
|
|
<option value="portal">Insurance Portal</option>
|
|
<option value="direct">Direct Billing</option>
|
|
</select>
|
|
{% if form.submission_method.errors %}
|
|
<div class="text-danger">{{ form.submission_method.errors.0 }}</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mb-3">
|
|
<label class="col-form-label col-md-3">Priority Level</label>
|
|
<div class="col-md-9">
|
|
<select name="priority" class="form-select">
|
|
<option value="normal" {% if form.priority.value == 'normal' %}selected{% endif %}>Normal</option>
|
|
<option value="high" {% if form.priority.value == 'high' %}selected{% endif %}>High Priority</option>
|
|
<option value="urgent" {% if form.priority.value == 'urgent' %}selected{% endif %}>Urgent</option>
|
|
<option value="routine" {% if form.priority.value == 'routine' %}selected{% endif %}>Routine</option>
|
|
</select>
|
|
{% if form.priority.errors %}
|
|
<div class="text-danger">{{ form.priority.errors.0 }}</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mb-3">
|
|
<label class="col-form-label col-md-3">Expected Processing Time</label>
|
|
<div class="col-md-9">
|
|
<select name="expected_processing_time" class="form-select">
|
|
<option value="standard">Standard (7-14 days)</option>
|
|
<option value="expedited">Expedited (3-5 days)</option>
|
|
<option value="rush">Rush (1-2 days)</option>
|
|
</select>
|
|
{% if form.expected_processing_time.errors %}
|
|
<div class="text-danger">{{ form.expected_processing_time.errors.0 }}</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mb-3">
|
|
<label class="col-form-label col-md-3">Submitted By</label>
|
|
<div class="col-md-9">
|
|
<input type="text" name="submitted_by" class="form-control"
|
|
value="{{ form.submitted_by.value|default:request.user.get_full_name }}" readonly>
|
|
{% if form.submitted_by.errors %}
|
|
<div class="text-danger">{{ form.submitted_by.errors.0 }}</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mb-3">
|
|
<label class="col-form-label col-md-3">Submission Notes</label>
|
|
<div class="col-md-9">
|
|
<textarea name="submission_notes" class="form-control" rows="4"
|
|
placeholder="Any special instructions or notes for the submission">{{ form.submission_notes.value|default:'' }}</textarea>
|
|
{% if form.submission_notes.errors %}
|
|
<div class="text-danger">{{ form.submission_notes.errors.0 }}</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row mb-3">
|
|
<div class="col-md-9 offset-md-3">
|
|
<div class="form-check mb-2">
|
|
<input class="form-check-input" type="checkbox" name="include_attachments" id="include_attachments"
|
|
{% if form.include_attachments.value %}checked{% endif %}>
|
|
<label class="form-check-label" for="include_attachments">
|
|
Include all supporting documentation and attachments
|
|
</label>
|
|
</div>
|
|
<div class="form-check mb-2">
|
|
<input class="form-check-input" type="checkbox" name="send_confirmation" id="send_confirmation" checked>
|
|
<label class="form-check-label" for="send_confirmation">
|
|
Send confirmation email when submitted
|
|
</label>
|
|
</div>
|
|
<div class="form-check mb-2">
|
|
<input class="form-check-input" type="checkbox" name="track_status" id="track_status" checked>
|
|
<label class="form-check-label" for="track_status">
|
|
Enable automatic status tracking
|
|
</label>
|
|
</div>
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" name="auto_resubmit" id="auto_resubmit">
|
|
<label class="form-check-label" for="auto_resubmit">
|
|
Automatically resubmit if rejected (up to 3 attempts)
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="alert alert-info">
|
|
<i class="fa fa-info-circle me-2"></i>
|
|
<strong>Important:</strong> Once submitted, this bill cannot be modified. Please ensure all information is accurate before proceeding.
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-md-9 offset-md-3">
|
|
<button type="submit" class="btn btn-primary" id="submitBtn" disabled>
|
|
<i class="fa fa-paper-plane me-2"></i>Submit Bill
|
|
</button>
|
|
<a href="{% url 'billing:bill_detail' bill.bill_id %}" class="btn btn-secondary ms-2">
|
|
<i class="fa fa-arrow-left me-2"></i>Go Back
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Submission History -->
|
|
{% if submission_history %}
|
|
<div class="card mt-4">
|
|
<div class="card-header">
|
|
<h4 class="card-title">Previous Submission Attempts</h4>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="table-responsive">
|
|
<table class="table table-sm">
|
|
<thead>
|
|
<tr>
|
|
<th>Date</th>
|
|
<th>Method</th>
|
|
<th>Status</th>
|
|
<th>Notes</th>
|
|
<th>Submitted By</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for history in submission_history %}
|
|
<tr>
|
|
<td>{{ history.submitted_at|date:"M d, Y g:i A" }}</td>
|
|
<td>{{ history.method|title }}</td>
|
|
<td>
|
|
{% if history.status == 'success' %}
|
|
<span class="badge bg-success">Success</span>
|
|
{% elif history.status == 'failed' %}
|
|
<span class="badge bg-danger">Failed</span>
|
|
{% elif history.status == 'pending' %}
|
|
<span class="badge bg-warning">Pending</span>
|
|
{% endif %}
|
|
</td>
|
|
<td>{{ history.notes|default:"—" }}</td>
|
|
<td>{{ history.submitted_by }}</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|
|
|
|
{% block js %}
|
|
<script>
|
|
$(document).ready(function() {
|
|
// Run validation checks
|
|
runValidationChecks();
|
|
|
|
// Update processing time based on priority
|
|
$('select[name="priority"]').change(function() {
|
|
var priority = $(this).val();
|
|
var processingSelect = $('select[name="expected_processing_time"]');
|
|
|
|
if (priority === 'urgent') {
|
|
processingSelect.val('rush');
|
|
} else if (priority === 'high') {
|
|
processingSelect.val('expedited');
|
|
} else {
|
|
processingSelect.val('standard');
|
|
}
|
|
});
|
|
|
|
// Auto-check include attachments for certain submission methods
|
|
$('select[name="submission_method"]').change(function() {
|
|
var method = $(this).val();
|
|
if (method === 'electronic' || method === 'portal') {
|
|
$('#include_attachments').prop('checked', true);
|
|
}
|
|
});
|
|
});
|
|
|
|
function runValidationChecks() {
|
|
// Simulate validation process
|
|
setTimeout(function() {
|
|
var validationHtml = `
|
|
<div class="row">
|
|
<div class="col-md-6">
|
|
<h6>Required Information</h6>
|
|
<div class="mb-2">
|
|
<i class="fa fa-check text-success me-2"></i>Patient demographics complete
|
|
</div>
|
|
<div class="mb-2">
|
|
<i class="fa fa-check text-success me-2"></i>Insurance information verified
|
|
</div>
|
|
<div class="mb-2">
|
|
<i class="fa fa-check text-success me-2"></i>Service codes present
|
|
</div>
|
|
<div class="mb-2">
|
|
<i class="fa fa-check text-success me-2"></i>Diagnosis codes present
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6">
|
|
<h6>Billing Validation</h6>
|
|
<div class="mb-2">
|
|
<i class="fa fa-check text-success me-2"></i>Amounts calculated correctly
|
|
</div>
|
|
<div class="mb-2">
|
|
<i class="fa fa-check text-success me-2"></i>No duplicate charges
|
|
</div>
|
|
<div class="mb-2">
|
|
<i class="fa fa-exclamation-triangle text-warning me-2"></i>Missing prior authorization (if required)
|
|
</div>
|
|
<div class="mb-2">
|
|
<i class="fa fa-check text-success me-2"></i>Submission format valid
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="alert alert-success mt-3">
|
|
<i class="fa fa-check-circle me-2"></i>
|
|
<strong>Validation Complete:</strong> Bill is ready for submission with 1 warning.
|
|
</div>
|
|
`;
|
|
|
|
$('#validationResults').html(validationHtml);
|
|
$('#submissionForm').show();
|
|
$('#submitBtn').prop('disabled', false);
|
|
}, 2000);
|
|
}
|
|
</script>
|
|
{% endblock %}
|
|
|