Can you creat my CV for job as medical officer
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or does not…
mkdir -p /home/daytona/workspace/medical-cv && python3 -c "from reportlab.lib.pa…
~/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} | <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] | 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}")
cd /home/daytona/workspace/medical-cv && python3 generate_cv.py
Medical Officer CV
PDF Document · PDF
| Section | What to fill in |
|---|---|
| Header | Your name, job title, email, phone, city, LinkedIn |
| Professional Summary | 3-4 sentences about your background and goals |
| Work Experience | 2 positions pre-populated with typical Medical Officer duties - update with your actual employers and dates |
| Education | MBBS entry + secondary education - add your university name and year |
| Clinical Skills | 12 skills in a formatted table - add/remove as needed |
| Certifications | BLS, ACLS, and CME courses - update with your actual certs |
| Languages | Add your languages and proficiency levels |
| References | "Available on request" line |
/home/daytona/workspace/medical-cv/generate_cv.py and replace all [...] placeholders with your real details.python3 /home/daytona/workspace/medical-cv/generate_cv.py again to regenerate the PDF instantly.Creat fresher CV
~/medical-cv/generate_fresher_cv.py
Structuring content...
This can take a few minutes — feel free to come back later.