Remove all inline styles and use semantic CSS classes
Problem: - Inline styles in HTML override custom CSS defined in templates - User's custom styles (font-family, table borders, padding) not applied - Hard to maintain and customize styling - Inline styles have higher specificity than class/ID selectors Solution: Replaced all inline styles with semantic CSS classes: Section Headings: - style='margin:16px 0 8px 0' → class='discharge-section-heading' (h4) - style='text-align:center;margin:...' → class='discharge-title' (h2) Lists: - style='margin:0 0 10px 20px' → class='discharge-list' (ul/ol) - style='margin:4px 0 8px 20px' → class='discharge-sublist' (ul) - style='list-style:none' → class='no-bullet' (li) Text: - style='color:#475569' → class='discharge-remark' (span) Tables: - style='width:100%;border-collapse:...' → class='discharge-table' - Medicine table → class='discharge-medicine-table' - Patient info → class='discharge-info-table' - Signature block → class='discharge-signature-table' - Removed all inline width/align styles from th/td Containers: - style='margin-bottom:8px' → class='discharge-field' - style='margin-top:6px' → class='discharge-footer' - style='margin-bottom:6px' → class='discharge-item' - Added class='discharge-section' for section wrappers Separators: - style='margin:1px;padding:0' → class='discharge-separator' (hr) Changes Made: 1. app/Controllers/Ipd_discharge.php: - buildAutoDischargeContent() - All section builders - buildAutoDischargeSummaryTable() - Patient info table - addListSection() - List sections - buildNursingTrendSection() - Nursing trends - defaultDischargeTemplateHtml() - Default template - nabhDischargeTemplateHtml() - NABH template 2. Created DISCHARGE_CSS_CLASSES.md: - Complete CSS class reference - Suggested stylesheet with all classes - Customization guide - Example usage - Print optimization styles Benefits: ✓ User's custom CSS now applies correctly ✓ No style conflicts or overrides ✓ Easy to customize via CSS ✓ Consistent styling across all sections ✓ Maintainable - change CSS once, applies everywhere ✓ Print-friendly with @media print rules Usage: 1. Copy CSS from DISCHARGE_CSS_CLASSES.md 2. Add to discharge template 'template_css' field 3. Or add to global print CSS 4. Customize colors/spacing/fonts as needed The existing body/table/td/p styles will now work properly No inline styles to override custom CSS anymore
This commit is contained in:
parent
c65a5cdc68
commit
751fdfaedb
262
DISCHARGE_CSS_CLASSES.md
Normal file
262
DISCHARGE_CSS_CLASSES.md
Normal file
|
|
@ -0,0 +1,262 @@
|
||||||
|
# Discharge Summary CSS Classes Reference
|
||||||
|
|
||||||
|
This document lists all the semantic CSS classes used in the discharge summary HTML, allowing you to style them separately without inline styles.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CSS Class List
|
||||||
|
|
||||||
|
### Section Headings
|
||||||
|
- **`.discharge-title`** - Main discharge title (H2)
|
||||||
|
- **`.discharge-section-heading`** - Section headers (H4)
|
||||||
|
|
||||||
|
### Lists
|
||||||
|
- **`.discharge-list`** - Main lists (ul/ol) for items
|
||||||
|
- **`.discharge-sublist`** - Nested sublists (ul)
|
||||||
|
- **`.no-bullet`** - List item with no bullet point
|
||||||
|
|
||||||
|
### Text Elements
|
||||||
|
- **`.discharge-remark`** - Remark/secondary text (span)
|
||||||
|
|
||||||
|
### Tables
|
||||||
|
- **`.discharge-table`** - Standard data tables with borders
|
||||||
|
- **`.discharge-info-table`** - Patient info table
|
||||||
|
- **`.discharge-medicine-table`** - Medicine list table
|
||||||
|
- **`.discharge-signature-table`** - Signature block table
|
||||||
|
|
||||||
|
### Containers
|
||||||
|
- **`.discharge-summary-info`** - Discharge summary info block (div)
|
||||||
|
- **`.discharge-section`** - Generic section container (div)
|
||||||
|
- **`.discharge-item`** - Individual item within a section (div)
|
||||||
|
- **`.discharge-field`** - Field with label (div) - margin-bottom
|
||||||
|
- **`.discharge-footer`** - Footer text (div) - margin-top
|
||||||
|
- **`.nabh-guidance`** - NABH guidance note (div)
|
||||||
|
|
||||||
|
### Separators
|
||||||
|
- **`.discharge-separator`** - Horizontal rule (hr)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Suggested CSS Stylesheet
|
||||||
|
|
||||||
|
Copy this to your discharge template `template_css` field or add to your global styles:
|
||||||
|
|
||||||
|
```css
|
||||||
|
/* Section Headings */
|
||||||
|
.discharge-title {
|
||||||
|
text-align: center;
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 18pt;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-section-heading {
|
||||||
|
margin: 16px 0 8px 0;
|
||||||
|
font-size: 12pt;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Lists */
|
||||||
|
.discharge-list {
|
||||||
|
margin: 0 0 10px 20px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-sublist {
|
||||||
|
margin: 4px 0 8px 20px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-bullet {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text */
|
||||||
|
.discharge-remark {
|
||||||
|
color: #475569;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables */
|
||||||
|
.discharge-table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 4px 0 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-info-table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-medicine-table {
|
||||||
|
width: 100%;
|
||||||
|
border-style: inset;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-medicine-table th:first-child {
|
||||||
|
width: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-medicine-table th:nth-child(3) {
|
||||||
|
width: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-medicine-table th:nth-child(4) {
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-signature-table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-signature-table td {
|
||||||
|
width: 33.33%;
|
||||||
|
vertical-align: bottom;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Containers */
|
||||||
|
.discharge-summary-info {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-section {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-item {
|
||||||
|
margin-bottom: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-field {
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-footer {
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nabh-guidance {
|
||||||
|
font-size: 11px;
|
||||||
|
color: #334155;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 8px;
|
||||||
|
background-color: #f8fafc;
|
||||||
|
border-left: 3px solid #3b82f6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Separators */
|
||||||
|
.discharge-separator {
|
||||||
|
margin: 1px 0;
|
||||||
|
padding: 0;
|
||||||
|
border: none;
|
||||||
|
border-top: 1px solid #000;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Responsive Adjustments (Optional)
|
||||||
|
|
||||||
|
Add these for print-optimized styles:
|
||||||
|
|
||||||
|
```css
|
||||||
|
@media print {
|
||||||
|
.discharge-title {
|
||||||
|
font-size: 16pt;
|
||||||
|
page-break-after: avoid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-section-heading {
|
||||||
|
page-break-after: avoid;
|
||||||
|
font-size: 11pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.discharge-table,
|
||||||
|
.discharge-info-table,
|
||||||
|
.discharge-medicine-table,
|
||||||
|
.discharge-signature-table {
|
||||||
|
page-break-inside: avoid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## How to Apply Styles
|
||||||
|
|
||||||
|
### Method 1: Template CSS Field
|
||||||
|
1. Go to discharge template settings
|
||||||
|
2. Paste the CSS into the `template_css` field
|
||||||
|
3. Save template
|
||||||
|
|
||||||
|
### Method 2: Global Styles
|
||||||
|
1. Add to your print CSS file
|
||||||
|
2. Include in the PDF generation header
|
||||||
|
3. Apply site-wide
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example Usage in Template
|
||||||
|
|
||||||
|
```html
|
||||||
|
<h2 class="discharge-title">Discharge Summary</h2>
|
||||||
|
<hr class="discharge-separator" />
|
||||||
|
|
||||||
|
<table class="discharge-info-table" border="1" cellpadding="6">
|
||||||
|
<tr>
|
||||||
|
<td><b>Name</b>: {{PATIENT_NAME}}</td>
|
||||||
|
<td><b>UHID</b>: {{UHID}}</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="discharge-section">{{DISCHARGE_SUMMARY}}</div>
|
||||||
|
<div class="discharge-section">{{PRESENTING_COMPLAINTS}}</div>
|
||||||
|
<div class="discharge-section">{{FINAL_DIAGNOSIS}}</div>
|
||||||
|
|
||||||
|
<h4 class="discharge-section-heading">Discharge Medications</h4>
|
||||||
|
<ol class="discharge-list">
|
||||||
|
<li>Medicine 1 <span class="discharge-remark">(Take after food)</span></li>
|
||||||
|
<li>Medicine 2 <span class="discharge-remark">[7 days]</span></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<table class="discharge-signature-table" border="0" cellpadding="10">
|
||||||
|
<tr>
|
||||||
|
<td>____________________<br>Consultant Signature</td>
|
||||||
|
<td>____________________<br>Medical Officer</td>
|
||||||
|
<td>____________________<br>Patient/Receiver</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Customization Tips
|
||||||
|
|
||||||
|
1. **Change Colors**: Modify `.discharge-remark` color from `#475569` to your brand color
|
||||||
|
2. **Adjust Spacing**: Increase/decrease margins in heading classes
|
||||||
|
3. **Font Sizes**: Change section heading sizes for emphasis
|
||||||
|
4. **Table Borders**: Adjust border styles on table classes
|
||||||
|
5. **Print Optimization**: Use `@media print` for print-specific styles
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Benefits
|
||||||
|
|
||||||
|
✅ **No inline styles** - All styling controlled via CSS
|
||||||
|
✅ **Easy customization** - Change once, applies everywhere
|
||||||
|
✅ **Consistent look** - Uniform styling across all sections
|
||||||
|
✅ **Print-friendly** - Optimized for PDF generation
|
||||||
|
✅ **Maintainable** - Update styles without touching PHP code
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Generated:** 2026-06-07
|
||||||
|
**File Location:** `d:\Workplace\HMS_CI4_OLD\DISCHARGE_CSS_CLASSES.md`
|
||||||
|
|
@ -127,8 +127,8 @@ class Ipd_discharge extends BaseController
|
||||||
|
|
||||||
private function defaultDischargeTemplateHtml(): string
|
private function defaultDischargeTemplateHtml(): string
|
||||||
{
|
{
|
||||||
return '<h3 style="margin:0 0 8px 0;">Discharge Summary</h3>'
|
return '<h3 class="discharge-title">Discharge Summary</h3>'
|
||||||
. '<table style="width:100%;border-collapse:collapse;margin-bottom:10px;" border="1" cellpadding="6">'
|
. '<table class="discharge-info-table" border="1" cellpadding="6">'
|
||||||
. '<tr>'
|
. '<tr>'
|
||||||
. '<td><b>Patient</b>: {{PATIENT_NAME}}</td>'
|
. '<td><b>Patient</b>: {{PATIENT_NAME}}</td>'
|
||||||
. '<td><b>UHID</b>: {{UHID}}</td>'
|
. '<td><b>UHID</b>: {{UHID}}</td>'
|
||||||
|
|
@ -184,8 +184,8 @@ class Ipd_discharge extends BaseController
|
||||||
|
|
||||||
private function nabhDischargeTemplateHtml(): string
|
private function nabhDischargeTemplateHtml(): string
|
||||||
{
|
{
|
||||||
return '<h2 style="margin:0 0 10px 0;text-align:center;">DISCHARGE SUMMARY</h2>'
|
return '<h2 class="discharge-title">DISCHARGE SUMMARY</h2>'
|
||||||
. '<table style="width:100%;border-collapse:collapse;margin-bottom:10px;" border="1" cellpadding="6">'
|
. '<table class="discharge-info-table" border="1" cellpadding="6">'
|
||||||
. '<tr>'
|
. '<tr>'
|
||||||
. '<td><b>Patient Name</b>: {{PATIENT_NAME}}</td>'
|
. '<td><b>Patient Name</b>: {{PATIENT_NAME}}</td>'
|
||||||
. '<td><b>UHID</b>: {{UHID}}</td>'
|
. '<td><b>UHID</b>: {{UHID}}</td>'
|
||||||
|
|
@ -202,37 +202,37 @@ class Ipd_discharge extends BaseController
|
||||||
. '<td><b>Prepared On</b>: {{CURRENT_DATE}}</td>'
|
. '<td><b>Prepared On</b>: {{CURRENT_DATE}}</td>'
|
||||||
. '</tr>'
|
. '</tr>'
|
||||||
. '</table>'
|
. '</table>'
|
||||||
. '<div style="font-size:11px;color:#334155;margin-bottom:10px;">'
|
. '<div class="nabh-guidance">'
|
||||||
. 'NABH guidance note: Ensure diagnosis, procedures, clinical course, condition at discharge, medication with dose/duration, follow-up advice, red-flag signs, and emergency contact are documented.'
|
. 'NABH guidance note: Ensure diagnosis, procedures, clinical course, condition at discharge, medication with dose/duration, follow-up advice, red-flag signs, and emergency contact are documented.'
|
||||||
. '</div>'
|
. '</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{DISCHARGE_SUMMARY}}</div>'
|
. '<div class="discharge-section">{{DISCHARGE_SUMMARY}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{PRESENTING_COMPLAINTS}}</div>'
|
. '<div class="discharge-section">{{PRESENTING_COMPLAINTS}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{PAIN_MEASUREMENT_SCALE}}</div>'
|
. '<div class="discharge-section">{{PAIN_MEASUREMENT_SCALE}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{GENERAL_EXAM_ADMISSION}}</div>'
|
. '<div class="discharge-section">{{GENERAL_EXAM_ADMISSION}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{CLINICAL_INVESTIGATION_REPORTS}}</div>'
|
. '<div class="discharge-section">{{CLINICAL_INVESTIGATION_REPORTS}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{FINAL_DIAGNOSIS}}</div>'
|
. '<div class="discharge-section">{{FINAL_DIAGNOSIS}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{COURSE_IN_HOSPITAL}}</div>'
|
. '<div class="discharge-section">{{COURSE_IN_HOSPITAL}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{EXAMINATION_ON_DISCHARGE}}</div>'
|
. '<div class="discharge-section">{{EXAMINATION_ON_DISCHARGE}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{SURGERY}}</div>'
|
. '<div class="discharge-section">{{SURGERY}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{PROCEDURE}}</div>'
|
. '<div class="discharge-section">{{PROCEDURE}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{PERSONAL_HISTORY}}</div>'
|
. '<div class="discharge-section">{{PERSONAL_HISTORY}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{DRUG_ALLERGY_ADR}}</div>'
|
. '<div class="discharge-section">{{DRUG_ALLERGY_ADR}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{CO_MORBIDITIES}}</div>'
|
. '<div class="discharge-section">{{CO_MORBIDITIES}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{DISCHARGE_MEDICATIONS}}</div>'
|
. '<div class="discharge-section">{{DISCHARGE_MEDICATIONS}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{DIETARY_ADVICE}}</div>'
|
. '<div class="discharge-section">{{DIETARY_ADVICE}}</div>'
|
||||||
. '<div style="margin-bottom:10px;">{{DISCHARGE_INSTRUCTIONS}}</div>'
|
. '<div class="discharge-section">{{DISCHARGE_INSTRUCTIONS}}</div>'
|
||||||
. '<h4 style="margin:12px 0 6px 0;">Counselling & Handover Confirmation</h4>'
|
. '<h4 class="discharge-section-heading">Counselling & Handover Confirmation</h4>'
|
||||||
. '<table style="width:100%;border-collapse:collapse;margin-bottom:10px;" border="1" cellpadding="6">'
|
. '<table class="discharge-table" border="1" cellpadding="6">'
|
||||||
. '<tr><td style="width:32%;">Medication explained to patient/attendant</td><td style="width:8%;"></td><td style="width:60%;">Remarks:</td></tr>'
|
. '<tr><td>Medication explained to patient/attendant</td><td></td><td>Remarks:</td></tr>'
|
||||||
. '<tr><td>Follow-up date and department explained</td><td></td><td>Next Visit: __________________</td></tr>'
|
. '<tr><td>Follow-up date and department explained</td><td></td><td>Next Visit: __________________</td></tr>'
|
||||||
. '<tr><td>Red-flag symptoms explained</td><td></td><td>Emergency Contact: __________________</td></tr>'
|
. '<tr><td>Red-flag symptoms explained</td><td></td><td>Emergency Contact: __________________</td></tr>'
|
||||||
. '<tr><td>Diet and activity instructions explained</td><td></td><td></td></tr>'
|
. '<tr><td>Diet and activity instructions explained</td><td></td><td></td></tr>'
|
||||||
. '</table>'
|
. '</table>'
|
||||||
. '<table style="width:100%;border-collapse:collapse;margin-top:20px;" border="1" cellpadding="10">'
|
. '<table class="discharge-signature-table" border="1" cellpadding="10">'
|
||||||
. '<tr>'
|
. '<tr>'
|
||||||
. '<td style="width:33%;vertical-align:bottom;">____________________<br>Consultant Name/Signature</td>'
|
. '<td>____________________<br>Consultant Name/Signature</td>'
|
||||||
. '<td style="width:33%;vertical-align:bottom;">____________________<br>Medical Officer Signature</td>'
|
. '<td>____________________<br>Medical Officer Signature</td>'
|
||||||
. '<td style="width:34%;vertical-align:bottom;">____________________<br>Patient/Attendant Signature & Date</td>'
|
. '<td>____________________<br>Patient/Attendant Signature & Date</td>'
|
||||||
. '</tr>'
|
. '</tr>'
|
||||||
. '</table>';
|
. '</table>';
|
||||||
}
|
}
|
||||||
|
|
@ -1451,7 +1451,7 @@ class Ipd_discharge extends BaseController
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$html = '<h4 style="margin:16px 0 8px 0;">' . esc($title) . '</h4><ul style="margin:0 0 10px 20px;">';
|
$html = '<h4 class="discharge-section-heading">' . esc($title) . '</h4><ul class="discharge-list">';
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
$report = trim((string) ($row['comp_report'] ?? ''));
|
$report = trim((string) ($row['comp_report'] ?? ''));
|
||||||
$remark = trim((string) ($row['comp_remark'] ?? ''));
|
$remark = trim((string) ($row['comp_remark'] ?? ''));
|
||||||
|
|
@ -1461,7 +1461,7 @@ class Ipd_discharge extends BaseController
|
||||||
|
|
||||||
$line = esc($report);
|
$line = esc($report);
|
||||||
if ($remark !== '') {
|
if ($remark !== '') {
|
||||||
$line .= ' <span style="color:#475569;">(' . esc($remark) . ')</span>';
|
$line .= ' <span class="discharge-remark">(' . esc($remark) . ')</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= '<li>' . $line . '</li>';
|
$html .= '<li>' . $line . '</li>';
|
||||||
|
|
@ -1541,8 +1541,8 @@ class Ipd_discharge extends BaseController
|
||||||
// Get discharge status header
|
// Get discharge status header
|
||||||
$statusHeader = $this->getDischargeStatusText($ipd);
|
$statusHeader = $this->getDischargeStatusText($ipd);
|
||||||
|
|
||||||
return '<h2 style="text-align:center;margin:1px;padding:0px;">' . esc($statusHeader) . '</h2>'
|
return '<h2 class="discharge-title">' . esc($statusHeader) . '</h2>'
|
||||||
. '<hr style="margin:1px;padding:0px;" />'
|
. '<hr class="discharge-separator" />'
|
||||||
. '<table width="100%" cellpadding="0" cellspacing="0">'
|
. '<table width="100%" cellpadding="0" cellspacing="0">'
|
||||||
. '<tr><td width="150px"><b>Name</b></td><td width="250px">' . esc($patientName) . '</td><td width="150px"><b>UHID</b></td><td width="250px">' . esc($patientCode) . '</td></tr>'
|
. '<tr><td width="150px"><b>Name</b></td><td width="250px">' . esc($patientName) . '</td><td width="150px"><b>UHID</b></td><td width="250px">' . esc($patientCode) . '</td></tr>'
|
||||||
. '<tr><td width="150px"><b>Age & Gender</b></td><td width="250px">' . esc(trim($age . ' / ' . ((string) ($person->xgender ?? '')))) . '</td><td width="150px"><b>IPD No.</b></td><td width="250px">' . esc((string) ($ipd->ipd_code ?? '')) . '</td></tr>'
|
. '<tr><td width="150px"><b>Age & Gender</b></td><td width="250px">' . esc(trim($age . ' / ' . ((string) ($person->xgender ?? '')))) . '</td><td width="150px"><b>IPD No.</b></td><td width="250px">' . esc((string) ($ipd->ipd_code ?? '')) . '</td></tr>'
|
||||||
|
|
@ -1551,7 +1551,7 @@ class Ipd_discharge extends BaseController
|
||||||
. '<tr><td width="150px"><b>Address</b></td><td width="250px">' . esc($address) . '</td><td width="150px"><b>Org. Name</b></td><td width="250px">' . esc($orgName) . '</td></tr>'
|
. '<tr><td width="150px"><b>Address</b></td><td width="250px">' . esc($address) . '</td><td width="150px"><b>Org. Name</b></td><td width="250px">' . esc($orgName) . '</td></tr>'
|
||||||
. '<tr><td width="150px"><b>Department</b></td><td width="250px">' . esc($department) . '</td><td width="150px"></td><td width="250px"></td></tr>'
|
. '<tr><td width="150px"><b>Department</b></td><td width="250px">' . esc($department) . '</td><td width="150px"></td><td width="250px"></td></tr>'
|
||||||
. '</table>'
|
. '</table>'
|
||||||
. '<hr style="margin:1px;padding:0px;" />';
|
. '<hr class="discharge-separator" />';
|
||||||
}
|
}
|
||||||
|
|
||||||
private function renderStoredHtmlFragment(string $raw): string
|
private function renderStoredHtmlFragment(string $raw): string
|
||||||
|
|
@ -1698,8 +1698,8 @@ class Ipd_discharge extends BaseController
|
||||||
// Get discharge status text based on ipd_status
|
// Get discharge status text based on ipd_status
|
||||||
$dischargeStatusHeader = $this->getDischargeStatusText($ipd);
|
$dischargeStatusHeader = $this->getDischargeStatusText($ipd);
|
||||||
|
|
||||||
$sections[] = '<h4 style="margin:16px 0 8px 0;">' . esc($dischargeStatusHeader) . '</h4>'
|
$sections[] = '<h4 class="discharge-section-heading">' . esc($dischargeStatusHeader) . '</h4>'
|
||||||
. '<div>' . implode('<br>', $dischargeSummaryParts) . '</div>';
|
. '<div class="discharge-summary-info">' . implode('<br>', $dischargeSummaryParts) . '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$complaints = $this->byIpdRows('ipd_discharge_complaint', ['comp_report', 'comp_remark'], 'id ASC', $ipdId);
|
$complaints = $this->byIpdRows('ipd_discharge_complaint', ['comp_report', 'comp_remark'], 'id ASC', $ipdId);
|
||||||
|
|
@ -1750,10 +1750,10 @@ class Ipd_discharge extends BaseController
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sysHtml .= '<div style="margin-bottom:6px;">' . nl2br(esc($value)) . '</div>';
|
$sysHtml .= '<div class="discharge-item">' . nl2br(esc($value)) . '</div>';
|
||||||
}
|
}
|
||||||
if ($sysHtml !== '') {
|
if ($sysHtml !== '') {
|
||||||
$sections[] = '<h4 style="margin:16px 0 8px 0;">Other / Systemic Examinations</h4>' . $sysHtml;
|
$sections[] = '<h4 class="discharge-section-heading">Other / Systemic Examinations</h4>' . $sysHtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
$personalHistory = [];
|
$personalHistory = [];
|
||||||
|
|
@ -1780,7 +1780,7 @@ class Ipd_discharge extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! empty($personalHistory)) {
|
if (! empty($personalHistory)) {
|
||||||
$sections[] = '<h4 style="margin:16px 0 8px 0;">Personal History</h4><div>' . esc(implode(', ', $personalHistory)) . '</div>';
|
$sections[] = '<h4 class="discharge-section-heading">Personal History</h4><div>' . esc(implode(', ', $personalHistory)) . '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$allergySection = '';
|
$allergySection = '';
|
||||||
|
|
@ -1799,12 +1799,12 @@ class Ipd_discharge extends BaseController
|
||||||
$allergyLines[] = '<div><b>Current Medications:</b> ' . esc((string) ($opdHistory['current_medications'] ?? '')) . '</div>';
|
$allergyLines[] = '<div><b>Current Medications:</b> ' . esc((string) ($opdHistory['current_medications'] ?? '')) . '</div>';
|
||||||
}
|
}
|
||||||
if (! empty($allergyLines)) {
|
if (! empty($allergyLines)) {
|
||||||
$allergySection = '<h4 style="margin:16px 0 8px 0;">Drug Allergy / ADR</h4>' . implode('', $allergyLines);
|
$allergySection = '<h4 class="discharge-section-heading">Drug Allergy / ADR</h4>' . implode('', $allergyLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
$coMorbText = trim((string) ($opdHistory['co_morbidities'] ?? ''));
|
$coMorbText = trim((string) ($opdHistory['co_morbidities'] ?? ''));
|
||||||
if ($coMorbText !== '') {
|
if ($coMorbText !== '') {
|
||||||
$sections[] = '<h4 style="margin:16px 0 8px 0;">Co-Morbidities</h4><div>' . esc($coMorbText) . '</div>';
|
$sections[] = '<h4 class="discharge-section-heading">Co-Morbidities</h4><div>' . esc($coMorbText) . '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$admitDate = $this->normalizeDateValue((string) ($ipd->register_date ?? '')) ?? '';
|
$admitDate = $this->normalizeDateValue((string) ($ipd->register_date ?? '')) ?? '';
|
||||||
|
|
@ -1856,17 +1856,17 @@ class Ipd_discharge extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! empty($pathologyMatrix['rows']) || ! empty($selectedLabRows) || ! empty($selectedNonPathRows) || trim((string) ($otherExamParsed['text'] ?? '')) !== '') {
|
if (! empty($pathologyMatrix['rows']) || ! empty($selectedLabRows) || ! empty($selectedNonPathRows) || trim((string) ($otherExamParsed['text'] ?? '')) !== '') {
|
||||||
$html = '<h4 style="margin:16px 0 8px 0;">Clinical Investigation Reports</h4>';
|
$html = '<h4 class="discharge-section-heading">Clinical Investigation Reports</h4>';
|
||||||
|
|
||||||
if (! empty($pathologyMatrix['rows'])) {
|
if (! empty($pathologyMatrix['rows'])) {
|
||||||
$html .= '<div><b>In-Hospital Lab:</b></div>'
|
$html .= '<div><b>In-Hospital Lab:</b></div>'
|
||||||
. '<table style="width:100%;border-collapse:collapse;margin:4px 0 8px 0;" border="1" cellpadding="6">'
|
. '<table class="discharge-table" border="1" cellpadding="6">'
|
||||||
. '<tr>'
|
. '<tr>'
|
||||||
. '<th style="text-align:left;">Test</th>'
|
. '<th>Test</th>'
|
||||||
. '<th style="text-align:left;">Fixed Normals</th>';
|
. '<th>Fixed Normals</th>';
|
||||||
|
|
||||||
foreach (($pathologyMatrix['dates'] ?? []) as $dt) {
|
foreach (($pathologyMatrix['dates'] ?? []) as $dt) {
|
||||||
$html .= '<th style="text-align:left;">' . esc((string) ($pathologyMatrix['date_labels'][$dt] ?? $dt)) . '</th>';
|
$html .= '<th>' . esc((string) ($pathologyMatrix['date_labels'][$dt] ?? $dt)) . '</th>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= '</tr>';
|
$html .= '</tr>';
|
||||||
|
|
@ -1886,7 +1886,7 @@ class Ipd_discharge extends BaseController
|
||||||
$html .= '</table>';
|
$html .= '</table>';
|
||||||
} elseif (! empty($selectedLabRows)) {
|
} elseif (! empty($selectedLabRows)) {
|
||||||
// Fallback when value-matrix cannot be built from current schema/data.
|
// Fallback when value-matrix cannot be built from current schema/data.
|
||||||
$html .= '<div><b>In-Hospital Lab:</b></div><ul style="margin:4px 0 8px 20px;">';
|
$html .= '<div><b>In-Hospital Lab:</b></div><ul class="discharge-sublist">';
|
||||||
foreach ($selectedLabRows as $row) {
|
foreach ($selectedLabRows as $row) {
|
||||||
$html .= '<li>[' . esc((string) ($row['inv_date_label'] ?? '')) . '] ' . esc((string) ($row['test_list'] ?? '')) . '</li>';
|
$html .= '<li>[' . esc((string) ($row['inv_date_label'] ?? '')) . '] ' . esc((string) ($row['test_list'] ?? '')) . '</li>';
|
||||||
}
|
}
|
||||||
|
|
@ -1894,7 +1894,7 @@ class Ipd_discharge extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! empty($selectedNonPathRows)) {
|
if (! empty($selectedNonPathRows)) {
|
||||||
$html .= '<div><b>X-Ray / ECG / Sonography / CT / MRI:</b></div><ul style="margin:4px 0 8px 20px;">';
|
$html .= '<div><b>X-Ray / ECG / Sonography / CT / MRI:</b></div><ul class="discharge-sublist">';
|
||||||
foreach ($selectedNonPathRows as $row) {
|
foreach ($selectedNonPathRows as $row) {
|
||||||
$html .= '<li>[' . esc((string) ($row['report_date_label'] ?? '')) . '] '
|
$html .= '<li>[' . esc((string) ($row['report_date_label'] ?? '')) . '] '
|
||||||
. esc((string) ($row['modality'] ?? ''))
|
. esc((string) ($row['modality'] ?? ''))
|
||||||
|
|
@ -1902,7 +1902,7 @@ class Ipd_discharge extends BaseController
|
||||||
|
|
||||||
$impression = trim((string) ($row['impression'] ?? ''));
|
$impression = trim((string) ($row['impression'] ?? ''));
|
||||||
if ($impression !== '') {
|
if ($impression !== '') {
|
||||||
$html .= '<br><span style="color:#475569;">Impression: ' . nl2br(esc($impression)) . '</span>';
|
$html .= '<br><span class="discharge-remark">Impression: ' . nl2br(esc($impression)) . '</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= '</li>';
|
$html .= '</li>';
|
||||||
|
|
@ -1929,7 +1929,7 @@ class Ipd_discharge extends BaseController
|
||||||
$inhosRow = $this->firstRowByIpd('ipd_discharge_investigtions_inhos', $ipdId);
|
$inhosRow = $this->firstRowByIpd('ipd_discharge_investigtions_inhos', $ipdId);
|
||||||
$inhosRemark = $this->normalizeRichText((string) ($inhosRow['comp_remark'] ?? ''));
|
$inhosRemark = $this->normalizeRichText((string) ($inhosRow['comp_remark'] ?? ''));
|
||||||
if ($inhosRemark !== '') {
|
if ($inhosRemark !== '') {
|
||||||
$sections[] = '<h4 style="margin:16px 0 8px 0;">Summary of key investigations during Hospitalization</h4><div>'
|
$sections[] = '<h4 class="discharge-section-heading">Summary of key investigations during Hospitalization</h4><div>'
|
||||||
. nl2br(esc($inhosRemark))
|
. nl2br(esc($inhosRemark))
|
||||||
. '</div>';
|
. '</div>';
|
||||||
}
|
}
|
||||||
|
|
@ -1986,7 +1986,7 @@ class Ipd_discharge extends BaseController
|
||||||
|
|
||||||
$drugRows = $this->byIpdRows('ipd_discharge_drug', ['drug_name', 'drug_dose', 'drug_day'], 'id ASC', $ipdId);
|
$drugRows = $this->byIpdRows('ipd_discharge_drug', ['drug_name', 'drug_dose', 'drug_day'], 'id ASC', $ipdId);
|
||||||
if (! empty($drugRows)) {
|
if (! empty($drugRows)) {
|
||||||
$html = '<h4 style="margin:16px 0 8px 0;">Discharge Medications</h4><ol style="margin:0 0 10px 20px;">';
|
$html = '<h4 class="discharge-section-heading">Discharge Medications</h4><ol class="discharge-list">';
|
||||||
foreach ($drugRows as $row) {
|
foreach ($drugRows as $row) {
|
||||||
$drugName = trim((string) ($row['drug_name'] ?? ''));
|
$drugName = trim((string) ($row['drug_name'] ?? ''));
|
||||||
if ($drugName === '') {
|
if ($drugName === '') {
|
||||||
|
|
@ -1998,10 +1998,10 @@ class Ipd_discharge extends BaseController
|
||||||
$days = trim((string) ($row['drug_day'] ?? ''));
|
$days = trim((string) ($row['drug_day'] ?? ''));
|
||||||
|
|
||||||
if ($dose !== '') {
|
if ($dose !== '') {
|
||||||
$line .= ' <span style="color:#475569;">' . esc($dose) . '</span>';
|
$line .= ' <span class="discharge-remark">' . esc($dose) . '</span>';
|
||||||
}
|
}
|
||||||
if ($days !== '') {
|
if ($days !== '') {
|
||||||
$line .= ' <span style="color:#475569;">[' . esc($days) . ' days]</span>';
|
$line .= ' <span class="discharge-remark">[' . esc($days) . ' days]</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= '<li>' . $line . '</li>';
|
$html .= '<li>' . $line . '</li>';
|
||||||
|
|
@ -2011,9 +2011,9 @@ class Ipd_discharge extends BaseController
|
||||||
} else {
|
} else {
|
||||||
$medRows = $this->byIpdRows('ipd_discharge_prescrption_prescribed', ['med_name', 'med_type', 'qty', 'no_of_days', 'remark'], 'id ASC', $ipdId);
|
$medRows = $this->byIpdRows('ipd_discharge_prescrption_prescribed', ['med_name', 'med_type', 'qty', 'no_of_days', 'remark'], 'id ASC', $ipdId);
|
||||||
if (! empty($medRows)) {
|
if (! empty($medRows)) {
|
||||||
$html = '<h4 style="margin:16px 0 8px 0;">Discharge Medications</h4>'
|
$html = '<h4 class="discharge-section-heading">Discharge Medications</h4>'
|
||||||
. '<table style="width:100%;border-style: inset;;margin-bottom:10px;" border="0" cellpadding="6">'
|
. '<table class="discharge-medicine-table" border="0" cellpadding="6">'
|
||||||
. '<tr><th style="width:40px;">#</th><th>Medicine</th><th style="width:90px;">Qty</th><th style="width:100px;">Days</th><th>Notes</th></tr>';
|
. '<tr><th>#</th><th>Medicine</th><th>Qty</th><th>Days</th><th>Notes</th></tr>';
|
||||||
$sr = 1;
|
$sr = 1;
|
||||||
foreach ($medRows as $row) {
|
foreach ($medRows as $row) {
|
||||||
$medName = trim((string) ($row['med_name'] ?? ''));
|
$medName = trim((string) ($row['med_name'] ?? ''));
|
||||||
|
|
@ -2039,7 +2039,7 @@ class Ipd_discharge extends BaseController
|
||||||
$instructions = $this->byIpdRows('ipd_discharge_instructions', ['comp_report', 'comp_remark', 'review_after', 'footer_text'], 'id DESC', $ipdId);
|
$instructions = $this->byIpdRows('ipd_discharge_instructions', ['comp_report', 'comp_remark', 'review_after', 'footer_text'], 'id DESC', $ipdId);
|
||||||
if (! empty($instructions)) {
|
if (! empty($instructions)) {
|
||||||
$first = $instructions[0];
|
$first = $instructions[0];
|
||||||
$html = '<h4 style="margin:16px 0 8px 0;">Discharge Advice/Instructions/Summary</h4>';
|
$html = '<h4 class="discharge-section-heading">Discharge Advice/Instructions/Summary</h4>';
|
||||||
|
|
||||||
$instructionMeta = $this->parseInstructionMetaPayload((string) ($first['comp_report'] ?? ''));
|
$instructionMeta = $this->parseInstructionMetaPayload((string) ($first['comp_report'] ?? ''));
|
||||||
$foodIds = is_array($instructionMeta['food_ids'] ?? null) ? ($instructionMeta['food_ids'] ?? []) : [];
|
$foodIds = is_array($instructionMeta['food_ids'] ?? null) ? ($instructionMeta['food_ids'] ?? []) : [];
|
||||||
|
|
@ -2061,8 +2061,8 @@ class Ipd_discharge extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! empty($foodIds)) {
|
if (! empty($foodIds)) {
|
||||||
$html .= '<div style="margin-bottom:8px;"><strong>Dietary Advice:</strong></div>';
|
$html .= '<div class="discharge-field"><strong>Dietary Advice:</strong></div>';
|
||||||
$html .= '<ol style="margin:0 0 10px 20px;">';
|
$html .= '<ol class="discharge-list">';
|
||||||
foreach ($foodIds as $foodId) {
|
foreach ($foodIds as $foodId) {
|
||||||
$id = (int) $foodId;
|
$id = (int) $foodId;
|
||||||
$row = $foodMap[$id] ?? null;
|
$row = $foodMap[$id] ?? null;
|
||||||
|
|
@ -2091,7 +2091,7 @@ class Ipd_discharge extends BaseController
|
||||||
|
|
||||||
$otherText = trim((string) ($instructionMeta['other_text'] ?? ''));
|
$otherText = trim((string) ($instructionMeta['other_text'] ?? ''));
|
||||||
if ($otherText !== '') {
|
if ($otherText !== '') {
|
||||||
$html .= '<div style="margin-bottom:8px;"><strong>Other Advice:</strong> ' . $this->renderStoredHtmlFragment($otherText) . '</div>';
|
$html .= '<div class="discharge-field"><strong>Other Advice:</strong> ' . $this->renderStoredHtmlFragment($otherText) . '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$remark = trim((string) ($first['comp_remark'] ?? ''));
|
$remark = trim((string) ($first['comp_remark'] ?? ''));
|
||||||
|
|
@ -2109,29 +2109,29 @@ class Ipd_discharge extends BaseController
|
||||||
$reviewDate = ' (' . date('d-m-Y', $reviewTs) . ')';
|
$reviewDate = ' (' . date('d-m-Y', $reviewTs) . ')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$html .= '<div style="margin-top:6px;">Review after ' . esc($reviewAfter) . ' Days' . esc($reviewDate) . ' days / as and when required</div>';
|
$html .= '<div class="discharge-footer">Review after ' . esc($reviewAfter) . ' Days' . esc($reviewDate) . ' days / as and when required</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$footerText = trim((string) ($first['footer_text'] ?? ''));
|
$footerText = trim((string) ($first['footer_text'] ?? ''));
|
||||||
if ($footerText !== '') {
|
if ($footerText !== '') {
|
||||||
$html .= '<div style="margin-top:6px;">' . $this->renderStoredHtmlFragment($footerText) . '</div>';
|
$html .= '<div class="discharge-footer">' . $this->renderStoredHtmlFragment($footerText) . '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$sections[] = $html;
|
$sections[] = $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
$sections[] = '<table border="0" cellpadding="1" cellspacing="1" style="width:100%">'
|
$sections[] = '<table class="discharge-signature-table" border="0" cellpadding="1" cellspacing="1">'
|
||||||
. '<tbody>'
|
. '<tbody>'
|
||||||
. '<tr><td> </td><td> </td><td> </td></tr>'
|
. '<tr><td> </td><td> </td><td> </td></tr>'
|
||||||
. '<tr>'
|
. '<tr>'
|
||||||
. '<td style="text-align:left; vertical-align:middle">_________________________</td>'
|
|
||||||
. '<td>_________________________</td>'
|
. '<td>_________________________</td>'
|
||||||
. '<td style="text-align:right; vertical-align:middle">_________________________</td>'
|
. '<td>_________________________</td>'
|
||||||
|
. '<td>_________________________</td>'
|
||||||
. '</tr>'
|
. '</tr>'
|
||||||
. '<tr>'
|
. '<tr>'
|
||||||
. '<td style="text-align:center; vertical-align:middle">Signature of Consultant</td>'
|
. '<td>Signature of Consultant</td>'
|
||||||
. '<td style="text-align:center; vertical-align:middle">Signature of Medical Officer</td>'
|
. '<td>Signature of Medical Officer</td>'
|
||||||
. '<td style="text-align:center; vertical-align:middle">Signature of Receiver / Date</td>'
|
. '<td>Signature of Receiver / Date</td>'
|
||||||
. '</tr>'
|
. '</tr>'
|
||||||
. '</tbody>'
|
. '</tbody>'
|
||||||
. '</table>';
|
. '</table>';
|
||||||
|
|
@ -2234,8 +2234,8 @@ class Ipd_discharge extends BaseController
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$html = '<h4 style="margin:16px 0 8px 0;">Nursing Trend Summary (Last 24 Hours)</h4>';
|
$html = '<h4 class="discharge-section-heading">Nursing Trend Summary (Last 24 Hours)</h4>';
|
||||||
$html .= '<ul style="margin:0 0 10px 20px;">';
|
$html .= '<ul class="discharge-list">';
|
||||||
if ($vitalsCount > 0) {
|
if ($vitalsCount > 0) {
|
||||||
$html .= '<li>Vitals charted entries: ' . esc((string) $vitalsCount) . '</li>';
|
$html .= '<li>Vitals charted entries: ' . esc((string) $vitalsCount) . '</li>';
|
||||||
if ($latestVitalsLine !== '') {
|
if ($latestVitalsLine !== '') {
|
||||||
|
|
@ -2246,8 +2246,8 @@ class Ipd_discharge extends BaseController
|
||||||
$html .= '<li>Fluid balance (approx): Intake ' . esc((string) $fluidIn) . ' ml, Output ' . esc((string) $fluidOut) . ' ml, Net ' . esc((string) ($fluidIn - $fluidOut)) . ' ml</li>';
|
$html .= '<li>Fluid balance (approx): Intake ' . esc((string) $fluidIn) . ' ml, Output ' . esc((string) $fluidOut) . ' ml, Net ' . esc((string) ($fluidIn - $fluidOut)) . ' ml</li>';
|
||||||
}
|
}
|
||||||
if (! empty($treatments)) {
|
if (! empty($treatments)) {
|
||||||
$html .= '<li>Key nursing treatments:</li><li style="list-style:none;">';
|
$html .= '<li>Key nursing treatments:</li><li class="no-bullet">';
|
||||||
$html .= '<ul style="margin:4px 0 0 18px;">';
|
$html .= '<ul class="discharge-sublist">';
|
||||||
foreach (array_slice($treatments, -5) as $line) {
|
foreach (array_slice($treatments, -5) as $line) {
|
||||||
$html .= '<li>' . esc($line) . '</li>';
|
$html .= '<li>' . esc($line) . '</li>';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user