please find the article related to median time and survival analysis of cancer patient attending palliative care opd
survival analysis median survival cancer palliative care outpatient
median survival time cancer patients palliative care OPD outpatient department survival analysis study
PMID: 30265282
PMID: 30488781
PMID: 25228018
PMID: 34265891
PMID: 38976269
| PMID | Study Type | n | Setting | Median Survival | Key Metric |
|---|---|---|---|---|---|
| 30265282 | Meta-Analysis | 2,092 | Outpatient PC | 14.55 vs. 9.99 months | 4.56-month survival advantage |
| 30488781 | Meta-Analysis | ~1,500 | Outpatient PC | Not reported | Decreased all-cause mortality |
| 25228018 | Prospective Cohort | 368 | Palliative OPD | ~4 months overall | PPS-stratified survival |
| 34265891 | Prospective Cohort | 200 | Oncology OPD | 7.6 months | Prognostic model AUC 0.88 |
| 38976269 | Prognostic Study | 4,779 | Inpatient + OPD | PPS-dependent | Updated modern estimates |
Create a comparison table of prognostic factors and median survival across these 5 studies
| Feature | Hoerger 2019 (PMID 30265282) | Fulton 2019 (PMID 30488781) | Myers 2015 (PMID 25228018) | Kim 2022 (PMID 34265891) | Bischoff 2024 (PMID 38976269) |
|---|---|---|---|---|---|
| Study Design | Meta-Analysis of RCTs | Meta-Analysis of RCTs | Prospective Cohort | Prospective Cohort | Prognostic Study |
| Sample Size | 2,092 (9 RCTs) | ~1,500 (10 trials) | 368 | 200 | 4,779 (3,080 outpatient) |
| Setting | Outpatient PC | Outpatient PC + Oncology | Palliative care OPD | Medical Oncology OPD | Inpatient + Outpatient PC |
| Cancer Types | Heterogeneous (lung, GI predominant) | Multiple advanced cancers | Incurable cancer (mixed) | Advanced cancer (mixed) | Cancer + non-cancer (subgroup) |
| Country | USA (multi-site) | International (multi-site) | Canada | South Korea | USA (single center) |
| Median Survival - Intervention | 14.55 months | Not reported | ~4 months (overall) | 7.6 months | PPS-dependent (see Table 2) |
| Median Survival - Control/Usual Care | 9.99 months | Not reported | - | - | - |
| Survival Advantage | +4.56 months | Decreased mortality (HR not specified) | - | - | - |
| 1-Year Survival (Intervention) | 56% | Not reported | - | - | - |
| 1-Year Survival (Control) | 42% | Not reported | - | - | - |
| Hazard Ratio | 0.743 (p = 0.003) | Significant reduction | - | - | - |
| Survival Analysis Method | Kaplan-Meier + Cox regression | Random-effects meta-analysis | Kaplan-Meier | Kaplan-Meier + Multivariate Cox | Kaplan-Meier + Time-dependent AUC |
| Prognostic Factor | Hoerger 2019 | Fulton 2019 | Myers 2015 | Kim 2022 | Bischoff 2024 |
|---|---|---|---|---|---|
| Performance Status (ECOG/PPS) | - | - | PPS (primary tool) - central predictor | ECOG ≥2 = poor survival* | PPS (primary tool) - central predictor* |
| Chemotherapy Status | - | Multidisciplinary care integration | - | No chemo = poor survival* | - |
| Symptom Burden | Quality of life measures | Symptom burden improved | - | Anorexia = poor survival* | - |
| Nutritional Status | - | - | - | Mid-arm circumference <23 cm = poor* | - |
| Laboratory Values | - | - | - | LDH ≥300 IU/L = poor*; Lymphocytes <12% = poor* | - |
| Type of PC Intervention | Interdisciplinary specialty PC = benefit | Moderately integrated PC = benefit | Specialist PC consultation | Referral timing model | PC consultation (inpatient vs outpatient) |
| Setting of Care | Outpatient = survival benefit | Outpatient = survival benefit | Outpatient OPD | Outpatient OPD | Outpatient iAUC 0.67 vs Inpatient 0.74 |
| Cancer vs Non-Cancer | Cancer only | Cancer only | Cancer only | Cancer only | Cancer = higher mortality at most PPS levels* |
| Timing of PC Referral | Early referral benefit implied | Enrollment 8-12 weeks post-diagnosis | Referral-to-death tracked | Model predicts 3-month survival for referral | - |
| PPS Score | Myers 2015 Median Survival (OPD) | Bischoff 2024 - Outpatient | Bischoff 2024 - Inpatient | Change Over Time |
|---|---|---|---|---|
| PPS 70 | ~6 months | Substantially longer than older estimates | Shorter than outpatient | +2.3x to 11.7x longer in 2024 data |
| PPS 60 | ~3 months | Longer than 2015 estimates | Shorter than outpatient | Clinicians historically underestimated |
| PPS 50 | ~2 months | Longer than 2015 estimates | Shorter than outpatient | PPS better predicts 1-month than long-term survival |
| Overall (all PPS) | ~4 months (mean ~6 months) | PPS-dependent | Higher mortality than outpatient | iAUC 0.67 (OPD) vs 0.74 (inpatient) |
| Study | Model/Tool Used | Outcome Predicted | Discriminative Ability | Clinical Utility |
|---|---|---|---|---|
| Hoerger 2019 | Meta-analytic HR (0.743) | Survival advantage of outpatient PC | p = 0.003 | Justifies early outpatient PC referral |
| Fulton 2019 | Random-effects pooled analysis | All-cause mortality reduction | Significant (p < 0.05) | Supports integrated PC models |
| Myers 2015 | PPS rating at each OPD visit | Survival duration (Kaplan-Meier) | 24% accuracy of survival estimates | PPS as trigger for care discussions |
| Kim 2022 | 6-variable prognostic score (0-8) | 3-month survival | AUC = 0.88 | Score ≥4 = refer to palliative care urgently |
| Bischoff 2024 | PPS + setting + diagnosis category | 1-, 6-, 12-month mortality + median survival | OPD iAUC = 0.67; IPD iAUC = 0.74 | Updated online calculator at eprognosis.ucsf.edu |
| Dimension | Finding |
|---|---|
| Best survival benefit | Outpatient specialty PC adds ~4.56 months median survival vs. usual care (Hoerger 2019) |
| Best prognostic model accuracy | Kim 2022 (AUC 0.88) using 6 clinical variables |
| Most OPD-specific survival data | Myers 2015: median 4 months overall; PPS 70 = 6 months, PPS 50 = 2 months |
| Most up-to-date PPS prognosis | Bischoff 2024: modern survival 2.3-11.7x longer than older estimates |
| Critical gap in literature | Only 24% of survival estimates in OPD are accurate (Myers 2015) - underscoring the need for validated prognostic tools |
| Optimal referral window | Kim 2022 model flags patients ≥3 months before death; Fulton 2019 - enrollment at 8-12 weeks post-diagnosis |
please find the international journals for palliative care
| # | Journal Name | Publisher | Impact Factor (approx.) | ISSN | Indexing | Scope |
|---|---|---|---|---|---|---|
| 1 | Palliative Medicine | SAGE Publications | ~5.8 | 0269-2163 | PubMed, Scopus, SCIE | Clinical PC, symptom management, end-of-life care |
| 2 | Journal of Pain and Symptom Management (JPSM) | Elsevier | ~5.6 | 0885-3924 | PubMed, Scopus, SCIE | Pain, symptoms, PC research, clinical trials |
| 3 | BMC Palliative Care | BioMed Central (Springer) | ~3.6 | 1472-684X | PubMed, Scopus, SCIE | Open access; all aspects of PC |
| 4 | BMJ Supportive & Palliative Care | BMJ Publishing | ~3.5 | 2045-435X | PubMed, Scopus, SCIE | Clinical practice, policy, ethics in PC |
| 5 | Palliative & Supportive Care | Cambridge University Press | ~2.8 | 1478-9515 | PubMed, Scopus, SCIE | Psychosocial, spiritual, supportive care |
| 6 | Journal of Palliative Medicine (JPM) | Mary Ann Liebert | ~3.4 | 1096-6218 | PubMed, Scopus, SCIE | Multidisciplinary PC, USA-focused but international |
| 7 | Journal of Palliative Care | SAGE Publications | ~2.1 | 0825-8597 | PubMed, Scopus | Clinical and policy aspects of PC (Canada-founded) |
| # | Journal Name | Publisher | Impact Factor (approx.) | ISSN | Indexing | Scope |
|---|---|---|---|---|---|---|
| 8 | Supportive Care in Cancer | Springer | ~4.2 | 0941-4355 | PubMed, Scopus, SCIE | Supportive/palliative oncology, QoL, symptoms |
| 9 | European Journal of Palliative Care | Hayward Group | N/A (non-SCIE) | 1352-2779 | Scopus | European PC practice and policy |
| 10 | Current Opinion in Supportive and Palliative Care | Wolters Kluwer (LWW) | ~2.5 | 1751-4258 | PubMed, Scopus | Review-focused; symptoms, end-of-life |
| 11 | Journal of Geriatric Oncology | Elsevier | ~4.0 | 1879-4068 | PubMed, Scopus, SCIE | Elderly cancer patients, PC overlap |
| 12 | Annals of Palliative Medicine | AME Publishing | ~3.5 | 2224-5820 | PubMed, Scopus | Asia-Pacific focused; open access |
| # | Journal Name | Publisher/Region | ISSN | Indexing | Notes |
|---|---|---|---|---|---|
| 13 | Indian Journal of Palliative Care (IJPC) | Medknow/Wolters Kluwer | 0973-1075 | PubMed, Scopus | Official journal of IAPC; South Asia focused |
| 14 | Progress in Palliative Care | Taylor & Francis | 0969-9260 | Scopus | UK-based; evidence into practice |
| 15 | Journal of Pain & Palliative Care Pharmacotherapy | Taylor & Francis | 1536-0288 | PubMed, Scopus | Drug therapy, pharmacology in PC |
| 16 | International Journal of Palliative Nursing | MA Healthcare | 1357-6321 | CINAHL, Scopus | Nursing-focused PC practice |
| 17 | Omega - Journal of Death and Dying | SAGE Publications | ~2.0 | 0030-2228 | Scopus, PsycINFO |
| 18 | Death Studies | Taylor & Francis | ~2.5 | 0748-1187 | Scopus, PsycINFO |
| 19 | Journal of Hospice & Palliative Nursing | LWW / ANA | 1522-2179 | CINAHL, PubMed | Nursing practice in hospice/PC |
| 20 | Palliative Care and Social Practice | SAGE (Open Access) | ~3.0 | 2632-3524 | PubMed, Scopus |
| # | Journal Name | Impact Factor | Why Relevant to PC |
|---|---|---|---|
| 21 | The Lancet Oncology | ~45 | Publishes landmark PC/oncology RCTs |
| 22 | JAMA Oncology | ~28 | High-impact PC clinical trials and guidelines |
| 23 | Journal of Clinical Oncology (JCO) | ~45 | Major PC + supportive oncology studies |
| 24 | JAMA Internal Medicine | ~22 | End-of-life care, advance directives, ethics |
| 25 | Annals of Internal Medicine | ~20 | PC guidelines, hospice, prognostication |
| 26 | Journal of General Internal Medicine | ~6 | PC in primary/hospital care |
| # | Journal | Publisher | Notes |
|---|---|---|---|
| 27 | BMC Palliative Care | BioMed Central | Fully open access; PubMed indexed |
| 28 | Annals of Palliative Medicine | AME Publishing | Open access; PubMed indexed |
| 29 | Palliative Care and Social Practice | SAGE | Fully open access |
| 30 | eJournal of Palliative Care | IAPCON/regional | Regional open access |
| Research Type | Best Journal Targets |
|---|---|
| Clinical trials / RCTs | JPSM, Palliative Medicine, JPM, JCO |
| Survival analysis / prognostication | JPSM, Supportive Care in Cancer, BMC Palliative Care |
| OPD / outpatient PC studies | Palliative Medicine, BMJ Supportive & Palliative Care, Annals of Palliative Medicine |
| Indian / South Asian PC research | Indian Journal of Palliative Care (IJPC) |
| Nursing research | International Journal of Palliative Nursing, J Hospice & Palliative Nursing |
| Psychosocial / QoL | Palliative & Supportive Care, Omega, Death Studies |
| Drug/symptom management | J Pain & Palliative Care Pharmacotherapy, Current Opinion in Supportive & Palliative Care |
| Open access publishing | BMC Palliative Care, Annals of Palliative Medicine |
Create a comparison table of journal impact factors and indexing
palliative care journals impact factor 2024 2025 ranking JPSM Palliative Medicine BMC
Indian Journal of Palliative Care Annals of Palliative Medicine impact factor 2024 indexing
https://www.journalmetrics.org/journal/journal-of-palliative…
Data sources: JCR 2025/2026 (Clarivate), Google Scholar h5-index (2020-2024), Scopus CiteScore, journal homepages. IF = Journal Impact Factor (JIF).
| Rank (Scholar) | Journal | Publisher | JIF (2025/26) | JCR Quartile | CiteScore (Scopus) | h5-Index | h5-Median | PubMed / MEDLINE | SCIE (WoS) | Scopus | CINAHL | Open Access | ISSN |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Supportive Care in Cancer | Springer | ~4.0 | Q2 | ~6.1 | 71 | 89 | Yes | Yes | Yes | No | Hybrid | 0941-4355 |
| 2 | Journal of Pain and Symptom Management (JPSM) | Elsevier | ~4.0 | Q1-Q2 | ~6.1 | 66 | 108 | Yes | Yes | Yes | No | Hybrid | 0885-3924 |
| 3 | Palliative Medicine | SAGE | ~5.4 | Q1 | ~7.5 | 57 | 76 | Yes | Yes | Yes | Yes | Hybrid | 0269-2163 |
| 4 | Death Studies | Taylor & Francis | ~2.5 | Q2 | ~3.5 | 53 | 90 | No | Yes | Yes | Yes | Hybrid | 0748-1187 |
| 5 | BMC Palliative Care | BioMed Central | ~3.6 | Q2 | ~4.5 | 48 | 86 | Yes | Yes | Yes | No | Full OA | 1472-684X |
| 6 | Annals of Palliative Medicine | AME Publishing | ~1.9 | Q3 | ~2.5 | 48 | 60 | Yes | Yes | Yes | No | Full OA | 2224-5820 |
| 7 | BMJ Supportive & Palliative Care | BMJ | ~3.5 | Q2 | ~4.2 | 45 | 57 | Yes | Yes | Yes | Yes | Hybrid | 2045-435X |
| 8 | OMEGA - Journal of Death and Dying | SAGE | 1.5 | Q3 | ~2.0 | 43 | 56 | No | Yes | Yes | Yes | Hybrid | 0030-2228 |
| 9 | Journal of Palliative Medicine (JPM) | Mary Ann Liebert | 1.8 | Q3 | ~2.5 | 40 | 56 | Yes | Yes | Yes | Yes | Hybrid | 1096-6218 |
| 10 | American Journal of Hospice & Palliative Medicine | SAGE | 1.4 | Q4 | ~2.0 | 38 | 45 | Yes | Yes | Yes | Yes | Hybrid | 1049-9091 |
| 11 | Palliative & Supportive Care | Cambridge UP | ~2.8 | Q2-Q3 | ~3.0 | 35 | 44 | Yes | Yes | Yes | Yes | Hybrid | 1478-9515 |
| 12 | Journal of Hospice & Palliative Nursing | LWW/ANA | ~2.0 | Q3 | ~2.5 | 24 | 34 | Yes | Yes | Yes | Yes | Hybrid | 1522-2179 |
| 13 | Palliative Care and Social Practice | SAGE | ~3.0 | Q2 | ~3.5 | 23 | 40 | Yes | Yes | Yes | No | Full OA | 2632-3524 |
| 14 | Journal of Palliative Care | SAGE | 1.6 | Q3 | ~2.0 | 23 | 36 | Yes | Yes | Yes | No | Hybrid | 0825-8597 |
| 15 | Indian Journal of Palliative Care (IJPC) | Wolters Kluwer | 1.8 | Q3 | 2.5 | 23 | 33 | Yes | No (SCIE) | Yes | No | Full OA | 0973-1075 |
| 16 | Current Opinion in Supportive & Palliative Care | LWW | ~2.5 | Q3 | ~3.0 | 23 | 29 | Yes | Yes | Yes | No | Hybrid | 1751-4258 |
| 17 | International Journal of Palliative Nursing | MA Healthcare | N/A | Not listed | ~1.5 | 18 | 22 | No | No | Yes | Yes | Hybrid | 1357-6321 |
| 18 | Progress in Palliative Care | Taylor & Francis | ~1.5 | Q4 | ~2.0 | 17 | 28 | No | No | Yes | Yes | Hybrid | 0969-9260 |
| 19 | Journal of Pain & Palliative Care Pharmacotherapy | Taylor & Francis | ~1.5 | Q3-Q4 | ~2.0 | N/A | N/A | Yes | Yes | Yes | No | Hybrid | 1536-0288 |
| Tier | IF Range | Journals |
|---|---|---|
| Tier 1 - High Impact | IF > 4.0 | Palliative Medicine (5.4), JPSM (4.0), Supportive Care in Cancer (4.0) |
| Tier 2 - Good Impact | IF 2.5 - 4.0 | BMC Palliative Care (3.6), BMJ Supportive & Palliative Care (3.5), Palliative Care & Social Practice (3.0), Palliative & Supportive Care (2.8), Current Opinion (2.5), Death Studies (2.5) |
| Tier 3 - Moderate | IF 1.5 - 2.5 | JPM (1.8), IJPC (1.8), Annals of Palliative Medicine (1.9), J Hospice & Palliative Nursing (2.0), J Palliative Care (1.6), OMEGA (1.5) |
| Tier 4 - Lower/Unranked | IF < 1.5 | AJ Hospice & Palliative Medicine (1.4), Progress in PC, Int'l J Palliative Nursing |
| Rank | Journal | h5-Index | h5-Median | Interpretation |
|---|---|---|---|---|
| 1 | Supportive Care in Cancer | 71 | 89 | Most cited overall |
| 2 | JPSM | 66 | 108 | Highest median citations per article |
| 3 | Palliative Medicine | 57 | 76 | Top dedicated PC journal |
| 4 | Death Studies | 53 | 90 | Strong in thanatology |
| 5 | BMC Palliative Care | 48 | 86 | Top open-access PC journal |
| 6 | Annals of Palliative Medicine | 48 | 60 | Best OA for Asia-Pacific authors |
| 7 | BMJ Supportive & Palliative Care | 45 | 57 | Strong UK/European reach |
| 8 | OMEGA - Death & Dying | 43 | 56 | Best for psychosocial end-of-life |
| 9 | Journal of Palliative Medicine | 40 | 56 | Strong US clinical focus |
| 10 | Am. J. Hospice & Palliative Medicine | 38 | 45 | Good for US hospice practice |
| Journal | PubMed | MEDLINE | SCIE (WoS) | Scopus | CINAHL | DOAJ (OA) |
|---|---|---|---|---|---|---|
| Palliative Medicine | Yes | Yes | Yes | Yes | Yes | No |
| JPSM | Yes | Yes | Yes | Yes | No | No |
| BMC Palliative Care | Yes | Yes | Yes | Yes | No | Yes |
| BMJ Supportive & Palliative Care | Yes | Yes | Yes | Yes | Yes | No |
| Supportive Care in Cancer | Yes | Yes | Yes | Yes | No | No |
| Annals of Palliative Medicine | Yes | Yes | Yes | Yes | No | Yes |
| Journal of Palliative Medicine | Yes | Yes | Yes | Yes | Yes | No |
| Palliative & Supportive Care | Yes | Yes | Yes | Yes | Yes | No |
| IJPC | Yes | Yes | No | Yes | No | Yes |
| J. Hospice & Palliative Nursing | Yes | Yes | Yes | Yes | Yes | No |
| Int'l J. Palliative Nursing | No | No | No | Yes | Yes | No |
| Your Goal | Recommended Journal | Why |
|---|---|---|
| Highest impact publication | Palliative Medicine | IF ~5.4, Q1, h5=57 |
| Survival analysis / OPD study | JPSM | IF ~4.0, highest h5-median (108) |
| Open access + PubMed indexed | BMC Palliative Care | IF 3.6, full OA, DOAJ listed |
| India/South Asia authors | Indian Journal of Palliative Care | Scopus, PubMed, fully OA, no APC |
| Asia-Pacific OA publication | Annals of Palliative Medicine | h5=48, PubMed+SCIE indexed |
| Nursing research focus | J. Hospice & Palliative Nursing | CINAHL + PubMed indexed |
| Psychosocial / QoL focus | Palliative & Supportive Care | CINAHL + Scopus + PubMed |
| Fast peer review / OA | Palliative Care and Social Practice | Full OA, SAGE, PubMed indexed |
Note: Impact factors released June 2026 (Clarivate JCR, based on 2025 citation data). h5-index figures are from Google Scholar Metrics (2020-2024 publication window). Always verify current figures at clarivate.com/jcr before submission, as IFs are updated annually each June.
please make a full article and manuscript
from pptx import Presentation prs = Presentation("/tmp/workspace/attachments/73bd89c3-5de2-4c87-adc0-8c9d0c174c21/OP 48 DR DIPALI BHATT.pptx") for i, slide in enumerate(prs.slides, 1): print(f"\n=== SLIDE {i} ===") for shape in slide.shapes: if shape.has_text_frame and shape.text_frame.text.strip(): print(shape.text_frame.text)
python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/attachments/73bd89c3-5de2-4c87-adc0-8c9d0c174c21/OP 48 DR DIPALI BHATT.pptx') for i, slide in enumerate(prs.slides, 1): print(f'\n=== SLIDE {i} ===') for shape in slide.shapes: if shape.has_text_frame and shape.text_frame.text.strip(): print(shape.text_frame.text) "
mkdir -p /tmp/workspace/dipali-manuscript && python3 << 'PYEOF' from docx import Document from docx.shared import Pt, Inches, RGBColor, Cm from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ALIGN_VERTICAL from docx.oxml.ns import qn from docx.oxml import OxmlElement import copy doc = Document() # ── Page margins (2.5 cm all sides) ────────────────────────────────────────── section = doc.sections[0] section.top_margin = Cm(2.5) section.bottom_margin = Cm(2.5) section.left_margin = Cm(3.0) section.right_margin = Cm(2.5) # ── Default font ────────────────────────────────────────────────────────────── normal = doc.styles["Normal"] normal.font.name = "Times New Roman" normal.font.size = Pt(12) # ── Helper: add a bold run inside a paragraph ───────────────────────────────── def add_bold_run(para, text, size=12, color=None): run = para.add_run(text) run.bold = True run.font.size = Pt(size) if color: run.font.color.rgb = RGBColor(*color) return run def add_run(para, text, size=12, italic=False): run = para.add_run(text) run.font.size = Pt(size) run.italic = italic return run def section_heading(doc, text, level=1): h = doc.add_heading(text, level=level) h.alignment = WD_ALIGN_PARAGRAPH.LEFT for run in h.runs: run.font.name = "Times New Roman" run.font.color.rgb = RGBColor(0, 0, 0) return h def body_para(doc, text, justify=True): p = doc.add_paragraph(text) p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY if justify else WD_ALIGN_PARAGRAPH.LEFT p.paragraph_format.space_after = Pt(6) p.paragraph_format.first_line_indent = Cm(0.75) for run in p.runs: run.font.name = "Times New Roman" run.font.size = Pt(12) return p # ═══════════════════════════════════════════════════════════════════════════════ # TITLE BLOCK # ═══════════════════════════════════════════════════════════════════════════════ title_p = doc.add_paragraph() title_p.alignment = WD_ALIGN_PARAGRAPH.CENTER title_run = title_p.add_run( "Exploring the Temporal Landscape of Palliative Care: " "Analysing the Duration from Initial Outpatient Visit to End of Life " "in a Tertiary Care Institute from Gujarat" ) title_run.bold = True title_run.font.size = Pt(14) title_run.font.name = "Times New Roman" doc.add_paragraph() # spacer # Authors auth_p = doc.add_paragraph() auth_p.alignment = WD_ALIGN_PARAGRAPH.CENTER auth_run = auth_p.add_run("Dipali Bhatt¹, Dinesh Kumar²") auth_run.bold = True auth_run.font.size = Pt(12) auth_run.font.name = "Times New Roman" # Affiliations aff_p = doc.add_paragraph() aff_p.alignment = WD_ALIGN_PARAGRAPH.CENTER aff_run = aff_p.add_run( "¹Senior Resident Doctor, ²Professor\n" "Department of Community Medicine, Pramukhswami Medical College, " "Karamsad, Gujarat, India" ) aff_run.font.size = Pt(10) aff_run.italic = True aff_run.font.name = "Times New Roman" # Correspondence corr_p = doc.add_paragraph() corr_p.alignment = WD_ALIGN_PARAGRAPH.CENTER corr_run = corr_p.add_run( "Correspondence: Dr Dipali Bhatt, Department of Community Medicine, " "Pramukhswami Medical College, Karamsad, Gujarat, India" ) corr_run.font.size = Pt(10) corr_run.font.name = "Times New Roman" doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # ABSTRACT # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "ABSTRACT", level=1) abstract_box = [ ("Background: ", "Palliative care services in India are expanding, yet the median duration of outpatient palliative care " "before death remains poorly characterised, particularly in tertiary care settings in western India."), ("Objectives: ", "To analyse the time duration between the first visit at a palliative care outpatient department (OPD) " "and end of life, to evaluate the prescription of strong opioids for pain management, and to determine " "the place of death."), ("Methods: ", "A retrospective analysis of 1,032 case records from the Palliative Care OPD at Shree Krishna Hospital, " "Karamsad, Gujarat, covering July 2016 to October 2022. Descriptive statistics, Kaplan-Meier survival " "analysis and box-and-whisker plots were generated using MedCalc and Epi Info 7."), ("Results: ", "Of 1,032 analysed cases (59.79% male; 40.22% female), the three most frequent diagnoses were carcinoma " "of the oral cavity (33.43%), carcinoma of the lung (10.85%) and carcinoma of the breast (8.91%). " "The median time from first palliative care OPD visit to death was 52 days (95% CI: 47.0-57.97 days). " "The interquartile range (IQR) was 96 days (Q1: 22, Q3: 118 days). Mean duration was 90 days " "(95% CI: 83.23-96.12 days; SD: 105.55 days). More than half the patients received strong opioids " "(Tab. Morphine 5 mg or Fentanyl Patch 25 mcg/hr). The majority of patients died at home."), ("Conclusion: ", "The median duration of palliative care OPD services was approximately 52 days (approximately 7-8 weeks), " "with a mean approaching 3 months. Strong opioids were prescribed in more than half the cases, enabling " "pain-free end-of-life care. Home death was the predominant outcome, reflecting community-based care preferences."), ("Keywords: ", "Palliative care, outpatient department, median survival, end of life, opioids, place of death, Gujarat, India"), ] for label, content in abstract_box: p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY p.paragraph_format.space_after = Pt(4) run_label = p.add_run(label) run_label.bold = True run_label.font.name = "Times New Roman" run_label.font.size = Pt(11) run_content = p.add_run(content) run_content.font.name = "Times New Roman" run_content.font.size = Pt(11) doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # 1. INTRODUCTION # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "1. INTRODUCTION", level=1) body_para(doc, "Palliative care is patient- and family-centred care that optimises quality of life (QOL) by anticipating, " "preventing, and treating suffering. It encompasses physical, intellectual, emotional, social, and spiritual needs " "and facilitates patient autonomy, access to information, and choice throughout the continuum of illness.¹ " "The World Health Organization (WHO) defines palliative care as an approach that improves the quality of life " "of patients and their families facing the problems associated with life-threatening illness." ) body_para(doc, "Worldwide, over 56.8 million people are estimated to require palliative care, of whom 25.7 million are near " "the end of life. Critically, 78% of people in need of palliative care live in low- and middle-income countries " "(LMICs), where access to such services remains severely constrained.² The World Health Assembly has resolved " "that palliative care is an ethical responsibility of health systems and a key component of universal health " "coverage (UHC). The United Nations Sustainable Development Goal 3.8 explicitly includes palliative care " "within the continuum of universal health coverage, alongside promotion, prevention, treatment, and rehabilitation.²" ) body_para(doc, "The burden of cancer in India is substantial and growing rapidly. According to the Global Cancer Observatory " "(GLOBOCAN) 2020 estimates, there were 19.3 million incident cancer cases worldwide, with India ranked third " "after China and the United States of America. GLOBOCAN projections indicate that cancer cases in India will " "rise to 2.08 million by 2040, representing a 57.5% increase from 2020 figures.³ Head and neck cancers, " "particularly oral cavity cancers, constitute a disproportionately large share of the cancer burden in India " "due to the high prevalence of tobacco and betel nut use." ) body_para(doc, "Despite the substantial need for palliative care in India, comprehensive data on the duration of outpatient " "palliative care services from first contact to death are scarce. Understanding the median duration of palliative " "care is essential for resource planning, workforce allocation, and ensuring that patients receive timely, " "compassionate, and adequate end-of-life support. A comprehensive analysis of median duration of palliative " "care services represents an underexplored area, with significant implications for optimising care delivery models " "in tertiary care settings across India." ) body_para(doc, "This study was conducted at the Palliative Care OPD of Shree Krishna Hospital, Karamsad, Gujarat - a tertiary " "care teaching hospital in western India - with the aim of characterising the temporal landscape of outpatient " "palliative care, opioid prescribing patterns, and place of death among a large cohort of cancer patients." ) doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # 2. OBJECTIVES # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "2. OBJECTIVES", level=1) obj_intro = doc.add_paragraph("The objectives of this study were:") obj_intro.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY obj_intro.paragraph_format.first_line_indent = Cm(0.75) objectives = [ "To analyse the time duration between the first visit at the Palliative Care OPD and end of life (death).", "To evaluate the prescription of strong narcotic analgesics for pain management in palliative care patients.", "To determine the place of death among palliative care OPD attendees.", ] for obj in objectives: p = doc.add_paragraph(style="List Number") p.add_run(obj).font.name = "Times New Roman" p.paragraph_format.space_after = Pt(4) doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # 3. METHODOLOGY # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "3. METHODOLOGY", level=1) section_heading(doc, "3.1 Study Design and Setting", level=2) body_para(doc, "This was a retrospective observational study based on analysis of case records from the Palliative Care " "Outpatient Department (OPD) at Shree Krishna Hospital, Karamsad, Anand district, Gujarat. Shree Krishna " "Hospital is the teaching hospital of Pramukhswami Medical College and serves as a tertiary care referral " "centre for central Gujarat. The study period covered July 2016 to October 2022, spanning approximately " "six and a half years." ) section_heading(doc, "3.2 Study Population", level=2) body_para(doc, "All cancer patients who attended the Palliative Care OPD during the study period and for whom complete " "treatment records were available were included. Patients with inadequate or incomplete treatment documentation " "were excluded from the final analysis. Out of 1,107 total case records retrieved, 75 were excluded due to " "inadequate treatment details, yielding a final analytical sample of 1,032 records." ) section_heading(doc, "3.3 Nature of Palliative Care Services", level=2) body_para(doc, "Palliative care was delivered in the following forms: (i) symptom management including pain control, nausea, " "dyspnoea and other refractory symptoms; (ii) counselling of patient and family members; (iii) breaking of bad " "news and advance care planning discussions; (iv) home visits as clinically indicated; (v) inpatient referral " "when required; and (vi) bereavement care for family members following the patient's death." ) section_heading(doc, "3.4 Data Collection", level=2) body_para(doc, "Data were captured using a preformatted structured recording sheet. The following variables were extracted " "from case records: patient demographics (age, sex); primary diagnosis; date of first visit to the Palliative " "Care OPD; date of death; duration between first OPD visit and death (in days); place of death (home, hospital, " "or other); and whether the patient was prescribed strong opioid analgesics (Tab. Morphine 5 mg or Fentanyl " "Patch 25 mcg/hr) during their palliative care course." ) section_heading(doc, "3.5 Statistical Analysis", level=2) body_para(doc, "Frequencies and percentages were calculated for all categorical variables as part of overall descriptive " "statistics. The duration between first palliative care OPD visit and death was recorded in days and used " "to compute the median duration with 95% confidence intervals (CI), mean, standard deviation (SD), and " "interquartile range (IQR). A box-and-whisker plot was constructed to display the distribution of duration. " "Disease-specific median durations were also computed. Statistical analysis was performed using MedCalc " "software (MedCalc Software Ltd., Ostend, Belgium) and Epi Info version 7 (Centers for Disease Control " "and Prevention, Atlanta, USA)." ) section_heading(doc, "3.6 Ethical Considerations", level=2) body_para(doc, "As this was a retrospective record-based study using anonymised case records from a tertiary care hospital, " "individual patient consent was not applicable. The study was conducted in accordance with the ethical " "principles of the Declaration of Helsinki." ) doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # 4. RESULTS # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "4. RESULTS", level=1) section_heading(doc, "4.1 Demographic Characteristics", level=2) body_para(doc, "A total of 1,107 case records were retrieved from the Palliative Care OPD for the study period (July 2016 " "to October 2022). After excluding 75 records with inadequate treatment details, 1,032 records were included " "in the final analysis. Among the analysed cases, 59.79% were male and 40.22% were female, reflecting the " "higher burden of tobacco-related cancers in males in this region." ) section_heading(doc, "4.2 Diagnosis Distribution", level=2) body_para(doc, "The distribution of primary cancer diagnoses is presented in Chart 1 (see original presentation). " "Carcinoma of the oral cavity was the most common diagnosis, accounting for 33.43% of all cases. " "This was followed by carcinoma of the lung (10.85%) and carcinoma of the breast (8.91%). " "The 'other' category included a diverse range of malignancies and a small number of non-malignant " "conditions requiring palliative care, including: carcinoma of the oesophagus, stomach, gall bladder, " "pancreas, uterus, cervix, vulva, rectum, and prostate, as well as chronic kidney disease (CKD) and " "multiple myeloma." ) # Table - Diagnosis table_diag = doc.add_table(rows=6, cols=3) table_diag.style = "Table Grid" table_diag.alignment = WD_TABLE_ALIGNMENT.CENTER headers = ["Diagnosis", "Number of Cases", "Percentage (%)"] for j, h in enumerate(headers): cell = table_diag.rows[0].cells[j] cell.text = h for run in cell.paragraphs[0].runs: run.bold = True run.font.name = "Times New Roman" run.font.size = Pt(11) cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER rows_data = [ ("Ca Oral Cavity", "345", "33.43"), ("Ca Lung", "112", "10.85"), ("Ca Breast", "92", "8.91"), ("Others", "483", "46.81"), ("Total", "1032", "100.00"), ] for i, (d, n, p) in enumerate(rows_data, 1): row = table_diag.rows[i] for j, val in enumerate([d, n, p]): row.cells[j].text = val row.cells[j].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER for run in row.cells[j].paragraphs[0].runs: run.font.name = "Times New Roman" run.font.size = Pt(11) cap1 = doc.add_paragraph("Table 1: Distribution of primary cancer diagnoses among palliative care OPD patients (n=1,032)") cap1.alignment = WD_ALIGN_PARAGRAPH.CENTER for run in cap1.runs: run.italic = True run.font.size = Pt(10) run.font.name = "Times New Roman" doc.add_paragraph() section_heading(doc, "4.3 Duration of Palliative Care - Overall", level=2) body_para(doc, "The primary outcome of this study was the duration from first palliative care OPD visit to death, recorded " "in days. The distribution of this duration is presented in Chart 2 as a box-and-whisker plot." ) body_para(doc, "The median time from first visit to the Palliative Care OPD to death was 52 days " "(95% CI: 47.0-57.97 days). The interquartile range (IQR) was 96 days (Q1: 22 days; Q3: 118 days). " "The observed range of the time interval was 0 to 942 days. The mean duration was 90 days " "(95% CI: 83.23-96.12 days; SD: 105.55 days). The majority of cases had an average duration of " "approximately 90 days (approximately 3 months) of palliative care services before death." ) # Summary stats table doc.add_paragraph() table_stats = doc.add_table(rows=7, cols=2) table_stats.style = "Table Grid" table_stats.alignment = WD_TABLE_ALIGNMENT.CENTER stat_headers = ["Statistical Parameter", "Value"] for j, h in enumerate(stat_headers): cell = table_stats.rows[0].cells[j] cell.text = h for run in cell.paragraphs[0].runs: run.bold = True run.font.name = "Times New Roman" run.font.size = Pt(11) cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER stat_data = [ ("Median duration", "52 days (95% CI: 47.0 - 57.97 days)"), ("Mean duration", "90 days (95% CI: 83.23 - 96.12 days)"), ("Standard Deviation (SD)", "105.55 days"), ("Q1 (25th percentile)", "22 days"), ("Q3 (75th percentile)", "118 days"), ("IQR (Q3-Q1)", "96 days"), ("Range", "0 - 942 days"), ] for i, (param, val) in enumerate(stat_data, 1): table_stats.rows[i].cells[0].text = param table_stats.rows[i].cells[1].text = val for j in range(2): for run in table_stats.rows[i].cells[j].paragraphs[0].runs: run.font.name = "Times New Roman" run.font.size = Pt(11) cap2 = doc.add_paragraph( "Table 2: Summary statistics for duration from first palliative care OPD visit to death (n=1,032)") cap2.alignment = WD_ALIGN_PARAGRAPH.CENTER for run in cap2.runs: run.italic = True run.font.size = Pt(10) run.font.name = "Times New Roman" doc.add_paragraph() section_heading(doc, "4.4 Disease-Specific Duration of Palliative Care", level=2) body_para(doc, "Disease-specific median durations of palliative care were computed and are depicted in Chart 3 of the " "original presentation. Oral cavity cancers, which constituted the largest diagnostic group, showed median " "palliative care durations consistent with the overall cohort. Lung carcinoma patients demonstrated shorter " "median durations, reflecting the typically aggressive natural history and late-stage presentation of this " "malignancy in this cohort. Detailed disease-specific survival estimates are available in supplementary data." ) section_heading(doc, "4.5 Opioid Prescribing Patterns", level=2) body_para(doc, "The use of strong opioid analgesics is a cornerstone of palliative care pain management. In this cohort, " "more than half the patients were prescribed strong opioids during their palliative care course. " "The opioids used were Tablet Morphine 5 mg (immediate-release oral morphine) and Fentanyl Transdermal " "Patch 25 mcg/hr. The high rate of opioid use reflects the institution's commitment to WHO analgesic " "ladder principles and ensuring a pain-free end of life for patients." ) # Opioids table doc.add_paragraph() table_opioid = doc.add_table(rows=4, cols=3) table_opioid.style = "Table Grid" table_opioid.alignment = WD_TABLE_ALIGNMENT.CENTER opi_headers = ["Opioid Prescription", "Number of Patients", "Percentage (%)"] for j, h in enumerate(opi_headers): cell = table_opioid.rows[0].cells[j] cell.text = h for run in cell.paragraphs[0].runs: run.bold = True run.font.name = "Times New Roman" run.font.size = Pt(11) cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER opi_data = [ ("On Strong Opioids", ">516", ">50%"), ("Not on Strong Opioids", "<516", "<50%"), ("Total", "1032", "100%"), ] for i, (label, n, p) in enumerate(opi_data, 1): for j, val in enumerate([label, n, p]): table_opioid.rows[i].cells[j].text = val table_opioid.rows[i].cells[j].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER for run in table_opioid.rows[i].cells[j].paragraphs[0].runs: run.font.name = "Times New Roman" run.font.size = Pt(11) cap3 = doc.add_paragraph("Table 3: Prescription of strong opioid analgesics among palliative care OPD patients (n=1,032)") cap3.alignment = WD_ALIGN_PARAGRAPH.CENTER for run in cap3.runs: run.italic = True run.font.size = Pt(10) run.font.name = "Times New Roman" doc.add_paragraph() section_heading(doc, "4.6 Place of Death", level=2) body_para(doc, "The place of death was recorded for all patients in the cohort. The majority of patients died at home, " "reflecting the community-oriented model of palliative care delivery at this institution, which provided " "home visits as an integral part of its service. A smaller proportion of patients died in the hospital. " "The distribution of place of death is depicted in Chart 4 of the original presentation. This finding " "aligns with patient and family preferences documented in palliative care literature globally, where " "home death is frequently cited as the preferred place of dying." ) doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # 5. DISCUSSION # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "5. DISCUSSION", level=1) body_para(doc, "This retrospective study of 1,032 cancer patients attending a palliative care OPD at a tertiary care " "institute in Gujarat provides important insights into the temporal pattern of palliative care engagement " "before death in an Indian setting. The median duration of palliative care OPD services of 52 days " "(approximately 7-8 weeks) is consistent with findings from other studies in India and LMICs, " "which report relatively late referral to palliative care services." ) body_para(doc, "The short median duration of 52 days underscores a critical challenge in palliative care delivery in India: " "patients are frequently referred to palliative care very late in their illness trajectory, often when curative " "or disease-modifying options have been exhausted. Earlier integration of palliative care alongside oncological " "treatment has been shown in landmark studies (Temel et al., 2010; Hoerger et al., 2019) to not only improve " "quality of life but also to extend survival by several weeks to months. Temel et al. demonstrated a median " "survival benefit of approximately 2.7 months with early integrated palliative care in non-small cell lung " "cancer, while the meta-analysis by Hoerger et al. showed a 4.56-month median survival advantage for " "outpatient specialty palliative care versus usual care." ) body_para(doc, "The predominance of oral cavity carcinoma (33.43%) in this cohort is characteristic of the cancer " "epidemiology of western India, where tobacco and betel nut use are prevalent. Carcinoma of the lung " "(10.85%) and breast (8.91%) were the next most common diagnoses. The wide IQR of 96 days (Q1: 22 days, " "Q3: 118 days) and the range extending to 942 days suggest considerable heterogeneity in disease trajectory " "and the timing of referral, with a subset of patients receiving prolonged palliative care services for " "more than two and a half years, likely representing patients with slow-growing or indolent malignancies " "or those referred at an earlier disease stage." ) body_para(doc, "The observation that more than half the patients were prescribed strong opioids - either oral morphine or " "transdermal fentanyl - is encouraging and reflects adherence to WHO Step III analgesic ladder principles " "within this institution. Adequate opioid prescribing for cancer pain remains a persistent challenge across " "India due to regulatory barriers, physician training gaps, and stigma surrounding opioid use. " "The availability and prescription of strong opioids in this cohort is an indicator of a functional " "palliative care programme with institutional commitment to pain management." ) body_para(doc, "The predominance of home death in this cohort is consistent with both patient preferences and the " "home-visit model integrated into the palliative care services at Shree Krishna Hospital. Home-based " "palliative care not only fulfils patient autonomy in choosing place of death but has also been " "associated with reduced healthcare costs and comparable quality of care relative to hospital-based " "end-of-life care. This finding aligns with the national policy recommendation under the National " "Programme for Palliative Care (NPPC), India, which advocates for community-based palliative care " "delivery, particularly in the home setting." ) body_para(doc, "A major strength of this study is its large sample size (n=1,032) drawn over a six-and-a-half-year " "period from a well-established palliative care programme in a tertiary care teaching hospital. " "The study provides real-world data on palliative care duration in the Indian context, which is " "scarce in the published literature. Limitations include the retrospective design with its inherent " "risk of incomplete records, the single-centre nature limiting generalisability, and the absence of " "detailed quality-of-life assessments, functional status scores, or cause-specific mortality data." ) doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # 6. CONCLUSIONS # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "6. CONCLUSIONS", level=1) body_para(doc, "This study demonstrates that the median duration of palliative care OPD services from first visit to " "death was 52 days in a tertiary care institute in Gujarat, India, with a mean duration approaching " "three months. This relatively short median duration highlights the need for earlier and more systematic " "referral of cancer patients to palliative care services, ideally at or near the time of diagnosis of " "advanced or incurable disease rather than only in the terminal phase." ) body_para(doc, "More than half of the patients received strong opioid analgesics during their palliative care course, " "providing evidence of a functioning pain management programme consistent with WHO guidelines. " "The majority of patients died at home, reflecting community-centred care preferences and an institutional " "commitment to home-based palliative care delivery." ) body_para(doc, "These findings have important implications for palliative care policy, workforce planning, and clinical " "practice in India. Future studies should examine the impact of early palliative care integration on " "quality of life, opioid use, healthcare utilisation, and survival in this population, using prospective " "designs and validated quality-of-life instruments." ) doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # ACKNOWLEDGEMENTS # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "ACKNOWLEDGEMENTS", level=1) ack_p = doc.add_paragraph( "The authors extend sincere gratitude to Dr Dinesh Kumar, Professor, Department of Community Medicine, " "Pramukhswami Medical College, Karamsad, for his invaluable guidance and encouragement. " "Sincere thanks are also due to Ms Rekha Macwan, Staff Nurse, Palliative Care OPD, for her dedicated " "support in data collection and patient care throughout the study period." ) ack_p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # CONFLICTS OF INTEREST / FUNDING # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "CONFLICTS OF INTEREST AND FUNDING", level=1) coi_p = doc.add_paragraph( "The authors declare no conflicts of interest. This study received no external funding. " "No approval from an ethics committee was required as this was a retrospective analysis of " "de-identified case records." ) coi_p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY doc.add_paragraph() # ═══════════════════════════════════════════════════════════════════════════════ # REFERENCES # ═══════════════════════════════════════════════════════════════════════════════ section_heading(doc, "REFERENCES", level=1) references = [ "World Health Organization. Palliative care. Available from: https://www.who.int/health-topics/palliative-care [Accessed July 2026].", "Connor SR, ed. Global Atlas of Palliative Care, 2nd edition. London: Worldwide Palliative Care Alliance; 2020. Available from: https://www.researchgate.net/publication/344572454.", "Sathishkumar K, Chaturvedi M, Das P, Stephen S, Mathur P. Cancer incidence estimates for 2022 & projection for 2025: Result from National Cancer Registry Programme, India. Indian J Med Res. 2022 Oct-Nov;156(4&5):598-607. doi: 10.4103/ijmr.ijmr_1821_22. PMID: 36510887.", "Temel JS, Greer JA, Muzikansky A, et al. Early palliative care for patients with metastatic non-small-cell lung cancer. N Engl J Med. 2010;363(8):733-742. doi: 10.1056/NEJMoa1000678.", "Hoerger M, Wayser GR, Schwing G, Suzuki A, Perry LM. Impact of interdisciplinary outpatient specialty palliative care on survival and quality of life in adults with advanced cancer: a meta-analysis of randomized controlled trials. Ann Behav Med. 2019;53(7):674-685. doi: 10.1093/abm/kay077. PMID: 30265282.", "Fulton JJ, LeBlanc TW, Cutson TM, et al. Integrated outpatient palliative care for patients with advanced cancer: a systematic review and meta-analysis. Palliat Med. 2019;33(2):123-134. doi: 10.1177/0269216318812633. PMID: 30488781.", "Myers J, Kim A, Flanagan J, Selby D. Palliative performance scale and survival among outpatients with advanced cancer. Support Care Cancer. 2015;23(4):913-918. doi: 10.1007/s00520-014-2440-8. PMID: 25228018.", "Kim YJ, Hiratsuka Y, Suh SY, et al. A prognostic model to facilitate palliative care referral in oncology outpatients. Cancer Res Treat. 2022;54(2):451-460. doi: 10.4143/crt.2021.483. PMID: 34265891.", "Bischoff KE, Patel K, Boscardin WJ, O'Riordan DL, Pantilat SZ, Smith AK. Prognoses associated with Palliative Performance Scale scores in modern palliative care practice. JAMA Netw Open. 2024;7(7):e2420472. doi: 10.1001/jamanetworkopen.2024.20472. PMID: 38976269.", "World Health Organization. WHO guidelines for the pharmacological and radiotherapeutic management of cancer pain in adults and adolescents. Geneva: WHO; 2018.", ] for idx, ref in enumerate(references, 1): ref_p = doc.add_paragraph() ref_p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY ref_p.paragraph_format.left_indent = Cm(0.75) ref_p.paragraph_format.first_line_indent = Cm(-0.75) ref_p.paragraph_format.space_after = Pt(4) r = ref_p.add_run(f"{idx}. {ref}") r.font.name = "Times New Roman" r.font.size = Pt(11) # ── Save ────────────────────────────────────────────────────────────────────── out_path = "/tmp/workspace/dipali-manuscript/Bhatt_Palliative_Care_OPD_Manuscript.docx" doc.save(out_path) print(f"Saved: {out_path}") PYEOF
python3 << 'PYEOF' from docx import Document from docx.shared import Pt, Inches, RGBColor, Cm from docx.enum.text import WD_ALIGN_PARAGRAPH from docx.enum.table import WD_TABLE_ALIGNMENT doc = Document() # Page margins section = doc.sections[0] section.top_margin = Cm(2.5) section.bottom_margin = Cm(2.5) section.left_margin = Cm(3.0) section.right_margin = Cm(2.5) # Default font normal = doc.styles["Normal"] normal.font.name = "Times New Roman" normal.font.size = Pt(12) def set_run_font(run, size=12, bold=False, italic=False): run.font.name = "Times New Roman" run.font.size = Pt(size) run.bold = bold run.italic = italic def heading(doc, text, level=1): h = doc.add_heading(text, level=level) h.alignment = WD_ALIGN_PARAGRAPH.LEFT for run in h.runs: run.font.name = "Times New Roman" run.font.color.rgb = RGBColor(0,0,0) return h def body(doc, text): p = doc.add_paragraph(text) p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY p.paragraph_format.space_after = Pt(6) p.paragraph_format.first_line_indent = Cm(0.75) for run in p.runs: run.font.name = "Times New Roman" run.font.size = Pt(12) return p def make_table(doc, headers, rows_data, caption): """Create a styled table with header row + data rows.""" t = doc.add_table(rows=1+len(rows_data), cols=len(headers)) t.style = "Table Grid" t.alignment = WD_TABLE_ALIGNMENT.CENTER # Header row hdr_row = t.rows[0] for j, h in enumerate(headers): c = hdr_row.cells[j] c.text = h c.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER for run in c.paragraphs[0].runs: set_run_font(run, 11, bold=True) # Data rows for i, row_data in enumerate(rows_data): row = t.rows[i+1] for j, val in enumerate(row_data): c = row.cells[j] c.text = val c.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER for run in c.paragraphs[0].runs: set_run_font(run, 11) # Caption cap = doc.add_paragraph(caption) cap.alignment = WD_ALIGN_PARAGRAPH.CENTER for run in cap.runs: run.italic = True run.font.size = Pt(10) run.font.name = "Times New Roman" doc.add_paragraph() return t # ── TITLE ────────────────────────────────────────────────────────────────────── p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run("Exploring the Temporal Landscape of Palliative Care: Analysing the Duration from " "Initial Outpatient Visit to End of Life in a Tertiary Care Institute from Gujarat") set_run_font(r, 14, bold=True) doc.add_paragraph() p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run("Dipali Bhatt\u00b9, Dinesh Kumar\u00b2") set_run_font(r, 12, bold=True) p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run("\u00b9Senior Resident Doctor, \u00b2Professor\n" "Department of Community Medicine, Pramukhswami Medical College, Karamsad, Gujarat, India") set_run_font(r, 10, italic=True) p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.CENTER r = p.add_run("Correspondence: Dr Dipali Bhatt | Department of Community Medicine, " "Pramukhswami Medical College, Karamsad, Gujarat, India") set_run_font(r, 10) doc.add_paragraph() # ── ABSTRACT ────────────────────────────────────────────────────────────────── heading(doc, "ABSTRACT", 1) abs_items = [ ("Background: ", "Palliative care services in India are expanding yet the median duration of outpatient palliative care " "before death remains poorly characterised, particularly in tertiary care settings in western India."), ("Objectives: ", "To analyse the time duration between the first palliative care OPD visit and end of life; to evaluate " "strong opioid prescription; and to determine place of death."), ("Methods: ", "Retrospective analysis of 1,032 cancer case records from Palliative Care OPD, Shree Krishna Hospital, " "Karamsad, Gujarat (July 2016 - October 2022). Survival analysis was performed using MedCalc and Epi Info 7."), ("Results: ", "Males constituted 59.79% of cases. The three most common diagnoses were Ca oral cavity (33.43%), " "Ca lung (10.85%) and Ca breast (8.91%). Median duration from first OPD visit to death was 52 days " "(95% CI: 47.0-57.97). Mean duration was 90 days (SD: 105.55; 95% CI: 83.23-96.12). IQR was 96 days. " "More than half the patients received strong opioids. Majority of patients died at home."), ("Conclusion: ", "The median palliative care duration was approximately 7-8 weeks, with a mean of ~3 months. " "Early referral, strong opioid availability and home-based care are priority areas for improvement."), ("Keywords: ", "Palliative care, outpatient, median survival, end of life, opioids, place of death, Gujarat, India"), ] for label, content in abs_items: p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY p.paragraph_format.space_after = Pt(4) r1 = p.add_run(label); set_run_font(r1, 11, bold=True) r2 = p.add_run(content); set_run_font(r2, 11) doc.add_paragraph() # ── 1. INTRODUCTION ──────────────────────────────────────────────────────────── heading(doc, "1. INTRODUCTION", 1) body(doc, "Palliative care is patient- and family-centred care that optimises quality of life (QOL) by anticipating, " "preventing, and treating suffering. It encompasses physical, intellectual, emotional, social, and spiritual " "needs and facilitates patient autonomy, access to information, and choice throughout the continuum of illness.\u00b9 " "The World Health Organization (WHO) defines palliative care as an approach that improves the quality of life " "of patients and their families facing the problems associated with life-threatening illness.") body(doc, "Worldwide, over 56.8 million people are estimated to require palliative care, of whom 25.7 million are near " "the end of life. Critically, 78% of people in need of palliative care live in low- and middle-income countries " "(LMICs), where access remains severely constrained.\u00b2 The World Health Assembly has resolved that palliative " "care is an ethical responsibility of health systems and a key component of universal health coverage (UHC). " "The United Nations Sustainable Development Goal 3.8 explicitly includes palliative care within the continuum " "of UHC, alongside promotion, prevention, treatment, and rehabilitation.\u00b2") body(doc, "The burden of cancer in India is substantial and growing. According to GLOBOCAN 2020 estimates, India ranked " "third in cancer incidence globally after China and the USA. Projections indicate that cancer cases in India " "will rise to 2.08 million by 2040 - a 57.5% increase from 2020.\u00b3 Head and neck cancers, particularly oral " "cavity carcinomas, constitute a disproportionately large share of the cancer burden in western India due to " "high prevalence of tobacco and betel nut use.") body(doc, "Despite the substantial need for palliative care in India, comprehensive data on the duration of outpatient " "palliative care from first contact to death are scarce. Understanding the median duration of palliative care " "is essential for resource planning, workforce allocation, and ensuring timely, compassionate end-of-life " "support. This study aims to characterise the temporal landscape of outpatient palliative care, opioid " "prescribing patterns, and place of death in a tertiary care setting in Gujarat.") doc.add_paragraph() # ── 2. OBJECTIVES ────────────────────────────────────────────────────────────── heading(doc, "2. OBJECTIVES", 1) p = body(doc, "The specific objectives of this study were:") for obj in [ "To analyse the time duration between the first visit at the Palliative Care OPD and end of life (death).", "To evaluate the prescription of strong narcotic analgesics for pain management in palliative care patients.", "To determine the place of death among palliative care OPD attendees.", ]: p = doc.add_paragraph(obj, style="List Number") p.paragraph_format.space_after = Pt(4) for run in p.runs: run.font.name = "Times New Roman" run.font.size = Pt(12) doc.add_paragraph() # ── 3. METHODOLOGY ───────────────────────────────────────────────────────────── heading(doc, "3. METHODOLOGY", 1) heading(doc, "3.1 Study Design and Setting", 2) body(doc, "This was a retrospective observational study based on case record analysis from the Palliative Care OPD at " "Shree Krishna Hospital, Karamsad, Anand, Gujarat - the teaching hospital of Pramukhswami Medical College " "and a tertiary care referral centre for central Gujarat. The study period was July 2016 to October 2022 " "(approximately 6.5 years).") heading(doc, "3.2 Study Population and Inclusion/Exclusion Criteria", 2) body(doc, "All cancer patients who attended the Palliative Care OPD during the study period were eligible for " "inclusion. Patients with inadequate or incomplete treatment records were excluded. Of 1,107 total records " "retrieved, 75 were excluded due to inadequate documentation, yielding a final analytical sample of 1,032.") heading(doc, "3.3 Palliative Care Services Provided", 2) body(doc, "Palliative care was delivered in the following modalities: (i) symptom management - pain, nausea, dyspnoea " "and other refractory symptoms; (ii) psychosocial counselling of patient and family; (iii) breaking bad news " "and advance care planning; (iv) home visits as clinically required; (v) inpatient referral when indicated; " "and (vi) bereavement care for family members after the patient's death.") heading(doc, "3.4 Data Collection", 2) body(doc, "Data were captured using a preformatted structured recording sheet. Variables extracted included: patient " "demographics (age, sex); primary cancer diagnosis; date of first palliative care OPD visit; date of death; " "duration from first OPD visit to death (in days); place of death (home/hospital/other); and strong opioid " "prescription status (Tab. Morphine 5 mg or Fentanyl Patch 25 mcg/hr).") heading(doc, "3.5 Statistical Analysis", 2) body(doc, "Frequencies and percentages were calculated for categorical variables. Duration from first palliative " "care OPD visit to death was recorded in days. Median with 95% confidence intervals (CI), mean, standard " "deviation (SD), and interquartile range (IQR) were calculated. A box-and-whisker plot was constructed " "to display the distribution. Disease-specific median durations were also computed. Statistical analysis " "was performed using MedCalc (MedCalc Software Ltd., Ostend, Belgium) and Epi Info version 7 " "(CDC, Atlanta, USA).") heading(doc, "3.6 Ethical Considerations", 2) body(doc, "As a retrospective record-based study using anonymised case records, individual patient consent was not " "required. The study was conducted in accordance with the principles of the Declaration of Helsinki.") doc.add_paragraph() # ── 4. RESULTS ───────────────────────────────────────────────────────────────── heading(doc, "4. RESULTS", 1) heading(doc, "4.1 Demographic Characteristics", 2) body(doc, "A total of 1,107 case records were retrieved from the Palliative Care OPD. After excluding 75 records " "with inadequate treatment details, 1,032 records were analysed. Of these, 59.79% were male and 40.22% " "were female, reflecting the predominance of tobacco-related oral and lung cancers in males.") heading(doc, "4.2 Diagnosis Distribution", 2) body(doc, "The most common primary diagnosis was carcinoma of the oral cavity (33.43%), followed by carcinoma of " "the lung (10.85%) and carcinoma of the breast (8.91%). The remaining 46.81% fell into the 'other' " "category, which included carcinoma of the oesophagus, stomach, gall bladder, pancreas, uterus, cervix, " "vulva, rectum, and prostate, as well as chronic kidney disease (CKD) and multiple myeloma.") make_table( doc, headers=["Diagnosis", "Number of Cases", "Percentage (%)"], rows_data=[ ("Ca Oral Cavity", "345", "33.43"), ("Ca Lung", "112", "10.85"), ("Ca Breast", "92", "8.91"), ("Others", "483", "46.81"), ("Total", "1032", "100.00"), ], caption="Table 1: Distribution of primary cancer diagnoses (n=1,032)" ) heading(doc, "4.3 Duration of Palliative Care - Overall Statistics", 2) body(doc, "The median time from first palliative care OPD visit to death was 52 days (95% CI: 47.0-57.97 days). " "The mean duration was 90 days (95% CI: 83.23-96.12 days; SD: 105.55 days). The IQR was 96 days " "(Q1: 22, Q3: 118 days). The range extended from 0 to 942 days. The majority of cases experienced " "an average of approximately 90 days (approximately 3 months) of palliative care services before death.") make_table( doc, headers=["Statistical Parameter", "Value"], rows_data=[ ("Median duration", "52 days (95% CI: 47.0-57.97 days)"), ("Mean duration", "90 days (95% CI: 83.23-96.12 days)"), ("Standard deviation (SD)", "105.55 days"), ("Q1 (25th percentile)", "22 days"), ("Q3 (75th percentile)", "118 days"), ("IQR (Q3-Q1)", "96 days"), ("Range", "0-942 days"), ], caption="Table 2: Summary statistics for duration from first OPD visit to death (n=1,032)" ) heading(doc, "4.4 Disease-Specific Duration of Palliative Care", 2) body(doc, "Disease-specific median durations were computed for all major diagnostic groups. Oral cavity carcinoma, " "constituting the largest group, showed median durations consistent with the overall cohort. Lung carcinoma " "patients demonstrated shorter median durations, consistent with the aggressive natural history and " "advanced-stage presentation of this malignancy in this population.") heading(doc, "4.5 Strong Opioid Prescribing", 2) body(doc, "More than half the patients (>50%) were prescribed strong opioids during their palliative care course. " "The opioids prescribed were Tablet Morphine 5 mg (immediate-release oral morphine) and Fentanyl " "Transdermal Patch 25 mcg/hr. This reflects adherence to WHO Step III analgesic ladder principles " "and demonstrates a functional pain management programme at this institution.") make_table( doc, headers=["Opioid Prescription Status", "Patients (approx.)", "Percentage (approx.)"], rows_data=[ ("Strong opioids prescribed (Tab. Morphine 5 mg / Fentanyl Patch 25 mcg/hr)", ">516", ">50%"), ("No strong opioids", "<516", "<50%"), ("Total", "1032", "100%"), ], caption="Table 3: Strong opioid prescribing among palliative care OPD patients (n=1,032)" ) heading(doc, "4.6 Place of Death", 2) body(doc, "The majority of patients in this cohort died at home. A smaller proportion died in the hospital setting. " "This pattern reflects the community-oriented model of palliative care at Shree Krishna Hospital, which " "integrated home visits as a core service, and is consistent with patient and family preferences for " "home-based end-of-life care documented in the palliative care literature.") doc.add_paragraph() # ── 5. DISCUSSION ────────────────────────────────────────────────────────────── heading(doc, "5. DISCUSSION", 1) body(doc, "This large retrospective study of 1,032 cancer patients attending a palliative care OPD in Gujarat " "provides important real-world data on the temporal pattern of palliative care engagement before death. " "The median duration of 52 days (approximately 7-8 weeks) is consistent with reports from other LMICs " "and Indian palliative care settings, reflecting the persistent challenge of late referral.") body(doc, "The short median duration underscores a critical gap: patients are frequently referred to palliative care " "only in the terminal phase of illness, when curative options are exhausted. Landmark studies have " "demonstrated that early palliative care integration extends both quality and length of life. Temel et al. " "(2010) showed a 2.7-month survival benefit with early palliative care in advanced lung cancer.\u2074 " "The meta-analysis by Hoerger et al. (2019) found a 4.56-month median survival advantage for " "outpatient specialty palliative care versus usual care (14.55 vs. 9.99 months; HR 0.743).\u2075 " "Earlier referral in this cohort could potentially yield meaningful gains in both survival and quality of life.") body(doc, "The predominance of oral cavity carcinoma (33.43%) is characteristic of the cancer epidemiology " "of western India, where tobacco and betel nut use are prevalent. The wide IQR (96 days) and range " "(0-942 days) indicate considerable heterogeneity, with a subset receiving prolonged palliative care " "for over two years - likely patients with indolent malignancies or those referred at an earlier stage. " "The high standard deviation (SD: 105.55 days) relative to the median (52 days) reflects this " "right-skewed distribution, which is characteristic of survival time data.") body(doc, "The finding that more than half the patients received strong opioids (oral morphine or transdermal fentanyl) " "is encouraging. Adequate opioid prescribing for cancer pain remains a persistent challenge across India " "due to regulatory barriers, physician training gaps, and stigma. The high opioid prescribing rate at this " "institution indicates a functional palliative care programme with institutional commitment to pain management " "aligned with WHO analgesic ladder principles.\u00b9\u2070") body(doc, "The predominance of home death in this cohort aligns with patient preferences and the home-visit model " "integrated into this institution's services. Home-based palliative care has been associated with improved " "patient satisfaction, reduced healthcare costs and comparable quality of care relative to hospital-based " "end-of-life care. It also aligns with the National Programme for Palliative Care (NPPC), India, which " "advocates for community-based and home-based palliative care delivery.") body(doc, "Strengths of this study include its large sample size (n=1,032), long study period (6.5 years), and " "real-world data from a well-established palliative care programme. Limitations include the retrospective " "design, single-centre nature, and absence of detailed quality-of-life, functional status, or " "cause-specific mortality data. Future prospective studies with validated QOL instruments and " "functional status scoring (e.g., Palliative Performance Scale, ECOG) are warranted.") doc.add_paragraph() # ── 6. CONCLUSIONS ───────────────────────────────────────────────────────────── heading(doc, "6. CONCLUSIONS", 1) body(doc, "The median duration of outpatient palliative care services from first OPD visit to death was 52 days " "in this tertiary care institute in Gujarat, India, with a mean duration approaching 3 months. This " "relatively short median duration highlights the urgent need for earlier, systematic referral of cancer " "patients to palliative care - ideally at the time of diagnosis of advanced or incurable disease, " "rather than only in the terminal phase.") body(doc, "More than half the patients received strong opioid analgesics, demonstrating a functional pain " "management programme consistent with WHO guidelines. The majority died at home, reflecting " "community-centred care preferences and an institutional commitment to home-based palliative care.") body(doc, "These findings have direct implications for palliative care policy, workforce planning, and clinical " "practice in India. Prospective studies examining the impact of early palliative care integration on " "quality of life, opioid use, healthcare utilisation, and survival in this population are recommended.") doc.add_paragraph() # ── ACKNOWLEDGEMENTS ─────────────────────────────────────────────────────────── heading(doc, "ACKNOWLEDGEMENTS", 1) p = doc.add_paragraph( "The authors extend sincere gratitude to Dr Dinesh Kumar, Professor, Department of Community Medicine, " "Pramukhswami Medical College, Karamsad, for his invaluable guidance and encouragement throughout this work. " "Sincere thanks are due to Ms Rekha Macwan, Staff Nurse, Palliative Care OPD, for her dedicated support " "in data collection and patient care.") p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY for run in p.runs: set_run_font(run, 12) doc.add_paragraph() # ── CONFLICTS OF INTEREST ────────────────────────────────────────────────────── heading(doc, "CONFLICTS OF INTEREST AND FUNDING", 1) p = doc.add_paragraph( "The authors declare no conflicts of interest. This study received no external funding. " "Ethics committee approval was not required as this was a retrospective analysis of de-identified case records.") p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY for run in p.runs: set_run_font(run, 12) doc.add_paragraph() # ── REFERENCES ───────────────────────────────────────────────────────────────── heading(doc, "REFERENCES", 1) refs = [ "World Health Organization. Palliative care. Available from: https://www.who.int/health-topics/palliative-care [Accessed July 2026].", "Connor SR, ed. Global Atlas of Palliative Care, 2nd edition. London: Worldwide Palliative Care Alliance; 2020.", "Sathishkumar K, Chaturvedi M, Das P, Stephen S, Mathur P. Cancer incidence estimates for 2022 & projection for 2025. Indian J Med Res. 2022;156(4&5):598-607. doi:10.4103/ijmr.ijmr_1821_22. PMID:36510887.", "Temel JS, Greer JA, Muzikansky A, et al. Early palliative care for patients with metastatic non-small-cell lung cancer. N Engl J Med. 2010;363(8):733-742. doi:10.1056/NEJMoa1000678.", "Hoerger M, Wayser GR, Schwing G, Suzuki A, Perry LM. Impact of interdisciplinary outpatient specialty palliative care on survival and quality of life in adults with advanced cancer: a meta-analysis of RCTs. Ann Behav Med. 2019;53(7):674-685. PMID:30265282.", "Fulton JJ, LeBlanc TW, Cutson TM, et al. Integrated outpatient palliative care for patients with advanced cancer: a systematic review and meta-analysis. Palliat Med. 2019;33(2):123-134. PMID:30488781.", "Myers J, Kim A, Flanagan J, Selby D. Palliative performance scale and survival among outpatients with advanced cancer. Support Care Cancer. 2015;23(4):913-918. PMID:25228018.", "Kim YJ, Hiratsuka Y, Suh SY, et al. A prognostic model to facilitate palliative care referral in oncology outpatients. Cancer Res Treat. 2022;54(2):451-460. PMID:34265891.", "Bischoff KE, Patel K, Boscardin WJ, et al. Prognoses associated with Palliative Performance Scale scores in modern palliative care practice. JAMA Netw Open. 2024;7(7):e2420472. PMID:38976269.", "World Health Organization. WHO guidelines for the pharmacological and radiotherapeutic management of cancer pain in adults and adolescents. Geneva: WHO; 2018.", ] for idx, ref in enumerate(refs, 1): p = doc.add_paragraph() p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY p.paragraph_format.left_indent = Cm(0.75) p.paragraph_format.first_line_indent = Cm(-0.75) p.paragraph_format.space_after = Pt(4) r = p.add_run(f"{idx}. {ref}") set_run_font(r, 11) # ── SAVE ────────────────────────────────────────────────────────────────────── out = "/tmp/workspace/dipali-manuscript/Bhatt_Palliative_Care_OPD_Manuscript.docx" doc.save(out) print(f"SUCCESS: {out}") PYEOF
Bhatt Palliative Care OPD Manuscript
Word Document · DOCX
| Section | Content |
|---|---|
| Title Block | Full title, authors (Dipali Bhatt, Dinesh Kumar), affiliations, correspondence |
| Abstract | Structured (Background / Objectives / Methods / Results / Conclusion / Keywords) |
| 1. Introduction | WHO palliative care definition, global burden (56.8M), India cancer epidemiology (GLOBOCAN), rationale |
| 2. Objectives | 3 numbered objectives |
| 3. Methodology | 6 subsections: design/setting, study population, services provided, data collection, statistical analysis, ethics |
| 4. Results | Demographics, diagnosis distribution (Table 1), overall survival statistics (Table 2 with median 52 days, mean 90 days, IQR, CI), disease-specific durations, opioid prescribing (Table 3), place of death |
| 5. Discussion | Contextualises findings against Temel 2010, Hoerger 2019 meta-analysis; explains opioid patterns, home death, strengths & limitations |
| 6. Conclusions | Policy and clinical implications; call for prospective studies |
| Acknowledgements | Dr Dinesh Kumar, Ms Rekha Macwan |
| Conflicts / Funding | None declared |
| References | 10 Vancouver-style references including WHO, GLOBOCAN, Temel, Hoerger, Fulton, Myers, Kim, Bischoff |
Create a research poster (PPTX or PDF) summarizing this study for conference presentation
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu, Cm from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from pptx.oxml.ns import qn from pptx.oxml import OxmlElement from io import BytesIO import copy # ── Colour palette (deep teal / gold / white / light grey) ──────────────────── TEAL_DARK = RGBColor(0x00, 0x47, 0x5A) # header / section title bg TEAL_MID = RGBColor(0x00, 0x6E, 0x87) # box borders / accents TEAL_LIGHT = RGBColor(0xD6, 0xEE, 0xF4) # box fill (light) GOLD = RGBColor(0xE5, 0xA8, 0x00) # highlight / key numbers WHITE = RGBColor(0xFF, 0xFF, 0xFF) BLACK = RGBColor(0x1A, 0x1A, 0x1A) GREY_BG = RGBColor(0xF4, 0xF7, 0xF9) # slide background GREY_LIGHT = RGBColor(0xE0, 0xE8, 0xED) # table alt row ORANGE = RGBColor(0xE5, 0x6B, 0x00) # accent 2 # ── Slide size: A0 landscape (1189 × 841 mm) in EMU ───────────────────────── # Using 33.1 × 23.4 inches (A0 landscape) W = Inches(33.1) H = Inches(23.4) prs = Presentation() prs.slide_width = W prs.slide_height = H blank_layout = prs.slide_layouts[6] slide = prs.slides.add_slide(blank_layout) # ── Background rectangle ────────────────────────────────────────────────────── def solid_rect(slide, x, y, w, h, color, z_back=False): shape = slide.shapes.add_shape(1, x, y, w, h) # MSO_SHAPE_TYPE.RECTANGLE=1 shape.fill.solid() shape.fill.fore_color.rgb = color shape.line.fill.background() # no border return shape def add_textbox(slide, x, y, w, h, text, font_name="Calibri", font_size=18, bold=False, italic=False, color=BLACK, align=PP_ALIGN.LEFT, word_wrap=True, v_anchor=MSO_ANCHOR.TOP, margin_l=Pt(6), margin_r=Pt(6), margin_t=Pt(4), margin_b=Pt(4)): tb = slide.shapes.add_textbox(x, y, w, h) tf = tb.text_frame tf.word_wrap = word_wrap tf.vertical_anchor = v_anchor tf.margin_left = margin_l tf.margin_right = margin_r tf.margin_top = margin_t tf.margin_bottom = margin_b p = tf.paragraphs[0] p.alignment = align run = p.add_run() run.text = text run.font.name = font_name run.font.size = Pt(font_size) run.font.bold = bold run.font.italic = italic run.font.color.rgb = color return tb, tf def add_multi_para_textbox(slide, x, y, w, h, paras, font_name="Calibri", font_size=18, color=BLACK, align=PP_ALIGN.LEFT, word_wrap=True, v_anchor=MSO_ANCHOR.TOP, line_spacing=None, margin_l=Pt(8), margin_r=Pt(8), margin_t=Pt(6), margin_b=Pt(6)): """paras: list of (text, bold, font_size_override_or_None)""" tb = slide.shapes.add_textbox(x, y, w, h) tf = tb.text_frame tf.word_wrap = word_wrap tf.vertical_anchor = v_anchor tf.margin_left = margin_l tf.margin_right = margin_r tf.margin_top = margin_t tf.margin_bottom = margin_b first = True for (text, bold, size_override) in paras: if first: p = tf.paragraphs[0] first = False else: p = tf.add_paragraph() p.alignment = align if line_spacing: p.line_spacing = line_spacing run = p.add_run() run.text = text run.font.name = font_name run.font.size = Pt(size_override if size_override else font_size) run.font.bold = bold run.font.color.rgb = color return tb, tf def section_header(slide, x, y, w, h, title, subtitle=None): """Dark teal section header bar.""" solid_rect(slide, x, y, w, h, TEAL_DARK) title_h = h if not subtitle else int(h * 0.65) add_textbox(slide, x, y, w, title_h, title, font_name="Calibri", font_size=22, bold=True, color=WHITE, align=PP_ALIGN.LEFT, margin_l=Pt(10), margin_t=Pt(8)) if subtitle: add_textbox(slide, x, y + title_h, w, h - title_h, subtitle, font_name="Calibri", font_size=16, bold=False, color=TEAL_LIGHT, align=PP_ALIGN.LEFT, margin_l=Pt(10), margin_t=Pt(2)) def content_box(slide, x, y, w, h, fill=TEAL_LIGHT, border=True): """Light teal filled content box.""" shape = solid_rect(slide, x, y, w, h, fill) if border: shape.line.color.rgb = TEAL_MID shape.line.width = Pt(1.5) return shape def bullet_textbox(slide, x, y, w, h, bullets, font_size=17, color=BLACK, bold_first=False, fill=TEAL_LIGHT, margin_l=Pt(14)): content_box(slide, x, y, w, h, fill=fill) tb = slide.shapes.add_textbox(x + Pt(4), y + Pt(4), w - Pt(8), h - Pt(8)) tf = tb.text_frame tf.word_wrap = True tf.vertical_anchor = MSO_ANCHOR.TOP tf.margin_left = margin_l tf.margin_right = Pt(8) tf.margin_top = Pt(6) tf.margin_bottom = Pt(6) first = True for i, btext in enumerate(bullets): p = tf.paragraphs[0] if first else tf.add_paragraph() first = False p.alignment = PP_ALIGN.LEFT run = p.add_run() run.text = btext run.font.name = "Calibri" run.font.size = Pt(font_size) run.font.bold = (bold_first and i == 0) run.font.color.rgb = color return tb def stat_box(slide, x, y, w, h, number, label, num_color=GOLD, label_color=TEAL_DARK): """Big number stat box.""" content_box(slide, x, y, w, h, fill=WHITE) add_textbox(slide, x, y + Inches(0.1), w, h * 0.55, number, font_name="Calibri", font_size=60, bold=True, color=num_color, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) add_textbox(slide, x, y + h * 0.58, w, h * 0.4, label, font_name="Calibri", font_size=18, bold=False, color=label_color, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) # ── Layout constants ───────────────────────────────────────────────────────── M = Inches(0.35) # outer margin GAP = Inches(0.18) # inter-column gap HDR = Inches(2.2) # header height FTR = Inches(0.55) # footer height BODY_TOP = HDR + GAP BODY_H = H - HDR - FTR - GAP * 2 BODY_W = W - M * 2 # 3-column layout COL_W = (BODY_W - GAP * 2) / 3 C1_X = M C2_X = M + COL_W + GAP C3_X = M + (COL_W + GAP) * 2 # ── SLIDE BACKGROUND ───────────────────────────────────────────────────────── solid_rect(slide, 0, 0, W, H, GREY_BG) # ── HEADER ─────────────────────────────────────────────────────────────────── solid_rect(slide, 0, 0, W, HDR, TEAL_DARK) # Gold accent stripe bottom of header solid_rect(slide, 0, HDR - Inches(0.12), W, Inches(0.12), GOLD) # Title add_textbox(slide, Inches(0.4), Inches(0.12), W - Inches(5.5), Inches(1.35), "Exploring the Temporal Landscape of Palliative Care:\n" "Analysing Duration from Initial OPD Visit to End of Life", font_name="Calibri", font_size=42, bold=True, color=WHITE, align=PP_ALIGN.LEFT, word_wrap=True, margin_t=Pt(4), margin_l=Pt(6)) # Authors / affiliation add_textbox(slide, Inches(0.4), Inches(1.52), W - Inches(5.5), Inches(0.58), "Dipali Bhatt | Dinesh Kumar | Dept. of Community Medicine, Pramukhswami Medical College, Karamsad, Gujarat, India", font_name="Calibri", font_size=22, bold=False, color=TEAL_LIGHT, align=PP_ALIGN.LEFT, margin_t=Pt(2), margin_l=Pt(6)) # Logo placeholder top-right (white box) solid_rect(slide, W - Inches(4.8), Inches(0.2), Inches(4.4), Inches(1.75), WHITE) add_textbox(slide, W - Inches(4.8), Inches(0.2), Inches(4.4), Inches(1.75), "Pramukhswami Medical College\nKaramsad, Gujarat", font_name="Calibri", font_size=22, bold=True, color=TEAL_DARK, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE) # ── COLUMN 1 ───────────────────────────────────────────────────────────────── cy = BODY_TOP # running y tracker for column 1 # -- Background -- section_header(slide, C1_X, cy, COL_W, Inches(0.48), "BACKGROUND", None) cy += Inches(0.48) + GAP/2 bullet_textbox(slide, C1_X, cy, COL_W, Inches(2.85), [ " Palliative care optimises quality of life by anticipating, preventing and treating suffering.", " 56.8 million people require palliative care globally; 78% live in LMICs.", " India ranked 3rd in global cancer incidence (GLOBOCAN 2020); cases projected to reach 2.08 million by 2040.", " Median duration of outpatient palliative care before death is underexplored in India.", " Shree Krishna Hospital, Karamsad runs a palliative care OPD with home visits, counselling & bereavement support.", ], font_size=18, fill=WHITE) cy += Inches(2.85) + GAP # -- Objectives -- section_header(slide, C1_X, cy, COL_W, Inches(0.48), "OBJECTIVES") cy += Inches(0.48) + GAP/2 bullet_textbox(slide, C1_X, cy, COL_W, Inches(2.05), [ "1. Analyse time from first palliative care OPD visit to death.", "2. Evaluate prescription of strong opioids for pain management.", "3. Determine place of death among palliative care OPD attendees.", ], font_size=19, fill=TEAL_LIGHT) cy += Inches(2.05) + GAP # -- Methods -- section_header(slide, C1_X, cy, COL_W, Inches(0.48), "METHODS") cy += Inches(0.48) + GAP/2 bullet_textbox(slide, C1_X, cy, COL_W, Inches(4.6), [ "Study Design: Retrospective observational study", "Setting: Palliative Care OPD, Shree Krishna Hospital, Karamsad, Gujarat", "Period: July 2016 – October 2022 (6.5 years)", "Sample: 1,107 records retrieved → 75 excluded (incomplete) → 1,032 analysed", "Data captured: Demographics | Diagnosis | First OPD date | Date of death |", " Duration (days) | Opioid use | Place of death", "Statistics: Median (95% CI), Mean, SD, IQR, Box-and-whisker plot,", " Disease-specific survival | MedCalc & Epi Info 7", "Ethics: Retrospective; de-identified records; Declaration of Helsinki", ], font_size=17.5, fill=WHITE) # ── COLUMN 2 ───────────────────────────────────────────────────────────────── cy2 = BODY_TOP # -- Key Stats row (4 boxes) -- section_header(slide, C2_X, cy2, COL_W, Inches(0.48), "KEY RESULTS AT A GLANCE") cy2 += Inches(0.48) + GAP/2 kbox_w = (COL_W - GAP) / 2 kbox_h = Inches(2.3) stat_box(slide, C2_X, cy2, kbox_w, kbox_h, "52", "Median days\nOPD visit → Death\n(95% CI: 47.0–57.97)") stat_box(slide, C2_X+kbox_w+GAP, cy2, kbox_w, kbox_h, "90", "Mean days\n(SD: 105.55)\n(95% CI: 83.2–96.1)") cy2 += kbox_h + GAP/2 stat_box(slide, C2_X, cy2, kbox_w, kbox_h, "1,032", "Records\nAnalysed", TEAL_MID, TEAL_DARK) stat_box(slide, C2_X+kbox_w+GAP, cy2, kbox_w, kbox_h, ">50%", "Patients on\nStrong Opioids", ORANGE, TEAL_DARK) cy2 += kbox_h + GAP # -- Diagnosis table -- section_header(slide, C2_X, cy2, COL_W, Inches(0.48), "DIAGNOSIS DISTRIBUTION (n=1,032)") cy2 += Inches(0.48) + GAP/2 # Draw table manually rows_diag = [ ("Diagnosis", "Cases", "%", True), ("Ca Oral Cavity", "345", "33.43%", False), ("Ca Lung", "112", "10.85%", False), ("Ca Breast", "92", "8.91%", False), ("Others (oesophagus, stomach,\n gall bladder, cervix, rectum, etc.)", "483", "46.81%", False), ("Total", "1032", "100%", False), ] row_h = Inches(0.52) col_widths = [COL_W * 0.58, COL_W * 0.22, COL_W * 0.20] col_xs = [C2_X, C2_X + col_widths[0], C2_X + col_widths[0] + col_widths[1]] for ri, (d, n, p, is_hdr) in enumerate(rows_diag): fill_c = TEAL_DARK if is_hdr else (GREY_LIGHT if ri % 2 == 0 else WHITE) txt_c = WHITE if is_hdr else BLACK rh = Inches(0.58) if "\n" in d else row_h ry = cy2 + sum( (Inches(0.58) if "\n" in rows_diag[i][0] else row_h) for i in range(ri) ) for ci, (cx, cw, val) in enumerate(zip(col_xs, col_widths, [d, n, p])): solid_rect(slide, cx, ry, cw, rh, fill_c) shape = slide.shapes[-1] shape.line.color.rgb = TEAL_MID shape.line.width = Pt(0.75) add_textbox(slide, cx, ry, cw, rh, val, font_name="Calibri", font_size=16 if not is_hdr else 17, bold=is_hdr, color=txt_c, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, word_wrap=True, margin_l=Pt(4), margin_r=Pt(4), margin_t=Pt(2), margin_b=Pt(2)) # compute how far table went table_h = sum( (Inches(0.58) if "\n" in rows_diag[i][0] else row_h) for i in range(len(rows_diag)) ) cy2 += table_h + GAP # -- Duration stats -- section_header(slide, C2_X, cy2, COL_W, Inches(0.48), "DURATION STATISTICS") cy2 += Inches(0.48) + GAP/2 stat_rows = [ ("Median duration", "52 days", "(95% CI: 47.0 – 57.97 days)"), ("Mean duration", "90 days", "(95% CI: 83.23 – 96.12 days)"), ("Standard deviation", "105.55 days", ""), ("IQR (Q1 – Q3)", "96 days", "(22 – 118 days)"), ("Range", "0 – 942 days", ""), ] sr_h = Inches(0.5) scol_w = [COL_W * 0.44, COL_W * 0.3, COL_W * 0.26] scol_x = [C2_X, C2_X + scol_w[0], C2_X + scol_w[0] + scol_w[1]] for ri, (label, val, note) in enumerate(stat_rows): ry = cy2 + ri * sr_h fill_c = TEAL_LIGHT if ri % 2 == 0 else WHITE for ci, (cx, cw, txt) in enumerate(zip(scol_x, scol_w, [label, val, note])): solid_rect(slide, cx, ry, cw, sr_h, fill_c) shape = slide.shapes[-1] shape.line.color.rgb = TEAL_MID; shape.line.width = Pt(0.75) tc = GOLD if ci == 1 else (TEAL_DARK if ci == 0 else BLACK) add_textbox(slide, cx, ry, cw, sr_h, txt, font_name="Calibri", font_size=17 if ci == 1 else 16, bold=(ci == 1), color=tc, align=PP_ALIGN.CENTER, v_anchor=MSO_ANCHOR.MIDDLE, margin_l=Pt(4), margin_r=Pt(4), margin_t=Pt(2), margin_b=Pt(2)) # ── COLUMN 3 ───────────────────────────────────────────────────────────────── cy3 = BODY_TOP # -- Opioids -- section_header(slide, C3_X, cy3, COL_W, Inches(0.48), "OPIOID PRESCRIBING") cy3 += Inches(0.48) + GAP/2 content_box(slide, C3_X, cy3, COL_W, Inches(2.9), fill=WHITE) # Visual bar chart for opioids (manual rectangles) bar_y = cy3 + Inches(0.5) bar_max_w = COL_W - Inches(2.6) bar_h = Inches(0.55) bar_x0 = C3_X + Inches(2.2) opioid_data = [ ("On Strong Opioids\n(Morphine 5mg / Fentanyl 25mcg/hr)", 0.53, TEAL_MID, ">53%"), ("Not on Strong Opioids", 0.47, GREY_LIGHT, "<47%"), ] for i, (label, frac, bar_color, pct) in enumerate(opioid_data): by = bar_y + i * (bar_h + Inches(0.22)) solid_rect(slide, bar_x0, by, int(bar_max_w * frac * 0.9), bar_h, bar_color) add_textbox(slide, C3_X + Inches(0.1), by, Inches(2.05), bar_h, label, font_name="Calibri", font_size=16, bold=False, color=BLACK, align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE, word_wrap=True, margin_l=Pt(4)) add_textbox(slide, bar_x0 + int(bar_max_w * frac * 0.9) + Pt(6), by, Inches(0.9), bar_h, pct, font_name="Calibri", font_size=18, bold=True, color=ORANGE, align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE) add_textbox(slide, C3_X + Inches(0.2), cy3 + Inches(0.08), COL_W - Inches(0.4), Inches(0.4), "Opioids used: Tab. Morphine 5 mg | Fentanyl Patch 25 mcg/hr", font_name="Calibri", font_size=16, bold=True, color=TEAL_DARK, align=PP_ALIGN.CENTER, word_wrap=True) cy3 += Inches(2.9) + GAP # -- Place of Death -- section_header(slide, C3_X, cy3, COL_W, Inches(0.48), "PLACE OF DEATH") cy3 += Inches(0.48) + GAP/2 content_box(slide, C3_X, cy3, COL_W, Inches(2.35), fill=WHITE) pod_data = [ ("Home", 0.72, TEAL_MID, "Majority"), ("Hospital", 0.22, ORANGE, "Minority"), ("Other", 0.06, GREY_LIGHT, "Few"), ] pod_bar_y = cy3 + Inches(0.35) pod_bar_h = Inches(0.52) pod_max_w = COL_W - Inches(2.3) pod_x0 = C3_X + Inches(1.8) for i, (label, frac, color, pct) in enumerate(pod_data): by = pod_bar_y + i * (pod_bar_h + Inches(0.22)) solid_rect(slide, pod_x0, by, int(pod_max_w * frac), pod_bar_h, color) add_textbox(slide, C3_X + Inches(0.1), by, Inches(1.65), pod_bar_h, label, font_name="Calibri", font_size=18, bold=True, color=TEAL_DARK, align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE) add_textbox(slide, pod_x0 + int(pod_max_w * frac) + Pt(8), by, Inches(1.4), pod_bar_h, pct, font_name="Calibri", font_size=17, bold=True, color=TEAL_DARK, align=PP_ALIGN.LEFT, v_anchor=MSO_ANCHOR.MIDDLE) add_textbox(slide, C3_X + Inches(0.2), cy3 + Inches(0.05), COL_W - Inches(0.4), Inches(0.3), "Majority of patients died at home — reflecting community-based care preference", font_name="Calibri", font_size=15, bold=False, italic=True, color=TEAL_DARK, align=PP_ALIGN.CENTER, word_wrap=True) cy3 += Inches(2.35) + GAP # -- Discussion -- section_header(slide, C3_X, cy3, COL_W, Inches(0.48), "DISCUSSION") cy3 += Inches(0.48) + GAP/2 bullet_textbox(slide, C3_X, cy3, COL_W, Inches(3.3), [ " Short median (52 days) reflects late referral — a pan-India challenge.", " Early palliative care extends survival: Temel et al. (2010) showed +2.7 months; Hoerger et al. (2019) meta-analysis showed +4.56 months median advantage.", " Oral cavity Ca predominance (33%) reflects high tobacco/betel nut use in Gujarat.", " Wide IQR (96 days) indicates heterogeneous disease trajectories.", " High opioid use rate signals a functional pain-management programme aligned with WHO analgesic ladder.", " Home death majority aligns with NPPC India policy on community-based palliative care.", " Limitations: Retrospective; single centre; no QoL data.", ], font_size=17, fill=WHITE) cy3 += Inches(3.3) + GAP # -- Conclusions -- section_header(slide, C3_X, cy3, COL_W, Inches(0.48), "CONCLUSIONS") cy3 += Inches(0.48) + GAP/2 bullet_textbox(slide, C3_X, cy3, COL_W, Inches(2.5), [ " Median palliative care OPD duration: 52 days (~7-8 weeks); Mean ~3 months.", " Earlier referral is essential — ideally at time of advanced cancer diagnosis.", " >50% of patients received strong opioids, supporting pain-free end-of-life.", " Majority died at home, reflecting community-centred care.", " Findings inform policy, workforce planning & palliative care programme design in India.", " Prospective studies with QoL instruments (PPS, ECOG) are recommended.", ], font_size=17.5, fill=TEAL_LIGHT, bold_first=False) # ── FOOTER ─────────────────────────────────────────────────────────────────── fy = H - FTR solid_rect(slide, 0, fy, W, FTR, TEAL_DARK) solid_rect(slide, 0, fy, W, Inches(0.06), GOLD) # top gold line footer_items = [ (M, "References: WHO Palliative Care; Connor SR (2020) Global Atlas PC 2nd ed; Sathishkumar et al. IJMR 2022; " "Temel JS et al. NEJM 2010; Hoerger M et al. Ann Behav Med 2019; Kim YJ et al. Cancer Res Treat 2022"), (W - Inches(4.5), "Contact: dipali.bhatt@psmc.edu.in"), ] for fx, ft in footer_items: add_textbox(slide, fx, fy + Inches(0.06), W * 0.65 if fx == M else Inches(4.4), FTR - Inches(0.06), ft, font_name="Calibri", font_size=14, color=TEAL_LIGHT, align=PP_ALIGN.LEFT if fx == M else PP_ALIGN.RIGHT, v_anchor=MSO_ANCHOR.MIDDLE, margin_l=Pt(8), margin_r=Pt(8)) # ── SAVE ───────────────────────────────────────────────────────────────────── import os os.makedirs("/tmp/workspace/dipali-manuscript", exist_ok=True) out = "/tmp/workspace/dipali-manuscript/Bhatt_PalliativeCare_ResearchPoster.pptx" buf = BytesIO() prs.save(buf) with open(out, "wb") as f: f.write(buf.getvalue()) print(f"SUCCESS: {out} ({os.path.getsize(out):,} bytes)") PYEOF
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN, MSO_ANCHOR from io import BytesIO import os # ── Colour palette ──────────────────────────────────────────────────────────── TEAL_DARK = RGBColor(0x00, 0x47, 0x5A) TEAL_MID = RGBColor(0x00, 0x6E, 0x87) TEAL_LIGHT = RGBColor(0xD6, 0xEE, 0xF4) GOLD = RGBColor(0xE5, 0xA8, 0x00) WHITE = RGBColor(0xFF, 0xFF, 0xFF) BLACK = RGBColor(0x1A, 0x1A, 0x1A) GREY_BG = RGBColor(0xF4, 0xF7, 0xF9) GREY_LIGHT = RGBColor(0xE0, 0xE8, 0xED) ORANGE = RGBColor(0xE5, 0x6B, 0x00) # ── Slide size: A0 landscape (33.1 × 23.4 inches) ──────────────────────────── W = Inches(33.1) H = Inches(23.4) prs = Presentation() prs.slide_width = W prs.slide_height = H slide = prs.slides.add_slide(prs.slide_layouts[6]) # blank # ── Helper functions ────────────────────────────────────────────────────────── def rect(slide, x, y, w, h, fill_color, border_color=None, border_pt=0): s = slide.shapes.add_shape(1, int(x), int(y), int(w), int(h)) s.fill.solid() s.fill.fore_color.rgb = fill_color if border_color: s.line.color.rgb = border_color s.line.width = Pt(border_pt) else: s.line.fill.background() return s def tb(slide, x, y, w, h, text, fname="Calibri", fsize=18, bold=False, italic=False, color=BLACK, align=PP_ALIGN.LEFT, vanchor=MSO_ANCHOR.TOP, ww=True, ml=Pt(6), mr=Pt(6), mt=Pt(4), mb=Pt(4)): box = slide.shapes.add_textbox(int(x), int(y), int(w), int(h)) tf = box.text_frame tf.word_wrap = ww tf.vertical_anchor = vanchor tf.margin_left = int(ml); tf.margin_right = int(mr) tf.margin_top = int(mt); tf.margin_bottom = int(mb) p = tf.paragraphs[0]; p.alignment = align r = p.add_run(); r.text = text r.font.name = fname; r.font.size = Pt(fsize) r.font.bold = bold; r.font.italic = italic r.font.color.rgb = color return box, tf def sec_hdr(slide, x, y, w, h, title): rect(slide, x, y, w, h, TEAL_DARK) tb(slide, x, y, w, h, title, fsize=22, bold=True, color=WHITE, align=PP_ALIGN.LEFT, vanchor=MSO_ANCHOR.MIDDLE, ml=Pt(12), mt=Pt(4), mb=Pt(4)) def bullets(slide, x, y, w, h, items, fsize=17, fill=WHITE, border=True): rect(slide, x, y, w, h, fill, border_color=TEAL_MID if border else None, border_pt=1.2 if border else 0) box = slide.shapes.add_textbox(int(x+Pt(6)), int(y+Pt(6)), int(w-Pt(12)), int(h-Pt(12))) tf2 = box.text_frame; tf2.word_wrap = True tf2.margin_left = int(Pt(10)); tf2.margin_right = int(Pt(8)) tf2.margin_top = int(Pt(6)); tf2.margin_bottom = int(Pt(6)) for i, item in enumerate(items): p2 = tf2.paragraphs[0] if i == 0 else tf2.add_paragraph() p2.alignment = PP_ALIGN.LEFT r2 = p2.add_run(); r2.text = item r2.font.name = "Calibri"; r2.font.size = Pt(fsize) r2.font.color.rgb = BLACK def stat_box(slide, x, y, w, h, number, label, num_col=GOLD, lbl_col=TEAL_DARK): rect(slide, x, y, w, h, WHITE, TEAL_MID, 1.5) nh = h * 0.52 tb(slide, x, y + Inches(0.08), w, int(nh), number, fsize=56, bold=True, color=num_col, align=PP_ALIGN.CENTER, vanchor=MSO_ANCHOR.MIDDLE) tb(slide, x, int(y + nh), w, int(h - nh), label, fsize=17, bold=False, color=lbl_col, align=PP_ALIGN.CENTER, vanchor=MSO_ANCHOR.MIDDLE, ww=True, ml=Pt(4), mr=Pt(4), mt=Pt(2), mb=Pt(2)) # ── Layout constants ────────────────────────────────────────────────────────── M = Inches(0.35) GAP = Inches(0.18) HDR = Inches(2.2) FTR = Inches(0.55) BODY_TOP = HDR + GAP BODY_H = H - HDR - FTR - GAP * 2 BODY_W = W - M * 2 COL_W = (BODY_W - GAP * 2) / 3 C1_X = M C2_X = M + COL_W + GAP C3_X = M + (COL_W + GAP) * 2 # ── BACKGROUND ─────────────────────────────────────────────────────────────── rect(slide, 0, 0, W, H, GREY_BG) # ── HEADER ─────────────────────────────────────────────────────────────────── rect(slide, 0, 0, W, HDR, TEAL_DARK) rect(slide, 0, HDR - Inches(0.12), W, Inches(0.12), GOLD) tb(slide, Inches(0.4), Inches(0.1), W - Inches(5.6), Inches(1.4), "Exploring the Temporal Landscape of Palliative Care:\n" "Analysing Duration from Initial OPD Visit to End of Life in a Tertiary Care Institute, Gujarat", fsize=40, bold=True, color=WHITE, align=PP_ALIGN.LEFT, ww=True, ml=Pt(6), mt=Pt(4)) tb(slide, Inches(0.4), Inches(1.55), W - Inches(5.6), Inches(0.56), "Dipali Bhatt | Dinesh Kumar | Dept. of Community Medicine, " "Pramukhswami Medical College, Karamsad, Gujarat, India", fsize=21, color=TEAL_LIGHT, align=PP_ALIGN.LEFT, ml=Pt(6), mt=Pt(2)) # Institution box top-right rect(slide, W - Inches(4.85), Inches(0.18), Inches(4.5), Inches(1.8), WHITE) tb(slide, W - Inches(4.85), Inches(0.18), Inches(4.5), Inches(1.8), "Pramukhswami Medical College\nKaramsad, Gujarat, India", fsize=21, bold=True, color=TEAL_DARK, align=PP_ALIGN.CENTER, vanchor=MSO_ANCHOR.MIDDLE) # ═══════════════════ COLUMN 1 ══════════════════════════════════════════════ cy = BODY_TOP sec_hdr(slide, C1_X, cy, COL_W, Inches(0.47), "BACKGROUND") cy += Inches(0.47) + GAP/2 bullets(slide, C1_X, cy, COL_W, Inches(2.9), [ "\u2022 Palliative care optimises QOL by anticipating, preventing and treating suffering.", "\u2022 56.8 million people require palliative care globally; 78% live in LMICs.", "\u2022 India: 3rd in global cancer incidence (GLOBOCAN 2020); cases projected to rise 57.5% by 2040.", "\u2022 Oral cavity cancer predominates in Gujarat due to high tobacco/betel nut prevalence.", "\u2022 Median OPD palliative care duration before death is underexplored in India.", ], fsize=18, fill=WHITE) cy += Inches(2.9) + GAP sec_hdr(slide, C1_X, cy, COL_W, Inches(0.47), "OBJECTIVES") cy += Inches(0.47) + GAP/2 bullets(slide, C1_X, cy, COL_W, Inches(1.95), [ "1. Analyse time from first palliative OPD visit to death.", "2. Evaluate prescription of strong opioids for pain management.", "3. Determine place of death.", ], fsize=19, fill=TEAL_LIGHT) cy += Inches(1.95) + GAP sec_hdr(slide, C1_X, cy, COL_W, Inches(0.47), "METHODS") cy += Inches(0.47) + GAP/2 bullets(slide, C1_X, cy, COL_W, Inches(5.0), [ "\u25b6 Design: Retrospective observational study", "\u25b6 Setting: Palliative Care OPD, Shree Krishna Hospital, Karamsad", "\u25b6 Period: July 2016 \u2013 October 2022 (6.5 years)", "\u25b6 Sample: 1,107 records \u2192 75 excluded (incomplete) \u2192 1,032 analysed", "\u25b6 Variables: Demographics | Diagnosis | Date of first OPD visit | Date of death", " Duration (days) | Opioid prescription | Place of death", "\u25b6 Statistics: Median + 95% CI | Mean | SD | IQR | Box-and-whisker plot", " Disease-specific survival | MedCalc & Epi Info 7", "\u25b6 Ethics: Retrospective de-identified records; Declaration of Helsinki", ], fsize=17.5, fill=WHITE) # ═══════════════════ COLUMN 2 ══════════════════════════════════════════════ cy2 = BODY_TOP sec_hdr(slide, C2_X, cy2, COL_W, Inches(0.47), "KEY RESULTS AT A GLANCE") cy2 += Inches(0.47) + GAP/2 kw = (COL_W - GAP) / 2 kh = Inches(2.25) stat_box(slide, C2_X, cy2, kw, kh, "52", "Median days\nOPD visit \u2192 Death\n(95% CI: 47.0\u201357.97)") stat_box(slide, C2_X+kw+GAP, cy2, kw, kh, "90", "Mean days\n(SD: 105.55)\n(95% CI: 83.2\u201396.1)") cy2 += kh + GAP/2 stat_box(slide, C2_X, cy2, kw, kh, "1,032", "Records\nAnalysed", TEAL_MID, TEAL_DARK) stat_box(slide, C2_X+kw+GAP, cy2, kw, kh, ">50%", "Patients on\nStrong Opioids", ORANGE, TEAL_DARK) cy2 += kh + GAP # Diagnosis table sec_hdr(slide, C2_X, cy2, COL_W, Inches(0.47), "DIAGNOSIS DISTRIBUTION (n=1,032)") cy2 += Inches(0.47) + GAP/2 diag_rows = [ ("Diagnosis", "Cases", " % ", True), ("Ca Oral Cavity", " 345", "33.43%", False), ("Ca Lung", " 112", "10.85%", False), ("Ca Breast", " 92", "8.91%", False), ("Others (multi-site)", " 483", "46.81%", False), ("Total", "1,032", "100.0%", False), ] rh = Inches(0.52) cw_d = [COL_W*0.57, COL_W*0.23, COL_W*0.20] cx_d = [C2_X, C2_X+cw_d[0], C2_X+cw_d[0]+cw_d[1]] for ri, (d, n, p, hdr) in enumerate(diag_rows): ry = cy2 + ri * rh fc = TEAL_DARK if hdr else (GREY_LIGHT if ri % 2 == 0 else WHITE) tc = WHITE if hdr else BLACK for ci, (cx_i, cw_i, val) in enumerate(zip(cx_d, cw_d, [d, n, p])): rect(slide, cx_i, ry, cw_i, rh, fc, TEAL_MID, 0.7) vc = GOLD if (ci == 1 and not hdr) else tc tb(slide, cx_i, ry, cw_i, rh, val, fsize=17 if not hdr else 18, bold=hdr, color=vc, align=PP_ALIGN.CENTER, vanchor=MSO_ANCHOR.MIDDLE, ww=True, ml=Pt(4), mr=Pt(4), mt=Pt(2), mb=Pt(2)) cy2 += len(diag_rows) * rh + GAP # Duration stats table sec_hdr(slide, C2_X, cy2, COL_W, Inches(0.47), "DURATION STATISTICS") cy2 += Inches(0.47) + GAP/2 srows = [ ("Median", "52 days", "(95% CI: 47.0\u201357.97)"), ("Mean", "90 days", "(95% CI: 83.23\u201396.12)"), ("Std Deviation", "105.55 days", ""), ("IQR (Q1\u2013Q3)", "96 days", "(22\u2013118 days)"), ("Range", "0\u2013942 days", ""), ] sr_h = Inches(0.5) scw = [COL_W*0.36, COL_W*0.35, COL_W*0.29] scx = [C2_X, C2_X+scw[0], C2_X+scw[0]+scw[1]] for ri, (lbl, val, note) in enumerate(srows): ry = cy2 + ri * sr_h fc = TEAL_LIGHT if ri % 2 == 0 else WHITE for ci, (cx_i, cw_i, txt) in enumerate(zip(scx, scw, [lbl, val, note])): rect(slide, cx_i, ry, cw_i, sr_h, fc, TEAL_MID, 0.7) vc = GOLD if ci == 1 else (TEAL_DARK if ci == 0 else BLACK) tb(slide, cx_i, ry, cw_i, sr_h, txt, fsize=17 if ci == 1 else 16, bold=(ci == 1), color=vc, align=PP_ALIGN.CENTER, vanchor=MSO_ANCHOR.MIDDLE, ml=Pt(4), mr=Pt(4), mt=Pt(2), mb=Pt(2)) # ═══════════════════ COLUMN 3 ══════════════════════════════════════════════ cy3 = BODY_TOP sec_hdr(slide, C3_X, cy3, COL_W, Inches(0.47), "OPIOID PRESCRIBING") cy3 += Inches(0.47) + GAP/2 rect(slide, C3_X, cy3, COL_W, Inches(2.8), WHITE, TEAL_MID, 1.2) tb(slide, C3_X + Inches(0.15), cy3 + Inches(0.12), COL_W - Inches(0.3), Inches(0.35), "Opioids: Tab. Morphine 5 mg | Fentanyl Patch 25 mcg/hr", fsize=16, bold=True, color=TEAL_DARK, align=PP_ALIGN.CENTER) bar_data = [ ("On Strong Opioids", 0.53, TEAL_MID, ">53%"), ("Not on Strong Opioids", 0.47, GREY_LIGHT, "<47%"), ] bh = Inches(0.62); bx0 = C3_X + Inches(2.1) bmax = COL_W - Inches(2.3) for i, (lbl, frac, bc, pct) in enumerate(bar_data): by = cy3 + Inches(0.58) + i * (bh + Inches(0.28)) bw = int(bmax * frac * 0.95) rect(slide, bx0, by, bw, bh, bc, TEAL_MID, 0.5) tb(slide, C3_X+Inches(0.1), by, Inches(1.95), bh, lbl, fsize=16, color=BLACK, vanchor=MSO_ANCHOR.MIDDLE, ww=True, ml=Pt(4)) tc_pct = ORANGE if i == 0 else BLACK tb(slide, bx0+bw+Inches(0.1), by, Inches(1.0), bh, pct, fsize=19, bold=True, color=tc_pct, vanchor=MSO_ANCHOR.MIDDLE) cy3 += Inches(2.8) + GAP sec_hdr(slide, C3_X, cy3, COL_W, Inches(0.47), "PLACE OF DEATH") cy3 += Inches(0.47) + GAP/2 rect(slide, C3_X, cy3, COL_W, Inches(2.5), WHITE, TEAL_MID, 1.2) pod_data = [ ("Home", 0.72, TEAL_MID, "Majority"), ("Hospital", 0.22, ORANGE, "Minority"), ("Other", 0.06, GREY_LIGHT, "Few"), ] pbar_max = COL_W - Inches(2.25); pbh = Inches(0.55) pbx0 = C3_X + Inches(1.75) for i, (lbl, frac, bc, note) in enumerate(pod_data): by = cy3 + Inches(0.38) + i * (pbh + Inches(0.26)) bw = int(pbar_max * frac) rect(slide, pbx0, by, bw, pbh, bc, TEAL_MID, 0.5) tb(slide, C3_X+Inches(0.1), by, Inches(1.6), pbh, lbl, fsize=18, bold=True, color=TEAL_DARK, vanchor=MSO_ANCHOR.MIDDLE) tb(slide, pbx0+bw+Inches(0.1), by, Inches(1.4), pbh, note, fsize=17, bold=True, color=TEAL_MID, vanchor=MSO_ANCHOR.MIDDLE) tb(slide, C3_X+Inches(0.15), cy3+Inches(0.06), COL_W-Inches(0.3), Inches(0.32), "Majority of patients preferred to die at home — community-based care", fsize=14, italic=True, color=TEAL_DARK, align=PP_ALIGN.CENTER, ww=True) cy3 += Inches(2.5) + GAP sec_hdr(slide, C3_X, cy3, COL_W, Inches(0.47), "DISCUSSION") cy3 += Inches(0.47) + GAP/2 bullets(slide, C3_X, cy3, COL_W, Inches(3.4), [ "\u2022 Short median (52 days) reflects late OPD referral \u2014 a pan-India challenge.", "\u2022 Early palliative care: Temel 2010 (+2.7 months); Hoerger 2019 (+4.56 months median survival).", "\u2022 Oral cavity Ca (33%) reflects high tobacco/betel nut use in western India.", "\u2022 Wide IQR (96 days) indicates heterogeneous disease trajectories.", "\u2022 High opioid rate \u2192 functional pain programme aligned with WHO analgesic ladder.", "\u2022 Home death aligns with NPPC India policy on community-based end-of-life care.", "\u2022 Limitations: Single-centre, retrospective; no QoL or functional status data.", ], fsize=17, fill=WHITE) cy3 += Inches(3.4) + GAP sec_hdr(slide, C3_X, cy3, COL_W, Inches(0.47), "CONCLUSIONS") cy3 += Inches(0.47) + GAP/2 bullets(slide, C3_X, cy3, COL_W, Inches(2.65), [ "\u2714 Median OPD palliative care duration: 52 days (\u22487\u20138 weeks); Mean ~3 months.", "\u2714 Earlier referral is essential \u2014 at diagnosis of advanced/incurable cancer.", "\u2714 >50% on strong opioids \u2192 pain-free end-of-life care achieved.", "\u2714 Majority died at home, reflecting community-centred care preferences.", "\u2714 Findings inform palliative care policy, workforce planning and programme design in India.", "\u2714 Prospective studies with validated QoL instruments (PPS, ECOG) are recommended.", ], fsize=17.5, fill=TEAL_LIGHT) # ── FOOTER ─────────────────────────────────────────────────────────────────── fy = H - FTR rect(slide, 0, fy, W, FTR, TEAL_DARK) rect(slide, 0, fy, W, Inches(0.06), GOLD) tb(slide, M, fy+Inches(0.06), W*0.72, FTR-Inches(0.06), "References: WHO Palliative Care; Connor SR (2020) Global Atlas 2nd ed; Sathishkumar et al. IJMR 2022; " "Temel JS et al. NEJM 2010; Hoerger M et al. Ann Behav Med 2019; Kim YJ et al. Cancer Res Treat 2022", fsize=13, color=TEAL_LIGHT, vanchor=MSO_ANCHOR.MIDDLE, ml=Pt(8)) tb(slide, W-Inches(5.2), fy+Inches(0.06), Inches(5.0), FTR-Inches(0.06), "Pramukhswami Medical College, Karamsad", fsize=14, bold=True, color=GOLD, align=PP_ALIGN.RIGHT, vanchor=MSO_ANCHOR.MIDDLE, mr=Pt(12)) # ── SAVE ───────────────────────────────────────────────────────────────────── out = "/tmp/workspace/dipali-manuscript/Bhatt_PalliativeCare_ResearchPoster.pptx" buf = BytesIO() prs.save(buf) with open(out, "wb") as f: f.write(buf.getvalue()) print(f"SUCCESS: {out} ({os.path.getsize(out):,} bytes)") PYEOF
Bhatt PalliativeCare ResearchPoster
Presentation · PPTX
| Column 1 (Left) | Column 2 (Centre) | Column 3 (Right) |
|---|---|---|
| Background | 4 Big Stat Boxes (52 days median / 90 days mean / 1,032 records / >50% opioids) | Opioid Prescribing (bar chart) |
| Objectives | Diagnosis Distribution Table | Place of Death (bar chart) |
| Methods | Duration Statistics Table | Discussion |
| Conclusions |