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

455 lines
22 KiB
HTML

{% extends "base.html" %}
{% load static %}
{% block title %}{{ object|yesno:"Edit,Create" }} Discharge - Inpatients{% endblock %}
{% block css %}
<link href="{% static 'assets/plugins/select2/dist/css/select2.min.css' %}" rel="stylesheet" />
<link href="{% static 'assets/plugins/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css' %}" rel="stylesheet" />
<link href="{% static 'assets/plugins/bootstrap-timepicker/css/bootstrap-timepicker.min.css' %}" rel="stylesheet" />
<link href="{% static 'assets/plugins/summernote/dist/summernote-lite.css' %}" rel="stylesheet" />
{% 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 'inpatients:dashboard' %}">Inpatients</a></li>
<li class="breadcrumb-item"><a href="{% url 'inpatients:discharge_list' %}">Discharges</a></li>
<li class="breadcrumb-item active">{{ object|yesno:"Edit,Create" }} Discharge</li>
</ol>
<!-- END breadcrumb -->
<!-- BEGIN page-header -->
<h1 class="page-header">{{ object|yesno:"Edit,Create" }} Patient Discharge</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">Discharge Information</h4>
<div class="panel-heading-btn">
<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">
<form method="post" id="discharge-form">
{% csrf_token %}
<!-- Patient and Admission Information -->
<div class="row mb-3">
<div class="col-md-6">
<label class="form-label" for="{{ form.admission.id_for_label }}">Admission <span class="text-danger">*</span></label>
{{ form.admission }}
{% if form.admission.errors %}
<div class="invalid-feedback d-block">{{ form.admission.errors.0 }}</div>
{% endif %}
<div class="form-text">Select the admission to discharge</div>
</div>
<div class="col-md-6">
<label class="form-label" for="{{ form.discharge_type.id_for_label }}">Discharge Type <span class="text-danger">*</span></label>
{{ form.discharge_type }}
{% if form.discharge_type.errors %}
<div class="invalid-feedback d-block">{{ form.discharge_type.errors.0 }}</div>
{% endif %}
</div>
</div>
<!-- Discharge Date and Time -->
<div class="row mb-3">
<div class="col-md-4">
<label class="form-label" for="{{ form.discharge_date.id_for_label }}">Discharge Date <span class="text-danger">*</span></label>
{{ form.discharge_date }}
{% if form.discharge_date.errors %}
<div class="invalid-feedback d-block">{{ form.discharge_date.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-4">
<label class="form-label" for="{{ form.discharge_time.id_for_label }}">Discharge Time <span class="text-danger">*</span></label>
{{ form.discharge_time }}
{% if form.discharge_time.errors %}
<div class="invalid-feedback d-block">{{ form.discharge_time.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-4">
<label class="form-label" for="{{ form.discharge_status.id_for_label }}">Status</label>
{{ form.discharge_status }}
{% if form.discharge_status.errors %}
<div class="invalid-feedback d-block">{{ form.discharge_status.errors.0 }}</div>
{% endif %}
</div>
</div>
<!-- Discharge Destination -->
<div class="row mb-3">
<div class="col-md-6">
<label class="form-label" for="{{ form.discharge_destination.id_for_label }}">Discharge Destination</label>
{{ form.discharge_destination }}
{% if form.discharge_destination.errors %}
<div class="invalid-feedback d-block">{{ form.discharge_destination.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-6">
<label class="form-label" for="{{ form.attending_physician.id_for_label }}">Attending Physician</label>
{{ form.attending_physician }}
{% if form.attending_physician.errors %}
<div class="invalid-feedback d-block">{{ form.attending_physician.errors.0 }}</div>
{% endif %}
</div>
</div>
<!-- Clinical Information -->
<h5 class="mb-3 mt-4">Clinical Information</h5>
<div class="row mb-3">
<div class="col-md-6">
<label class="form-label" for="{{ form.primary_diagnosis.id_for_label }}">Primary Diagnosis</label>
{{ form.primary_diagnosis }}
{% if form.primary_diagnosis.errors %}
<div class="invalid-feedback d-block">{{ form.primary_diagnosis.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-6">
<label class="form-label" for="{{ form.secondary_diagnoses.id_for_label }}">Secondary Diagnoses</label>
{{ form.secondary_diagnoses }}
{% if form.secondary_diagnoses.errors %}
<div class="invalid-feedback d-block">{{ form.secondary_diagnoses.errors.0 }}</div>
{% endif %}
</div>
</div>
<div class="mb-3">
<label class="form-label" for="{{ form.discharge_summary.id_for_label }}">Discharge Summary</label>
{{ form.discharge_summary }}
{% if form.discharge_summary.errors %}
<div class="invalid-feedback d-block">{{ form.discharge_summary.errors.0 }}</div>
{% endif %}
<div class="form-text">Comprehensive summary of the patient's stay and treatment</div>
</div>
<!-- Medications and Instructions -->
<h5 class="mb-3 mt-4">Discharge Instructions</h5>
<div class="mb-3">
<label class="form-label" for="{{ form.discharge_medications.id_for_label }}">Discharge Medications</label>
{{ form.discharge_medications }}
{% if form.discharge_medications.errors %}
<div class="invalid-feedback d-block">{{ form.discharge_medications.errors.0 }}</div>
{% endif %}
<div class="form-text">List all medications the patient should continue at home</div>
</div>
<div class="mb-3">
<label class="form-label" for="{{ form.discharge_instructions.id_for_label }}">Patient Instructions</label>
{{ form.discharge_instructions }}
{% if form.discharge_instructions.errors %}
<div class="invalid-feedback d-block">{{ form.discharge_instructions.errors.0 }}</div>
{% endif %}
<div class="form-text">Detailed instructions for patient care at home</div>
</div>
<div class="mb-3">
<label class="form-label" for="{{ form.follow_up_instructions.id_for_label }}">Follow-up Instructions</label>
{{ form.follow_up_instructions }}
{% if form.follow_up_instructions.errors %}
<div class="invalid-feedback d-block">{{ form.follow_up_instructions.errors.0 }}</div>
{% endif %}
<div class="form-text">When and where the patient should follow up</div>
</div>
<!-- Activity and Diet -->
<h5 class="mb-3 mt-4">Activity and Diet Restrictions</h5>
<div class="row mb-3">
<div class="col-md-6">
<label class="form-label" for="{{ form.activity_restrictions.id_for_label }}">Activity Restrictions</label>
{{ form.activity_restrictions }}
{% if form.activity_restrictions.errors %}
<div class="invalid-feedback d-block">{{ form.activity_restrictions.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-6">
<label class="form-label" for="{{ form.diet_restrictions.id_for_label }}">Diet Restrictions</label>
{{ form.diet_restrictions }}
{% if form.diet_restrictions.errors %}
<div class="invalid-feedback d-block">{{ form.diet_restrictions.errors.0 }}</div>
{% endif %}
</div>
</div>
<!-- Additional Information -->
<div class="row mb-3">
<div class="col-md-6">
<div class="form-check">
{{ form.patient_education_provided }}
<label class="form-check-label" for="{{ form.patient_education_provided.id_for_label }}">
Patient education provided
</label>
</div>
</div>
<div class="col-md-6">
<div class="form-check">
{{ form.discharge_planning_completed }}
<label class="form-check-label" for="{{ form.discharge_planning_completed.id_for_label }}">
Discharge planning completed
</label>
</div>
</div>
</div>
<div class="mb-3">
<label class="form-label" for="{{ form.notes.id_for_label }}">Additional Notes</label>
{{ form.notes }}
{% if form.notes.errors %}
<div class="invalid-feedback d-block">{{ form.notes.errors.0 }}</div>
{% endif %}
</div>
<!-- Form Actions -->
<div class="d-flex justify-content-between">
<a href="{% url 'inpatients:discharge_list' %}" class="btn btn-default">
<i class="fa fa-arrow-left me-2"></i>Cancel
</a>
<div>
<button type="submit" name="action" value="save_draft" class="btn btn-warning me-2">
<i class="fa fa-save me-2"></i>Save as Draft
</button>
<button type="submit" name="action" value="save" class="btn btn-success">
<i class="fa fa-check me-2"></i>{{ object|yesno:"Update,Complete" }} Discharge
</button>
</div>
</div>
</form>
</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">Discharge Guidelines</h4>
<div class="panel-heading-btn">
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>
</div>
</div>
<div class="panel-body">
<div class="alert alert-info">
<h6><i class="fa fa-info-circle me-2"></i>Discharge Checklist</h6>
<ul class="mb-0">
<li>Patient is medically stable for discharge</li>
<li>All necessary medications prescribed</li>
<li>Follow-up appointments scheduled</li>
<li>Patient/family education completed</li>
<li>Transportation arranged</li>
<li>Discharge summary completed</li>
</ul>
</div>
<div class="alert alert-warning">
<h6><i class="fa fa-exclamation-triangle me-2"></i>Required Documentation</h6>
<ul class="mb-0">
<li>Discharge summary with diagnoses</li>
<li>Medication reconciliation</li>
<li>Patient instruction sheet</li>
<li>Follow-up appointment details</li>
<li>Emergency contact information</li>
</ul>
</div>
<div class="alert alert-success">
<h6><i class="fa fa-check-circle me-2"></i>Discharge Types</h6>
<ul class="mb-0">
<li><strong>Home:</strong> Patient returns to home environment</li>
<li><strong>Transfer:</strong> Transfer to another facility</li>
<li><strong>AMA:</strong> Against medical advice</li>
<li><strong>Expired:</strong> Patient deceased during stay</li>
</ul>
</div>
{% if object and object.admission %}
<div class="alert alert-secondary">
<h6><i class="fa fa-user me-2"></i>Patient Information</h6>
<ul class="mb-0">
<li><strong>Patient:</strong> {{ object.admission.patient.get_full_name }}</li>
<li><strong>MRN:</strong> {{ object.admission.patient.medical_record_number }}</li>
<li><strong>Admission Date:</strong> {{ object.admission.admission_date|date:"M d, Y" }}</li>
<li><strong>Length of Stay:</strong> {{ object.admission.get_length_of_stay }} days</li>
</ul>
</div>
{% endif %}
</div>
</div>
<!-- END panel -->
{% if object and object.admission %}
<!-- BEGIN panel -->
<div class="panel panel-inverse">
<div class="panel-heading">
<h4 class="panel-title">Admission Summary</h4>
<div class="panel-heading-btn">
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-expand"><i class="fa fa-expand"></i></a>
<a href="javascript:;" class="btn btn-xs btn-icon btn-default" data-toggle="panel-collapse"><i class="fa fa-minus"></i></a>
</div>
</div>
<div class="panel-body">
<div class="small">
<div class="mb-2">
<strong>Admission Reason:</strong><br>
{{ object.admission.admission_reason|default:"Not specified" }}
</div>
<div class="mb-2">
<strong>Attending Physician:</strong><br>
{{ object.admission.attending_physician.get_full_name|default:"Not assigned" }}
</div>
<div class="mb-2">
<strong>Current Bed:</strong><br>
{{ object.admission.bed|default:"Not assigned" }}
</div>
<div class="mb-2">
<strong>Admission Type:</strong><br>
{{ object.admission.get_admission_type_display }}
</div>
<div class="mb-2">
<strong>Insurance:</strong><br>
{{ object.admission.insurance_information|default:"Not provided" }}
</div>
</div>
</div>
</div>
<!-- END panel -->
{% endif %}
</div>
</div>
{% endblock %}
{% block js %}
<script src="{% static 'assets/plugins/select2/dist/js/select2.min.js' %}"></script>
<script src="{% static 'assets/plugins/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js' %}"></script>
<script src="{% static 'assets/plugins/bootstrap-timepicker/js/bootstrap-timepicker.min.js' %}"></script>
<script src="{% static 'assets/plugins/summernote/dist/summernote-lite.min.js' %}"></script>
<script>
$(document).ready(function() {
// Initialize Select2
$('.select2').select2({
theme: 'bootstrap-5',
width: '100%'
});
// Initialize date picker
$('input[type="date"]').datepicker({
format: 'yyyy-mm-dd',
autoclose: true,
todayHighlight: true,
endDate: new Date()
});
// Initialize time picker
$('input[type="time"]').timepicker({
showMeridian: false,
defaultTime: 'current'
});
// Initialize Summernote
$('.summernote').summernote({
height: 150,
toolbar: [
['style', ['style']],
['font', ['bold', 'italic', 'underline', 'clear']],
['para', ['ul', 'ol', 'paragraph']],
['insert', ['link']],
['view', ['fullscreen', 'codeview']]
]
});
// Form validation
$('#discharge-form').on('submit', function(e) {
var isValid = true;
var requiredFields = ['admission', 'discharge_type', 'discharge_date', 'discharge_time'];
requiredFields.forEach(function(field) {
var input = $('[name="' + field + '"]');
if (!input.val()) {
input.addClass('is-invalid');
isValid = false;
} else {
input.removeClass('is-invalid');
}
});
if (!isValid) {
e.preventDefault();
toastr.error('Please fill in all required fields.');
}
});
// Real-time validation
$('input, select, textarea').on('change blur', function() {
if ($(this).val()) {
$(this).removeClass('is-invalid');
}
});
// Load admission details when admission is selected
$('select[name="admission"]').on('change', function() {
var admissionId = $(this).val();
if (admissionId) {
$.ajax({
url: '{% url "inpatients:admission_detail_api" 0 %}'.replace('0', admissionId),
success: function(data) {
// Pre-fill attending physician if available
if (data.attending_physician) {
$('select[name="attending_physician"]').val(data.attending_physician).trigger('change');
}
// Show admission information
toastr.info('Admission details loaded: ' + data.patient_name);
},
error: function() {
toastr.warning('Could not load admission details');
}
});
}
});
// Auto-populate current date and time
if (!$('input[name="discharge_date"]').val()) {
$('input[name="discharge_date"]').val(new Date().toISOString().split('T')[0]);
}
if (!$('input[name="discharge_time"]').val()) {
var now = new Date();
var time = now.getHours().toString().padStart(2, '0') + ':' +
now.getMinutes().toString().padStart(2, '0');
$('input[name="discharge_time"]').val(time);
}
// Discharge type change handler
$('select[name="discharge_type"]').on('change', function() {
var dischargeType = $(this).val();
// Show/hide relevant fields based on discharge type
if (dischargeType === 'transfer') {
$('input[name="discharge_destination"]').closest('.col-md-6').show();
$('input[name="discharge_destination"]').attr('required', true);
} else if (dischargeType === 'ama') {
// Show warning for AMA discharge
if (!$('.ama-warning').length) {
$('<div class="alert alert-warning ama-warning mt-2">' +
'<strong>Against Medical Advice:</strong> Ensure proper documentation and patient acknowledgment.' +
'</div>').insertAfter($(this).closest('.col-md-6'));
}
} else {
$('.ama-warning').remove();
}
});
});
</script>
{% endblock %}