Treatment give in case of cold cough fever n of style

Reading File
Finding Sources
Searching the Web

treatment common cold cough fever adults 2025 guidelines

Reading File
Reading File
Reading File
I now have enough comprehensive information to give a thorough answer. Here is the complete treatment guide:

Treatment of Common Cold, Cough, and Fever

The common cold is caused by viruses (most often rhinovirus). There is no cure - treatment is aimed at symptom relief while the body heals naturally (typically within 7-10 days).

1. Fever Management (Antipyretics)

DrugDose (Adults)Notes
Paracetamol (Acetaminophen)500-1000 mg every 4-6 hrsFirst choice; safe in most patients
Ibuprofen (NSAID)200-400 mg every 6-8 hrsAnti-inflammatory + antipyretic; avoid in gastric ulcer, renal disease
AspirinNot used in childrenRisk of Reye syndrome - avoid in children under 16
From Swanson's Family Medicine Review: "In those with fever, antipyretics may be used. Aspirin should be avoided because of the risk of Reye syndrome."

2. Nasal Congestion / Runny Nose

  • Oral decongestants - Pseudoephedrine or phenylephrine. Help reduce stuffiness. Use with caution in hypertension.
  • Topical nasal decongestants - Oxymetazoline (e.g., Otrivin, Sinex). Fast-acting; do NOT use for more than 3-5 days (risk of rebound congestion / rhinitis medicamentosa).
  • Intranasal ipratropium bromide (Atrovent 0.03-0.06%) - Effective for reducing rhinorrhea with tolerable side effects (Textbook of Family Medicine 9e).
  • Nasal saline drops/spray/irrigation - Safe for all ages, loosens secretions, helpful especially in children and before feeding in infants.
  • Antihistamine-decongestant-analgesic combinations - Have "some general benefit" in adults and older children (Cochrane Collaboration evidence, Family Medicine 9e).

3. Cough Management

  • Cough suppressants (antitussives) - Dextromethorphan (DXM) for dry, non-productive cough. Contraindicated in infants.
  • Expectorants - Guaifenesin (e.g., Mucinex). Helps thin mucus; note: not strongly proven effective in controlled trials.
  • Honey - Effective and safe for cough in adults and children 1 year and older (CDC guidelines). Never give honey to infants under 1 year (botulism risk).
  • Ipratropium bromide nasal spray - Also helps post-nasal drip-related cough (AAFP guidelines).
  • OTC cough medicines in children under 4 years - Should NOT be used due to lack of benefit and risk of harm.

4. Immune & Adjunct Support

TherapyEvidence
Zinc lozenges (≥75 mg/day)Started within 24 hrs of symptom onset - reduces duration of cold (Family Medicine 9e). May cause nausea/bad taste.
Vitamin CRegular supplementation reduces severity and duration modestly (13% children, 8% adults)
ProbioticsMay reduce number of colds (pooled OR 0.58); results inconsistent across trials
Nasal saline irrigationProven helpful for symptom relief and prevention

5. What Does NOT Work

  • Antibiotics - Completely ineffective against viral colds. Routine use is contraindicated in both adults and children (Family Medicine 9e). Only use if bacterial superinfection is confirmed (e.g., bacterial sinusitis, strep throat, otitis media).
  • Oral corticosteroids - Current evidence does not support their use for URI.
  • Garlic supplements - Not proven effective.
  • Antihistamines alone (without decongestant) - Limited benefit for cold symptoms.

6. Supportive / Home Care

  • Rest adequately
  • Stay well hydrated (warm fluids, soups, herbal teas)
  • Warm steam inhalation for nasal congestion relief
  • Saltwater gargling for sore throat
  • Humidifier in the room
  • Meticulous handwashing - the most effective prevention

7. When to See a Doctor (Red Flags)

Seek medical attention if:
  • Fever >39°C or lasting more than 3 days
  • Symptoms worsen after initial improvement ("double sickening")
  • Symptoms persist beyond 10-14 days (may indicate bacterial sinusitis)
  • Severe facial pain or headache
  • Shortness of breath or chest pain
  • Stiff neck, confusion, or rash
  • Children with persistent earache (otitis media is the most common bacterial complication)

Summary Table

SymptomTreatment
FeverParacetamol, Ibuprofen
Nasal congestionPseudoephedrine, Oxymetazoline spray (short-term), saline irrigation
Runny noseIpratropium spray, antihistamine-decongestant combo
Dry coughHoney, Dextromethorphan
Productive coughGuaifenesin (expectorant), fluids
General illness durationZinc lozenges (within 24 hrs), Vitamin C
Sources: Textbook of Family Medicine 9e; Swanson's Family Medicine Review; AAFP 2019 Cold Treatment Guidelines; CDC Common Cold Fact Sheet

Opd syke doctor sheet

Asking for Preferences
Reading File
Running Command

mkdir -p /tmp/workspace/opd-sheet && ls /tmp/workspace/opd-sheet/

Writing File

~/opd-sheet/create_opd_sheet.py

import openpyxl
from openpyxl.styles import (
    Font, Alignment, PatternFill, Border, Side, GradientFill
)
from openpyxl.utils import get_column_letter

wb = openpyxl.Workbook()
ws = wb.active
ws.title = "OPD Consultation Sheet"

# ── Colours ──────────────────────────────────────────────────────────────────
HEADER_FILL   = PatternFill("solid", fgColor="1F4E79")   # dark blue
SECTION_FILL  = PatternFill("solid", fgColor="BDD7EE")   # light blue
ROW_FILL      = PatternFill("solid", fgColor="F2F9FF")   # very light blue
WHITE_FILL    = PatternFill("solid", fgColor="FFFFFF")
LABEL_FILL    = PatternFill("solid", fgColor="DEEAF1")
RX_FILL       = PatternFill("solid", fgColor="E2EFDA")   # light green for Rx
BORDER_FILL   = PatternFill("solid", fgColor="2E75B6")

# ── Borders ───────────────────────────────────────────────────────────────────
thin  = Side(style="thin",   color="2E75B6")
thick = Side(style="medium", color="1F4E79")

def cell_border(top=thin, bottom=thin, left=thin, right=thin):
    return Border(top=top, bottom=bottom, left=left, right=right)

outer = Border(top=thick, bottom=thick, left=thick, right=thick)
inner = cell_border()

# ── Helper functions ──────────────────────────────────────────────────────────
def set_cell(ws, row, col, value="", bold=False, size=10, color="000000",
             fill=None, align_h="left", align_v="center", wrap=False,
             border=None, italic=False):
    c = ws.cell(row=row, column=col, value=value)
    c.font = Font(name="Arial", bold=bold, size=size, color=color, italic=italic)
    c.alignment = Alignment(horizontal=align_h, vertical=align_v,
                            wrap_text=wrap)
    if fill:
        c.fill = fill
    if border:
        c.border = border
    return c

def merge_range(ws, r1, c1, r2, c2, value="", bold=False, size=10,
                color="000000", fill=None, align_h="left", align_v="center",
                wrap=False, border=None, italic=False):
    ws.merge_cells(start_row=r1, start_column=c1,
                   end_row=r2, end_column=c2)
    c = set_cell(ws, r1, c1, value, bold, size, color, fill, align_h,
                 align_v, wrap, border, italic)
    return c

def section_header(ws, row, c1, c2, label):
    merge_range(ws, row, c1, row, c2, label,
                bold=True, size=10, color="FFFFFF",
                fill=SECTION_FILL, align_h="center",
                border=cell_border(top=thick, bottom=thick,
                                   left=thick, right=thick))
    ws.cell(row=row, column=c1).font = Font(name="Arial", bold=True,
                                            size=10, color="1F4E79")

# ── Column widths ─────────────────────────────────────────────────────────────
col_widths = {
    1: 2,    # left margin
    2: 18,   # label col A
    3: 20,   # value col A
    4: 2,    # spacer
    5: 18,   # label col B
    6: 20,   # value col B
    7: 2,    # spacer
    8: 18,   # label col C
    9: 20,   # value col C
    10: 2,   # right margin
}
for col, width in col_widths.items():
    ws.column_dimensions[get_column_letter(col)].width = width

# ── Row heights ───────────────────────────────────────────────────────────────
for r in range(1, 80):
    ws.row_dimensions[r].height = 18

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 1-3 : HOSPITAL HEADER
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[1].height = 8
ws.row_dimensions[2].height = 32
ws.row_dimensions[3].height = 20
ws.row_dimensions[4].height = 8

merge_range(ws, 2, 1, 2, 10,
            "🏥  OUTPATIENT DEPARTMENT (OPD) — CONSULTATION SHEET",
            bold=True, size=15, color="FFFFFF",
            fill=PatternFill("solid", fgColor="1F4E79"),
            align_h="center", border=outer)

merge_range(ws, 3, 1, 3, 10,
            "Hospital Name  |  Address  |  Phone: ____________  |  Email: ____________",
            bold=False, size=9, color="1F4E79",
            fill=PatternFill("solid", fgColor="DEEAF1"),
            align_h="center", border=cell_border())

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 5 : SECTION — PATIENT INFORMATION
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[5].height = 20
section_header(ws, 5, 1, 10, "▶  PATIENT INFORMATION")
ws.cell(row=5, column=1).value = "▶  PATIENT INFORMATION"
ws.cell(row=5, column=1).font  = Font(name="Arial", bold=True, size=10, color="1F4E79")
merge_range(ws, 5, 1, 5, 10, "▶  PATIENT INFORMATION",
            bold=True, size=10, color="FFFFFF",
            fill=PatternFill("solid", fgColor="2E75B6"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                  left=thick, right=thick))

def lv(ws, row, lc, label, vc, value="", lf=LABEL_FILL, vf=WHITE_FILL):
    """Label + value pair."""
    set_cell(ws, row, lc, label, bold=True, size=9, color="1F4E79",
             fill=lf, align_h="left", border=inner)
    set_cell(ws, row, vc, value, bold=False, size=9, color="000000",
             fill=vf, align_h="left", border=inner)

# Row 6-11 : patient info grid
patient_rows = [
    (6,  "OPD No.",        3,  "Date:",             6,  "Time:",           9),
    (7,  "Patient Name:",  3,  "Age:",               6,  "Gender:",         9),
    (8,  "Address:",       3,  "Phone:",             6,  "Blood Group:",    9),
    (9,  "Referred By:",   3,  "Aadhar / ID No.:",   6,  "Insurance No.:",  9),
    (10, "Next of Kin:",   3,  "Relationship:",      6,  "Emergency Ph.:",  9),
]
for row, l1, v1, l2, v2, l3, v3 in patient_rows:
    ws.row_dimensions[row].height = 18
    lv(ws, row, 2, l1, v1)
    lv(ws, row, 5, l2, v2)
    lv(ws, row, 8, l3, v3)

# ── Spacer ─────────────────────────────────────────────────────────────────────
ws.row_dimensions[11].height = 6

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 12 : SECTION — VITAL SIGNS
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[12].height = 20
merge_range(ws, 12, 1, 12, 10, "▶  VITAL SIGNS",
            bold=True, size=10, color="FFFFFF",
            fill=PatternFill("solid", fgColor="2E75B6"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                   left=thick, right=thick))

vital_rows = [
    (13, "Temp (°F/°C):",      3, "Pulse (bpm):",        6, "RR (/min):",      9),
    (14, "BP (mmHg):",         3, "SpO2 (%):",            6, "Weight (kg):",    9),
    (15, "Height (cm):",       3, "BMI:",                 6, "Pain Score (0-10):", 9),
]
for row, l1, v1, l2, v2, l3, v3 in vital_rows:
    ws.row_dimensions[row].height = 18
    lv(ws, row, 2, l1, v1)
    lv(ws, row, 5, l2, v2)
    lv(ws, row, 8, l3, v3)

ws.row_dimensions[16].height = 6

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 17 : SECTION — CHIEF COMPLAINT & HISTORY
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[17].height = 20
merge_range(ws, 17, 1, 17, 10, "▶  CHIEF COMPLAINT & HISTORY",
            bold=True, size=10, color="FFFFFF",
            fill=PatternFill("solid", fgColor="2E75B6"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                   left=thick, right=thick))

def text_area(ws, row, end_row, label, cols=(1, 10)):
    ws.row_dimensions[row].height = 18
    set_cell(ws, row, cols[0], label, bold=True, size=9, color="1F4E79",
             fill=LABEL_FILL, border=inner)
    for r in range(row, end_row + 1):
        for c in range(cols[0] + 1, cols[1] + 1):
            set_cell(ws, r, c, "", fill=WHITE_FILL, border=inner)
        ws.row_dimensions[r].height = 18
    # merge value area
    ws.merge_cells(start_row=row, start_column=2,
                   end_row=end_row, end_column=10)

text_area(ws, 18, 19, "Chief Complaint:")
text_area(ws, 20, 22, "History of Present Illness:")
text_area(ws, 23, 24, "Past Medical / Surgical History:")
text_area(ws, 25, 25, "Family History:")
text_area(ws, 26, 26, "Social History  (smoking / alcohol / occupation):")
text_area(ws, 27, 28, "Allergies:")
text_area(ws, 29, 29, "Current Medications:")

ws.row_dimensions[30].height = 6

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 31 : SECTION — EXAMINATION
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[31].height = 20
merge_range(ws, 31, 1, 31, 10, "▶  CLINICAL EXAMINATION",
            bold=True, size=10, color="FFFFFF",
            fill=PatternFill("solid", fgColor="2E75B6"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                   left=thick, right=thick))

text_area(ws, 32, 33, "General Examination:")
text_area(ws, 34, 35, "Systemic Examination:")
text_area(ws, 36, 37, "CNS / CVS / RS / GIT Findings:")
text_area(ws, 38, 39, "Local Examination:")

ws.row_dimensions[40].height = 6

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 41 : SECTION — INVESTIGATIONS
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[41].height = 20
merge_range(ws, 41, 1, 41, 10, "▶  INVESTIGATIONS ADVISED",
            bold=True, size=10, color="FFFFFF",
            fill=PatternFill("solid", fgColor="2E75B6"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                   left=thick, right=thick))

# Table header
inv_headers = ["#", "Investigation", "Result", "Unit", "Normal Range", "Remarks"]
inv_cols    = [2, 3, 5, 7, 8, 9]
inv_widths  = [1, 3, 2, 1, 2, 2]

for col, header in zip([2,3,5,7,8,9], inv_headers):
    set_cell(ws, 42, col, header, bold=True, size=9, color="FFFFFF",
             fill=PatternFill("solid", fgColor="2E75B6"),
             align_h="center", border=inner)
ws.row_dimensions[42].height = 18

for i in range(43, 48):
    ws.row_dimensions[i].height = 17
    fill = ROW_FILL if i % 2 == 1 else WHITE_FILL
    for col in [2,3,5,7,8,9]:
        set_cell(ws, i, col, "", fill=fill, border=inner)
    set_cell(ws, i, 2, str(i - 42), align_h="center", fill=fill, border=inner)

ws.row_dimensions[48].height = 6

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 49 : SECTION — DIAGNOSIS
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[49].height = 20
merge_range(ws, 49, 1, 49, 10, "▶  DIAGNOSIS",
            bold=True, size=10, color="FFFFFF",
            fill=PatternFill("solid", fgColor="2E75B6"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                   left=thick, right=thick))

text_area(ws, 50, 51, "Provisional Diagnosis:")
text_area(ws, 52, 53, "Differential Diagnosis:")
text_area(ws, 54, 54, "Final / Confirmed Diagnosis (ICD Code):")

ws.row_dimensions[55].height = 6

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 56 : SECTION — PRESCRIPTION (Rx)
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[56].height = 20
merge_range(ws, 56, 1, 56, 10, "℞  PRESCRIPTION",
            bold=True, size=11, color="FFFFFF",
            fill=PatternFill("solid", fgColor="1A7A1A"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                   left=thick, right=thick))

# Rx table headers
rx_h = ["#", "Drug Name", "Dose", "Route", "Frequency", "Duration", "Instructions"]
rx_c = [2,   3,            5,      6,        7,            8,           9]
ws.row_dimensions[57].height = 18
for col, hdr in zip(rx_c, rx_h):
    set_cell(ws, 57, col, hdr, bold=True, size=9, color="FFFFFF",
             fill=PatternFill("solid", fgColor="1A7A1A"),
             align_h="center", border=inner)

for i in range(58, 66):
    ws.row_dimensions[i].height = 17
    fill = RX_FILL if i % 2 == 0 else WHITE_FILL
    for col in rx_c:
        set_cell(ws, i, col, "", fill=fill, border=inner)
    set_cell(ws, i, 2, str(i - 57), align_h="center",
             fill=fill, size=9, border=inner)

ws.row_dimensions[66].height = 6

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 67 : SECTION — ADVICE / FOLLOW-UP / REFERRAL
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[67].height = 20
merge_range(ws, 67, 1, 67, 10, "▶  ADVICE, FOLLOW-UP & REFERRAL",
            bold=True, size=10, color="FFFFFF",
            fill=PatternFill("solid", fgColor="2E75B6"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                   left=thick, right=thick))

text_area(ws, 68, 69, "Dietary / Lifestyle Advice:")
text_area(ws, 70, 70, "Follow-up Date:")
text_area(ws, 71, 71, "Referred To (if any):")
text_area(ws, 72, 72, "Reason for Referral:")

ws.row_dimensions[73].height = 6

# ═══════════════════════════════════════════════════════════════════════════════
# ROW 74 : SIGNATURES
# ═══════════════════════════════════════════════════════════════════════════════
ws.row_dimensions[74].height = 20
merge_range(ws, 74, 1, 74, 10, "▶  SIGNATURES",
            bold=True, size=10, color="FFFFFF",
            fill=PatternFill("solid", fgColor="2E75B6"),
            align_h="center", border=cell_border(top=thick, bottom=thick,
                                                   left=thick, right=thick))

ws.row_dimensions[75].height = 50
# Doctor sig
merge_range(ws, 75, 2, 75, 4, "", fill=WHITE_FILL,
            border=cell_border())
set_cell(ws, 75, 2, "", fill=WHITE_FILL, border=inner)

ws.row_dimensions[76].height = 16
merge_range(ws, 76, 2, 76, 4, "Doctor's Signature & Stamp",
            bold=True, size=8, color="1F4E79",
            fill=LABEL_FILL, align_h="center", border=inner)

merge_range(ws, 75, 6, 75, 7, "", fill=WHITE_FILL, border=cell_border())
merge_range(ws, 76, 6, 76, 7, "Doctor's Name & Reg. No.",
            bold=True, size=8, color="1F4E79",
            fill=LABEL_FILL, align_h="center", border=inner)

merge_range(ws, 75, 9, 75, 10, "", fill=WHITE_FILL, border=cell_border())
merge_range(ws, 76, 9, 76, 10, "Patient's Signature",
            bold=True, size=8, color="1F4E79",
            fill=LABEL_FILL, align_h="center", border=inner)

# ── Footer ────────────────────────────────────────────────────────────────────
ws.row_dimensions[77].height = 8
ws.row_dimensions[78].height = 16
merge_range(ws, 78, 1, 78, 10,
            "CONFIDENTIAL — This document is meant for medical use only. "
            "All information is protected under patient privacy laws.",
            bold=False, size=8, color="FFFFFF", italic=True,
            fill=PatternFill("solid", fgColor="1F4E79"),
            align_h="center", border=outer)

# ── Print settings ─────────────────────────────────────────────────────────────
from openpyxl.worksheet.page import PageMargins
ws.page_setup.orientation    = "portrait"
ws.page_setup.paperSize      = 9          # A4
ws.page_setup.fitToPage      = True
ws.page_setup.fitToWidth     = 1
ws.page_setup.fitToHeight    = 0
ws.page_margins              = PageMargins(left=0.5, right=0.5,
                                           top=0.75, bottom=0.75)
ws.print_area                = "A1:J78"

# ── Save ──────────────────────────────────────────────────────────────────────
output_path = "/tmp/workspace/opd-sheet/OPD_Consultation_Sheet.xlsx"
wb.save(output_path)
print(f"Saved: {output_path}")
Running Command

cd /tmp/workspace/opd-sheet && python create_opd_sheet.py

Your OPD Doctor's Consultation Sheet is ready!

OPD Consultation Sheet

Spreadsheet · XLSX


Here's what's included in the sheet:
SectionDetails
Patient InformationOPD No., Date, Time, Name, Age, Gender, Address, Phone, Blood Group, Aadhar/ID, Insurance, Next of Kin
Vital SignsTemperature, Pulse, RR, BP, SpO2, Weight, Height, BMI, Pain Score
Chief Complaint & HistoryPresenting complaint, History of illness, Past medical/surgical, Family, Social, Allergies, Current medications
Clinical ExaminationGeneral, Systemic, CNS/CVS/RS/GIT findings, Local examination
Investigations AdvisedTable with drug name, result, unit, normal range, remarks
DiagnosisProvisional, Differential, Final (with ICD code field)
Prescription (Rx)8-row table - Drug, Dose, Route, Frequency, Duration, Instructions
Advice / Follow-up / ReferralLifestyle advice, follow-up date, referral details
SignaturesDoctor stamp, Doctor name/reg. no., Patient signature
The sheet is formatted for A4 print, with a professional blue-and-white medical design. Just fill in your hospital name/address at the top and it's ready to use.

Treatment give cold cough and fever opd style doctor sheet

Writing File

~/opd-sheet/create_cold_cough_fever_opd.py

import openpyxl
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
from openpyxl.utils import get_column_letter
from openpyxl.worksheet.page import PageMargins
from datetime import date

wb = openpyxl.Workbook()
ws = wb.active
ws.title = "OPD Sheet"

# ── Colours ───────────────────────────────────────────────────────────────────
C_DARK_BLUE  = "1F4E79"
C_MID_BLUE   = "2E75B6"
C_LIGHT_BLUE = "BDD7EE"
C_XLIGHT     = "EBF3FB"
C_WHITE      = "FFFFFF"
C_LABEL      = "DEEAF1"
C_GREEN_H    = "1A6B1A"
C_GREEN_L    = "E2EFDA"
C_WARN       = "FFF2CC"
C_FOOTER     = "F2F2F2"
C_TITLE_TXT  = "FFFFFF"
C_BLUE_TXT   = "1F4E79"
C_BLACK      = "000000"
C_RED        = "C00000"

def fill(hex_color):
    return PatternFill("solid", fgColor=hex_color)

thin  = Side(style="thin",   color=C_MID_BLUE)
thick = Side(style="medium", color=C_DARK_BLUE)
none  = Side(style=None)

def bdr(t=thin, b=thin, l=thin, r=thin):
    return Border(top=t, bottom=b, left=l, right=r)

outer = bdr(thick, thick, thick, thick)

# ── Column widths ─────────────────────────────────────────────────────────────
# 10 columns: A=margin, B=label1, C=val1, D=gap, E=label2, F=val2, G=gap, H=label3, I=val3, J=margin
widths = {1:1.5, 2:20, 3:22, 4:1.5, 5:18, 6:20, 7:1.5, 8:18, 9:20, 10:1.5}
for c, w in widths.items():
    ws.column_dimensions[get_column_letter(c)].width = w

def rh(row, h):
    ws.row_dimensions[row].height = h

def cell(r, c, val="", bold=False, sz=9, color=C_BLACK, bg=None,
         ha="left", va="center", wrap=False, bd=None, italic=False, underline=False):
    cl = ws.cell(row=r, column=c, value=val)
    ul = "single" if underline else None
    cl.font = Font(name="Arial", bold=bold, size=sz, color=color,
                   italic=italic, underline=ul)
    cl.alignment = Alignment(horizontal=ha, vertical=va, wrap_text=wrap)
    if bg:  cl.fill = fill(bg)
    if bd:  cl.border = bd
    return cl

def merge(r1, c1, r2, c2, val="", bold=False, sz=9, color=C_BLACK, bg=None,
          ha="left", va="center", wrap=False, bd=None, italic=False):
    ws.merge_cells(start_row=r1, start_column=c1, end_row=r2, end_column=c2)
    return cell(r1, c1, val, bold, sz, color, bg, ha, va, wrap, bd, italic)

def sec(r, label, bg=C_MID_BLUE):
    rh(r, 20)
    merge(r,1,r,10, label, bold=True, sz=10, color=C_TITLE_TXT,
          bg=bg, ha="center", bd=outer)

def lv_row(r, l1, v1, l2, v2, l3="", v3=""):
    rh(r, 18)
    cell(r,2, l1, bold=True, sz=9, color=C_BLUE_TXT, bg=C_LABEL, bd=bdr())
    cell(r,3, v1, sz=9, bg=C_WHITE, bd=bdr())
    cell(r,5, l2, bold=True, sz=9, color=C_BLUE_TXT, bg=C_LABEL, bd=bdr())
    cell(r,6, v2, sz=9, bg=C_WHITE, bd=bdr())
    cell(r,8, l3, bold=True, sz=9, color=C_BLUE_TXT, bg=C_LABEL, bd=bdr())
    cell(r,9, v3, sz=9, bg=C_WHITE, bd=bdr())

def text_block(r_start, r_end, label, value=""):
    for r in range(r_start, r_end+1):
        rh(r, 17)
    cell(r_start, 2, label, bold=True, sz=9, color=C_BLUE_TXT, bg=C_LABEL, bd=bdr())
    ws.merge_cells(start_row=r_start, start_column=3,
                   end_row=r_end, end_column=9)
    cell(r_start, 3, value, sz=9, bg=C_WHITE, bd=bdr(), wrap=True, va="top")
    if r_end > r_start:
        for r in range(r_start+1, r_end+1):
            cell(r, 2, "", bg=C_LABEL, bd=bdr())

def spacer(r, h=5):
    rh(r, h)

# ═══════════════════════════════════════════════════════════════════════════════
# TITLE
# ═══════════════════════════════════════════════════════════════════════════════
rh(1,6); rh(2,34); rh(3,18); rh(4,6)

merge(2,1,2,10,
      "🏥  DOCTOR'S OPD CONSULTATION SHEET",
      bold=True, sz=16, color=C_TITLE_TXT, bg=C_DARK_BLUE,
      ha="center", bd=outer)
merge(3,1,3,10,
      "General / Family Medicine  |  Outpatient Department  |  Date: " + str(date.today().strftime("%d-%b-%Y")),
      sz=9, color=C_BLUE_TXT, bg=C_LABEL, ha="center", bd=bdr())

# ═══════════════════════════════════════════════════════════════════════════════
# PATIENT INFORMATION
# ═══════════════════════════════════════════════════════════════════════════════
sec(5, "▶  PATIENT INFORMATION")
lv_row(6,  "OPD No.:",       "OPD-001",         "Date:",         str(date.today().strftime("%d-%b-%Y")),  "Time:",     "09:30 AM")
lv_row(7,  "Patient Name:",  "_________________","Age:",          "___ yrs",         "Gender:",   "M / F")
lv_row(8,  "Address:",       "_________________","Phone:",        "_________________","Blood Grp:", "__")
lv_row(9,  "Referred By:",   "Self",             "Known Case of:","Nil",              "Allergies:","NKDA")
spacer(10)

# ═══════════════════════════════════════════════════════════════════════════════
# VITAL SIGNS
# ═══════════════════════════════════════════════════════════════════════════════
sec(11, "▶  VITAL SIGNS  (recorded by nurse)")
lv_row(12, "Temp (°F):",    "99 – 101 °F",      "Pulse (bpm):",  "80 – 100 bpm",   "RR (/min):", "16 – 22 /min")
lv_row(13, "BP (mmHg):",    "Within normal limits","SpO2 (%):",   "≥ 96%",          "Weight:",    "___ kg")
spacer(14)

# ═══════════════════════════════════════════════════════════════════════════════
# CHIEF COMPLAINT
# ═══════════════════════════════════════════════════════════════════════════════
sec(15, "▶  CHIEF COMPLAINT & HISTORY OF PRESENT ILLNESS")
text_block(16, 17, "Chief Complaint:",
           "1. Cold (nasal congestion, runny nose)  2. Cough (dry / productive)  3. Fever (low-grade to moderate, onset ___ days ago)")
text_block(18, 19, "History:",
           "Symptoms started ___ days ago. Gradual/sudden onset. Associated: sore throat, mild headache, body ache, malaise. "
           "No breathlessness, no chest pain, no hemoptysis. No significant travel history.")
text_block(20, 20, "Past History:",   "No significant past illness. No prior hospitalisations.")
text_block(21, 21, "Drug History:",   "No current medications. NKDA (No Known Drug Allergies).")
text_block(22, 22, "Family History:", "Non-contributory.")
text_block(23, 23, "Social History:",  "Non-smoker. No alcohol. Regular diet. Adequate hydration.")
spacer(24)

# ═══════════════════════════════════════════════════════════════════════════════
# EXAMINATION
# ═══════════════════════════════════════════════════════════════════════════════
sec(25, "▶  CLINICAL EXAMINATION")
text_block(26, 27, "General Examination:",
           "Conscious, oriented, cooperative. Febrile. Mild pallor – absent. Icterus – absent. "
           "Cyanosis – absent. Clubbing – absent. Lymphadenopathy – nil. Pedal edema – nil.")
text_block(28, 29, "Systemic Examination:",
           "RS: Air entry bilaterally equal. No added sounds (wheeze/crepitations). "
           "CVS: S1 S2 heard, no murmur. P/A: Soft, non-tender. CNS: No focal deficits.")
text_block(30, 30, "ENT / Local:",
           "Throat – hyperaemic, mild congestion. Tonsils – not enlarged. Nasal mucosa – congested, clear discharge. Ear – NAD.")
spacer(31)

# ═══════════════════════════════════════════════════════════════════════════════
# INVESTIGATIONS
# ═══════════════════════════════════════════════════════════════════════════════
sec(32, "▶  INVESTIGATIONS  (if required)")
# Header
rh(33, 17)
for col, hdr, bg in [
    (2,"#",C_MID_BLUE),(3,"Investigation",C_MID_BLUE),(5,"Result",C_MID_BLUE),
    (7,"Unit",C_MID_BLUE),(8,"Normal Range",C_MID_BLUE),(9,"Remarks",C_MID_BLUE)
]:
    cell(33, col, hdr, bold=True, sz=9, color=C_TITLE_TXT, bg=bg, ha="center", bd=bdr())

inv_data = [
    ("1","CBC (Complete Blood Count)",  "WNL / as reported", "", "As per lab",  "Rule out bacterial infection"),
    ("2","CRP / ESR",                   "Mildly elevated",   "", "CRP <5 mg/L", "Indicates viral aetiology"),
    ("3","Throat swab culture",         "If indicated",      "", "No growth",   "Only if strep suspected"),
    ("4","Chest X-ray (PA view)",       "If indicated",      "", "Normal",      "If LRT involvement suspected"),
    ("5","COVID-19 RAT / PCR",          "If indicated",      "", "Negative",    "Rule out COVID-19"),
]
for i, (no, inv, res, unit, nrm, rem) in enumerate(inv_data):
    r = 34 + i
    rh(r, 17)
    bg = C_XLIGHT if i%2==0 else C_WHITE
    cell(r,2, no,  sz=9, bg=bg, ha="center", bd=bdr())
    cell(r,3, inv, sz=9, bg=bg, bd=bdr())
    cell(r,5, res, sz=9, bg=bg, bd=bdr())
    cell(r,7, unit,sz=9, bg=bg, bd=bdr())
    cell(r,8, nrm, sz=9, bg=bg, bd=bdr())
    cell(r,9, rem, sz=9, bg=bg, bd=bdr())
spacer(39)

# ═══════════════════════════════════════════════════════════════════════════════
# DIAGNOSIS
# ═══════════════════════════════════════════════════════════════════════════════
sec(40, "▶  DIAGNOSIS")
text_block(41, 41, "Provisional Dx:",
           "Acute Viral Upper Respiratory Tract Infection (URI) — Common Cold with Fever  |  ICD-10: J00")
text_block(42, 42, "Differential Dx:",
           "1. Influenza (Flu)  |  2. COVID-19 (mild)  |  3. Bacterial Pharyngitis / Tonsillitis  |  4. Allergic Rhinitis")
spacer(43)

# ═══════════════════════════════════════════════════════════════════════════════
# PRESCRIPTION
# ═══════════════════════════════════════════════════════════════════════════════
sec(44, "℞  PRESCRIPTION", bg=C_GREEN_H)
# Note
rh(45, 16)
merge(45,1,45,10,
      "⚠  Antibiotics are NOT indicated for viral URI. Treatment is symptomatic. "
      "Reassess if symptoms worsen or persist beyond 7–10 days.",
      sz=9, color="7B3F00", bg=C_WARN, ha="center", bd=bdr(), italic=True)

# Rx table header
rh(46, 18)
rx_hdr = ["#","Drug Name (Generic)","Dose","Route","Frequency","Duration","Instructions"]
rx_cols = [2, 3, 5, 6, 7, 8, 9]
for col, hdr in zip(rx_cols, rx_hdr):
    cell(46, col, hdr, bold=True, sz=9, color=C_TITLE_TXT,
         bg=C_GREEN_H, ha="center", bd=bdr())

rx_data = [
    ("1","Paracetamol (Acetaminophen)",         "500 mg",    "Oral","TDS (3x/day)","5 days",  "Take after food. For fever & pain."),
    ("2","Cetirizine (Antihistamine)",           "10 mg",     "Oral","OD at night", "5 days",  "For runny nose & sneezing. May cause drowsiness."),
    ("3","Pseudoephedrine + Triprolidine\n(Actifed / Decongestant)",
                                                 "1 tab",     "Oral","BD",          "3–5 days","For nasal congestion. Avoid in hypertension."),
    ("4","Dextromethorphan 10 mg +\nGuaifenesin 100 mg (Cough Syrup)",
                                                 "2 tsp (10 ml)","Oral","TDS",      "5 days",  "For dry/productive cough. Shake well before use."),
    ("5","Zinc Gluconate / Lozenges",            "10–15 mg",  "Oral","BD",          "5–7 days","Start within 24 hrs of onset. Reduces duration."),
    ("6","Vitamin C (Ascorbic Acid)",            "500 mg",    "Oral","OD",          "7 days",  "Immune support. Take after meals."),
    ("7","ORS (Oral Rehydration Solution)",      "As needed", "Oral","Frequent sips","5 days", "Maintain hydration. Warm fluids preferred."),
    ("8","Intranasal Saline Spray\n(0.9% NaCl)", "2 puffs/nostril","Nasal","TDS",   "7 days",  "Loosens secretions. Safe for all ages."),
]
for i, (no, drug, dose, route, freq, dur, instr) in enumerate(rx_data):
    r = 47 + i
    rh(r, 28)
    bg = C_GREEN_L if i%2==0 else C_WHITE
    cell(r,2, no,    sz=9, bg=bg, ha="center", bd=bdr(), va="center")
    cell(r,3, drug,  sz=9, bg=bg, bd=bdr(), wrap=True, va="top")
    cell(r,5, dose,  sz=9, bg=bg, ha="center", bd=bdr(), va="center")
    cell(r,6, route, sz=9, bg=bg, ha="center", bd=bdr(), va="center")
    cell(r,7, freq,  sz=9, bg=bg, ha="center", bd=bdr(), va="center")
    cell(r,8, dur,   sz=9, bg=bg, ha="center", bd=bdr(), va="center")
    cell(r,9, instr, sz=9, bg=bg, bd=bdr(), wrap=True, va="top")

spacer(55)

# ═══════════════════════════════════════════════════════════════════════════════
# ADVICE & FOLLOW-UP
# ═══════════════════════════════════════════════════════════════════════════════
sec(56, "▶  ADVICE, FOLLOW-UP & RED FLAGS")

# Advice block
rh(57, 17)
merge(57,2,57,9, "GENERAL ADVICE FOR PATIENT:",
      bold=True, sz=9, color=C_BLUE_TXT, bg=C_LABEL, bd=bdr())

advice = [
    "✔  Complete rest. Stay home and avoid close contact with others.",
    "✔  Drink plenty of warm fluids (water, soups, herbal teas, warm lemon water).",
    "✔  Steam inhalation 2–3 times/day for nasal congestion.",
    "✔  Warm saltwater gargling (1/4 tsp salt in warm water) 2–3 times/day for sore throat.",
    "✔  Honey (1 tsp) + warm water / ginger tea for cough relief. (NOT for children < 1 year).",
    "✔  Wash hands frequently. Cover mouth/nose when coughing or sneezing.",
    "✔  Light, easily digestible diet. Avoid cold beverages, ice cream.",
    "✔  Use a humidifier or maintain warm room temperature.",
]
for i, adv in enumerate(advice):
    r = 58 + i
    rh(r, 16)
    cell(r, 2, "  ", bg=C_XLIGHT, bd=bdr())
    merge(r, 3, r, 9, adv, sz=9, bg=C_XLIGHT, bd=bdr())

# Red flags
rh(66, 17)
merge(66,2,66,9, "🔴  RED FLAGS — RETURN TO DOCTOR IMMEDIATELY IF:",
      bold=True, sz=9, color=C_RED, bg="FFE6E6", bd=bdr())

red_flags = [
    "⚠  Fever > 39°C (102.2°F) or fever lasting more than 3 days",
    "⚠  Difficulty breathing, chest pain, or shortness of breath",
    "⚠  Severe headache, stiff neck, or skin rash",
    "⚠  Symptoms worsen after initial improvement ('double sickening')",
    "⚠  Symptoms persist beyond 10–14 days (suspect bacterial sinusitis)",
    "⚠  Ear pain or discharge (possible Otitis Media)",
    "⚠  Children: fast breathing, inability to feed, high-pitched cry",
]
for i, flag in enumerate(red_flags):
    r = 67 + i
    rh(r, 16)
    cell(r, 2, "  ", bg="FFE6E6", bd=bdr())
    merge(r, 3, r, 9, flag, sz=9, color=C_RED, bg="FFE6E6", bd=bdr())

spacer(74)

# Follow-up row
rh(75, 18)
cell(75,2, "Follow-up Date:", bold=True, sz=9, color=C_BLUE_TXT, bg=C_LABEL, bd=bdr())
cell(75,3, "After 5–7 days (or earlier if red flags appear)", sz=9, bg=C_WHITE, bd=bdr())
cell(75,5, "Referred To:", bold=True, sz=9, color=C_BLUE_TXT, bg=C_LABEL, bd=bdr())
cell(75,6, "Nil at present", sz=9, bg=C_WHITE, bd=bdr())
cell(75,8, "Sick Leave:", bold=True, sz=9, color=C_BLUE_TXT, bg=C_LABEL, bd=bdr())
cell(75,9, "2–3 days advised", sz=9, bg=C_WHITE, bd=bdr())
spacer(76)

# ═══════════════════════════════════════════════════════════════════════════════
# SIGNATURES
# ═══════════════════════════════════════════════════════════════════════════════
sec(77, "▶  DOCTOR'S SIGNATURE")
rh(78, 50)
rh(79, 16)

merge(78,2,78,4, "", bg=C_WHITE, bd=bdr())
merge(79,2,79,4, "Doctor's Signature & Stamp",
      bold=True, sz=8, color=C_BLUE_TXT, bg=C_LABEL, ha="center", bd=bdr())

merge(78,5,78,7, "", bg=C_WHITE, bd=bdr())
merge(79,5,79,7, "Doctor Name & Registration No.",
      bold=True, sz=8, color=C_BLUE_TXT, bg=C_LABEL, ha="center", bd=bdr())

merge(78,8,78,10, "", bg=C_WHITE, bd=bdr())
merge(79,8,79,10, "Patient / Guardian Signature",
      bold=True, sz=8, color=C_BLUE_TXT, bg=C_LABEL, ha="center", bd=bdr())

spacer(80)
rh(81, 15)
merge(81,1,81,10,
      "CONFIDENTIAL — For medical use only. Information protected under patient privacy laws. "
      "© OPD Consultation Sheet — General Medicine",
      sz=8, color=C_TITLE_TXT, bg=C_DARK_BLUE, ha="center", italic=True, bd=outer)

# ── Print Setup ───────────────────────────────────────────────────────────────
ws.page_setup.orientation = "portrait"
ws.page_setup.paperSize   = 9       # A4
ws.page_setup.fitToPage   = True
ws.page_setup.fitToWidth  = 1
ws.page_setup.fitToHeight = 0
ws.page_margins = PageMargins(left=0.4, right=0.4, top=0.6, bottom=0.6)
ws.print_area = "A1:J81"

# ── Save ──────────────────────────────────────────────────────────────────────
path = "/tmp/workspace/opd-sheet/Cold_Cough_Fever_OPD_Sheet.xlsx"
wb.save(path)
print("Saved:", path)
Running Command

cd /tmp/workspace/opd-sheet && python create_cold_cough_fever_opd.py

Your pre-filled OPD sheet for Cold, Cough & Fever is ready!

Cold Cough Fever OPD Sheet

Spreadsheet · XLSX


Here's exactly what's pre-filled in the sheet:

Patient Info

  • OPD No., today's date, time auto-set
  • Fields for name, age, gender, phone, blood group

Vital Signs (pre-filled typical ranges)

  • Temp: 99-101°F | Pulse: 80-100 bpm | RR: 16-22 /min | SpO2: ≥96%

History & Examination

  • Chief complaint: Cold + Cough + Fever (onset ___ days ago)
  • Systemic exam findings typical of viral URI
  • ENT: congested nasal mucosa, hyperaemic throat

Diagnosis

  • Provisional: Acute Viral URI - Common Cold with Fever (ICD-10: J00)
  • Differentials: Influenza, COVID-19 (mild), Bacterial Pharyngitis, Allergic Rhinitis

Prescription (8 drugs)

#DrugDoseFreqDuration
1Paracetamol500 mgTDS5 days
2Cetirizine10 mgOD night5 days
3Pseudoephedrine + Triprolidine1 tabBD3-5 days
4Dextromethorphan + Guaifenesin syrup2 tspTDS5 days
5Zinc Gluconate10-15 mgBD5-7 days
6Vitamin C500 mgOD7 days
7ORSAs neededFrequent5 days
8Nasal Saline Spray2 puffsTDS7 days

Advice + Red Flags

  • 8 home care tips (steam, honey, warm fluids, rest, etc.)
  • 7 red flag warnings in red (fever >39°C, breathlessness, etc.)
  • Follow-up: after 5-7 days | Sick leave: 2-3 days advised
This is a shared conversation. Sign in to Orris to start your own chat.