Tell me about ECHS
ECHS Ex-Servicemen Contributory Health Scheme India details 2024 2025
| Rank Category | Approximate Contribution |
|---|---|
| JCOs/Other Ranks | Rs. 30,000 |
| Officers (lower ranks) | Moderate range |
| Senior Officers (Col and above) | Up to Rs. 1,20,000 |
| Service | What It Provides |
|---|---|
| ECHS Polyclinics | Outpatient consultations, basic diagnostics, emergency care, referrals |
| Empanelled Hospitals | Cashless inpatient/outpatient care, surgeries, advanced diagnostics |
| Medicines | Free at polyclinics and empanelled hospitals; outside purchase with reimbursement if unavailable |
| Specialist Care | Referrals to specialists, including super-specialty treatments |
Give me a format of ECHS file I want to see a complete hospital file which contains all documentation work which tells me how I can make a ECHS file in Hospital
ECHS inpatient IPD hospital file documents required empanelled hospital checklist 2024
ECHS IPD admission file format documents list claim submission empanelled hospital
mkdir -p /tmp/workspace/echs-ipd-file && ls /tmp/workspace/echs-ipd-file/
~/echs-ipd-file/build_echs_file.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT, TA_JUSTIFY
from reportlab.pdfgen import canvas
from reportlab.platypus.flowables import Flowable
import datetime
OUTPUT = "/tmp/workspace/echs-ipd-file/ECHS_IPD_Hospital_File.pdf"
# ─── Page numbering canvas ────────────────────────────────────────────────────
class NumberedCanvas(canvas.Canvas):
def __init__(self, *args, **kwargs):
canvas.Canvas.__init__(self, *args, **kwargs)
self._saved_page_states = []
def showPage(self):
self._saved_page_states.append(dict(self.__dict__))
self._startPage()
def save(self):
num_pages = len(self._saved_page_states)
for state in self._saved_page_states:
self.__dict__.update(state)
self.draw_page_number(num_pages)
canvas.Canvas.showPage(self)
canvas.Canvas.save(self)
def draw_page_number(self, page_count):
self.setFont("Helvetica", 8)
self.setFillColor(colors.HexColor('#555555'))
self.drawRightString(
A4[0] - 20*mm, 12*mm,
f"Page {self._pageNumber} of {page_count}"
)
# footer line
self.setStrokeColor(colors.HexColor('#003366'))
self.setLineWidth(0.5)
self.line(20*mm, 18*mm, A4[0]-20*mm, 18*mm)
self.drawString(20*mm, 12*mm, "ECHS IPD Hospital File | CONFIDENTIAL MEDICAL RECORD")
# ─── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def style(name, **kwargs):
base = styles[name]
ns = ParagraphStyle(name + "_custom", parent=base, **kwargs)
return ns
NAVY = colors.HexColor('#003366')
GOLD = colors.HexColor('#CC9900')
LGRAY = colors.HexColor('#F2F4F7')
MGRAY = colors.HexColor('#CCCCCC')
DGRAY = colors.HexColor('#555555')
WHITE = colors.white
RED = colors.HexColor('#CC0000')
heading1 = style('Heading1', fontSize=14, textColor=NAVY, spaceAfter=4,
spaceBefore=10, fontName='Helvetica-Bold', alignment=TA_LEFT)
heading2 = style('Heading2', fontSize=11, textColor=NAVY, spaceAfter=3,
spaceBefore=8, fontName='Helvetica-Bold')
heading3 = style('Heading3', fontSize=9.5, textColor=NAVY, spaceAfter=2,
spaceBefore=6, fontName='Helvetica-Bold')
normal = style('Normal', fontSize=9, leading=13, spaceAfter=2)
small = style('Normal', fontSize=8, leading=11, textColor=DGRAY)
label = style('Normal', fontSize=8.5, fontName='Helvetica-Bold', textColor=NAVY)
center_big = style('Normal', fontSize=18, fontName='Helvetica-Bold',
textColor=NAVY, alignment=TA_CENTER, spaceAfter=4)
center_med = style('Normal', fontSize=13, fontName='Helvetica-Bold',
textColor=NAVY, alignment=TA_CENTER, spaceAfter=3)
center_sm = style('Normal', fontSize=9, alignment=TA_CENTER, textColor=DGRAY)
red_note = style('Normal', fontSize=8.5, textColor=RED, fontName='Helvetica-Bold')
italic_sm = style('Normal', fontSize=8, fontName='Helvetica-Oblique', textColor=DGRAY)
# ─── Helper: blank field row ──────────────────────────────────────────────────
def field_row(label_text, width1=60*mm, width2=110*mm, height=7*mm):
data = [[Paragraph(label_text, label), '']]
t = Table(data, colWidths=[width1, width2])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (0,0), LGRAY),
('BACKGROUND', (1,0), (1,0), WHITE),
('BOX', (0,0), (-1,-1), 0.5, MGRAY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 2),
('BOTTOMPADDING',(0,0),(-1,-1), 2),
('LEFTPADDING',(0,0),(-1,-1), 4),
('MINROWHEIGHT',(0,0),(-1,-1), height),
]))
return t
def two_fields(l1, l2, w=85*mm):
data = [[Paragraph(l1, label), '', Paragraph(l2, label), '']]
t = Table(data, colWidths=[w-20*mm, w-20*mm, w-20*mm, w-20*mm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (0,0), LGRAY),
('BACKGROUND', (2,0), (2,0), LGRAY),
('BOX', (0,0), (-1,-1), 0.5, MGRAY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 2),
('BOTTOMPADDING',(0,0),(-1,-1), 2),
('LEFTPADDING',(0,0),(-1,-1), 4),
('MINROWHEIGHT',(0,0),(-1,-1), 7*mm),
]))
return t
def section_header(title):
data = [[Paragraph(title, style('Normal', fontSize=10, fontName='Helvetica-Bold',
textColor=WHITE, alignment=TA_LEFT))]]
t = Table(data, colWidths=[170*mm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), NAVY),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING',(0,0),(-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
]))
return t
def checkbox_row(items):
"""Row of labelled checkboxes: items = list of strings"""
n = len(items)
w = 170*mm / n
data = [[Paragraph(f"☐ {it}", small) for it in items]]
t = Table(data, colWidths=[w]*n)
t.setStyle(TableStyle([
('BOX', (0,0), (-1,-1), 0.5, MGRAY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING',(0,0),(-1,-1), 3),
('BOTTOMPADDING',(0,0),(-1,-1), 3),
('LEFTPADDING',(0,0),(-1,-1), 4),
]))
return t
def lines_block(n=3, label_text=''):
rows = []
if label_text:
rows.append([Paragraph(label_text, label), ''])
for _ in range(n):
rows.append(['', ''])
t = Table(rows, colWidths=[40*mm, 130*mm])
ts = [
('BOX', (0,0), (-1,-1), 0.5, MGRAY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 2),
('BOTTOMPADDING', (0,0), (-1,-1), 2),
('LEFTPADDING', (0,0), (-1,-1), 4),
('MINROWHEIGHT', (0,0), (-1,-1), 7*mm),
]
if label_text:
ts.append(('BACKGROUND', (0,0), (0,0), LGRAY))
ts.append(('SPAN', (0,0), (0, n)))
t.setStyle(TableStyle(ts))
return t
def tall_field(label_text, rows=4):
data = [[Paragraph(label_text, label)]]
for _ in range(rows):
data.append([''])
t = Table(data, colWidths=[170*mm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (0,0), LGRAY),
('BOX', (0,0), (-1,-1), 0.5, MGRAY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING',(0,0),(-1,-1), 3),
('LEFTPADDING',(0,0),(-1,-1), 4),
('MINROWHEIGHT',(0,1),(-1,-1), 8*mm),
]))
return t
def sig_block():
data = [[
Paragraph('Signature of Treating Doctor', small),
Paragraph('Date', small),
Paragraph('Stamp / Seal', small),
]]
for _ in range(3):
data.append(['', '', ''])
t = Table(data, colWidths=[60*mm, 50*mm, 60*mm])
t.setStyle(TableStyle([
('BOX', (0,0), (-1,-1), 0.5, MGRAY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('BACKGROUND',(0,0), (-1,0), LGRAY),
('TOPPADDING',(0,0), (-1,-1), 2),
('BOTTOMPADDING',(0,0),(-1,-1), 2),
('LEFTPADDING',(0,0),(-1,-1), 4),
('MINROWHEIGHT',(0,1),(-1,-1), 8*mm),
]))
return t
# ═══════════════════════════════════════════════════════════════════════════════
# BUILD DOCUMENT
# ═══════════════════════════════════════════════════════════════════════════════
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
topMargin=22*mm, bottomMargin=28*mm,
leftMargin=20*mm, rightMargin=20*mm,
title="ECHS IPD Hospital File",
author="ECHS Empanelled Hospital",
)
story = []
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# COVER PAGE
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(Spacer(1, 20*mm))
# Title banner
banner_data = [[Paragraph(
'EX-SERVICEMEN CONTRIBUTORY HEALTH SCHEME',
style('Normal', fontSize=16, fontName='Helvetica-Bold',
textColor=WHITE, alignment=TA_CENTER))]]
banner = Table(banner_data, colWidths=[170*mm])
banner.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), NAVY),
('TOPPADDING', (0,0), (-1,-1), 10),
('BOTTOMPADDING', (0,0), (-1,-1), 10),
]))
story.append(banner)
story.append(Spacer(1, 3*mm))
sub_banner_data = [[Paragraph(
'Ministry of Defence, Government of India',
style('Normal', fontSize=10, fontName='Helvetica',
textColor=WHITE, alignment=TA_CENTER))]]
sub_banner = Table(sub_banner_data, colWidths=[170*mm])
sub_banner.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), GOLD),
('TOPPADDING', (0,0), (-1,-1), 5),
('BOTTOMPADDING', (0,0), (-1,-1), 5),
]))
story.append(sub_banner)
story.append(Spacer(1, 12*mm))
story.append(Paragraph("INPATIENT DEPARTMENT (IPD)", center_big))
story.append(Paragraph("COMPLETE HOSPITAL FILE", center_big))
story.append(Spacer(1, 4*mm))
story.append(HRFlowable(width="100%", thickness=2, color=NAVY))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("Standard Documentation Package for ECHS Empanelled Hospitals", center_med))
story.append(Spacer(1, 12*mm))
# Cover info table
cover_info = [
[Paragraph("HOSPITAL NAME:", label), ''],
[Paragraph("ECHS EMPANELMENT NO.:", label), ''],
[Paragraph("REGIONAL CENTRE:", label), ''],
[Paragraph("FILE / ADMISSION NO.:", label), ''],
[Paragraph("DATE OF ADMISSION:", label), ''],
[Paragraph("PATIENT NAME:", label), ''],
[Paragraph("ECHS CARD NO.:", label), ''],
]
t = Table(cover_info, colWidths=[70*mm, 100*mm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (0,-1), LGRAY),
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING',(0,0),(-1,-1), 4),
('LEFTPADDING',(0,0),(-1,-1), 6),
('MINROWHEIGHT',(0,0),(-1,-1), 9*mm),
]))
story.append(t)
story.append(Spacer(1, 10*mm))
story.append(Paragraph(
"This file contains all mandatory documentation as per ECHS SOP for Online Bill Processing "
"(ECHS/CO/SOP). All pages must be numbered, signed, and stamped by the treating doctor and "
"Hospital Medical Record Department before submission to the Regional Centre / UTIITSL portal.",
italic_sm))
story.append(Spacer(1, 8*mm))
story.append(Paragraph("CONFIDENTIAL MEDICAL RECORD - FOR OFFICIAL USE ONLY",
style('Normal', fontSize=9, fontName='Helvetica-Bold',
textColor=RED, alignment=TA_CENTER)))
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 2: FILE INDEX / TABLE OF CONTENTS
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(Paragraph("FILE INDEX", heading1))
story.append(HRFlowable(width="100%", thickness=1.5, color=NAVY))
story.append(Spacer(1, 4*mm))
index_data = [
[Paragraph('S.No', label), Paragraph('Document', label),
Paragraph('Page No.', label), Paragraph('Checked (✓)', label)],
['1', 'Cover Sheet & File Index', '', ''],
['2', 'ECHS Smart Card Photocopy', '', ''],
['3', 'Referral Form from Polyclinic / Emergency Certificate', '', ''],
['4', 'Patient Registration & Admission Case Note', '', ''],
['5', 'Consent Forms (General + Procedure-specific)', '', ''],
['6', 'Clinical Assessment / History & Physical Examination', '', ''],
['7', 'Vital Signs Chart', '', ''],
['8', 'Drug Administration Chart', '', ''],
['9', 'Investigation Reports (Lab, Imaging - chronological)', '', ''],
['10', 'Specialist Consultation Notes', '', ''],
['11', 'Operation / Procedure Notes (if applicable)', '', ''],
['12', 'Implant Invoice + Barcode Sticker (if applicable)', '', ''],
['13', 'Prior Approval Letter from ECHS (if applicable)', '', ''],
['14', 'Discharge Summary', '', ''],
['15', 'Final Bill – Summary + Itemized Breakup', '', ''],
['16', 'MRP Certificate (countersigned by Polyclinic/RC)', '', ''],
['17', 'MOA Copy covering period of hospitalization + Annexure-II', '', ''],
['18', 'Death Summary (if applicable)', '', ''],
]
idx_t = Table(index_data, colWidths=[12*mm, 105*mm, 25*mm, 28*mm])
idx_t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), NAVY),
('TEXTCOLOR', (0,0), (-1,0), WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 8.5),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LGRAY]),
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING',(0,0),(-1,-1), 3),
('LEFTPADDING',(0,0),(-1,-1), 4),
('MINROWHEIGHT',(0,1),(-1,-1), 8*mm),
]))
story.append(idx_t)
story.append(Spacer(1, 6*mm))
story.append(Paragraph(
"Note: Pages must be numbered sequentially on each page. All documents to be uploaded on "
"UTIITSL portal in PDF format AND submitted in physical form to the Regional Centre.",
italic_sm))
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 3: ECHS CARD PLACEHOLDER
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 2: ECHS SMART CARD PHOTOCOPY"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph(
"Attach a clear photocopy of the ECHS Smart Card (front & back) of the primary beneficiary.",
normal))
story.append(Spacer(1, 3*mm))
box_data = [['FRONT OF ECHS CARD'], ['(Affix Photocopy Here)']]
card_box = Table(box_data, colWidths=[170*mm])
card_box.setStyle(TableStyle([
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('BACKGROUND', (0,0), (0,0), LGRAY),
('FONTNAME', (0,0), (0,0), 'Helvetica-Bold'),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('MINROWHEIGHT',(0,1),(0,1), 35*mm),
('TOPPADDING', (0,0), (-1,-1), 4),
]))
story.append(card_box)
story.append(Spacer(1, 5*mm))
back_box = Table([['BACK OF ECHS CARD'], ['(Affix Photocopy Here)']], colWidths=[170*mm])
back_box.setStyle(TableStyle([
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('BACKGROUND', (0,0), (0,0), LGRAY),
('FONTNAME', (0,0), (0,0), 'Helvetica-Bold'),
('ALIGN', (0,0), (-1,-1), 'CENTER'),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('MINROWHEIGHT',(0,1),(0,1), 35*mm),
('TOPPADDING', (0,0), (-1,-1), 4),
]))
story.append(back_box)
story.append(Spacer(1, 4*mm))
story.append(field_row("Verified by (Name & Designation):"))
story.append(Spacer(1, 2*mm))
story.append(two_fields("Date of Verification:", "ECHS Card Number:"))
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 4: REFERRAL FORM
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 3: REFERRAL FORM / EMERGENCY CERTIFICATE"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("SECTION A: POLYCLINIC REFERRAL DETAILS", heading2))
story.append(field_row("Name of Parent Polyclinic:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Polyclinic Address:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Referral No.:", "Referral Date:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Referred By (MO/Specialist Name & Designation):"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Referred To (Hospital Name):"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Department / Specialty Referred To:"))
story.append(Spacer(1, 1*mm))
story.append(Paragraph("Referral Valid For:", heading3))
story.append(checkbox_row(['Indoor Treatment (IPD)', 'Day Care', 'Investigation Only', 'OPD Consultation (max 6)']))
story.append(Spacer(1, 1*mm))
story.append(field_row("Referral Valid Up To (Date):"))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Brief Clinical History / Provisional Diagnosis:", rows=4))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Specific Treatment / Procedure / Investigation Required:", rows=3))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
story.append(Spacer(1, 5*mm))
story.append(HRFlowable(width="100%", thickness=0.5, color=MGRAY))
story.append(Spacer(1, 3*mm))
story.append(Paragraph("SECTION B: EMERGENCY CERTIFICATE (Fill ONLY for Emergency Admissions)", heading2))
story.append(Paragraph(
"This is to certify that the above-named patient presented to our Emergency Department "
"on ___________ at __________ hrs and required immediate/emergency hospitalization. "
"Delay in admission would have been life-threatening / risked serious aggravation of condition.",
style('Normal', fontSize=9, leading=13)))
story.append(Spacer(1, 3*mm))
story.append(field_row("Reason for Emergency (brief):"))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 5: ADMISSION CASE NOTE
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 4: PATIENT REGISTRATION & ADMISSION CASE NOTE"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("SECTION A: PATIENT DETAILS", heading2))
story.append(field_row("Patient Full Name:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Date of Birth:", "Age / Sex:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Address:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Mobile No.:", "Aadhar No.:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("ECHS Card No.:"))
story.append(Spacer(1, 1*mm))
story.append(Paragraph("Beneficiary Type:", heading3))
story.append(checkbox_row([
'Primary Beneficiary (ESM)', 'Spouse', 'Dependent Child', 'Dependent Parent'
]))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("SECTION B: PRIMARY BENEFICIARY (ESM) DETAILS", heading2))
story.append(field_row("Name of ESM:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Rank:", "Service / Regt. / Corps:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Army/Navy/Air Force No.:", "Date of Retirement:"))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("SECTION C: ADMISSION DETAILS", heading2))
story.append(two_fields("Date of Admission:", "Time of Admission:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Ward / Bed No.:", "Admitting Doctor:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Admission Type:"))
story.append(checkbox_row(['Planned (with Referral)', 'Emergency', 'Transferred from Another Hospital']))
story.append(Spacer(1, 1*mm))
story.append(field_row("Presenting Complaint:"))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("SECTION D: WARD ENTITLEMENT", heading2))
story.append(checkbox_row(['General Ward', 'Semi-Private', 'Private Room']))
story.append(Spacer(1, 1*mm))
story.append(Paragraph(
"Note: Ward entitlement is as per rank of primary beneficiary. "
"Officers (Colonel and above) – Private Room; JCOs – Semi-Private; Other Ranks – General Ward.",
italic_sm))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 6: CONSENT FORMS
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 5: CONSENT FORMS"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("FORM A: GENERAL CONSENT FOR TREATMENT", heading2))
story.append(Paragraph(
"I, __________________________________, the patient / legally authorized representative "
"of the patient __________________________________, hereby voluntarily give consent for "
"examination, diagnosis, and treatment by the medical staff at "
"__________________________________ Hospital. I understand the general nature of the "
"proposed treatment and acknowledge that the hospital has explained the risks, benefits, "
"and alternatives to my satisfaction.",
style('Normal', fontSize=9, leading=14, spaceAfter=4)))
story.append(Spacer(1, 3*mm))
story.append(two_fields("Patient/Guardian Signature:", "Relation to Patient:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Date:", "Witness Signature:"))
story.append(Spacer(1, 5*mm))
story.append(HRFlowable(width="100%", thickness=0.5, color=MGRAY))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("FORM B: CONSENT FOR SURGICAL PROCEDURE / ANAESTHESIA", heading2))
story.append(Paragraph("(Complete only if surgical or invasive procedure is planned)", italic_sm))
story.append(Spacer(1, 2*mm))
story.append(field_row("Name of Procedure / Surgery:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Performing Surgeon:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Anaesthetist:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Type of Anaesthesia:"))
story.append(checkbox_row(['General Anaesthesia', 'Spinal / Epidural', 'Local / Regional', 'Sedation', 'No Anaesthesia']))
story.append(Spacer(1, 2*mm))
story.append(Paragraph(
"I have been explained the nature of the above procedure, possible complications, "
"alternative treatments, and consequences of non-intervention. I consent to the "
"procedure and any modifications that the surgeon may deem necessary during the operation.",
style('Normal', fontSize=9, leading=14, spaceAfter=4)))
story.append(Spacer(1, 3*mm))
story.append(two_fields("Patient/Guardian Signature:", "Relation to Patient:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Date & Time:", "Witness Signature:"))
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 7: HISTORY & PHYSICAL EXAMINATION
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 6: CLINICAL ASSESSMENT – HISTORY & PHYSICAL EXAMINATION"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("SECTION A: CHIEF COMPLAINT & HISTORY", heading2))
story.append(tall_field("Chief Complaint (with duration):", rows=3))
story.append(Spacer(1, 1*mm))
story.append(tall_field("History of Present Illness:", rows=5))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Past Medical / Surgical History:", rows=3))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Drug History / Allergies:", rows=2))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Family History:", rows=2))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("SECTION B: PHYSICAL EXAMINATION", heading2))
vitals_data = [
[Paragraph('Parameter', label), Paragraph('On Admission', label),
Paragraph('After 24 hrs', label), Paragraph('Normal Range', label)],
['Blood Pressure (mmHg)', '', '', '100/60 – 140/90'],
['Pulse Rate (per min)', '', '', '60 – 100'],
['Respiratory Rate (per min)', '', '', '14 – 20'],
['Temperature (°F)', '', '', '97.8 – 99.1'],
['SpO2 (%)', '', '', '95 – 100'],
['Random Blood Sugar (mg/dL)', '', '', '70 – 140'],
['Height (cm) / Weight (kg)', '', '', '—'],
['BMI', '', '', '18.5 – 24.9'],
]
vt = Table(vitals_data, colWidths=[55*mm, 38*mm, 38*mm, 39*mm])
vt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), NAVY),
('TEXTCOLOR', (0,0), (-1,0), WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 8.5),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LGRAY]),
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING',(0,0),(-1,-1), 3),
('LEFTPADDING',(0,0),(-1,-1), 4),
('MINROWHEIGHT',(0,1),(-1,-1), 7.5*mm),
]))
story.append(vt)
story.append(Spacer(1, 2*mm))
story.append(tall_field("Systemic Examination Findings:", rows=5))
story.append(Spacer(1, 2*mm))
story.append(tall_field("Provisional Diagnosis / Diagnosis:", rows=2))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 8: DRUG ADMINISTRATION CHART
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 8: DRUG ADMINISTRATION CHART"))
story.append(Spacer(1, 4*mm))
story.append(two_fields("Patient Name:", "Admission No.:"))
story.append(Spacer(1, 2*mm))
drug_header = [
[Paragraph(h, label) for h in
['S.No', 'Drug Name & Dose', 'Route', 'Frequency', 'Start Date',
'Stop Date', 'Given By', 'Remarks']]
]
drug_rows = [['', '', '', '', '', '', '', ''] for _ in range(12)]
drug_data = drug_header + drug_rows
dw = [10*mm, 45*mm, 16*mm, 20*mm, 20*mm, 20*mm, 20*mm, 19*mm]
dt = Table(drug_data, colWidths=dw)
dt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), NAVY),
('TEXTCOLOR', (0,0), (-1,0), WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 8),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LGRAY]),
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 2),
('BOTTOMPADDING',(0,0),(-1,-1), 2),
('LEFTPADDING',(0,0),(-1,-1), 3),
('MINROWHEIGHT',(0,1),(-1,-1), 8*mm),
]))
story.append(dt)
story.append(Spacer(1, 4*mm))
story.append(Paragraph(
"Note: All drugs administered must be cross-checked with ECHS-approved formulary. "
"Non-formulary drugs require prior approval. All drug orders must be signed by the "
"prescribing doctor. This chart to be submitted with the final bill.",
italic_sm))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 9: INVESTIGATION REPORTS CHECKLIST
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 9: INVESTIGATION REPORTS – CHRONOLOGICAL LOG"))
story.append(Spacer(1, 3*mm))
story.append(Paragraph(
"All investigation reports must be arranged in chronological order and attached below this sheet. "
"Each report must bear the hospital stamp and the ordering doctor's signature.",
normal))
story.append(Spacer(1, 3*mm))
inv_header = [[Paragraph(h, label) for h in
['S.No', 'Investigation Name', 'Date Ordered', 'Date Reported', 'Result / Finding', 'Attached (✓)']]]
inv_rows = [['', '', '', '', '', ''] for _ in range(16)]
inv_data = inv_header + inv_rows
iw = [10*mm, 55*mm, 25*mm, 25*mm, 40*mm, 15*mm]
it = Table(inv_data, colWidths=iw)
it.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), NAVY),
('TEXTCOLOR', (0,0), (-1,0), WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 8),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LGRAY]),
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 2),
('BOTTOMPADDING',(0,0),(-1,-1), 2),
('LEFTPADDING',(0,0),(-1,-1), 3),
('MINROWHEIGHT',(0,1),(-1,-1), 8*mm),
]))
story.append(it)
story.append(Spacer(1, 4*mm))
story.append(sig_block())
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 10: OPERATION / PROCEDURE NOTES
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 11: OPERATION / PROCEDURE NOTES"))
story.append(Paragraph("(Complete only if a surgical / invasive procedure was performed)", italic_sm))
story.append(Spacer(1, 4*mm))
story.append(two_fields("Date of Surgery:", "OT No.:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Start Time:", "End Time:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Name of Procedure / Surgery:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Primary Surgeon:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Assistant Surgeon(s):"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Anaesthetist:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Scrub Nurse / Technician:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Type of Anaesthesia Given:"))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Pre-operative Diagnosis:", rows=2))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Post-operative Diagnosis:", rows=2))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Procedure Details (Step-by-step operative notes):", rows=7))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Intra-operative Findings:", rows=3))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Blood Loss / Transfusion:", rows=2))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Implants Used (Name, Brand, Size, Lot/Batch No.):", rows=3))
story.append(Spacer(1, 1*mm))
story.append(Paragraph(
"Intraoperative photographs must be attached. Implant barcode sticker and invoice mandatory.",
red_note))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 11: DISCHARGE SUMMARY
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 14: DISCHARGE SUMMARY"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("SECTION A: PATIENT DETAILS", heading2))
story.append(field_row("Patient Name:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("ECHS Card No.:", "Age / Sex:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Date of Admission:", "Date of Discharge:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Ward / Bed No.:", "Total Days Admitted:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Treating Consultant:"))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("SECTION B: CLINICAL DETAILS", heading2))
story.append(tall_field("Admission Diagnosis:", rows=2))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Final Diagnosis (ICD-10 Code if available):", rows=2))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Summary of Treatment Given:", rows=5))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Surgery / Procedures Performed (with dates):", rows=3))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Significant Investigation Findings:", rows=3))
story.append(Spacer(1, 2*mm))
story.append(Paragraph("SECTION C: DISCHARGE DETAILS", heading2))
story.append(Paragraph("Condition at Discharge:", heading3))
story.append(checkbox_row(['Recovered', 'Improved', 'Stable', 'LAMA', 'Transferred', 'Expired (→ attach Death Summary)']))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Discharge Medications (Name, Dose, Frequency, Duration):", rows=5))
story.append(Spacer(1, 1*mm))
story.append(tall_field("Follow-up Instructions / Diet / Activity Advice:", rows=3))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Next Follow-up Date:", "Polyclinic / Clinic:"))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 12: FINAL BILL
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 15: FINAL BILL – SUMMARY & ITEMIZED BREAKUP"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("PART A: BILL SUMMARY", heading2))
story.append(two_fields("Patient Name:", "ECHS Card No.:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Admission No.:", "Date of Admission / Discharge:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("CGHS Rate Package Code (if applicable):"))
story.append(Spacer(1, 2*mm))
bill_summary = [
[Paragraph('Head of Charges', label), Paragraph('Amount (Rs.)', label),
Paragraph('CGHS / ECHS Rate (Rs.)', label), Paragraph('Difference', label)],
['Room / Bed Charges', '', '', ''],
['Nursing Charges', '', '', ''],
['Doctor Consultation Fees', '', '', ''],
['OT / Procedure Charges', '', '', ''],
['Anaesthesia Charges', '', '', ''],
['Medicines & Consumables', '', '', ''],
['Implants / Prosthetics', '', '', ''],
['Lab / Pathology Charges', '', '', ''],
['Radiology / Imaging Charges', '', '', ''],
['Physiotherapy', '', '', ''],
['Ambulance Charges', '', '', ''],
['Other Charges', '', '', ''],
[Paragraph('TOTAL', style('Normal', fontSize=9, fontName='Helvetica-Bold')),
'', '', ''],
['GST (if applicable @5%)', '', '', ''],
[Paragraph('GRAND TOTAL', style('Normal', fontSize=9, fontName='Helvetica-Bold',
textColor=NAVY)), '', '', ''],
]
bw = [70*mm, 33*mm, 37*mm, 30*mm]
bt = Table(bill_summary, colWidths=bw)
bt.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), NAVY),
('TEXTCOLOR', (0,0), (-1,0), WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 8.5),
('ROWBACKGROUNDS', (0,1), (-1,-2), [WHITE, LGRAY]),
('BACKGROUND', (0,-1), (-1,-1), colors.HexColor('#E8F0F7')),
('BACKGROUND', (0,-3), (-1,-3), colors.HexColor('#E8F0F7')),
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING',(0,0),(-1,-1), 3),
('LEFTPADDING',(0,0),(-1,-1), 4),
('MINROWHEIGHT',(0,1),(-1,-1), 7.5*mm),
]))
story.append(bt)
story.append(Spacer(1, 3*mm))
story.append(Paragraph(
"Note: Bills must be at CGHS/ECHS approved rates. Any charge exceeding the approved "
"rate requires prior approval from Regional Centre. GST certificate to be attached.",
italic_sm))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 13: MRP CERTIFICATE
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("DOCUMENT 16: MRP CERTIFICATE"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph(
"CERTIFICATE BY EMPANELLED HOSPITAL",
style('Normal', fontSize=11, fontName='Helvetica-Bold',
textColor=NAVY, alignment=TA_CENTER)))
story.append(Spacer(1, 4*mm))
story.append(Paragraph(
"This is to certify that all drugs and consumables supplied to ECHS beneficiary "
"<b>_______________________________</b> (ECHS Card No: <b>_______________</b>) "
"during the period of hospitalization from <b>____________</b> to <b>____________</b> "
"have been charged at or below Maximum Retail Price (MRP) as printed on the packaging. "
"No drug / item has been charged above MRP.",
style('Normal', fontSize=9.5, leading=14)))
story.append(Spacer(1, 8*mm))
story.append(two_fields("Signature of Hospital Authority:", "Designation:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Date:", "Hospital Seal:"))
story.append(Spacer(1, 8*mm))
story.append(HRFlowable(width="100%", thickness=0.5, color=MGRAY))
story.append(Spacer(1, 4*mm))
story.append(Paragraph("COUNTERSIGNATURE BY POLYCLINIC / REGIONAL CENTRE", heading2))
story.append(Spacer(1, 2*mm))
story.append(two_fields("Countersigned by (Name):", "Designation:"))
story.append(Spacer(1, 1*mm))
story.append(field_row("Polyclinic / Regional Centre:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Date:", "Stamp / Seal:"))
story.append(PageBreak())
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# PAGE 14: SUBMISSION CHECKLIST
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
story.append(section_header("FINAL SUBMISSION CHECKLIST – ECHS IPD CLAIM"))
story.append(Spacer(1, 4*mm))
story.append(Paragraph(
"Before submitting the bill to UTIITSL portal and Regional Centre, verify ALL items below.",
normal))
story.append(Spacer(1, 3*mm))
chk_data = [
[Paragraph('S.No', label), Paragraph('Checklist Item', label),
Paragraph('Done ✓', label), Paragraph('Remarks', label)],
['1', 'ECHS Smart Card photocopy attached', '', ''],
['2', 'Referral form from Polyclinic attached (or Emergency Cert)', '', ''],
['3', 'Admission Case Note completed and signed', '', ''],
['4', 'Patient consent forms signed and attached', '', ''],
['5', 'History & Physical Examination form completed', '', ''],
['6', 'Vital signs chart attached', '', ''],
['7', 'Drug administration chart completed', '', ''],
['8', 'Investigation reports attached in chronological order', '', ''],
['9', 'Specialist consultation notes attached', '', ''],
['10', 'Operation notes attached (if surgery done)', '', ''],
['11', 'Intraoperative photographs attached (if surgery done)', '', ''],
['12', 'Implant invoice + barcode sticker attached (if implant used)', '', ''],
['13', 'Prior approval letter attached (if required)', '', ''],
['14', 'Discharge Summary completed, signed, and stamped', '', ''],
['15', 'Final Bill (Summary + Itemized) prepared at CGHS rates', '', ''],
['16', 'MRP Certificate prepared and countersigned by Polyclinic/RC', '', ''],
['17', 'MOA copy (valid for hospitalization period) with Annexure-II', '', ''],
['18', 'All pages numbered sequentially', '', ''],
['19', 'All pages stamped with hospital seal', '', ''],
['20', 'Bill uploaded on UTIITSL portal in PDF format', '', ''],
['21', 'Physical copy dispatched to Regional Centre', '', ''],
['22', 'Claim ID / Reference No. noted for tracking', '', ''],
['23', 'GST breakup included (if applicable)', '', ''],
['24', 'Death Summary attached (if patient expired)', '', ''],
]
cw2 = [10*mm, 100*mm, 20*mm, 40*mm]
ct = Table(chk_data, colWidths=cw2)
ct.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,0), NAVY),
('TEXTCOLOR', (0,0), (-1,0), WHITE),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,-1), 8.5),
('ROWBACKGROUNDS', (0,1), (-1,-1), [WHITE, LGRAY]),
('BOX', (0,0), (-1,-1), 1, NAVY),
('INNERGRID', (0,0), (-1,-1), 0.5, MGRAY),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING',(0,0),(-1,-1), 3),
('LEFTPADDING',(0,0),(-1,-1), 4),
('MINROWHEIGHT',(0,1),(-1,-1), 8*mm),
]))
story.append(ct)
story.append(Spacer(1, 5*mm))
story.append(Paragraph(
"Claim submission: Upload on UTIITSL portal (echs.gov.in) → Login as Hospital → "
"Bill/Medical Processing. Also submit physical file to the Regional Centre.",
italic_sm))
story.append(Spacer(1, 4*mm))
story.append(field_row("Claim ID (after online submission):"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Submitted By (Name):", "Designation:"))
story.append(Spacer(1, 1*mm))
story.append(two_fields("Date of Online Submission:", "Date of Physical Submission:"))
story.append(Spacer(1, 3*mm))
story.append(sig_block())
# ─── BUILD ────────────────────────────────────────────────────────────────────
doc.build(story, canvasmaker=NumberedCanvas)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/echs-ipd-file && python build_echs_file.py
ls -lh /tmp/workspace/echs-ipd-file/ECHS_IPD_Hospital_File.pdf
ECHS IPD Hospital File
PDF Document · PDF
| # | Document | Purpose |
|---|---|---|
| 1 | Cover Sheet | Hospital details, patient ID, admission info |
| 2 | File Index / Table of Contents | Track all 18 documents with page numbers |
| 3 | ECHS Smart Card Photocopy Slot | Paste front & back of card here |
| 4 | Referral Form + Emergency Certificate | Polyclinic referral OR emergency justification |
| 5 | Patient Registration & Admission Case Note | Demographics, ESM details, ward entitlement |
| 6 | Consent Forms (General + Surgical) | Mandatory before any treatment or procedure |
| 7 | Clinical History & Physical Examination | Chief complaint, vitals table, systemic exam |
| 8 | Drug Administration Chart | All drugs with dose, route, frequency, dates |
| 9 | Investigation Reports Log | Chronological list of all lab/imaging reports |
| 10 | Operation / Procedure Notes | Detailed OT notes + implant/photograph requirements |
| 11 | Discharge Summary | Diagnosis, treatment, discharge condition, follow-up |
| 12 | Final Bill (Summary + Itemized) | CGHS-rate breakup with GST column |
| 13 | MRP Certificate | Hospital + Polyclinic countersignature |
| 14 | Final Submission Checklist | 24-point checklist before UTIITSL portal upload |