Listen, Answer any question which i ask to you have to give in very simple English so that i can read and remember in one go for my university exams Make this habbit for any questions answers or making any pdf. And also give full content because for 15 marks question i have to write 5 pages of the answer sheet and for 10 marks questions i have to write 3 pages for the university exams, so keep that in mind
Keep this for every chat section new chat or old chats
"Give answers in simple English, full detail for university exams"
| Rule | What I'll do |
|---|---|
| Simple English | Short sentences, easy words |
| 15 marks question | Full long answer, 5 pages worth |
| 10 marks question | Good detailed answer, 3 pages worth |
| PDF format | Same simple, clean, exam style |
| Definitions | Always clearly written first |
| Examples | Added wherever needed |
Make pdf Q.4 Opportunity Cost in Healthcare (10 Marks) Definition Opportunity cost means the value of the next best alternative that is given up when one choice is made. Simple Definition (Easy to Remember) Opportunity cost is the benefit we lose by choosing one option instead of another. Remember this one line: βChoosing one means losing another.β βΈ» Introduction Resources in healthcare are limited, but the health needs of people are unlimited. The government cannot spend money on every health programme at the same time. Therefore, health planners have to decide: * Which programme should receive funds? * Which programme should wait? This sacrifice of the next best option is called Opportunity Cost. It is an important concept in Health Economics because it helps in the best use of limited resources. βΈ» Why is Opportunity Cost Important? Health resources are limited: * Money * Doctors * Nurses * Hospitals * Medicines * Equipment * Time Because these resources are limited, choosing one programme means another programme receives fewer resources. βΈ» Formula Opportunity Cost = Value of the Next Best Alternative Forgone βΈ» Example 1 (Best Example) Government has βΉ100 crore It has two options: * Build a new District Hospital * Start a State-wide Immunization Programme If the government builds the hospital, β‘οΈ It cannot start the immunization programme. Therefore, Opportunity Cost = Benefit lost from the Immunization Programme βΈ» Example 2 Hospital has only one ICU bed. Two patients need admission. The bed is given to Patient A. The benefit that Patient B could have received is the Opportunity Cost. βΈ» Example 3 Government buys a new MRI machine. Because of limited money, it cannot buy more ambulances. The benefit of the ambulances is the Opportunity Cost. βΈ» Examples in Public Health * Building hospitals vs vaccination programmes * Cancer treatment vs maternal health programmes * New medical college vs strengthening Primary Health Centres * Buying MRI machine vs purchasing vaccines * COVID-19 expenditure vs other health programmes βΈ» Importance of Opportunity Cost 1. Better Resource Allocation Helps the government use limited money wisely. βΈ» 2. Better Planning Helps planners select programmes that provide maximum benefit. βΈ» 3. Priority Setting Helps decide which programme should be started first. βΈ» 4. Efficient Use of Resources Reduces wastage of money, manpower and equipment. βΈ» 5. Supports Universal Health Coverage (UHC) Limited resources are used where they benefit the maximum number of people. βΈ» 6. Improves Decision Making Government can compare different health programmes before investing money. βΈ» 7. Cost-effective Healthcare Encourages investment in programmes giving maximum health benefit at the lowest cost. βΈ» Applications in Healthcare Opportunity cost is used in: * National Health Policy * Health Financing * Hospital Management * Budget Planning * Cost-effectiveness Analysis * Health Technology Assessment (HTA) * Programme Evaluation βΈ» Advantages * Better utilization of resources * Scientific decision-making * Better health outcomes * Reduces unnecessary expenditure * Helps achieve Universal Health Coverage βΈ» Limitations * Difficult to measure actual benefits. * Future benefits may be uncertain. * Social benefits cannot always be measured in money. * Political decisions may influence priorities. * Emotional and ethical issues may affect decision-making. βΈ» Role in Public Health Community physicians use opportunity cost while: * Planning health programmes * Preparing district health plans * Allocating budgets * Choosing cost-effective interventions * Evaluating public health programmes βΈ» Recent Relevance Opportunity cost is increasingly used in: * Health Technology Assessment (HTA) * Ayushman Bharat planning * National Health Policy 2017 * Health financing decisions * Resource allocation during pandemics βΈ» Flowchart (Draw in Exam) Limited Resources β Many Health Needs β Choose One Programme β Other Programme is Postponed β Benefit Lost β Opportunity Cost βΈ» Difference Between Cost and Opportunity Cost Cost Opportunity Cost Money actually spent Benefit lost by not choosing the next best option Direct expense Indirect sacrifice Easy to calculate Often difficult to measure βΈ» Conclusion Opportunity cost is one of the most important concepts in health economics. It helps governments and health managers make the best use of limited resources by choosing programmes that provide the greatest health benefit. Proper understanding of opportunity cost leads to better planning, efficient resource allocation, cost-effective healthcare, and progress towards Universal Health Coverage (UHC).
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/health-economics && cat << 'PYEOF' > /tmp/workspace/health-economics/make_pdf.py from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY # Output path output_path = "/tmp/workspace/health-economics/Opportunity_Cost_in_Healthcare.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm ) # Colors DARK_BLUE = colors.HexColor("#1a3a5c") MED_BLUE = colors.HexColor("#2e6da4") LIGHT_BLUE = colors.HexColor("#ddeeff") YELLOW_BG = colors.HexColor("#fff8e1") GREEN_BG = colors.HexColor("#e8f5e9") ORANGE_BG = colors.HexColor("#fff3e0") WHITE = colors.white LIGHT_GRAY = colors.HexColor("#f5f5f5") DARK_GRAY = colors.HexColor("#333333") styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( 'CustomTitle', parent=styles['Title'], fontSize=22, textColor=WHITE, alignment=TA_CENTER, spaceAfter=6, fontName='Helvetica-Bold', ) subtitle_style = ParagraphStyle( 'SubTitle', parent=styles['Normal'], fontSize=12, textColor=colors.HexColor("#cce0ff"), alignment=TA_CENTER, spaceAfter=4, fontName='Helvetica', ) marks_style = ParagraphStyle( 'Marks', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor("#ffd700"), alignment=TA_CENTER, fontName='Helvetica-Bold', ) h1_style = ParagraphStyle( 'H1', parent=styles['Heading1'], fontSize=14, textColor=WHITE, fontName='Helvetica-Bold', spaceAfter=2, spaceBefore=4, ) h2_style = ParagraphStyle( 'H2', parent=styles['Heading2'], fontSize=12, textColor=DARK_BLUE, fontName='Helvetica-Bold', spaceAfter=4, spaceBefore=8, borderPad=2, ) body_style = ParagraphStyle( 'Body', parent=styles['Normal'], fontSize=10.5, textColor=DARK_GRAY, fontName='Helvetica', leading=16, spaceAfter=4, alignment=TA_JUSTIFY, ) bullet_style = ParagraphStyle( 'Bullet', parent=styles['Normal'], fontSize=10.5, textColor=DARK_GRAY, fontName='Helvetica', leading=16, leftIndent=16, spaceAfter=3, ) highlight_style = ParagraphStyle( 'Highlight', parent=styles['Normal'], fontSize=11, textColor=DARK_BLUE, fontName='Helvetica-Bold', alignment=TA_CENTER, spaceAfter=4, spaceBefore=4, ) formula_style = ParagraphStyle( 'Formula', parent=styles['Normal'], fontSize=12, textColor=DARK_BLUE, fontName='Helvetica-Bold', alignment=TA_CENTER, spaceAfter=4, spaceBefore=4, ) small_style = ParagraphStyle( 'Small', parent=styles['Normal'], fontSize=9.5, textColor=colors.HexColor("#555555"), fontName='Helvetica', alignment=TA_CENTER, spaceAfter=2, ) conclusion_style = ParagraphStyle( 'Conclusion', parent=styles['Normal'], fontSize=10.5, textColor=DARK_GRAY, fontName='Helvetica', leading=17, alignment=TA_JUSTIFY, ) story = [] # βββ TITLE BANNER βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ title_data = [[Paragraph("Q.4 Opportunity Cost in Healthcare", title_style)], [Paragraph("Health Economics | University Exam Answer", subtitle_style)], [Paragraph("10 Marks | Simple English | Exam Ready", marks_style)]] title_table = Table(title_data, colWidths=[17*cm]) title_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), DARK_BLUE), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('TOPPADDING', (0,0), (-1,-1), 10), ('BOTTOMPADDING', (0,0), (-1,-1), 10), ('LEFTPADDING', (0,0), (-1,-1), 14), ('RIGHTPADDING', (0,0), (-1,-1), 14), ('ROUNDEDCORNERS', [8,8,8,8]), ])) story.append(title_table) story.append(Spacer(1, 0.4*cm)) # βββ DEFINITION BOX βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ def_data = [ [Paragraph("DEFINITION", ParagraphStyle('dh', parent=h1_style, fontSize=12))], [Paragraph("Opportunity cost means the <b>value of the next best alternative</b> that is given up when one choice is made.", body_style)], ] def_table = Table(def_data, colWidths=[17*cm]) def_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (0,0), MED_BLUE), ('BACKGROUND', (0,1), (0,1), LIGHT_BLUE), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ('BOX', (0,0), (-1,-1), 1, MED_BLUE), ])) story.append(def_table) story.append(Spacer(1, 0.3*cm)) # Simple definition highlight simple_data = [[Paragraph( "Simple Definition (Easy to Remember):<br/><i>Opportunity cost is the benefit we lose by choosing one option instead of another.</i>", ParagraphStyle('sd', parent=body_style, fontSize=11, textColor=colors.HexColor("#5d4037"), fontName='Helvetica') )]] simple_table = Table(simple_data, colWidths=[17*cm]) simple_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), YELLOW_BG), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ('BOX', (0,0), (-1,-1), 1.5, colors.HexColor("#f9a825")), ])) story.append(simple_table) story.append(Spacer(1, 0.2*cm)) # Memory tip mem_data = [[Paragraph( '★ Remember This One Line: <b>"Choosing one means losing another."</b>', ParagraphStyle('mt', parent=body_style, fontSize=11, textColor=colors.HexColor("#b71c1c"), fontName='Helvetica-Bold', alignment=TA_CENTER) )]] mem_table = Table(mem_data, colWidths=[17*cm]) mem_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), colors.HexColor("#ffebee")), ('TOPPADDING', (0,0), (-1,-1), 7), ('BOTTOMPADDING', (0,0), (-1,-1), 7), ('LEFTPADDING', (0,0), (-1,-1), 10), ('RIGHTPADDING', (0,0), (-1,-1), 10), ('BOX', (0,0), (-1,-1), 1.5, colors.HexColor("#ef9a9a")), ])) story.append(mem_table) story.append(Spacer(1, 0.4*cm)) # βββ INTRODUCTION βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ def section_heading(text): data = [[Paragraph(text, h1_style)]] t = Table(data, colWidths=[17*cm]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), MED_BLUE), ('TOPPADDING', (0,0), (-1,-1), 7), ('BOTTOMPADDING', (0,0), (-1,-1), 7), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ])) return t story.append(section_heading("INTRODUCTION")) story.append(Spacer(1, 0.2*cm)) intro_points = [ "Resources in healthcare are <b>limited</b>, but the health needs of people are <b>unlimited</b>.", "The government cannot spend money on every health programme at the same time.", "Therefore, health planners have to decide: <i>Which programme should receive funds? Which programme should wait?</i>", "This sacrifice of the next best option is called <b>Opportunity Cost</b>.", "It is an important concept in <b>Health Economics</b> because it helps in the best use of limited resources.", ] for p in intro_points: story.append(Paragraph("► " + p, bullet_style)) story.append(Spacer(1, 0.3*cm)) # βββ WHY IMPORTANT ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("WHY IS OPPORTUNITY COST IMPORTANT?")) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("Health resources are <b>limited</b>. These include:", body_style)) resources = [["Money", "Doctors", "Nurses", "Hospitals"], ["Medicines", "Equipment", "Time", "Infrastructure"]] res_table = Table(resources, colWidths=[4.25*cm]*4) res_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('FONTNAME', (0,0), (-1,-1), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 10), ('TEXTCOLOR', (0,0), (-1,-1), DARK_BLUE), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('GRID', (0,0), (-1,-1), 0.5, MED_BLUE), ('BOX', (0,0), (-1,-1), 1.5, MED_BLUE), ])) story.append(res_table) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("Because these resources are limited, <b>choosing one programme means another programme receives fewer resources.</b>", body_style)) story.append(Spacer(1, 0.3*cm)) # βββ FORMULA ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("FORMULA")) story.append(Spacer(1, 0.2*cm)) formula_data = [[Paragraph("Opportunity Cost = Value of the Next Best Alternative Forgone", formula_style)]] formula_table = Table(formula_data, colWidths=[17*cm]) formula_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('TOPPADDING', (0,0), (-1,-1), 12), ('BOTTOMPADDING', (0,0), (-1,-1), 12), ('BOX', (0,0), (-1,-1), 2, MED_BLUE), ])) story.append(formula_table) story.append(Spacer(1, 0.3*cm)) # βββ EXAMPLES βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("EXAMPLES")) story.append(Spacer(1, 0.2*cm)) examples = [ ("Example 1 (Best Example)", [ "Government has Rs. 100 crore.", "Option A: Build a new District Hospital.", "Option B: Start a State-wide Immunization Programme.", "If the government builds the hospital -- it cannot start the immunization programme.", "Therefore, Opportunity Cost = Benefit lost from the Immunization Programme.", ], GREEN_BG, colors.HexColor("#388e3c")), ("Example 2 -- ICU Bed", [ "Hospital has only one ICU bed.", "Two patients need admission.", "The bed is given to Patient A.", "The benefit that Patient B could have received is the Opportunity Cost.", ], ORANGE_BG, colors.HexColor("#e65100")), ("Example 3 -- MRI Machine", [ "Government buys a new MRI machine.", "Because of limited money, it cannot buy more ambulances.", "The benefit of the ambulances is the Opportunity Cost.", ], YELLOW_BG, colors.HexColor("#f57f17")), ] for ex_title, ex_points, bg, border_color in examples: ex_data = [[Paragraph(ex_title, ParagraphStyle('exh', parent=body_style, fontName='Helvetica-Bold', fontSize=11, textColor=border_color))]] for ep in ex_points: ex_data.append([Paragraph(" → " + ep, body_style)]) ex_table = Table(ex_data, colWidths=[17*cm]) ex_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), bg), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 10), ('BOX', (0,0), (-1,-1), 1.5, border_color), ('LINEBELOW', (0,0), (0,0), 1, border_color), ])) story.append(ex_table) story.append(Spacer(1, 0.2*cm)) story.append(Spacer(1, 0.1*cm)) # βββ EXAMPLES IN PUBLIC HEALTH ββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("EXAMPLES IN PUBLIC HEALTH")) story.append(Spacer(1, 0.2*cm)) ph_examples = [ "Building hospitals vs vaccination programmes", "Cancer treatment vs maternal health programmes", "New medical college vs strengthening Primary Health Centres", "Buying MRI machine vs purchasing vaccines", "COVID-19 expenditure vs other health programmes", ] for ex in ph_examples: story.append(Paragraph("▶ " + ex, bullet_style)) story.append(Spacer(1, 0.3*cm)) # βββ IMPORTANCE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("IMPORTANCE OF OPPORTUNITY COST")) story.append(Spacer(1, 0.2*cm)) importance_data = [ ["No.", "Point", "What it Means"], ["1", "Better Resource Allocation", "Helps the government use limited money wisely."], ["2", "Better Planning", "Helps planners select programmes that provide maximum benefit."], ["3", "Priority Setting", "Helps decide which programme should be started first."], ["4", "Efficient Use of Resources", "Reduces wastage of money, manpower and equipment."], ["5", "Supports UHC", "Limited resources are used where they benefit the maximum number of people."], ["6", "Improves Decision Making", "Government can compare different health programmes before investing money."], ["7", "Cost-effective Healthcare", "Encourages investment in programmes giving maximum health benefit at the lowest cost."], ] imp_table = Table(importance_data, colWidths=[1.2*cm, 6*cm, 9.8*cm]) imp_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), DARK_BLUE), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,0), 11), ('ALIGN', (0,0), (-1,0), 'CENTER'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [LIGHT_BLUE, WHITE]), ('FONTNAME', (0,1), (-1,-1), 'Helvetica'), ('FONTSIZE', (0,1), (-1,-1), 10), ('TEXTCOLOR', (0,1), (-1,-1), DARK_GRAY), ('ALIGN', (0,1), (0,-1), 'CENTER'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 7), ('BOTTOMPADDING', (0,0), (-1,-1), 7), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('GRID', (0,0), (-1,-1), 0.5, MED_BLUE), ('BOX', (0,0), (-1,-1), 1.5, DARK_BLUE), ('FONTNAME', (1,1), (1,-1), 'Helvetica-Bold'), ('TEXTCOLOR', (1,1), (1,-1), DARK_BLUE), ])) story.append(imp_table) story.append(Spacer(1, 0.3*cm)) # βββ APPLICATIONS βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("APPLICATIONS IN HEALTHCARE")) story.append(Spacer(1, 0.2*cm)) apps = [ "National Health Policy", "Health Financing", "Hospital Management", "Budget Planning", "Cost-effectiveness Analysis", "Health Technology Assessment (HTA)", "Programme Evaluation", ] app_cols = [apps[:4], apps[4:]] app_cells = [[Paragraph("▶ " + a, bullet_style) for a in app_cols[0]], [Paragraph("▶ " + a, bullet_style) for a in app_cols[1]]] # Simple two-column bullet list for a in apps: story.append(Paragraph("▶ " + a, bullet_style)) story.append(Spacer(1, 0.3*cm)) # βββ ADVANTAGES & LIMITATIONS βββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("ADVANTAGES & LIMITATIONS")) story.append(Spacer(1, 0.2*cm)) adv = [ "Better utilization of resources", "Scientific decision-making", "Better health outcomes", "Reduces unnecessary expenditure", "Helps achieve Universal Health Coverage", ] lim = [ "Difficult to measure actual benefits", "Future benefits may be uncertain", "Social benefits cannot always be measured in money", "Political decisions may influence priorities", "Emotional and ethical issues may affect decision-making", ] adv_lim_data = [ [Paragraph("ADVANTAGES", ParagraphStyle('advh', parent=h1_style, fontSize=11)), Paragraph("LIMITATIONS", ParagraphStyle('limh', parent=h1_style, fontSize=11))], ] max_rows = max(len(adv), len(lim)) for i in range(max_rows): a = Paragraph("✓ " + adv[i], bullet_style) if i < len(adv) else Paragraph("", body_style) l = Paragraph("✗ " + lim[i], bullet_style) if i < len(lim) else Paragraph("", body_style) adv_lim_data.append([a, l]) adv_lim_table = Table(adv_lim_data, colWidths=[8.5*cm, 8.5*cm]) adv_lim_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (0,0), colors.HexColor("#388e3c")), ('BACKGROUND', (1,0), (1,0), colors.HexColor("#c62828")), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,0), 11), ('ALIGN', (0,0), (-1,0), 'CENTER'), ('ROWBACKGROUNDS', (0,1), (0,-1), [GREEN_BG, WHITE]), ('ROWBACKGROUNDS', (1,1), (1,-1), [colors.HexColor("#ffebee"), WHITE]), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('GRID', (0,0), (-1,-1), 0.5, colors.HexColor("#bdbdbd")), ('BOX', (0,0), (-1,-1), 1.5, colors.HexColor("#757575")), ('VALIGN', (0,0), (-1,-1), 'TOP'), ])) story.append(adv_lim_table) story.append(Spacer(1, 0.3*cm)) # βββ ROLE IN PUBLIC HEALTH ββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("ROLE IN PUBLIC HEALTH")) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("Community physicians use opportunity cost while:", body_style)) role_points = [ "Planning health programmes", "Preparing district health plans", "Allocating budgets", "Choosing cost-effective interventions", "Evaluating public health programmes", ] for r in role_points: story.append(Paragraph("► " + r, bullet_style)) story.append(Spacer(1, 0.3*cm)) # βββ RECENT RELEVANCE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("RECENT RELEVANCE")) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("Opportunity cost is increasingly used in:", body_style)) recent = [ "Health Technology Assessment (HTA)", "Ayushman Bharat planning", "National Health Policy 2017", "Health financing decisions", "Resource allocation during pandemics (COVID-19)", ] for r in recent: story.append(Paragraph("▶ " + r, bullet_style)) story.append(Spacer(1, 0.3*cm)) # βββ FLOWCHART ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("FLOWCHART (Draw in Exam)")) story.append(Spacer(1, 0.2*cm)) flow_steps = [ "Limited Resources", "Many Health Needs", "Choose One Programme", "Other Programme is Postponed", "Benefit Lost", "OPPORTUNITY COST", ] flow_colors = [ colors.HexColor("#1565c0"), colors.HexColor("#283593"), colors.HexColor("#1a237e"), colors.HexColor("#311b92"), colors.HexColor("#4a148c"), colors.HexColor("#880e4f"), ] flow_data = [] for i, (step, col) in enumerate(zip(flow_steps, flow_colors)): is_last = (i == len(flow_steps)-1) fs = 11 if not is_last else 13 fw = 'Helvetica-Bold' cell = Paragraph(step, ParagraphStyle('fc', parent=body_style, fontName=fw, fontSize=fs, textColor=WHITE, alignment=TA_CENTER)) flow_data.append([cell]) if not is_last: arrow = Paragraph("↓", ParagraphStyle('arr', parent=body_style, fontSize=14, textColor=MED_BLUE, alignment=TA_CENTER)) flow_data.append([arrow]) flow_table = Table(flow_data, colWidths=[9*cm]) flow_style_cmds = [ ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('TOPPADDING', (0,0), (-1,-1), 4), ('BOTTOMPADDING', (0,0), (-1,-1), 4), ] for i, col in enumerate(flow_colors): row_idx = i * 2 flow_style_cmds.append(('BACKGROUND', (0, row_idx), (0, row_idx), col)) flow_style_cmds.append(('ROUNDEDCORNERS', [6,6,6,6])) flow_table.setStyle(TableStyle(flow_style_cmds)) # Center the flowchart center_flow = Table([[flow_table]], colWidths=[17*cm]) center_flow.setStyle(TableStyle([ ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('TOPPADDING', (0,0), (-1,-1), 0), ('BOTTOMPADDING', (0,0), (-1,-1), 0), ])) story.append(center_flow) story.append(Spacer(1, 0.3*cm)) # βββ DIFFERENCE TABLE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("DIFFERENCE: COST vs OPPORTUNITY COST")) story.append(Spacer(1, 0.2*cm)) diff_data = [ ["Point", "Cost", "Opportunity Cost"], ["Definition", "Money actually spent", "Benefit lost by not choosing the next best option"], ["Type", "Direct expense", "Indirect sacrifice"], ["Measurement", "Easy to calculate", "Often difficult to measure"], ["Visibility", "Visible (in budget)", "Invisible (not in budget)"], ["Example", "Rs. 100 crore spent on hospital", "Benefit lost from immunization programme"], ] diff_table = Table(diff_data, colWidths=[3.5*cm, 6.5*cm, 7*cm]) diff_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), DARK_BLUE), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,0), 11), ('ALIGN', (0,0), (-1,0), 'CENTER'), ('BACKGROUND', (0,1), (0,-1), LIGHT_BLUE), ('FONTNAME', (0,1), (0,-1), 'Helvetica-Bold'), ('TEXTCOLOR', (0,1), (0,-1), DARK_BLUE), ('ROWBACKGROUNDS', (1,1), (-1,-1), [WHITE, LIGHT_GRAY]), ('FONTNAME', (1,1), (-1,-1), 'Helvetica'), ('FONTSIZE', (0,1), (-1,-1), 10), ('TEXTCOLOR', (1,1), (-1,-1), DARK_GRAY), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 7), ('BOTTOMPADDING', (0,0), (-1,-1), 7), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('GRID', (0,0), (-1,-1), 0.5, MED_BLUE), ('BOX', (0,0), (-1,-1), 1.5, DARK_BLUE), ])) story.append(diff_table) story.append(Spacer(1, 0.3*cm)) # βββ CONCLUSION βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(section_heading("CONCLUSION")) story.append(Spacer(1, 0.2*cm)) conc_text = ( "Opportunity cost is one of the most important concepts in health economics. " "It helps governments and health managers make the best use of limited resources " "by choosing programmes that provide the greatest health benefit. " "Proper understanding of opportunity cost leads to better planning, efficient resource allocation, " "cost-effective healthcare, and progress towards <b>Universal Health Coverage (UHC)</b>." ) conc_data = [[Paragraph(conc_text, conclusion_style)]] conc_table = Table(conc_data, colWidths=[17*cm]) conc_table.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_BLUE), ('TOPPADDING', (0,0), (-1,-1), 12), ('BOTTOMPADDING', (0,0), (-1,-1), 12), ('LEFTPADDING', (0,0), (-1,-1), 14), ('RIGHTPADDING', (0,0), (-1,-1), 14), ('BOX', (0,0), (-1,-1), 2, MED_BLUE), ])) story.append(conc_table) story.append(Spacer(1, 0.4*cm)) # βββ FOOTER βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(HRFlowable(width="100%", thickness=1.5, color=MED_BLUE)) story.append(Spacer(1, 0.1*cm)) story.append(Paragraph( "Health Economics | University Exam Notes | Simple English | 10 Marks Question", small_style )) # BUILD doc.build(story) print(f"PDF created: {output_path}") PYEOF echo "Script written."
cd /tmp/workspace/health-economics && python make_pdf.py
| Section | What's Inside |
|---|---|
| Title Banner | Subject, marks, exam-ready label |
| Definition Box | Simple + easy-to-remember definition |
| Memory Tip | "Choosing one means losing another" highlighted in red |
| Formula Box | Clearly displayed formula |
| 3 Coloured Examples | Best example + ICU bed + MRI machine |
| Importance Table | All 7 points in a neat numbered table |
| Advantages vs Limitations | Side-by-side coloured table |
| Flowchart | Step-by-step visual flow |
| Cost vs Opportunity Cost | 5-row comparison table |
| Conclusion | Full paragraph in highlighted box |
Opportunity Cost in Healthcare
PDF Document Β· PDF
Make pdf in such a way that i can print in black and white not in colour so that I doesnβt seems ugly and looks light not heavy
cat << 'PYEOF' > /tmp/workspace/health-economics/make_pdf_bw.py from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY output_path = "/tmp/workspace/health-economics/Opportunity_Cost_BW.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=2.2*cm, leftMargin=2.2*cm, topMargin=2*cm, bottomMargin=2*cm ) # ββ Black & White palette (prints clean, looks light) ββ BLACK = colors.HexColor("#000000") DARK = colors.HexColor("#1a1a1a") MID_GRAY = colors.HexColor("#555555") LIGHT_GRAY = colors.HexColor("#eeeeee") XLIGHT_GRAY = colors.HexColor("#f7f7f7") WHITE = colors.white BORDER = colors.HexColor("#999999") BORDER_DARK = colors.HexColor("#444444") # ββ Styles ββ styles = getSampleStyleSheet() def S(name, **kw): base = kw.pop('parent', styles['Normal']) return ParagraphStyle(name, parent=base, **kw) title_s = S('T', fontSize=20, fontName='Helvetica-Bold', textColor=WHITE, alignment=TA_CENTER, spaceAfter=3) sub_s = S('Sub', fontSize=10, fontName='Helvetica', textColor=colors.HexColor("#cccccc"), alignment=TA_CENTER, spaceAfter=2) marks_s = S('Mk', fontSize=10, fontName='Helvetica-Bold', textColor=colors.HexColor("#dddddd"), alignment=TA_CENTER) h1_s = S('H1', fontSize=12, fontName='Helvetica-Bold', textColor=WHITE, spaceAfter=2) h2_s = S('H2', fontSize=11, fontName='Helvetica-Bold', textColor=DARK, spaceAfter=3, spaceBefore=6) body_s = S('B', fontSize=10, fontName='Helvetica', textColor=DARK, leading=15, spaceAfter=3, alignment=TA_JUSTIFY) bullet_s = S('Bl', fontSize=10, fontName='Helvetica', textColor=DARK, leading=15, leftIndent=14, spaceAfter=3) bold_s = S('Bo', fontSize=10, fontName='Helvetica-Bold', textColor=DARK, leading=15, spaceAfter=3) center_s = S('C', fontSize=11, fontName='Helvetica-Bold', textColor=DARK, alignment=TA_CENTER, spaceAfter=3) formula_s = S('F', fontSize=12, fontName='Helvetica-Bold', textColor=DARK, alignment=TA_CENTER, spaceAfter=3) small_s = S('Sm', fontSize=8.5, fontName='Helvetica', textColor=MID_GRAY, alignment=TA_CENTER) conc_s = S('Co', fontSize=10, fontName='Helvetica', textColor=DARK, leading=16, alignment=TA_JUSTIFY) story = [] W = 16.6*cm # usable width # βββ helper: section heading (dark fill, white text) βββββββββββββββββββββββ def sec_head(text): t = Table([[Paragraph(text, h1_s)]], colWidths=[W]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), DARK), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 10), ('RIGHTPADDING', (0,0), (-1,-1), 10), ])) return t # βββ helper: light shaded box ββββββββββββββββββββββββββββββββββββββββββββββ def shade_box(content_rows, bg=XLIGHT_GRAY, border=BORDER, lpad=12): data = [[Paragraph(r, body_s) if isinstance(r, str) else r] for r in content_rows] t = Table(data, colWidths=[W]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), bg), ('BOX', (0,0), (-1,-1), 1, border), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), lpad), ('RIGHTPADDING', (0,0), (-1,-1), 10), ])) return t # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # TITLE BANNER # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ banner = Table([ [Paragraph("Q.4 Opportunity Cost in Healthcare", title_s)], [Paragraph("Health Economics | University Exam Answer", sub_s)], [Paragraph("10 Marks | Simple English | Exam Ready", marks_s)], ], colWidths=[W]) banner.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), DARK), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('TOPPADDING', (0,0), (-1,-1), 10), ('BOTTOMPADDING', (0,0), (-1,-1), 10), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ])) story += [banner, Spacer(1, 0.35*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # DEFINITION # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("DEFINITION")) story.append(Spacer(1, 0.15*cm)) def_box = Table([ [Paragraph("Opportunity cost means the <b>value of the next best alternative</b> that is given up when one choice is made.", body_s)], ], colWidths=[W]) def_box.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_GRAY), ('BOX', (0,0), (-1,-1), 1.5, BORDER_DARK), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ])) story += [def_box, Spacer(1, 0.2*cm)] # Simple definition (dashed border box) simple_box = Table([ [Paragraph("<b>Simple Definition:</b> Opportunity cost is the benefit we lose by choosing one option instead of another.", body_s)], ], colWidths=[W]) simple_box.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), WHITE), ('BOX', (0,0), (-1,-1), 1, BORDER), ('TOPPADDING', (0,0), (-1,-1), 7), ('BOTTOMPADDING', (0,0), (-1,-1), 7), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ])) story += [simple_box, Spacer(1, 0.15*cm)] # Memory tip (outlined, bold) mem_box = Table([ [Paragraph('★ Remember: <b>"Choosing one means losing another."</b>', S('mt', fontSize=11, fontName='Helvetica-Bold', textColor=DARK, alignment=TA_CENTER))], ], colWidths=[W]) mem_box.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_GRAY), ('BOX', (0,0), (-1,-1), 2, DARK), ('TOPPADDING', (0,0), (-1,-1), 8), ('BOTTOMPADDING', (0,0), (-1,-1), 8), ('LEFTPADDING', (0,0), (-1,-1), 12), ('RIGHTPADDING', (0,0), (-1,-1), 12), ])) story += [mem_box, Spacer(1, 0.35*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # INTRODUCTION # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("INTRODUCTION")) story.append(Spacer(1, 0.15*cm)) intro_pts = [ "Resources in healthcare are <b>limited</b>, but the health needs of people are <b>unlimited</b>.", "The government cannot spend money on every health programme at the same time.", "Health planners must decide: <i>Which programme gets funds? Which programme waits?</i>", "This sacrifice of the next best option is called <b>Opportunity Cost</b>.", "It is an important concept in <b>Health Economics</b> - it helps in the best use of limited resources.", ] for p in intro_pts: story.append(Paragraph(" > " + p, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # WHY IMPORTANT # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("WHY IS OPPORTUNITY COST IMPORTANT?")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("Health resources are <b>limited</b>. These include:", body_s)) resources = [["Money", "Doctors", "Nurses", "Hospitals", "Medicines", "Equipment", "Time", "Infrastructure"]] res_t = Table(resources, colWidths=[W/8]*8) res_t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_GRAY), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('FONTNAME', (0,0), (-1,-1), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,-1), 9.5), ('TEXTCOLOR', (0,0), (-1,-1), DARK), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('GRID', (0,0), (-1,-1), 0.5, BORDER), ('BOX', (0,0), (-1,-1), 1, BORDER_DARK), ])) story += [res_t, Spacer(1, 0.15*cm)] story.append(Paragraph("Because these resources are limited, <b>choosing one programme means another programme receives fewer resources.</b>", body_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # FORMULA # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("FORMULA")) story.append(Spacer(1, 0.15*cm)) formula_box = Table([ [Paragraph("Opportunity Cost = Value of the Next Best Alternative Forgone", formula_s)], ], colWidths=[W]) formula_box.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_GRAY), ('ALIGN', (0,0), (-1,-1), 'CENTER'), ('BOX', (0,0), (-1,-1), 2, DARK), ('TOPPADDING', (0,0), (-1,-1), 12), ('BOTTOMPADDING', (0,0), (-1,-1), 12), ])) story += [formula_box, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # EXAMPLES # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("EXAMPLES")) story.append(Spacer(1, 0.15*cm)) examples = [ ("Example 1 (Best Example) - Government Budget", ["Government has Rs. 100 crore.", "Option A: Build a new District Hospital.", "Option B: Start a State-wide Immunization Programme.", "Government builds the hospital - cannot start the immunization programme.", "Therefore: Opportunity Cost = Benefit lost from the Immunization Programme."]), ("Example 2 - ICU Bed", ["Hospital has only one ICU bed.", "Two patients need admission.", "Bed is given to Patient A.", "Benefit that Patient B could have received = Opportunity Cost."]), ("Example 3 - MRI Machine", ["Government buys a new MRI machine.", "Because of limited money, it cannot buy more ambulances.", "Benefit of the ambulances = Opportunity Cost."]), ] for i, (title, points) in enumerate(examples): bg = XLIGHT_GRAY if i % 2 == 0 else WHITE rows = [[Paragraph(title, bold_s)]] for pt in points: rows.append([Paragraph(" -> " + pt, bullet_s)]) ex_t = Table(rows, colWidths=[W]) ex_t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), bg), ('BACKGROUND', (0,0), (0,0), LIGHT_GRAY), ('BOX', (0,0), (-1,-1), 1, BORDER_DARK), ('LINEBELOW', (0,0), (0,0), 1, BORDER), ('TOPPADDING', (0,0), (-1,-1), 5), ('BOTTOMPADDING', (0,0), (-1,-1), 5), ('LEFTPADDING', (0,0), (-1,-1), 10), ('RIGHTPADDING', (0,0), (-1,-1), 10), ])) story += [ex_t, Spacer(1, 0.15*cm)] story.append(Spacer(1, 0.15*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # EXAMPLES IN PUBLIC HEALTH # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("EXAMPLES IN PUBLIC HEALTH")) story.append(Spacer(1, 0.15*cm)) ph_pts = [ "Building hospitals vs vaccination programmes", "Cancer treatment vs maternal health programmes", "New medical college vs strengthening Primary Health Centres", "Buying MRI machine vs purchasing vaccines", "COVID-19 expenditure vs other health programmes", ] for p in ph_pts: story.append(Paragraph(" > " + p, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # IMPORTANCE TABLE # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("IMPORTANCE OF OPPORTUNITY COST")) story.append(Spacer(1, 0.15*cm)) imp_data = [ ["No.", "Point", "What it Means"], ["1", "Better Resource Allocation", "Helps the government use limited money wisely."], ["2", "Better Planning", "Helps planners select programmes that provide maximum benefit."], ["3", "Priority Setting", "Helps decide which programme should be started first."], ["4", "Efficient Use of Resources", "Reduces wastage of money, manpower and equipment."], ["5", "Supports UHC", "Limited resources used where they benefit maximum number of people."], ["6", "Improves Decision Making", "Government compares different health programmes before investing."], ["7", "Cost-effective Healthcare", "Encourages investment in programmes giving maximum health benefit."], ] imp_t = Table(imp_data, colWidths=[1.2*cm, 5.8*cm, 9.6*cm]) imp_t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), DARK), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,0), 10), ('ALIGN', (0,0), (-1,0), 'CENTER'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [LIGHT_GRAY, WHITE]), ('FONTNAME', (0,1), (-1,-1), 'Helvetica'), ('FONTSIZE', (0,1), (-1,-1), 9.5), ('TEXTCOLOR', (0,1), (-1,-1), DARK), ('FONTNAME', (1,1), (1,-1), 'Helvetica-Bold'), ('ALIGN', (0,1), (0,-1), 'CENTER'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('GRID', (0,0), (-1,-1), 0.5, BORDER), ('BOX', (0,0), (-1,-1), 1.5, BORDER_DARK), ])) story += [imp_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # APPLICATIONS # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("APPLICATIONS IN HEALTHCARE")) story.append(Spacer(1, 0.15*cm)) apps = [ "National Health Policy", "Health Financing", "Hospital Management", "Budget Planning", "Cost-effectiveness Analysis", "Health Technology Assessment (HTA)", "Programme Evaluation", ] for a in apps: story.append(Paragraph(" > " + a, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # ADVANTAGES & LIMITATIONS # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("ADVANTAGES & LIMITATIONS")) story.append(Spacer(1, 0.15*cm)) adv = [ "Better utilization of resources", "Scientific decision-making", "Better health outcomes", "Reduces unnecessary expenditure", "Helps achieve Universal Health Coverage", ] lim = [ "Difficult to measure actual benefits", "Future benefits may be uncertain", "Social benefits cannot always be measured in money", "Political decisions may influence priorities", "Emotional and ethical issues may affect decision-making", ] adv_lim = [ [Paragraph("ADVANTAGES", S('ah', fontSize=10, fontName='Helvetica-Bold', textColor=WHITE, alignment=TA_CENTER)), Paragraph("LIMITATIONS", S('lh', fontSize=10, fontName='Helvetica-Bold', textColor=WHITE, alignment=TA_CENTER))], ] for i in range(max(len(adv), len(lim))): a = Paragraph("+ " + adv[i], bullet_s) if i < len(adv) else Paragraph("", body_s) l = Paragraph("- " + lim[i], bullet_s) if i < len(lim) else Paragraph("", body_s) adv_lim.append([a, l]) al_t = Table(adv_lim, colWidths=[W/2, W/2]) al_t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (0,0), MID_GRAY), ('BACKGROUND', (1,0), (1,0), DARK), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('ALIGN', (0,0), (-1,0), 'CENTER'), ('ROWBACKGROUNDS', (0,1), (0,-1), [XLIGHT_GRAY, WHITE]), ('ROWBACKGROUNDS', (1,1), (1,-1), [LIGHT_GRAY, XLIGHT_GRAY]), ('FONTNAME', (0,1), (-1,-1), 'Helvetica'), ('FONTSIZE', (0,0), (-1,-1), 9.5), ('TEXTCOLOR', (0,1), (-1,-1), DARK), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('GRID', (0,0), (-1,-1), 0.5, BORDER), ('BOX', (0,0), (-1,-1), 1.5, BORDER_DARK), ('LINEAFTER', (0,0), (0,-1), 1.5, BORDER_DARK), ])) story += [al_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # ROLE IN PUBLIC HEALTH # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("ROLE IN PUBLIC HEALTH")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("Community physicians use opportunity cost while:", body_s)) role_pts = [ "Planning health programmes", "Preparing district health plans", "Allocating budgets", "Choosing cost-effective interventions", "Evaluating public health programmes", ] for r in role_pts: story.append(Paragraph(" > " + r, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # RECENT RELEVANCE # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("RECENT RELEVANCE")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("Opportunity cost is increasingly used in:", body_s)) recent = [ "Health Technology Assessment (HTA)", "Ayushman Bharat planning", "National Health Policy 2017", "Health financing decisions", "Resource allocation during pandemics (COVID-19)", ] for r in recent: story.append(Paragraph(" > " + r, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # FLOWCHART # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("FLOWCHART (Draw in Exam)")) story.append(Spacer(1, 0.2*cm)) flow_steps = [ "Limited Resources", "Many Health Needs", "Choose One Programme", "Other Programme is Postponed", "Benefit Lost", "OPPORTUNITY COST", ] grays = ["#2a2a2a","#383838","#464646","#545454","#626262","#1a1a1a"] flow_rows = [] for i, (step, gc) in enumerate(zip(flow_steps, grays)): is_last = (i == len(flow_steps)-1) fs = 10 if not is_last else 12 cell = Paragraph(step, S('fc', fontSize=fs, fontName='Helvetica-Bold' if is_last else 'Helvetica', textColor=WHITE, alignment=TA_CENTER)) flow_rows.append([cell]) if not is_last: flow_rows.append([Paragraph("v", S('arr', fontSize=13, fontName='Helvetica-Bold', textColor=DARK, alignment=TA_CENTER))]) flow_t = Table(flow_rows, colWidths=[8*cm]) cmds = [('ALIGN',(0,0),(-1,-1),'CENTER'), ('TOPPADDING',(0,0),(-1,-1),4), ('BOTTOMPADDING',(0,0),(-1,-1),4)] for i, gc in enumerate(grays): r = i*2 cmds.append(('BACKGROUND',(0,r),(0,r), colors.HexColor(gc))) for i in range(len(flow_steps)-1): ar = i*2+1 cmds.append(('BACKGROUND',(0,ar),(0,ar), WHITE)) flow_t.setStyle(TableStyle(cmds)) centre_t = Table([[flow_t]], colWidths=[W]) centre_t.setStyle(TableStyle([('ALIGN',(0,0),(-1,-1),'CENTER'), ('TOPPADDING',(0,0),(-1,-1),0), ('BOTTOMPADDING',(0,0),(-1,-1),0)])) story += [centre_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # DIFFERENCE TABLE # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("DIFFERENCE: COST vs OPPORTUNITY COST")) story.append(Spacer(1, 0.15*cm)) diff = [ ["Point", "Cost", "Opportunity Cost"], ["Definition", "Money actually spent", "Benefit lost by not choosing the next best option"], ["Type", "Direct expense", "Indirect sacrifice"], ["Measurement", "Easy to calculate", "Often difficult to measure"], ["Visibility", "Visible (in budget)", "Invisible (not in budget)"], ["Example", "Rs. 100 crore spent on hospital", "Benefit lost from immunization programme"], ] diff_t = Table(diff, colWidths=[3.5*cm, 6.3*cm, 6.8*cm]) diff_t.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,0), DARK), ('TEXTCOLOR', (0,0), (-1,0), WHITE), ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0), (-1,0), 10), ('ALIGN', (0,0), (-1,0), 'CENTER'), ('BACKGROUND', (0,1), (0,-1), LIGHT_GRAY), ('FONTNAME', (0,1), (0,-1), 'Helvetica-Bold'), ('TEXTCOLOR', (0,1), (0,-1), DARK), ('ROWBACKGROUNDS', (1,1), (-1,-1), [WHITE, XLIGHT_GRAY]), ('FONTNAME', (1,1), (-1,-1), 'Helvetica'), ('FONTSIZE', (0,1), (-1,-1), 9.5), ('TEXTCOLOR', (1,1), (-1,-1), DARK), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0), (-1,-1), 6), ('BOTTOMPADDING', (0,0), (-1,-1), 6), ('LEFTPADDING', (0,0), (-1,-1), 8), ('RIGHTPADDING', (0,0), (-1,-1), 8), ('GRID', (0,0), (-1,-1), 0.5, BORDER), ('BOX', (0,0), (-1,-1), 1.5, BORDER_DARK), ])) story += [diff_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # CONCLUSION # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec_head("CONCLUSION")) story.append(Spacer(1, 0.15*cm)) conc_text = ( "Opportunity cost is one of the most important concepts in health economics. " "It helps governments and health managers make the best use of limited resources " "by choosing programmes that provide the greatest health benefit. " "Proper understanding of opportunity cost leads to better planning, efficient resource allocation, " "cost-effective healthcare, and progress towards <b>Universal Health Coverage (UHC)</b>." ) conc_box = Table([[Paragraph(conc_text, conc_s)]], colWidths=[W]) conc_box.setStyle(TableStyle([ ('BACKGROUND', (0,0), (-1,-1), LIGHT_GRAY), ('BOX', (0,0), (-1,-1), 2, DARK), ('TOPPADDING', (0,0), (-1,-1), 12), ('BOTTOMPADDING', (0,0), (-1,-1), 12), ('LEFTPADDING', (0,0), (-1,-1), 14), ('RIGHTPADDING', (0,0), (-1,-1), 14), ])) story += [conc_box, Spacer(1, 0.35*cm)] # βββ FOOTER ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(HRFlowable(width="100%", thickness=1, color=DARK)) story.append(Spacer(1, 0.1*cm)) story.append(Paragraph( "Health Economics | University Exam Notes | Simple English | 10 Marks", small_s )) doc.build(story) print(f"PDF saved: {output_path}") PYEOF python /tmp/workspace/health-economics/make_pdf_bw.py
| Old (Colour) | New (B&W Print) |
|---|---|
| Dark blue, red, green boxes | Black, dark gray, light gray only |
| Coloured backgrounds | Very light gray (#f7f7f7) or white |
| Coloured borders | Dark gray / black borders |
| Bright yellow memory box | Light gray with thick black border |
| Multi-colour flowchart | Shades of gray (dark to light) |
| Heavy filled cells | Thin grid lines, clean white/light alternate rows |
Opportunity Cost BW
PDF Document Β· PDF
Make note pdf like this not whole black square headings
cd /tmp/workspace/attachments/f5ded5cf-a9b1-43a8-b0c6-c4bd60413ff1/ && python3 -c " import pdfplumber with pdfplumber.open('World Health Day 2026 Full Simple Notes.pdf') as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages[:3]): print(f'--- PAGE {i+1} ---') print(page.extract_text()) print() "
cat << 'PYEOF' > /tmp/workspace/health-economics/make_opportunity_cost_v3.py from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY output_path = "/tmp/workspace/health-economics/Opportunity_Cost_Clean.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=2.2*cm, leftMargin=2.2*cm, topMargin=2*cm, bottomMargin=2*cm ) # ββ Pure B&W palette ββ BLACK = colors.HexColor("#000000") DARK = colors.HexColor("#1a1a1a") MID_GRAY = colors.HexColor("#666666") LITE_GRAY = colors.HexColor("#eeeeee") XLITE = colors.HexColor("#f7f7f7") WHITE = colors.white BORDER = colors.HexColor("#aaaaaa") BORDER_D = colors.HexColor("#555555") styles = getSampleStyleSheet() W = 16.6*cm def S(name, **kw): base = kw.pop('parent', styles['Normal']) return ParagraphStyle(name, parent=base, **kw) # Style definitions doc_title_s = S('DT', fontSize=18, fontName='Helvetica-Bold', textColor=BLACK, alignment=TA_CENTER, spaceAfter=2) doc_sub_s = S('DS', fontSize=10, fontName='Helvetica', textColor=MID_GRAY, alignment=TA_CENTER, spaceAfter=2) doc_marks_s = S('DM', fontSize=10, fontName='Helvetica-Bold', textColor=DARK, alignment=TA_CENTER) # Section heading: numbered, bold, underlined look via left black bar sec_num_s = S('SN', fontSize=13, fontName='Helvetica-Bold', textColor=BLACK, spaceAfter=1, spaceBefore=2, leading=18) body_s = S('B', fontSize=10, fontName='Helvetica', textColor=DARK, leading=15, spaceAfter=3, alignment=TA_JUSTIFY) bullet_s = S('Bl', fontSize=10, fontName='Helvetica', textColor=DARK, leading=15, leftIndent=14, spaceAfter=3) bold_s = S('Bo', fontSize=10, fontName='Helvetica-Bold', textColor=DARK, leading=15, spaceAfter=3) center_s = S('C', fontSize=11, fontName='Helvetica-Bold', textColor=BLACK, alignment=TA_CENTER, spaceAfter=3) formula_s = S('F', fontSize=12, fontName='Helvetica-Bold', textColor=BLACK, alignment=TA_CENTER, spaceAfter=3) small_s = S('Sm', fontSize=8.5, fontName='Helvetica', textColor=MID_GRAY, alignment=TA_CENTER) conc_s = S('Co', fontSize=10, fontName='Helvetica', textColor=DARK, leading=16, alignment=TA_JUSTIFY) mem_s = S('Me', fontSize=11, fontName='Helvetica-Bold', textColor=BLACK, alignment=TA_CENTER) tbl_hdr_s = S('TH', fontSize=10, fontName='Helvetica-Bold', textColor=WHITE, alignment=TA_CENTER) tbl_cell_s = S('TC', fontSize=9.5, fontName='Helvetica', textColor=DARK, leading=14, alignment=TA_LEFT) tbl_cell_b = S('TCB', fontSize=9.5, fontName='Helvetica-Bold', textColor=DARK, leading=14, alignment=TA_LEFT) story = [] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # TITLE AREA β thin border box, no heavy fill # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ title_rows = [ [Paragraph("Opportunity Cost in Healthcare", doc_title_s)], [Paragraph("Health Economics | University Exam Answer", doc_sub_s)], [Paragraph("Q.4 | 10 Marks | Simple English | Print Ready", doc_marks_s)], ] title_t = Table(title_rows, colWidths=[W]) title_t.setStyle(TableStyle([ ('BOX', (0,0),(-1,-1), 2, BLACK), ('LINEBELOW', (0,0),(0,0), 1, BORDER_D), ('ALIGN', (0,0),(-1,-1), 'CENTER'), ('TOPPADDING', (0,0),(-1,-1), 8), ('BOTTOMPADDING', (0,0),(-1,-1), 7), ('LEFTPADDING', (0,0),(-1,-1), 12), ('RIGHTPADDING', (0,0),(-1,-1), 12), ('BACKGROUND', (0,0),(-1,0), XLITE), ('BACKGROUND', (0,1),(-1,-1), WHITE), ])) story += [title_t, Spacer(1, 0.4*cm)] # ββ helper: numbered section heading (bold text + bottom underline only) ββ def sec(number, title): """Numbered heading: bold left-aligned, with a bottom line separator.""" label = f"{number}. {title}" row = [[Paragraph(label, sec_num_s)]] t = Table(row, colWidths=[W]) t.setStyle(TableStyle([ ('LINEBELOW', (0,0),(0,0), 1.5, DARK), ('TOPPADDING', (0,0),(-1,-1), 4), ('BOTTOMPADDING', (0,0),(-1,-1), 4), ('LEFTPADDING', (0,0),(-1,-1), 2), ('RIGHTPADDING', (0,0),(-1,-1), 2), ])) return t # ββ helper: light shaded box ββ def box(rows_data, bg=XLITE, border=BORDER_D, lpad=12): rows = [] for r in rows_data: if isinstance(r, str): rows.append([Paragraph(r, body_s)]) else: rows.append([r]) t = Table(rows, colWidths=[W]) t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,-1), bg), ('BOX', (0,0),(-1,-1), 1, border), ('TOPPADDING', (0,0),(-1,-1), 6), ('BOTTOMPADDING', (0,0),(-1,-1), 5), ('LEFTPADDING', (0,0),(-1,-1), lpad), ('RIGHTPADDING', (0,0),(-1,-1), 10), ])) return t # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # DEFINITION BOX (no section number β intro box) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec("Def", "Definition")) story.append(Spacer(1, 0.15*cm)) story.append(box([ Paragraph("<b>Opportunity cost</b> means the <b>value of the next best alternative</b> that is given up when one choice is made.", body_s), Paragraph("<b>Simple Definition:</b> Opportunity cost is the benefit we lose by choosing one option instead of another.", body_s), ])) story.append(Spacer(1, 0.15*cm)) # Memory tip mem_t = Table([[Paragraph('Remember this one line: <b>"Choosing one means losing another."</b>', mem_s)]], colWidths=[W]) mem_t.setStyle(TableStyle([ ('BOX', (0,0),(-1,-1), 1.5, DARK), ('BACKGROUND', (0,0),(-1,-1), LITE_GRAY), ('TOPPADDING', (0,0),(-1,-1), 8), ('BOTTOMPADDING', (0,0),(-1,-1), 8), ('ALIGN', (0,0),(-1,-1), 'CENTER'), ])) story += [mem_t, Spacer(1, 0.35*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 1. INTRODUCTION # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(1, "Introduction")) story.append(Spacer(1, 0.15*cm)) intro_pts = [ "Resources in healthcare are <b>limited</b>, but the health needs of people are <b>unlimited</b>.", "The government cannot spend money on every health programme at the same time.", "Health planners must decide: <i>Which programme gets funds? Which programme waits?</i>", "This sacrifice of the next best option is called <b>Opportunity Cost</b>.", "It is an important concept in <b>Health Economics</b> β helps in best use of limited resources.", ] for p in intro_pts: story.append(Paragraph("\u2022 " + p, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 2. WHY IMPORTANT # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(2, "Why is Opportunity Cost Important?")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("Health resources are <b>limited</b>. These include:", body_s)) res_data = [["Money", "Doctors", "Nurses", "Hospitals", "Medicines", "Equipment", "Time", "Infrastructure"]] res_t = Table(res_data, colWidths=[W/8]*8) res_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,-1), LITE_GRAY), ('ALIGN', (0,0),(-1,-1), 'CENTER'), ('FONTNAME', (0,0),(-1,-1), 'Helvetica-Bold'), ('FONTSIZE', (0,0),(-1,-1), 9), ('TEXTCOLOR', (0,0),(-1,-1), DARK), ('TOPPADDING', (0,0),(-1,-1), 5), ('BOTTOMPADDING', (0,0),(-1,-1), 5), ('GRID', (0,0),(-1,-1), 0.5, BORDER), ('BOX', (0,0),(-1,-1), 1, BORDER_D), ])) story += [res_t, Spacer(1, 0.12*cm)] story.append(Paragraph("Because resources are limited, <b>choosing one programme means another gets fewer resources.</b>", body_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 3. FORMULA # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(3, "Formula")) story.append(Spacer(1, 0.15*cm)) form_t = Table([[Paragraph("Opportunity Cost = Value of the Next Best Alternative Forgone", formula_s)]], colWidths=[W]) form_t.setStyle(TableStyle([ ('BOX', (0,0),(-1,-1), 2, DARK), ('BACKGROUND', (0,0),(-1,-1), LITE_GRAY), ('ALIGN', (0,0),(-1,-1), 'CENTER'), ('TOPPADDING', (0,0),(-1,-1), 12), ('BOTTOMPADDING', (0,0),(-1,-1), 12), ])) story += [form_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 4. EXAMPLES # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(4, "Examples")) story.append(Spacer(1, 0.15*cm)) examples = [ ("Example 1 (Best Example) β Government Budget", [ "Government has Rs. 100 crore.", "Option A: Build a new District Hospital.", "Option B: Start a State-wide Immunization Programme.", "Government builds the hospital β cannot start immunization.", "Opportunity Cost = Benefit lost from the Immunization Programme.", ]), ("Example 2 β ICU Bed", [ "Hospital has only one ICU bed.", "Two patients need admission. Bed given to Patient A.", "Benefit Patient B could have received = Opportunity Cost.", ]), ("Example 3 β MRI Machine", [ "Government buys a new MRI machine.", "Cannot buy more ambulances due to limited money.", "Benefit of the ambulances = Opportunity Cost.", ]), ] for i, (title, pts) in enumerate(examples): bg = XLITE if i % 2 == 0 else WHITE rows = [[Paragraph(title, bold_s)]] for p in pts: rows.append([Paragraph(" \u2192 " + p, bullet_s)]) ex_t = Table(rows, colWidths=[W]) ex_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,-1), bg), ('BACKGROUND', (0,0),(0,0), LITE_GRAY), ('BOX', (0,0),(-1,-1), 1, BORDER_D), ('LINEBELOW', (0,0),(0,0), 0.5, BORDER), ('TOPPADDING', (0,0),(-1,-1), 5), ('BOTTOMPADDING', (0,0),(-1,-1), 5), ('LEFTPADDING', (0,0),(-1,-1), 10), ('RIGHTPADDING', (0,0),(-1,-1), 10), ])) story += [ex_t, Spacer(1, 0.12*cm)] story.append(Spacer(1, 0.15*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 5. EXAMPLES IN PUBLIC HEALTH # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(5, "Examples in Public Health")) story.append(Spacer(1, 0.15*cm)) ph = [ "Building hospitals vs vaccination programmes", "Cancer treatment vs maternal health programmes", "New medical college vs strengthening Primary Health Centres (PHC)", "Buying MRI machine vs purchasing vaccines", "COVID-19 expenditure vs other health programmes", ] for p in ph: story.append(Paragraph("\u2022 " + p, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 6. IMPORTANCE TABLE # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(6, "Importance of Opportunity Cost")) story.append(Spacer(1, 0.15*cm)) imp_data = [ [Paragraph("No.", tbl_hdr_s), Paragraph("Point", tbl_hdr_s), Paragraph("What it Means", tbl_hdr_s)], [Paragraph("1", tbl_cell_s), Paragraph("Better Resource Allocation", tbl_cell_b), Paragraph("Helps the government use limited money wisely.", tbl_cell_s)], [Paragraph("2", tbl_cell_s), Paragraph("Better Planning", tbl_cell_b), Paragraph("Helps planners select programmes that provide maximum benefit.", tbl_cell_s)], [Paragraph("3", tbl_cell_s), Paragraph("Priority Setting", tbl_cell_b), Paragraph("Helps decide which programme should be started first.", tbl_cell_s)], [Paragraph("4", tbl_cell_s), Paragraph("Efficient Use of Resources", tbl_cell_b), Paragraph("Reduces wastage of money, manpower and equipment.", tbl_cell_s)], [Paragraph("5", tbl_cell_s), Paragraph("Supports UHC", tbl_cell_b), Paragraph("Limited resources used where they benefit maximum number of people.", tbl_cell_s)], [Paragraph("6", tbl_cell_s), Paragraph("Improves Decision Making", tbl_cell_b), Paragraph("Government compares programmes before investing money.", tbl_cell_s)], [Paragraph("7", tbl_cell_s), Paragraph("Cost-effective Healthcare", tbl_cell_b), Paragraph("Invest in programmes giving maximum health benefit at lowest cost.", tbl_cell_s)], ] imp_t = Table(imp_data, colWidths=[1.1*cm, 5.7*cm, 9.8*cm]) imp_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,0), DARK), ('TEXTCOLOR', (0,0),(-1,0), WHITE), ('ALIGN', (0,0),(-1,0), 'CENTER'), ('FONTNAME', (0,0),(-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0),(-1,0), 10), ('ROWBACKGROUNDS',(0,1),(-1,-1), [XLITE, WHITE]), ('FONTSIZE', (0,1),(-1,-1), 9.5), ('TEXTCOLOR', (0,1),(-1,-1), DARK), ('ALIGN', (0,1),(0,-1), 'CENTER'), ('VALIGN', (0,0),(-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0),(-1,-1), 6), ('BOTTOMPADDING', (0,0),(-1,-1), 6), ('LEFTPADDING', (0,0),(-1,-1), 7), ('RIGHTPADDING', (0,0),(-1,-1), 7), ('GRID', (0,0),(-1,-1), 0.5, BORDER), ('BOX', (0,0),(-1,-1), 1.5, BORDER_D), ])) story += [imp_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 7. APPLICATIONS # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(7, "Applications in Healthcare")) story.append(Spacer(1, 0.15*cm)) apps = [ "National Health Policy", "Health Financing", "Hospital Management", "Budget Planning", "Cost-effectiveness Analysis", "Health Technology Assessment (HTA)", "Programme Evaluation", ] for a in apps: story.append(Paragraph("\u2022 " + a, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 8. ADVANTAGES & LIMITATIONS # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(8, "Advantages & Limitations")) story.append(Spacer(1, 0.15*cm)) adv = [ "Better utilization of resources", "Scientific decision-making", "Better health outcomes", "Reduces unnecessary expenditure", "Helps achieve Universal Health Coverage", ] lim = [ "Difficult to measure actual benefits", "Future benefits may be uncertain", "Social benefits cannot be measured in money", "Political decisions may influence priorities", "Ethical issues may affect decision-making", ] al_data = [ [Paragraph("ADVANTAGES", tbl_hdr_s), Paragraph("LIMITATIONS", tbl_hdr_s)], ] for i in range(max(len(adv), len(lim))): a = Paragraph("+ " + adv[i], bullet_s) if i < len(adv) else Paragraph("", body_s) l = Paragraph("- " + lim[i], bullet_s) if i < len(lim) else Paragraph("", body_s) al_data.append([a, l]) al_t = Table(al_data, colWidths=[W/2, W/2]) al_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,0), DARK), ('TEXTCOLOR', (0,0),(-1,0), WHITE), ('FONTNAME', (0,0),(-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0),(-1,0), 10), ('ALIGN', (0,0),(-1,0), 'CENTER'), ('ROWBACKGROUNDS',(0,1),(0,-1), [XLITE, WHITE]), ('ROWBACKGROUNDS',(1,1),(1,-1), [LITE_GRAY, XLITE]), ('FONTNAME', (0,1),(-1,-1), 'Helvetica'), ('FONTSIZE', (0,1),(-1,-1), 9.5), ('TEXTCOLOR', (0,1),(-1,-1), DARK), ('VALIGN', (0,0),(-1,-1), 'TOP'), ('TOPPADDING', (0,0),(-1,-1), 6), ('BOTTOMPADDING', (0,0),(-1,-1), 6), ('LEFTPADDING', (0,0),(-1,-1), 8), ('RIGHTPADDING', (0,0),(-1,-1), 8), ('GRID', (0,0),(-1,-1), 0.5, BORDER), ('BOX', (0,0),(-1,-1), 1.5, BORDER_D), ('LINEAFTER', (0,0),(0,-1), 1.5, BORDER_D), ])) story += [al_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 9. ROLE IN PUBLIC HEALTH # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(9, "Role in Public Health")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("Community physicians use opportunity cost while:", body_s)) role = [ "Planning health programmes", "Preparing district health plans", "Allocating budgets", "Choosing cost-effective interventions", "Evaluating public health programmes", ] for r in role: story.append(Paragraph("\u2022 " + r, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 10. RECENT RELEVANCE # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(10, "Recent Relevance")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("Opportunity cost is increasingly used in:", body_s)) recent = [ "Health Technology Assessment (HTA)", "Ayushman Bharat planning", "National Health Policy 2017", "Health financing decisions", "Resource allocation during pandemics (COVID-19)", ] for r in recent: story.append(Paragraph("\u2022 " + r, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 11. FLOWCHART # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(11, "Flowchart (Draw in Exam)")) story.append(Spacer(1, 0.2*cm)) flow_steps = [ "Limited Resources", "Many Health Needs", "Choose One Programme", "Other Programme is Postponed", "Benefit Lost", "OPPORTUNITY COST", ] grays = ["#2a2a2a","#3d3d3d","#505050","#636363","#767676","#111111"] flow_rows = [] for i, (step, gc) in enumerate(zip(flow_steps, grays)): is_last = i == len(flow_steps)-1 fs = 10 if not is_last else 12 fn = 'Helvetica-Bold' if is_last else 'Helvetica' cell = Paragraph(step, S('fc'+str(i), fontSize=fs, fontName=fn, textColor=WHITE, alignment=TA_CENTER)) flow_rows.append([cell]) if not is_last: flow_rows.append([Paragraph("v", S('arr'+str(i), fontSize=12, fontName='Helvetica-Bold', textColor=DARK, alignment=TA_CENTER))]) flow_t = Table(flow_rows, colWidths=[8*cm]) cmds = [('ALIGN',(0,0),(-1,-1),'CENTER'), ('TOPPADDING',(0,0),(-1,-1),4), ('BOTTOMPADDING',(0,0),(-1,-1),4)] for i, gc in enumerate(grays): r = i*2 cmds.append(('BACKGROUND',(0,r),(0,r), colors.HexColor(gc))) for i in range(len(flow_steps)-1): ar = i*2+1 cmds.append(('BACKGROUND',(0,ar),(0,ar), WHITE)) flow_t.setStyle(TableStyle(cmds)) ctr = Table([[flow_t]], colWidths=[W]) ctr.setStyle(TableStyle([('ALIGN',(0,0),(-1,-1),'CENTER'), ('TOPPADDING',(0,0),(-1,-1),0), ('BOTTOMPADDING',(0,0),(-1,-1),0)])) story += [ctr, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 12. DIFFERENCE TABLE # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(12, "Difference: Cost vs Opportunity Cost")) story.append(Spacer(1, 0.15*cm)) diff = [ [Paragraph("Point", tbl_hdr_s), Paragraph("Cost", tbl_hdr_s), Paragraph("Opportunity Cost", tbl_hdr_s)], [Paragraph("Definition", tbl_cell_b), Paragraph("Money actually spent", tbl_cell_s), Paragraph("Benefit lost by not choosing the next best option", tbl_cell_s)], [Paragraph("Type", tbl_cell_b), Paragraph("Direct expense", tbl_cell_s), Paragraph("Indirect sacrifice", tbl_cell_s)], [Paragraph("Measurement", tbl_cell_b),Paragraph("Easy to calculate", tbl_cell_s), Paragraph("Often difficult to measure", tbl_cell_s)], [Paragraph("Visibility", tbl_cell_b), Paragraph("Visible (in budget)", tbl_cell_s), Paragraph("Invisible (not in budget)", tbl_cell_s)], [Paragraph("Example", tbl_cell_b), Paragraph("Rs.100 cr spent on hospital", tbl_cell_s), Paragraph("Benefit lost from immunization", tbl_cell_s)], ] diff_t = Table(diff, colWidths=[3.4*cm, 6.2*cm, 7.0*cm]) diff_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,0), DARK), ('TEXTCOLOR', (0,0),(-1,0), WHITE), ('FONTNAME', (0,0),(-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0),(-1,0), 10), ('ALIGN', (0,0),(-1,0), 'CENTER'), ('BACKGROUND', (0,1),(0,-1), LITE_GRAY), ('ROWBACKGROUNDS',(1,1),(-1,-1), [WHITE, XLITE]), ('FONTSIZE', (0,1),(-1,-1), 9.5), ('TEXTCOLOR', (0,1),(-1,-1), DARK), ('ALIGN', (0,0),(-1,-1), 'LEFT'), ('VALIGN', (0,0),(-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0),(-1,-1), 6), ('BOTTOMPADDING', (0,0),(-1,-1), 6), ('LEFTPADDING', (0,0),(-1,-1), 8), ('RIGHTPADDING', (0,0),(-1,-1), 8), ('GRID', (0,0),(-1,-1), 0.5, BORDER), ('BOX', (0,0),(-1,-1), 1.5, BORDER_D), ])) story += [diff_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 13. CONCLUSION # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(13, "Conclusion")) story.append(Spacer(1, 0.15*cm)) conc_text = ( "Opportunity cost is one of the most important concepts in health economics. " "It helps governments and health managers make the best use of limited resources " "by choosing programmes that provide the greatest health benefit. " "Proper understanding of opportunity cost leads to better planning, efficient resource allocation, " "cost-effective healthcare, and progress towards <b>Universal Health Coverage (UHC)</b>." ) conc_box = Table([[Paragraph(conc_text, conc_s)]], colWidths=[W]) conc_box.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,-1), XLITE), ('BOX', (0,0),(-1,-1), 1.5, BORDER_D), ('TOPPADDING', (0,0),(-1,-1), 12), ('BOTTOMPADDING', (0,0),(-1,-1), 12), ('LEFTPADDING', (0,0),(-1,-1), 14), ('RIGHTPADDING', (0,0),(-1,-1), 14), ])) story += [conc_box, Spacer(1, 0.35*cm)] # ββ FOOTER ββ story.append(HRFlowable(width="100%", thickness=1, color=DARK)) story.append(Spacer(1, 0.1*cm)) story.append(Paragraph( "Health Economics | University Exam Notes | Simple English | 10 Marks", small_s )) doc.build(story) print(f"Done: {output_path}") PYEOF python /tmp/workspace/health-economics/make_opportunity_cost_v3.py
| Old Style | New Style (like your PDF) |
|---|---|
| Full black filled heading bars | Numbered bold headings (1. 2. 3...) with just a thin underline |
| Heavy dark blocks | Light, clean, open layout |
| White text on dark bg everywhere | Black text on white/light gray |
| Looks heavy when printed | Looks light and clean when printed |
1. Introduction
βββββββββββββββββββββββββββββ (thin line only)
2. Formula
βββββββββββββββββββββββββββββ
Opportunity Cost Clean
PDF Document Β· PDF
Male pdf Case-Based Learning (CBL) in Medical Education (10 Marks) MD Community Medicine β Very Simple English Notes (ABVMU University Exam) βΈ» Definition Case-Based Learning (CBL) is a student-centred teaching method in which students learn by discussing and solving real or simulated patient cases under the guidance of a teacher. Easy Definition Case-Based Learning means learning medicine through real patient cases. βΈ» Introduction Traditional teaching mainly focuses on lectures, where students listen passively. In Case-Based Learning, students actively discuss a patientβs case, identify the problem, make a diagnosis, plan investigations, and decide treatment. CBL is an important part of Competency-Based Medical Education (CBME) introduced by the National Medical Commission (NMC). It helps students connect basic science with clinical practice. βΈ» Objectives of CBL 1. Improve clinical reasoning. 2. Develop problem-solving skills. 3. Apply theoretical knowledge to real-life situations. 4. Improve communication and teamwork. 5. Promote self-directed learning. 6. Prepare students for patient care. βΈ» Principles of Case-Based Learning * Student-centred learning. * Learning through real clinical cases. * Small-group discussion. * Active participation of every student. * Teacher acts as a facilitator, not only as a lecturer. * Integration of basic and clinical sciences. βΈ» Steps of Case-Based Learning Step 1 β Present the Case Teacher presents a patient with history, symptoms, and examination findings. β¬ Step 2 β Identify the Problem Students discuss the patientβs main problem. β¬ Step 3 β Collect Information Students analyse history, examination, and investigations. β¬ Step 4 β Discuss Diagnosis Students suggest possible diagnoses (differential diagnosis). β¬ Step 5 β Plan Management Students decide investigations, treatment, prevention, and follow-up. β¬ Step 6 β Teacher Feedback Teacher corrects mistakes and summarizes important learning points. Clinical Case β Identify Problem β Group Discussion β Diagnosis β Management Plan β Teacher Feedback Components of CBL * Clinical case * Small group discussion * Teacher facilitator * Student participation * Self-directed learning * Feedback and assessment βΈ» Advantages of Case-Based Learning 1. Active Learning Students participate actively instead of only listening. 2. Better Understanding Theory becomes easy to understand because it is linked with patients. 3. Improves Clinical Reasoning Students learn how to think like doctors. 4. Better Memory Learning through patient cases is remembered for a longer time. 5. Improves Communication Skills Students discuss and present their ideas confidently. 6. Develops Teamwork Students work together to solve clinical problems. 7. Encourages Self-Directed Learning Students search textbooks and guidelines on their own. 8. Improves Decision Making Students learn to choose the best diagnosis and treatment. 9. Integrates Subjects Links Anatomy, Physiology, Pathology, Pharmacology, Community Medicine, and Clinical subjects. 10. Improves Patient Care Students become better prepared for real clinical practice. βΈ» Limitations of CBL 1. Time-consuming. 2. Needs trained faculty. 3. Small groups are required. 4. Requires proper planning. 5. Difficult with large class size. 6. Some students may participate less. 7. Requires adequate teaching resources. βΈ» Role of Teacher * Select appropriate cases. * Guide discussion. * Encourage participation. * Clarify doubts. * Give constructive feedback. * Assess student performance. βΈ» Role of Students * Read the case carefully. * Participate actively. * Discuss with group members. * Search for evidence. * Present diagnosis and management. * Learn independently. βΈ» Assessment in CBL Students can be assessed by: * Case presentation * Group discussion * Viva voce * Objective Structured Clinical Examination (OSCE) * Reflective writing * Direct observation by faculty Applications in Medical Education CBL is used in: * MBBS teaching under CBME * Postgraduate (MD/MS) training * Nursing education * Allied health sciences * Continuing Medical Education (CME) βΈ» Importance in Community Medicine CBL helps students learn: * Disease surveillance * Outbreak investigation * National Health Programmes * Family studies * Epidemiology * Health education * Preventive and promotive healthcare
cat << 'PYEOF' > /tmp/workspace/health-economics/make_cbl.py from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY output_path = "/tmp/workspace/health-economics/CBL_Medical_Education.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=2.2*cm, leftMargin=2.2*cm, topMargin=2*cm, bottomMargin=2*cm ) BLACK = colors.HexColor("#000000") DARK = colors.HexColor("#1a1a1a") MID_GRAY = colors.HexColor("#666666") LITE = colors.HexColor("#eeeeee") XLITE = colors.HexColor("#f7f7f7") WHITE = colors.white BORDER = colors.HexColor("#aaaaaa") BORDER_D = colors.HexColor("#555555") styles = getSampleStyleSheet() W = 16.6*cm def S(name, **kw): base = kw.pop('parent', styles['Normal']) return ParagraphStyle(name, parent=base, **kw) # ββ Styles ββ doc_title_s = S('DT', fontSize=17, fontName='Helvetica-Bold', textColor=BLACK, alignment=TA_CENTER, spaceAfter=2) doc_sub_s = S('DS', fontSize=9.5, fontName='Helvetica', textColor=MID_GRAY, alignment=TA_CENTER, spaceAfter=2) doc_marks_s = S('DM', fontSize=10, fontName='Helvetica-Bold', textColor=DARK, alignment=TA_CENTER) sec_s = S('SH', fontSize=13, fontName='Helvetica-Bold', textColor=BLACK, spaceAfter=1, spaceBefore=2, leading=18) body_s = S('B', fontSize=10, fontName='Helvetica', textColor=DARK, leading=15, spaceAfter=3, alignment=TA_JUSTIFY) bullet_s = S('Bl', fontSize=10, fontName='Helvetica', textColor=DARK, leading=15, leftIndent=14, spaceAfter=3) bold_s = S('Bo', fontSize=10, fontName='Helvetica-Bold', textColor=DARK, leading=15, spaceAfter=3) center_s = S('C', fontSize=11, fontName='Helvetica-Bold', textColor=BLACK, alignment=TA_CENTER, spaceAfter=3) small_s = S('Sm', fontSize=8.5, fontName='Helvetica', textColor=MID_GRAY, alignment=TA_CENTER) conc_s = S('Co', fontSize=10, fontName='Helvetica', textColor=DARK, leading=16, alignment=TA_JUSTIFY) tbl_hdr_s = S('TH', fontSize=10, fontName='Helvetica-Bold', textColor=WHITE, alignment=TA_CENTER) tbl_cell_s = S('TC', fontSize=9.5, fontName='Helvetica', textColor=DARK, leading=14) tbl_cell_b = S('TB', fontSize=9.5, fontName='Helvetica-Bold', textColor=DARK, leading=14) step_num_s = S('SN', fontSize=10, fontName='Helvetica-Bold', textColor=WHITE, alignment=TA_CENTER) step_txt_s = S('ST', fontSize=10, fontName='Helvetica', textColor=DARK, leading=14, leftIndent=6) step_sub_s = S('SS', fontSize=9.5, fontName='Helvetica', textColor=MID_GRAY, leading=14, leftIndent=6) story = [] # ββ numbered section heading: bold + thin underline only ββ def sec(number, title): label = f"{number}. {title}" t = Table([[Paragraph(label, sec_s)]], colWidths=[W]) t.setStyle(TableStyle([ ('LINEBELOW', (0,0),(0,0), 1.5, DARK), ('TOPPADDING', (0,0),(-1,-1), 5), ('BOTTOMPADDING', (0,0),(-1,-1), 4), ('LEFTPADDING', (0,0),(-1,-1), 2), ('RIGHTPADDING', (0,0),(-1,-1), 2), ])) return t # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # TITLE BOX # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ title_t = Table([ [Paragraph("Case-Based Learning (CBL) in Medical Education", doc_title_s)], [Paragraph("MD Community Medicine | ABVMU University Exam | Very Simple English", doc_sub_s)], [Paragraph("Q. | 10 Marks | Print Ready", doc_marks_s)], ], colWidths=[W]) title_t.setStyle(TableStyle([ ('BOX', (0,0),(-1,-1), 2, BLACK), ('LINEBELOW', (0,0),(0,0), 1, BORDER_D), ('ALIGN', (0,0),(-1,-1), 'CENTER'), ('TOPPADDING', (0,0),(-1,-1), 8), ('BOTTOMPADDING', (0,0),(-1,-1), 7), ('LEFTPADDING', (0,0),(-1,-1), 12), ('RIGHTPADDING', (0,0),(-1,-1), 12), ('BACKGROUND', (0,0),(0,0), LITE), ('BACKGROUND', (0,1),(-1,-1), WHITE), ])) story += [title_t, Spacer(1, 0.35*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # DEFINITION # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec("Def", "Definition")) story.append(Spacer(1, 0.15*cm)) def_t = Table([ [Paragraph("<b>Case-Based Learning (CBL)</b> is a student-centred teaching method in which students learn by discussing and solving real or simulated patient cases under the guidance of a teacher.", body_s)], [Paragraph("<b>Easy Definition:</b> Case-Based Learning means learning medicine through real patient cases.", body_s)], ], colWidths=[W]) def_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,-1), XLITE), ('BOX', (0,0),(-1,-1), 1, BORDER_D), ('LINEBELOW', (0,0),(0,0), 0.5, BORDER), ('TOPPADDING', (0,0),(-1,-1), 7), ('BOTTOMPADDING', (0,0),(-1,-1), 7), ('LEFTPADDING', (0,0),(-1,-1), 12), ('RIGHTPADDING', (0,0),(-1,-1), 12), ])) story += [def_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 1. INTRODUCTION # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(1, "Introduction")) story.append(Spacer(1, 0.15*cm)) intro = [ "Traditional teaching mainly focuses on lectures, where students listen <b>passively</b>.", "In Case-Based Learning, students <b>actively</b> discuss a patient's case, identify the problem, make a diagnosis, plan investigations, and decide treatment.", "CBL is an important part of <b>Competency-Based Medical Education (CBME)</b> introduced by the <b>National Medical Commission (NMC)</b>.", "It helps students connect <b>basic science</b> with <b>clinical practice</b>.", ] for p in intro: story.append(Paragraph("\u2022 " + p, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 2. OBJECTIVES # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(2, "Objectives of CBL")) story.append(Spacer(1, 0.15*cm)) objectives = [ "Improve clinical reasoning.", "Develop problem-solving skills.", "Apply theoretical knowledge to real-life situations.", "Improve communication and teamwork.", "Promote self-directed learning.", "Prepare students for patient care.", ] for i, o in enumerate(objectives, 1): story.append(Paragraph(f"{i}. " + o, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 3. PRINCIPLES # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(3, "Principles of Case-Based Learning")) story.append(Spacer(1, 0.15*cm)) principles = [ "Student-centred learning.", "Learning through real clinical cases.", "Small-group discussion.", "Active participation of every student.", "Teacher acts as a <b>facilitator</b>, not only as a lecturer.", "Integration of basic and clinical sciences.", ] for p in principles: story.append(Paragraph("\u2022 " + p, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 4. STEPS (numbered step boxes + arrow flowchart) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(4, "Steps of Case-Based Learning")) story.append(Spacer(1, 0.2*cm)) steps = [ ("Step 1", "Present the Case", "Teacher presents a patient with history, symptoms, and examination findings."), ("Step 2", "Identify the Problem", "Students discuss the patient's main problem."), ("Step 3", "Collect Information", "Students analyse history, examination, and investigations."), ("Step 4", "Discuss Diagnosis", "Students suggest possible diagnoses (differential diagnosis)."), ("Step 5", "Plan Management", "Students decide investigations, treatment, prevention, and follow-up."), ("Step 6", "Teacher Feedback", "Teacher corrects mistakes and summarizes important learning points."), ] grays = ["#1a1a1a","#2d2d2d","#404040","#535353","#666666","#111111"] for i, (num, title, desc) in enumerate(steps): # Step row step_row = Table([ [Paragraph(num, step_num_s), Paragraph(f"<b>{title}</b>", S('stb'+str(i), fontSize=10, fontName='Helvetica-Bold', textColor=DARK, leading=14)), Paragraph(desc, step_sub_s)] ], colWidths=[1.6*cm, 4.5*cm, 10.5*cm]) step_row.setStyle(TableStyle([ ('BACKGROUND', (0,0),(0,0), colors.HexColor(grays[i])), ('BACKGROUND', (1,0),(-1,0), XLITE if i % 2 == 0 else WHITE), ('ALIGN', (0,0),(0,0), 'CENTER'), ('VALIGN', (0,0),(-1,-1),'MIDDLE'), ('BOX', (0,0),(-1,-1), 1, BORDER_D), ('LINEAFTER', (0,0),(0,0), 1, BORDER_D), ('TOPPADDING', (0,0),(-1,-1), 6), ('BOTTOMPADDING', (0,0),(-1,-1), 6), ('LEFTPADDING', (0,0),(0,0), 4), ('RIGHTPADDING', (0,0),(0,0), 4), ('LEFTPADDING', (1,0),(-1,-1), 8), ('RIGHTPADDING', (1,0),(-1,-1), 8), ])) story.append(step_row) if i < len(steps)-1: arrow_t = Table([[Paragraph("v", S('av'+str(i), fontSize=11, fontName='Helvetica-Bold', textColor=DARK, alignment=TA_CENTER))]], colWidths=[W]) arrow_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,-1), WHITE), ('TOPPADDING', (0,0),(-1,-1), 1), ('BOTTOMPADDING', (0,0),(-1,-1), 1), ])) story.append(arrow_t) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 5. COMPONENTS # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(5, "Components of CBL")) story.append(Spacer(1, 0.15*cm)) components = [ "Clinical case", "Small group discussion", "Teacher facilitator", "Student participation", "Self-directed learning", "Feedback and assessment", ] # Two-column layout comp_rows = [] for i in range(0, len(components), 2): left = Paragraph("\u2022 " + components[i], bullet_s) right = Paragraph("\u2022 " + components[i+1], bullet_s) if i+1 < len(components) else Paragraph("", body_s) comp_rows.append([left, right]) comp_t = Table(comp_rows, colWidths=[W/2, W/2]) comp_t.setStyle(TableStyle([ ('TOPPADDING', (0,0),(-1,-1), 3), ('BOTTOMPADDING', (0,0),(-1,-1), 3), ('LEFTPADDING', (0,0),(-1,-1), 4), ('RIGHTPADDING', (0,0),(-1,-1), 4), ('VALIGN', (0,0),(-1,-1), 'TOP'), ])) story.append(comp_t) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 6. ADVANTAGES # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(6, "Advantages of Case-Based Learning")) story.append(Spacer(1, 0.15*cm)) adv_data = [ [Paragraph("No.", tbl_hdr_s), Paragraph("Advantage", tbl_hdr_s), Paragraph("Simple Meaning", tbl_hdr_s)], [Paragraph("1", tbl_cell_s), Paragraph("Active Learning", tbl_cell_b), Paragraph("Students participate actively instead of only listening.", tbl_cell_s)], [Paragraph("2", tbl_cell_s), Paragraph("Better Understanding", tbl_cell_b), Paragraph("Theory becomes easy because it is linked with real patients.", tbl_cell_s)], [Paragraph("3", tbl_cell_s), Paragraph("Clinical Reasoning", tbl_cell_b), Paragraph("Students learn how to think like doctors.", tbl_cell_s)], [Paragraph("4", tbl_cell_s), Paragraph("Better Memory", tbl_cell_b), Paragraph("Learning through cases is remembered for a longer time.", tbl_cell_s)], [Paragraph("5", tbl_cell_s), Paragraph("Communication Skills", tbl_cell_b), Paragraph("Students discuss and present ideas confidently.", tbl_cell_s)], [Paragraph("6", tbl_cell_s), Paragraph("Develops Teamwork", tbl_cell_b), Paragraph("Students work together to solve clinical problems.", tbl_cell_s)], [Paragraph("7", tbl_cell_s), Paragraph("Self-Directed Learning", tbl_cell_b), Paragraph("Students search textbooks and guidelines on their own.", tbl_cell_s)], [Paragraph("8", tbl_cell_s), Paragraph("Decision Making", tbl_cell_b), Paragraph("Students learn to choose the best diagnosis and treatment.", tbl_cell_s)], [Paragraph("9", tbl_cell_s), Paragraph("Integrates Subjects", tbl_cell_b), Paragraph("Links Anatomy, Physiology, Pathology, Pharmacology, and Clinical subjects.", tbl_cell_s)], [Paragraph("10", tbl_cell_s),Paragraph("Improves Patient Care", tbl_cell_b), Paragraph("Students become better prepared for real clinical practice.", tbl_cell_s)], ] adv_t = Table(adv_data, colWidths=[1.0*cm, 5.0*cm, 10.6*cm]) adv_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,0), DARK), ('TEXTCOLOR', (0,0),(-1,0), WHITE), ('ALIGN', (0,0),(-1,0), 'CENTER'), ('FONTSIZE', (0,0),(-1,0), 10), ('ROWBACKGROUNDS',(0,1),(-1,-1), [XLITE, WHITE]), ('FONTSIZE', (0,1),(-1,-1), 9.5), ('TEXTCOLOR', (0,1),(-1,-1), DARK), ('ALIGN', (0,1),(0,-1), 'CENTER'), ('VALIGN', (0,0),(-1,-1), 'MIDDLE'), ('TOPPADDING', (0,0),(-1,-1), 5), ('BOTTOMPADDING', (0,0),(-1,-1), 5), ('LEFTPADDING', (0,0),(-1,-1), 7), ('RIGHTPADDING', (0,0),(-1,-1), 7), ('GRID', (0,0),(-1,-1), 0.5, BORDER), ('BOX', (0,0),(-1,-1), 1.5, BORDER_D), ])) story += [adv_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 7. LIMITATIONS # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(7, "Limitations of CBL")) story.append(Spacer(1, 0.15*cm)) lims = [ "Time-consuming.", "Needs trained faculty.", "Small groups are required.", "Requires proper planning.", "Difficult with large class size.", "Some students may participate less.", "Requires adequate teaching resources.", ] for l in lims: story.append(Paragraph("\u2022 " + l, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 8. ROLE OF TEACHER & STUDENTS (side by side) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(8, "Role of Teacher & Role of Students")) story.append(Spacer(1, 0.15*cm)) teacher = [ "Select appropriate cases.", "Guide discussion.", "Encourage participation.", "Clarify doubts.", "Give constructive feedback.", "Assess student performance.", ] student = [ "Read the case carefully.", "Participate actively.", "Discuss with group members.", "Search for evidence.", "Present diagnosis and management.", "Learn independently.", ] role_data = [ [Paragraph("ROLE OF TEACHER", tbl_hdr_s), Paragraph("ROLE OF STUDENTS", tbl_hdr_s)], ] for i in range(max(len(teacher), len(student))): t = Paragraph("\u2022 " + teacher[i], bullet_s) if i < len(teacher) else Paragraph("", body_s) s = Paragraph("\u2022 " + student[i], bullet_s) if i < len(student) else Paragraph("", body_s) role_data.append([t, s]) role_t = Table(role_data, colWidths=[W/2, W/2]) role_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,0), DARK), ('TEXTCOLOR', (0,0),(-1,0), WHITE), ('FONTNAME', (0,0),(-1,0), 'Helvetica-Bold'), ('FONTSIZE', (0,0),(-1,0), 10), ('ALIGN', (0,0),(-1,0), 'CENTER'), ('ROWBACKGROUNDS',(0,1),(0,-1), [XLITE, WHITE]), ('ROWBACKGROUNDS',(1,1),(1,-1), [LITE, XLITE]), ('FONTNAME', (0,1),(-1,-1), 'Helvetica'), ('FONTSIZE', (0,1),(-1,-1), 9.5), ('TEXTCOLOR', (0,1),(-1,-1), DARK), ('VALIGN', (0,0),(-1,-1), 'TOP'), ('TOPPADDING', (0,0),(-1,-1), 5), ('BOTTOMPADDING', (0,0),(-1,-1), 5), ('LEFTPADDING', (0,0),(-1,-1), 8), ('RIGHTPADDING', (0,0),(-1,-1), 8), ('GRID', (0,0),(-1,-1), 0.5, BORDER), ('BOX', (0,0),(-1,-1), 1.5, BORDER_D), ('LINEAFTER', (0,0),(0,-1), 1.5, BORDER_D), ])) story += [role_t, Spacer(1, 0.3*cm)] # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 9. ASSESSMENT # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(9, "Assessment in CBL")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("Students can be assessed by:", body_s)) assess = [ "Case presentation", "Group discussion", "Viva voce", "Objective Structured Clinical Examination (OSCE)", "Reflective writing", "Direct observation by faculty", ] for a in assess: story.append(Paragraph("\u2022 " + a, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 10. APPLICATIONS # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(10, "Applications in Medical Education")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("CBL is used in:", body_s)) apps = [ "MBBS teaching under CBME", "Postgraduate (MD/MS) training", "Nursing education", "Allied health sciences", "Continuing Medical Education (CME)", ] for a in apps: story.append(Paragraph("\u2022 " + a, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 11. IMPORTANCE IN COMMUNITY MEDICINE # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(11, "Importance in Community Medicine")) story.append(Spacer(1, 0.15*cm)) story.append(Paragraph("CBL helps students learn:", body_s)) comm = [ "Disease surveillance", "Outbreak investigation", "National Health Programmes", "Family studies", "Epidemiology", "Health education", "Preventive and promotive healthcare", ] for c in comm: story.append(Paragraph("\u2022 " + c, bullet_s)) story.append(Spacer(1, 0.3*cm)) # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ # 12. CONCLUSION # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ story.append(sec(12, "Conclusion")) story.append(Spacer(1, 0.15*cm)) conc_text = ( "Case-Based Learning (CBL) is one of the most effective and modern methods of teaching in medical education. " "It actively involves students, improves clinical reasoning, develops problem-solving skills, and prepares them for real patient care. " "Under <b>CBME guidelines of NMC</b>, CBL has become an essential part of medical education in India. " "In <b>Community Medicine</b>, CBL helps students understand real-world public health problems and apply preventive and promotive health strategies effectively." ) conc_t = Table([[Paragraph(conc_text, conc_s)]], colWidths=[W]) conc_t.setStyle(TableStyle([ ('BACKGROUND', (0,0),(-1,-1), XLITE), ('BOX', (0,0),(-1,-1), 1.5, BORDER_D), ('TOPPADDING', (0,0),(-1,-1), 12), ('BOTTOMPADDING', (0,0),(-1,-1), 12), ('LEFTPADDING', (0,0),(-1,-1), 14), ('RIGHTPADDING', (0,0),(-1,-1), 14), ])) story += [conc_t, Spacer(1, 0.35*cm)] # ββ FOOTER ββ story.append(HRFlowable(width="100%", thickness=1, color=DARK)) story.append(Spacer(1, 0.1*cm)) story.append(Paragraph( "Case-Based Learning (CBL) | MD Community Medicine | ABVMU | 10 Marks", small_s )) doc.build(story) print(f"Done: {output_path}") PYEOF python /tmp/workspace/health-economics/make_cbl.py
| Section | Content |
|---|---|
| Title Box | Subject, university, marks - thin border only |
| Def | Definition box - light gray, no heavy fill |
| 1. Introduction | Bullet points |
| 2. Objectives | Numbered list |
| 3. Principles | Bullet points |
| 4. Steps | 6 step boxes with dark step number + arrow between each |
| 5. Components | Two-column layout |
| 6. Advantages | Full 10-point table with alternating rows |
| 7. Limitations | Clean bullet list |
| 8. Teacher & Students | Side-by-side two-column table |
| 9. Assessment | Bullet list |
| 10. Applications | Bullet list |
| 11. Community Medicine | Bullet list |
| 12. Conclusion | Light gray conclusion box |
CBL Medical Education
PDF Document Β· PDF