What is rational use of drug and where is is situated in kd Tripathi
KD Tripathi Essentials of Medical Pharmacology rational use of drugs chapter location
https://dl.icdst.org/pdfs/files3/f87428a2f2a044977b3c26eff96…
"Rational use of medicines requires that patients receive medication appropriate to their clinical needs, in doses that meet their own individual requirements, for an adequate period of time, and at the lowest cost to them and to their community."
| Criterion | Description |
|---|---|
| Appropriate indication | The reason to prescribe is based on sound medical considerations |
| Appropriate drug | Correct choice in terms of efficacy, tolerability, safety, and suitability for the patient |
| Appropriate dose, route, and duration | Individualized according to specific features of the patient |
| Appropriate patient | No contraindications; drug is acceptable to the patient; risk of adverse effects is minimal and less than the expected benefit |
| Correct dispensing | With appropriate information and instructions given to the patient |
| Adequate monitoring | Of patient's adherence, anticipated beneficial effects, and untoward effects |
Generate a summary PDF on rational drug use for quick reference
mkdir -p /tmp/workspace/rational-drug-use && ls /tmp/workspace/rational-drug-use/
~/rational-drug-use/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import PageBreak
OUTPUT = "/tmp/workspace/rational-drug-use/Rational_Drug_Use_Quick_Reference.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.8*cm,
leftMargin=1.8*cm,
topMargin=2*cm,
bottomMargin=2*cm,
title="Rational Use of Drugs - Quick Reference",
author="KD Tripathi - Essentials of Medical Pharmacology"
)
# ── Colors ──────────────────────────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#1A3A5C")
MID_BLUE = colors.HexColor("#2E6DA4")
LIGHT_BLUE = colors.HexColor("#D6E8F7")
ACCENT_TEAL = colors.HexColor("#1B7A6E")
ACCENT_BG = colors.HexColor("#E8F5F3")
WARN_RED = colors.HexColor("#C0392B")
WARN_BG = colors.HexColor("#FDEDEC")
GOLD = colors.HexColor("#D4A017")
GOLD_BG = colors.HexColor("#FEF9EC")
WHITE = colors.white
LIGHT_GRAY = colors.HexColor("#F4F6F8")
MID_GRAY = colors.HexColor("#BDC3C7")
DARK_GRAY = colors.HexColor("#2C3E50")
# ── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
title_style = ParagraphStyle(
"DocTitle",
fontName="Helvetica-Bold",
fontSize=22,
textColor=WHITE,
alignment=TA_CENTER,
spaceAfter=4,
leading=28
)
subtitle_style = ParagraphStyle(
"DocSubtitle",
fontName="Helvetica",
fontSize=11,
textColor=colors.HexColor("#AED6F1"),
alignment=TA_CENTER,
spaceAfter=2
)
source_style = ParagraphStyle(
"Source",
fontName="Helvetica-Oblique",
fontSize=9,
textColor=colors.HexColor("#85C1E9"),
alignment=TA_CENTER
)
section_style = ParagraphStyle(
"Section",
fontName="Helvetica-Bold",
fontSize=13,
textColor=WHITE,
alignment=TA_LEFT,
leftIndent=6,
spaceAfter=2,
leading=18
)
body_style = ParagraphStyle(
"Body",
fontName="Helvetica",
fontSize=9.5,
textColor=DARK_GRAY,
alignment=TA_JUSTIFY,
leading=14,
spaceAfter=4
)
bullet_style = ParagraphStyle(
"Bullet",
fontName="Helvetica",
fontSize=9.5,
textColor=DARK_GRAY,
leftIndent=14,
firstLineIndent=-10,
leading=14,
spaceAfter=3
)
bold_bullet_style = ParagraphStyle(
"BoldBullet",
fontName="Helvetica-Bold",
fontSize=9.5,
textColor=DARK_GRAY,
leftIndent=14,
firstLineIndent=-10,
leading=14,
spaceAfter=2
)
definition_style = ParagraphStyle(
"Definition",
fontName="Helvetica-Oblique",
fontSize=10,
textColor=DARK_BLUE,
alignment=TA_JUSTIFY,
leading=15,
leftIndent=8,
rightIndent=8
)
small_style = ParagraphStyle(
"Small",
fontName="Helvetica",
fontSize=8.5,
textColor=colors.HexColor("#566573"),
leading=12
)
footer_style = ParagraphStyle(
"Footer",
fontName="Helvetica-Oblique",
fontSize=8,
textColor=colors.HexColor("#95A5A6"),
alignment=TA_CENTER
)
# ─────────────────────────────────────────────────────────────────────────────
# Helper: section header bar
# ─────────────────────────────────────────────────────────────────────────────
def section_header(text, bg=MID_BLUE, number=None):
label = f"{number}. {text}" if number else text
tbl = Table([[Paragraph(label, section_style)]], colWidths=[17.4*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("ROUNDEDCORNERS", [4,4,4,4]),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return tbl
def note_box(text, bg=LIGHT_BLUE, border=MID_BLUE, text_color=DARK_BLUE):
p = Paragraph(text, ParagraphStyle(
"NoteText", fontName="Helvetica", fontSize=9.5,
textColor=text_color, alignment=TA_JUSTIFY, leading=14
))
tbl = Table([[p]], colWidths=[17.4*cm])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1.2, border),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
return tbl
# ─────────────────────────────────────────────────────────────────────────────
# CONTENT
# ─────────────────────────────────────────────────────────────────────────────
story = []
# ── TITLE BANNER ─────────────────────────────────────────────────────────────
banner_data = [[
Paragraph("RATIONAL USE OF DRUGS", title_style),
Paragraph("Quick Reference Summary", subtitle_style),
Paragraph("Source: KD Tripathi — Essentials of Medical Pharmacology, 7th Ed. | Chapter 5, Page 71", source_style),
]]
banner = Table(banner_data, colWidths=[17.4*cm])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 18),
("BOTTOMPADDING", (0,0), (-1,-1), 18),
("LEFTPADDING", (0,0), (-1,-1), 14),
("RIGHTPADDING", (0,0), (-1,-1), 14),
("ROUNDEDCORNERS", [6,6,6,6]),
]))
story.append(banner)
story.append(Spacer(1, 14))
# ── 1. WHO DEFINITION ────────────────────────────────────────────────────────
story.append(section_header("WHO DEFINITION", number="1"))
story.append(Spacer(1, 6))
story.append(note_box(
'"Rational use of medicines requires that patients receive medication <b>appropriate to their clinical needs</b>, '
'in <b>doses that meet their individual requirements</b>, for an <b>adequate period of time</b>, '
'and at the <b>lowest cost</b> to them and to their community."',
bg=LIGHT_BLUE, border=MID_BLUE, text_color=DARK_BLUE
))
story.append(Spacer(1, 6))
story.append(Paragraph(
"In simple terms: <b>Right Drug · Right Patient · Right Dose · Right Duration · Right Cost</b>",
ParagraphStyle("RightDrug", fontName="Helvetica-Bold", fontSize=10,
textColor=ACCENT_TEAL, alignment=TA_CENTER, leading=14)
))
story.append(Spacer(1, 10))
# ── 2. REALITY CHECK ─────────────────────────────────────────────────────────
story.append(section_header("REALITY OF DRUG USE", bg=WARN_RED, number="2"))
story.append(Spacer(1, 6))
story.append(note_box(
"Although it is widely assumed that qualified doctors prescribe rationally, <b>irrationality abounds in "
"almost every aspect of drug use</b> worldwide — especially in developing countries. "
"Medically inappropriate, ineffective, and economically inefficient drug use is common.",
bg=WARN_BG, border=WARN_RED, text_color=colors.HexColor("#922B21")
))
story.append(Spacer(1, 10))
# ── 3. RATIONAL PRESCRIBING CRITERIA ─────────────────────────────────────────
story.append(section_header("CRITERIA FOR RATIONAL PRESCRIBING", number="3"))
story.append(Spacer(1, 7))
criteria = [
["#", "Criterion", "Description"],
["1", "Appropriate Indication",
"Reason to prescribe is based on sound medical considerations"],
["2", "Appropriate Drug",
"Correct choice in efficacy, tolerability, safety & suitability for patient"],
["3", "Appropriate Dose,\nRoute & Duration",
"Individualized based on specific features of the patient"],
["4", "Appropriate Patient",
"No contraindications; drug acceptable; adverse effect risk < expected benefit"],
["5", "Correct Dispensing",
"Appropriate information & instructions given to the patient"],
["6", "Adequate Monitoring",
"Monitoring of adherence + anticipated beneficial and untoward effects"],
]
col_widths = [1*cm, 4.5*cm, 11.9*cm]
criteria_table = Table(criteria, colWidths=col_widths, repeatRows=1)
criteria_table.setStyle(TableStyle([
# Header row
("BACKGROUND", (0,0), (-1,0), DARK_BLUE),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9.5),
("ALIGN", (0,0), (-1,0), "CENTER"),
("TOPPADDING", (0,0), (-1,0), 7),
("BOTTOMPADDING", (0,0), (-1,0), 7),
# Alternating rows
("BACKGROUND", (0,1), (-1,1), LIGHT_BLUE),
("BACKGROUND", (0,2), (-1,2), WHITE),
("BACKGROUND", (0,3), (-1,3), LIGHT_BLUE),
("BACKGROUND", (0,4), (-1,4), WHITE),
("BACKGROUND", (0,5), (-1,5), LIGHT_BLUE),
("BACKGROUND", (0,6), (-1,6), WHITE),
# Number column
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("TEXTCOLOR", (0,1), (0,-1), MID_BLUE),
("ALIGN", (0,0), (0,-1), "CENTER"),
("FONTNAME", (1,1), (1,-1), "Helvetica-Bold"),
("TEXTCOLOR", (1,1), (1,-1), DARK_BLUE),
("FONTNAME", (2,1), (2,-1), "Helvetica"),
("FONTSIZE", (1,1), (-1,-1), 9),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,1), (-1,-1), 6),
("BOTTOMPADDING", (0,1), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("ROUNDEDCORNERS", [3,3,3,3]),
]))
story.append(criteria_table)
story.append(Spacer(1, 10))
# ── 4. SUPPLY-USE CHAIN ───────────────────────────────────────────────────────
story.append(section_header("SCOPE: SUPPLY-USE CHAIN", bg=ACCENT_TEAL, number="4"))
story.append(Spacer(1, 6))
story.append(Paragraph(
"Rational use of medicines addresses <b>every step</b> in the drug supply-use chain:",
body_style
))
chain_items = [
("Selection", "Choosing appropriate medicines based on clinical need & evidence"),
("Procurement", "Obtaining medicines efficiently and at lowest cost"),
("Storage", "Maintaining drug quality through proper storage conditions"),
("Prescribing", "The most critical step — core focus of rational drug use"),
("Dispensing", "Accurate dispensing with correct patient information"),
("Monitoring", "Follow-up for efficacy, adherence & adverse effects"),
("Feedback", "Continuous improvement through pharmacovigilance data"),
]
chain_data = []
for i, (step, desc) in enumerate(chain_items):
arrow = "➜" if i < len(chain_items)-1 else "✓"
chain_data.append([
Paragraph(f"<b>{step}</b>", ParagraphStyle(
"ChainStep", fontName="Helvetica-Bold", fontSize=9,
textColor=WHITE if i % 2 == 0 else DARK_BLUE,
alignment=TA_CENTER, leading=12
)),
Paragraph(desc, ParagraphStyle(
"ChainDesc", fontName="Helvetica", fontSize=9,
textColor=DARK_GRAY, leading=12
)),
])
chain_table = Table(chain_data, colWidths=[3.8*cm, 13.6*cm])
row_colors = []
for i in range(len(chain_items)):
bg = ACCENT_TEAL if i % 2 == 0 else ACCENT_BG
row_colors.append(("BACKGROUND", (0,i), (0,i), bg))
chain_table.setStyle(TableStyle([
*row_colors,
("BACKGROUND", (1,0), (1,-1), WHITE),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
]))
story.append(chain_table)
story.append(Spacer(1, 10))
# ── 5. ESSENTIAL MEDICINES LIST ──────────────────────────────────────────────
story.append(section_header("ESSENTIAL MEDICINES LIST (EML)", bg=colors.HexColor("#6C3483"), number="5"))
story.append(Spacer(1, 6))
story.append(note_box(
"Adoption of the <b>Essential Medicines List</b> for procurement and supply (especially in the public sector) "
"has resulted in: <b>improved availability of medicines · cost savings · more rational drug use</b>. "
"The EML is a cornerstone strategy for promoting rationality at the system level.",
bg=colors.HexColor("#F4ECF7"),
border=colors.HexColor("#6C3483"),
text_color=colors.HexColor("#4A235A")
))
story.append(Spacer(1, 10))
# ── 6. FACTORS INFLUENCING PRESCRIBING ───────────────────────────────────────
story.append(section_header("FACTORS INFLUENCING PRESCRIBING", bg=colors.HexColor("#1A5276"), number="6"))
story.append(Spacer(1, 6))
story.append(note_box(
"<b>Key insight from Tripathi:</b> Knowledge of the prescriber is the most important determinant of prescribing "
"pattern — but <b>improving knowledge alone has repeatedly failed</b> to promote rational drug use. "
"Multiple other factors also influence prescribing behavior:",
bg=GOLD_BG, border=GOLD, text_color=colors.HexColor("#6E5200")
))
story.append(Spacer(1, 6))
factors_data = [
["Prescriber Factors", "Patient Factors", "System/Regulatory Factors"],
[
"• Knowledge of drugs & disease\n• Attitudes & beliefs\n• Experience & specialty\n• Continuing education",
"• Clinical needs & severity\n• Age, weight, comorbidities\n• Patient preferences\n• Ability to pay",
"• Drug availability (EML)\n• Advertising & promotion\n• Regulatory controls\n• Pharmacovigilance data"
],
]
factors_table = Table(factors_data, colWidths=[5.8*cm, 5.8*cm, 5.8*cm])
factors_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1A5276")),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,0), "CENTER"),
("BACKGROUND", (0,1), (0,1), colors.HexColor("#D6EAF8")),
("BACKGROUND", (1,1), (1,1), colors.HexColor("#EBF5FB")),
("BACKGROUND", (2,1), (2,1), colors.HexColor("#D6EAF8")),
("FONTSIZE", (0,1), (-1,-1), 9),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING", (0,0), (-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
]))
story.append(factors_table)
story.append(Spacer(1, 10))
# ── 7. PHARMACOVIGILANCE CONNECTION ──────────────────────────────────────────
story.append(section_header("PHARMACOVIGILANCE & RATIONAL DRUG USE", bg=ACCENT_TEAL, number="7"))
story.append(Spacer(1, 6))
pv_data = [
[
Paragraph("<b>WHO Definition (2002)</b>", ParagraphStyle(
"PVHead", fontName="Helvetica-Bold", fontSize=9.5,
textColor=DARK_BLUE, leading=13
)),
Paragraph(
'"The science and activities relating to the <b>detection, assessment, understanding and prevention</b> '
'of adverse effects or any other drug-related problems."',
ParagraphStyle("PVDef", fontName="Helvetica", fontSize=9.5,
textColor=DARK_GRAY, leading=13, alignment=TA_JUSTIFY)
),
],
[
Paragraph("<b>Role in Rational Use</b>", ParagraphStyle(
"PVHead2", fontName="Helvetica-Bold", fontSize=9.5,
textColor=DARK_BLUE, leading=13
)),
Paragraph(
"• Provides basis for assessing <b>safety of medicines</b><br/>"
"• Reduces risk of drug-related harm<br/>"
"• Educates doctors about ADRs<br/>"
"• Supports official regulation of drug use",
ParagraphStyle("PVRole", fontName="Helvetica", fontSize=9.5,
textColor=DARK_GRAY, leading=14)
),
],
]
pv_table = Table(pv_data, colWidths=[4*cm, 13.4*cm])
pv_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), ACCENT_BG),
("BACKGROUND", (1,0), (1,-1), WHITE),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("GRID", (0,0), (-1,-1), 0.5, MID_GRAY),
("LINEABOVE", (0,1), (-1,1), 0.8, MID_GRAY),
]))
story.append(pv_table)
story.append(Spacer(1, 12))
# ── 8. QUICK MEMORY AID ───────────────────────────────────────────────────────
story.append(section_header("QUICK MEMORY AID — 6 Rs of Rational Prescribing", bg=GOLD, number="8"))
story.append(Spacer(1, 6))
rs_data = [
["Right\nIndication", "Right\nDrug", "Right\nDose", "Right\nDuration", "Right\nPatient", "Right\nCost"],
]
rs_table = Table(rs_data, colWidths=[2.9*cm]*6)
rs_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TEXTCOLOR", (0,0), (-1,-1), WHITE),
("FONTNAME", (0,0), (-1,-1), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 10),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0,0), (-1,-1), 12),
("BOTTOMPADDING", (0,0), (-1,-1), 12),
("GRID", (0,0), (-1,-1), 1.5, WHITE),
("BACKGROUND", (1,0), (1,0), MID_BLUE),
("BACKGROUND", (3,0), (3,0), MID_BLUE),
("BACKGROUND", (5,0), (5,0), MID_BLUE),
]))
story.append(rs_table)
story.append(Spacer(1, 12))
# ── FOOTER ────────────────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=0.8, color=MID_GRAY))
story.append(Spacer(1, 5))
story.append(Paragraph(
"Reference: KD Tripathi, Essentials of Medical Pharmacology, 7th Edition, Chapter 5 (Pharmacotherapy, "
"Clinical Pharmacology and Drug Development), Page 71. Jaypee Brothers Medical Publishers, New Delhi. "
"| Prepared for quick clinical reference — always verify against current guidelines.",
footer_style
))
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
python /tmp/workspace/rational-drug-use/generate_pdf.py
Rational Drug Use Quick Reference
PDF Document · PDF
| Section | Content |
|---|---|
| 1. WHO Definition | Full WHO definition with the "5 Rights" highlighted |
| 2. Reality of Drug Use | Tripathi's warning about widespread irrationality in prescribing |
| 3. Criteria for Rational Prescribing | All 6 criteria in a formatted table (Indication, Drug, Dose, Patient, Dispensing, Monitoring) |
| 4. Supply-Use Chain | All 7 steps from Selection → Feedback |
| 5. Essential Medicines List | Role of EML in promoting rational drug use |
| 6. Factors Influencing Prescribing | Prescriber / Patient / System factors in a 3-column table |
| 7. Pharmacovigilance | WHO definition + its link to rational drug use |
| 8. Quick Memory Aid | The "6 Rs" banner for rapid recall |