Can you creat my CV for job as medical officer

Asking for Preferences
Reading File
Running Command

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

Running Command

mkdir -p /home/daytona/workspace/medical-cv && python3 -c "from reportlab.lib.pa…

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
Writing File

~/medical-cv/generate_fresher_cv.py

generate_fresher_cv.pyPython
1
2
3
4
5
6

Structuring content...

This can take a few minutes — feel free to come back later.

This is a shared conversation. Sign in to Orris to start your own chat.