Can you creat my CV for job as medical officer

I'd love to help you create a professional CV for a Medical Officer position! I just need a few details from you first.
Asking for Preferences

Please provide your full name, contact details (phone, email, location/city), and any links (LinkedIn, etc.) if you have them. · What is your highest medical qualification and how many years of experience do you have? · What format would you like the CV in?

It looks like you selected "No preference" for the personal details - that means I'll create a well-structured template CV with placeholder information that you can easily fill in. I'll make it as a PDF for a Medical Officer role.
Let me build this now!
Reading File
Running Command

ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or does not exist"

Running Command

mkdir -p /home/daytona/workspace/medical-cv && python3 -c "from reportlab.lib.pagesizes import A4; print('reportlab OK')" && python3 -c "from reportlab.platypus import SimpleDocTemplate; print('platypus OK')"

Writing File

~/medical-cv/generate_cv.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, HRFlowable,
    Table, TableStyle, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT
from reportlab.pdfgen import canvas

OUTPUT = "/home/daytona/workspace/medical-cv/Medical_Officer_CV.pdf"

# ── Colour palette ──────────────────────────────────────────────────────────
NAVY    = colors.HexColor("#1B3A6B")
TEAL    = colors.HexColor("#0D7B8A")
LGRAY   = colors.HexColor("#F4F6F9")
MGRAY   = colors.HexColor("#7F8C8D")
BLACK   = colors.HexColor("#1A1A1A")
WHITE   = colors.white
LINE    = colors.HexColor("#CBD5E0")

PAGE_W, PAGE_H = A4
LEFT_M  = 1.8*cm
RIGHT_M = 1.8*cm
TOP_M   = 1.5*cm
BOT_M   = 1.5*cm

# ── Styles ───────────────────────────────────────────────────────────────────
base = getSampleStyleSheet()

def S(name, **kw):
    return ParagraphStyle(name, **kw)

name_style = S("Name",
    fontName="Helvetica-Bold", fontSize=26, textColor=WHITE,
    leading=30, alignment=TA_LEFT, spaceAfter=2)

title_style = S("Title",
    fontName="Helvetica", fontSize=13, textColor=colors.HexColor("#A8D8E8"),
    leading=16, alignment=TA_LEFT)

contact_style = S("Contact",
    fontName="Helvetica", fontSize=9, textColor=WHITE,
    leading=13, alignment=TA_LEFT)

section_head = S("SecHead",
    fontName="Helvetica-Bold", fontSize=11, textColor=NAVY,
    leading=14, spaceBefore=8, spaceAfter=4, alignment=TA_LEFT)

body = S("Body",
    fontName="Helvetica", fontSize=9.5, textColor=BLACK,
    leading=14, spaceAfter=3)

body_bold = S("BodyBold",
    fontName="Helvetica-Bold", fontSize=9.5, textColor=BLACK,
    leading=14, spaceAfter=2)

bullet_style = S("Bullet",
    fontName="Helvetica", fontSize=9.5, textColor=BLACK,
    leading=14, leftIndent=10, bulletIndent=0, spaceAfter=2,
    bulletFontName="Helvetica", bulletFontSize=9.5)

small_gray = S("SmallGray",
    fontName="Helvetica", fontSize=8.5, textColor=MGRAY,
    leading=12, spaceAfter=2)

# ── Header canvas callback ────────────────────────────────────────────────────
def draw_header(canv, doc):
    """Draw a coloured header band at the top of page 1 only."""
    if doc.page == 1:
        # Main navy band
        canv.setFillColor(NAVY)
        canv.rect(0, PAGE_H - 58*mm, PAGE_W, 58*mm, fill=1, stroke=0)
        # Teal accent strip
        canv.setFillColor(TEAL)
        canv.rect(0, PAGE_H - 62*mm, PAGE_W, 4*mm, fill=1, stroke=0)
        # Side accent bar
        canv.setFillColor(TEAL)
        canv.rect(0, 0, 5*mm, PAGE_H - 62*mm, fill=1, stroke=0)

# ── Document ──────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    leftMargin=LEFT_M,
    rightMargin=RIGHT_M,
    topMargin=TOP_M + 58*mm,   # leave room for the header band
    bottomMargin=BOT_M,
    title="Medical Officer CV",
    author="[Your Name]"
)

story = []

# ── HEADER CONTENT (overlaid via canvas; we add a spacer for layout) ─────────
# We'll inject the header text using a table that sits at the very top
# by temporarily reducing topMargin for first-frame elements.

# Header info table (sits inside the navy band area – we use negative spacer trick)
# Instead, we prepend with a framed table styled to match.

header_name  = Paragraph("[YOUR FULL NAME]", name_style)
header_title = Paragraph("MBBS  |  Medical Officer", title_style)
header_contact = Paragraph(
    "✉ your.email@example.com    "
    "☏ +00 000 000 0000    "
    "● City, Country    "
    "🔗 linkedin.com/in/yourprofile",
    contact_style)

header_table = Table(
    [[header_name], [header_title], [Spacer(1, 3*mm)], [header_contact]],
    colWidths=[PAGE_W - LEFT_M - RIGHT_M]
)
header_table.setStyle(TableStyle([
    ("BACKGROUND",   (0,0), (-1,-1), NAVY),
    ("TOPPADDING",   (0,0), (0,0),   4),
    ("BOTTOMPADDING",(0,-1),(-1,-1), 6),
    ("LEFTPADDING",  (0,0), (-1,-1), 0),
    ("RIGHTPADDING", (0,0), (-1,-1), 0),
]))

story.append(header_table)
story.append(Spacer(1, 6*mm))

# ── Helper: section divider ──────────────────────────────────────────────────
def section(title):
    story.append(KeepTogether([
        Paragraph(title.upper(), section_head),
        HRFlowable(width="100%", thickness=1.2, color=TEAL, spaceAfter=4),
    ]))

def job(title, org, location, dates, bullets):
    story.append(KeepTogether([
        Paragraph(f"<b>{title}</b>", body_bold),
        Paragraph(f"{org} &nbsp;|&nbsp; <i>{location}</i>", small_gray),
        Paragraph(dates, small_gray),
        *[Paragraph(f"• {b}", bullet_style) for b in bullets],
        Spacer(1, 3*mm),
    ]))

def edu(degree, institution, year, detail=""):
    rows = [Paragraph(f"<b>{degree}</b>", body_bold),
            Paragraph(f"{institution}", small_gray),
            Paragraph(year, small_gray)]
    if detail:
        rows.append(Paragraph(detail, bullet_style))
    rows.append(Spacer(1, 3*mm))
    story.append(KeepTogether(rows))

# ══════════════════════════════════════════════════════════════════════════════
#  PROFESSIONAL SUMMARY
# ══════════════════════════════════════════════════════════════════════════════
section("Professional Summary")
story.append(Paragraph(
    "Dedicated and compassionate Medical Officer with [X] years of clinical experience in "
    "primary and secondary healthcare settings. Proficient in patient assessment, emergency "
    "management, and evidence-based treatment planning. Committed to delivering high-quality "
    "patient care, improving clinical outcomes, and working collaboratively within "
    "multidisciplinary teams. Replace this paragraph with your own 3-4 sentence summary.",
    body))
story.append(Spacer(1, 4*mm))

# ══════════════════════════════════════════════════════════════════════════════
#  WORK EXPERIENCE
# ══════════════════════════════════════════════════════════════════════════════
section("Work Experience")

job(
    "Medical Officer",
    "[Hospital / Clinic Name]",
    "[City, Country]",
    "Month Year – Present",
    [
        "Conducted history-taking, physical examinations, and formulated differential diagnoses for OPD and admitted patients.",
        "Managed acute and chronic conditions including hypertension, diabetes mellitus, respiratory and GI disorders.",
        "Performed emergency procedures: IV line insertion, wound suturing, CPR, and airway management.",
        "Ordered and interpreted laboratory investigations, ECGs, and imaging studies.",
        "Collaborated with specialists for complex case referrals and multidisciplinary team rounds.",
        "Maintained accurate and up-to-date patient records and discharge summaries.",
    ]
)

job(
    "Intern / Resident Medical Officer",
    "[Teaching Hospital Name]",
    "[City, Country]",
    "Month Year – Month Year",
    [
        "Completed rotations in Internal Medicine, Surgery, Obstetrics & Gynaecology, Paediatrics, and Psychiatry.",
        "Assisted in minor surgical procedures and obstetric deliveries under supervision.",
        "Participated in grand rounds, case presentations, and departmental CME sessions.",
        "Managed 20+ patients daily in inpatient wards with consistent clinical supervision.",
    ]
)

# ══════════════════════════════════════════════════════════════════════════════
#  EDUCATION
# ══════════════════════════════════════════════════════════════════════════════
section("Education")

edu(
    "MBBS – Bachelor of Medicine, Bachelor of Surgery",
    "[Medical University Name], [City, Country]",
    "Year of Graduation: [YYYY]",
    "Final Year Grade / CGPA: [X.X/10] or [First Division]"
)

edu(
    "Higher Secondary (Science Stream – PCB)",
    "[School / College Name], [City, Country]",
    "Year: [YYYY] &nbsp;|&nbsp; Percentage: [XX%]",
)

# ══════════════════════════════════════════════════════════════════════════════
#  CLINICAL SKILLS
# ══════════════════════════════════════════════════════════════════════════════
section("Clinical Skills")

skills_data = [
    ["Patient Assessment & Diagnosis",  "Emergency & Trauma Management"],
    ["ECG Interpretation",              "IV Cannulation & Phlebotomy"],
    ["Wound Care & Suturing",           "Nasogastric Tube Insertion"],
    ["Urinary Catheterisation",         "Airway Management (BVM, Intubation assist)"],
    ["CPR & Basic Life Support (BLS)",  "Advanced Cardiac Life Support (ACLS)"],
    ["Prescription & Drug Management",  "Clinical Documentation & EHR Systems"],
]

skill_table = Table(skills_data, colWidths=[(PAGE_W-LEFT_M-RIGHT_M)/2]*2)
skill_table.setStyle(TableStyle([
    ("FONTNAME",      (0,0), (-1,-1), "Helvetica"),
    ("FONTSIZE",      (0,0), (-1,-1), 9.5),
    ("TEXTCOLOR",     (0,0), (-1,-1), BLACK),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("RIGHTPADDING",  (0,0), (-1,-1), 6),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("ROWBACKGROUNDS",(0,0), (-1,-1), [LGRAY, WHITE]),
    ("GRID",          (0,0), (-1,-1), 0.3, LINE),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(skill_table)
story.append(Spacer(1, 5*mm))

# ══════════════════════════════════════════════════════════════════════════════
#  CERTIFICATIONS & TRAINING
# ══════════════════════════════════════════════════════════════════════════════
section("Certifications & Training")

certs = [
    ("Basic Life Support (BLS)",                 "[Issuing Body, e.g. AHA / Red Cross]", "[Year]"),
    ("Advanced Cardiac Life Support (ACLS)",      "[Issuing Body]",                       "[Year]"),
    ("Emergency Triage & Trauma Care Workshop",   "[Hospital / Institution]",             "[Year]"),
    ("[Other Certification / CME Course]",         "[Issuing Body]",                       "[Year]"),
]

cert_table_data = [
    [Paragraph(f"<b>{c[0]}</b>", body_bold),
     Paragraph(c[1], small_gray),
     Paragraph(c[2], small_gray)]
    for c in certs
]
cert_table = Table(cert_table_data,
    colWidths=[(PAGE_W-LEFT_M-RIGHT_M)*0.52,
               (PAGE_W-LEFT_M-RIGHT_M)*0.33,
               (PAGE_W-LEFT_M-RIGHT_M)*0.15])
cert_table.setStyle(TableStyle([
    ("FONTSIZE",      (0,0), (-1,-1), 9.5),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("RIGHTPADDING",  (0,0), (-1,-1), 4),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("ROWBACKGROUNDS",(0,0), (-1,-1), [WHITE, LGRAY]),
    ("LINEBELOW",     (0,0), (-1,-2), 0.3, LINE),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(cert_table)
story.append(Spacer(1, 5*mm))

# ══════════════════════════════════════════════════════════════════════════════
#  LANGUAGES
# ══════════════════════════════════════════════════════════════════════════════
section("Languages")
lang_data = [
    ["English",       "Fluent (Professional Proficiency)"],
    ["[Language 2]",  "[Native / Fluent / Conversational]"],
    ["[Language 3]",  "[Basic]"],
]
lang_table = Table(lang_data,
    colWidths=[(PAGE_W-LEFT_M-RIGHT_M)*0.3, (PAGE_W-LEFT_M-RIGHT_M)*0.7])
lang_table.setStyle(TableStyle([
    ("FONTNAME",      (0,0), (-1,-1), "Helvetica"),
    ("FONTNAME",      (0,0), (0,-1), "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 9.5),
    ("TEXTCOLOR",     (0,0), (-1,-1), BLACK),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("RIGHTPADDING",  (0,0), (-1,-1), 4),
    ("TOPPADDING",    (0,0), (-1,-1), 3),
    ("BOTTOMPADDING", (0,0), (-1,-1), 3),
    ("LINEBELOW",     (0,0), (-1,-2), 0.3, LINE),
]))
story.append(lang_table)
story.append(Spacer(1, 5*mm))

# ══════════════════════════════════════════════════════════════════════════════
#  REFERENCES
# ══════════════════════════════════════════════════════════════════════════════
section("References")
story.append(Paragraph(
    "Available upon request. Please contact via email or phone to arrange referee details.",
    body))

# ── Build ────────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=draw_header, onLaterPages=draw_header)
print(f"PDF saved: {OUTPUT}")
Running Command

cd /home/daytona/workspace/medical-cv && python3 generate_cv.py

Your CV is ready! Here's your download link:

Medical Officer CV

PDF Document · PDF


What's inside the CV

The PDF is a professionally designed, 2-page template with:
SectionWhat to fill in
HeaderYour name, job title, email, phone, city, LinkedIn
Professional Summary3-4 sentences about your background and goals
Work Experience2 positions pre-populated with typical Medical Officer duties - update with your actual employers and dates
EducationMBBS entry + secondary education - add your university name and year
Clinical Skills12 skills in a formatted table - add/remove as needed
CertificationsBLS, ACLS, and CME courses - update with your actual certs
LanguagesAdd your languages and proficiency levels
References"Available on request" line

Tips for customising it

  1. Open the script at /home/daytona/workspace/medical-cv/generate_cv.py and replace all [...] placeholders with your real details.
  2. Run python3 /home/daytona/workspace/medical-cv/generate_cv.py again to regenerate the PDF instantly.
  3. If you'd also like a Word (.docx) version (easier to edit in Microsoft Word), just let me know and I'll create one.
  4. If you share your actual details (name, experience, qualifications), I can personalise the entire CV for you right away.

Creat fresher CV

Asking for Preferences

Please share your personal details so I can fill them in the CV: · What is your qualification?

Got it - a fresher MBBS CV template. Building it now!
Writing File

~/medical-cv/generate_fresher_cv.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import mm, cm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, HRFlowable,
    Table, TableStyle, KeepTogether
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER

OUTPUT = "/home/daytona/workspace/medical-cv/Fresher_Medical_Officer_CV.pdf"

# ── Colours ──────────────────────────────────────────────────────────────────
NAVY    = colors.HexColor("#1B3A6B")
TEAL    = colors.HexColor("#0E8A8A")
LGRAY   = colors.HexColor("#F4F6F9")
MGRAY   = colors.HexColor("#6B7280")
BLACK   = colors.HexColor("#1A1A1A")
WHITE   = colors.white
LINE    = colors.HexColor("#CBD5E0")
ACCENT  = colors.HexColor("#E8F4F8")

PAGE_W, PAGE_H = A4
L_MAR = 1.8*cm
R_MAR = 1.8*cm
T_MAR = 1.5*cm
B_MAR = 1.5*cm

# ── Styles ───────────────────────────────────────────────────────────────────
def S(name, **kw):
    return ParagraphStyle(name, **kw)

name_style    = S("Name", fontName="Helvetica-Bold", fontSize=28, textColor=WHITE,
                  leading=32, alignment=TA_LEFT)
deg_style     = S("Deg",  fontName="Helvetica",      fontSize=13, textColor=colors.HexColor("#A8D8E8"),
                  leading=17, alignment=TA_LEFT)
contact_style = S("Cont", fontName="Helvetica",      fontSize=9,  textColor=WHITE,
                  leading=14, alignment=TA_LEFT)
sec_head      = S("Sec",  fontName="Helvetica-Bold", fontSize=11, textColor=NAVY,
                  leading=14, spaceBefore=6, spaceAfter=3)
body          = S("Body", fontName="Helvetica",      fontSize=9.5, textColor=BLACK, leading=14)
body_bold     = S("BB",   fontName="Helvetica-Bold", fontSize=9.5, textColor=BLACK, leading=14)
small_gray    = S("SG",   fontName="Helvetica",      fontSize=8.5, textColor=MGRAY, leading=12)
bullet_s      = S("Bul",  fontName="Helvetica",      fontSize=9.5, textColor=BLACK,
                  leading=14, leftIndent=12, spaceAfter=2)

# ── Doc ───────────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT, pagesize=A4,
    leftMargin=L_MAR, rightMargin=R_MAR,
    topMargin=T_MAR + 60*mm, bottomMargin=B_MAR,
    title="Fresher Medical Officer CV"
)

story = []

# ── Canvas callback: header band ─────────────────────────────────────────────
def draw_bg(canv, doc):
    if doc.page == 1:
        # Navy header band
        canv.setFillColor(NAVY)
        canv.rect(0, PAGE_H - 60*mm, PAGE_W, 60*mm, fill=1, stroke=0)
        # Bottom accent strip of header
        canv.setFillColor(TEAL)
        canv.rect(0, PAGE_H - 64*mm, PAGE_W, 4*mm, fill=1, stroke=0)
    # Left teal sidebar on every page
    canv.setFillColor(TEAL)
    canv.rect(0, 0, 5*mm, PAGE_H, fill=1, stroke=0)

# ── Header table ─────────────────────────────────────────────────────────────
hdr = Table([
    [Paragraph("[YOUR FULL NAME]", name_style)],
    [Paragraph("MBBS &nbsp;|&nbsp; Fresh Graduate &nbsp;|&nbsp; Medical Officer Applicant", deg_style)],
    [Spacer(1, 4*mm)],
    [Paragraph(
        "&#9993;&nbsp; your.email@example.com &nbsp;&nbsp;"
        "&#9743;&nbsp; +00 000 000 0000 &nbsp;&nbsp;"
        "&#9679;&nbsp; City, Country &nbsp;&nbsp;"
        "&#128279;&nbsp; linkedin.com/in/yourprofile",
        contact_style)],
], colWidths=[PAGE_W - L_MAR - R_MAR])
hdr.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,-1), NAVY),
    ("TOPPADDING",    (0,0), (0,0),   6),
    ("BOTTOMPADDING", (0,-1),(-1,-1), 6),
    ("LEFTPADDING",   (0,0), (-1,-1), 0),
    ("RIGHTPADDING",  (0,0), (-1,-1), 0),
]))
story.append(hdr)
story.append(Spacer(1, 7*mm))

# ── Helpers ───────────────────────────────────────────────────────────────────
def section(title):
    story.append(KeepTogether([
        Paragraph(title.upper(), sec_head),
        HRFlowable(width="100%", thickness=1.5, color=TEAL, spaceAfter=5),
    ]))

def bullet(text):
    story.append(Paragraph(f"&#8226;&nbsp; {text}", bullet_s))

def edu_entry(degree, institution, year, grade=""):
    rows = [
        Paragraph(f"<b>{degree}</b>", body_bold),
        Paragraph(institution, small_gray),
        Paragraph(year, small_gray),
    ]
    if grade:
        rows.append(Paragraph(grade, small_gray))
    rows.append(Spacer(1, 3*mm))
    story.append(KeepTogether(rows))

# ═════════════════════════════════════════════════════════════════════════════
#  1. OBJECTIVE
# ═════════════════════════════════════════════════════════════════════════════
section("Career Objective")
story.append(Paragraph(
    "A highly motivated and compassionate fresh MBBS graduate seeking a Medical Officer position "
    "to apply clinical knowledge gained during medical training and internship rotations. "
    "Committed to delivering patient-centred care, continuing professional development, "
    "and contributing meaningfully to a dynamic healthcare team. "
    "<i>(Customise this with your own 2-3 sentences.)</i>",
    body))
story.append(Spacer(1, 5*mm))

# ═════════════════════════════════════════════════════════════════════════════
#  2. EDUCATION
# ═════════════════════════════════════════════════════════════════════════════
section("Education")

edu_entry(
    "MBBS – Bachelor of Medicine, Bachelor of Surgery",
    "[Medical University / College Name], [City, Country]",
    "Year of Graduation: [YYYY]",
    "Aggregate / CGPA: [XX% or X.X/10]  |  [First Division / Distinction / Pass with Merit]"
)
edu_entry(
    "Higher Secondary Certificate (HSC) – Science (PCB)",
    "[School / College Name], [City, Country]",
    "Year: [YYYY]  |  Percentage / Grade: [XX%]"
)
edu_entry(
    "Secondary School Certificate (SSC / Matriculation)",
    "[School Name], [City, Country]",
    "Year: [YYYY]  |  Percentage / Grade: [XX%]"
)

# ═════════════════════════════════════════════════════════════════════════════
#  3. INTERNSHIP / CLINICAL ROTATIONS
# ═════════════════════════════════════════════════════════════════════════════
section("Internship & Clinical Rotations")
story.append(Paragraph(
    "<b>[Teaching Hospital Name]</b> &nbsp;|&nbsp; <i>[City, Country]</i>", body_bold))
story.append(Paragraph("Duration: [Month YYYY] – [Month YYYY]  (12 Months Compulsory Rotating Internship)", small_gray))
story.append(Spacer(1, 3*mm))

rotations = [
    ("Internal Medicine",
     ["Assisted in management of hypertension, diabetes, COPD, and heart failure.",
      "Participated in ward rounds, case presentations, and discharge planning.",
      "Interpreted ECGs, chest X-rays, and basic blood investigations."]),
    ("Surgery",
     ["Assisted in minor and elective surgical procedures including appendicectomy and hernia repair.",
      "Performed wound dressing, suturing, and post-operative monitoring.",
      "Managed surgical drains, catheters, and IV lines independently."]),
    ("Obstetrics & Gynaecology",
     ["Conducted antenatal check-ups, monitored CTG tracings, and assisted in normal deliveries.",
      "Assisted in Caesarean sections and managed post-partum care.",
      "Performed gynaecological examinations and PAP smear collections."]),
    ("Paediatrics",
     ["Managed neonatal care including APGAR scoring and neonatal resuscitation.",
      "Treated common paediatric conditions: pneumonia, gastroenteritis, febrile seizures.",
      "Conducted growth and developmental milestone assessments."]),
    ("Emergency Medicine",
     ["Triaged and stabilised emergency cases including trauma, MI, and acute abdomen.",
      "Performed CPR, IV access, nebulisation, and emergency drug administration.",
      "Assisted in management of poisoning, drowning, and road traffic accident cases."]),
    ("Psychiatry / Community Medicine",
     ["Conducted mental status examinations and managed anxiety/depression cases.",
      "Participated in community health camps and vaccination drives.",
      "Prepared health education materials and conducted patient counselling sessions."]),
]

for dept, bullets in rotations:
    story.append(KeepTogether([
        Paragraph(f"<b>{dept}</b>", body_bold),
        *[Paragraph(f"&#8226;&nbsp; {b}", bullet_s) for b in bullets],
        Spacer(1, 3*mm),
    ]))

# ═════════════════════════════════════════════════════════════════════════════
#  4. CLINICAL SKILLS
# ═════════════════════════════════════════════════════════════════════════════
section("Clinical Skills")

skills = [
    ("History Taking & Physical Examination",  "ECG Recording & Interpretation"),
    ("IV Cannulation & Phlebotomy",            "Wound Care & Suturing"),
    ("Urinary Catheterisation",                "Nasogastric Tube Insertion"),
    ("Arterial Blood Gas (ABG) Sampling",      "Intravenous Fluid Management"),
    ("Basic Life Support (BLS)",               "Neonatal Resuscitation"),
    ("Drug Prescription & Administration",     "Clinical Documentation & EMR"),
]

sk_table = Table(skills, colWidths=[(PAGE_W - L_MAR - R_MAR)/2]*2)
sk_table.setStyle(TableStyle([
    ("FONTNAME",      (0,0), (-1,-1), "Helvetica"),
    ("FONTSIZE",      (0,0), (-1,-1), 9.5),
    ("TEXTCOLOR",     (0,0), (-1,-1), BLACK),
    ("LEFTPADDING",   (0,0), (-1,-1), 8),
    ("RIGHTPADDING",  (0,0), (-1,-1), 8),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("ROWBACKGROUNDS",(0,0), (-1,-1), [LGRAY, WHITE]),
    ("GRID",          (0,0), (-1,-1), 0.3, LINE),
]))
story.append(sk_table)
story.append(Spacer(1, 5*mm))

# ═════════════════════════════════════════════════════════════════════════════
#  5. CERTIFICATIONS
# ═════════════════════════════════════════════════════════════════════════════
section("Certifications & Training")

certs = [
    ("Basic Life Support (BLS)",                   "[AHA / Red Cross / Local Body]",  "[YYYY]"),
    ("Advanced Cardiac Life Support (ACLS)",        "[Issuing Body]",                  "[YYYY]"),
    ("Certificate in Medical Ethics & Patient Rights","[University / CME Body]",       "[YYYY]"),
    ("[Any additional course / workshop]",           "[Organiser]",                    "[YYYY]"),
]
ct_data = [
    [Paragraph(f"<b>{c[0]}</b>", body_bold),
     Paragraph(c[1], small_gray),
     Paragraph(c[2], small_gray)]
    for c in certs
]
ct = Table(ct_data,
    colWidths=[(PAGE_W-L_MAR-R_MAR)*0.53,
               (PAGE_W-L_MAR-R_MAR)*0.32,
               (PAGE_W-L_MAR-R_MAR)*0.15])
ct.setStyle(TableStyle([
    ("FONTSIZE",      (0,0), (-1,-1), 9.5),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("ROWBACKGROUNDS",(0,0), (-1,-1), [WHITE, LGRAY]),
    ("LINEBELOW",     (0,0), (-1,-2), 0.3, LINE),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
]))
story.append(ct)
story.append(Spacer(1, 5*mm))

# ═════════════════════════════════════════════════════════════════════════════
#  6. ACADEMIC ACHIEVEMENTS & ACTIVITIES
# ═════════════════════════════════════════════════════════════════════════════
section("Academic Achievements & Extra-Curricular Activities")
achievements = [
    "Secured [Rank / Position] in MBBS Final Professional Examination, [Year].",
    "Presented a case report on '[Topic]' at the [Conference / CME Name], [Year].",
    "Participated in the [Blood Donation / Health Awareness / Community Camp] organised by [Organisation].",
    "Active member of the [Medical Students Association / Hospital Volunteer Team].",
    "[Any prize, scholarship, award, or sports/cultural activity - add here].",
]
for a in achievements:
    bullet(a)
story.append(Spacer(1, 5*mm))

# ═════════════════════════════════════════════════════════════════════════════
#  7. LANGUAGES
# ═════════════════════════════════════════════════════════════════════════════
section("Languages")
lang_data = [
    [Paragraph("<b>English</b>", body_bold),  Paragraph("Professional Proficiency", small_gray)],
    [Paragraph("<b>[Language 2]</b>", body_bold), Paragraph("Native / Fluent", small_gray)],
    [Paragraph("<b>[Language 3]</b>", body_bold), Paragraph("Basic / Conversational", small_gray)],
]
lt = Table(lang_data, colWidths=[(PAGE_W-L_MAR-R_MAR)*0.28, (PAGE_W-L_MAR-R_MAR)*0.72])
lt.setStyle(TableStyle([
    ("FONTSIZE",      (0,0), (-1,-1), 9.5),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("LINEBELOW",     (0,0), (-1,-2), 0.3, LINE),
]))
story.append(lt)
story.append(Spacer(1, 5*mm))

# ═════════════════════════════════════════════════════════════════════════════
#  8. PERSONAL DETAILS
# ═════════════════════════════════════════════════════════════════════════════
section("Personal Details")
personal = [
    ["Date of Birth:",  "[DD Month YYYY]",  "Nationality:", "[Your Nationality]"],
    ["Gender:",         "[Male / Female]",  "Marital Status:", "[Single / Married]"],
    ["PMDC / Medical Council Reg. No.:", "[Registration Number]", "Available to Join:", "Immediately"],
]
pd_table = Table(personal,
    colWidths=[(PAGE_W-L_MAR-R_MAR)*0.22,
               (PAGE_W-L_MAR-R_MAR)*0.28,
               (PAGE_W-L_MAR-R_MAR)*0.22,
               (PAGE_W-L_MAR-R_MAR)*0.28])
pd_table.setStyle(TableStyle([
    ("FONTNAME",      (0,0), (-1,-1), "Helvetica"),
    ("FONTNAME",      (0,0), (0,-1),  "Helvetica-Bold"),
    ("FONTNAME",      (0,0), (2,-1),  "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,-1), 9.5),
    ("TEXTCOLOR",     (0,0), (0,-1),  MGRAY),
    ("TEXTCOLOR",     (0,0), (2,-1),  MGRAY),
    ("LEFTPADDING",   (0,0), (-1,-1), 4),
    ("TOPPADDING",    (0,0), (-1,-1), 4),
    ("BOTTOMPADDING", (0,0), (-1,-1), 4),
    ("LINEBELOW",     (0,0), (-1,-2), 0.3, LINE),
]))
story.append(pd_table)
story.append(Spacer(1, 5*mm))

# ═════════════════════════════════════════════════════════════════════════════
#  9. REFERENCES
# ═════════════════════════════════════════════════════════════════════════════
section("References")

ref_data = [
    [Paragraph("<b>[Prof. / Dr. Referee Name 1]</b>", body_bold),
     Paragraph("<b>[Prof. / Dr. Referee Name 2]</b>", body_bold)],
    [Paragraph("[Designation, Department]<br/>[Hospital / University Name]<br/>"
               "Email: ref1@example.com<br/>Phone: +00 000 000 0000", body),
     Paragraph("[Designation, Department]<br/>[Hospital / University Name]<br/>"
               "Email: ref2@example.com<br/>Phone: +00 000 000 0000", body)],
]
ref_table = Table(ref_data, colWidths=[(PAGE_W-L_MAR-R_MAR)/2]*2)
ref_table.setStyle(TableStyle([
    ("FONTSIZE",      (0,0), (-1,-1), 9.5),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("BACKGROUND",    (0,0), (-1,-1), LGRAY),
    ("BOX",           (0,0), (-1,-1), 0.5, LINE),
    ("LINEAFTER",     (0,0), (0,-1),  0.5, LINE),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
]))
story.append(ref_table)

# ── Declaration ──────────────────────────────────────────────────────────────
story.append(Spacer(1, 8*mm))
story.append(HRFlowable(width="100%", thickness=0.5, color=LINE))
story.append(Spacer(1, 3*mm))
story.append(Paragraph(
    "<i>I hereby declare that all the information provided above is true and correct to the best of my knowledge and belief.</i>",
    S("Decl", fontName="Helvetica-Oblique", fontSize=9, textColor=MGRAY, leading=13, alignment=TA_LEFT)))
story.append(Spacer(1, 6*mm))
story.append(Paragraph(
    "Date: _______________ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signature: _______________",
    S("Sign", fontName="Helvetica", fontSize=9.5, textColor=BLACK, leading=14)))

# ── Build ─────────────────────────────────────────────────────────────────────
doc.build(story, onFirstPage=draw_bg, onLaterPages=draw_bg)
print(f"PDF saved: {OUTPUT}")
This is a shared conversation. Sign in to Orris to start your own chat.