High risk pregnancy psm
high risk pregnancy PSM Park's textbook criteria scoring identification community medicine
| Factor | Risk |
|---|---|
| Age < 18 years or > 35 years | Obstetric complications, Down syndrome |
| Height < 145 cm | Contracted pelvis, cephalopelvic disproportion |
| Weight < 40 kg or severe obesity | Poor outcomes |
| Grand multipara (≥ 5 deliveries) | PPH, uterine rupture |
| Primi with age > 30 years | Increased operative delivery |
| Poverty / low socioeconomic status | Malnutrition, poor access to care |
| Unmarried / unsupported | Psychological stress, poor ANC attendance |
| Factor | Score |
|---|---|
| Age < 16 or > 35 years | 1 |
| Height < 145 cm | 1 |
| Grand multiparity (≥ 5) | 1 |
| Anaemia (Hb < 8 g/dL) | 1 |
| Malpresentation | 2 |
| APH | 3 |
| Pre-eclampsia | 2 |
| Previous stillbirth/neonatal death | 1 each |
| Medical disease (DM, HTN, heart) | 2-3 |
| Visit | Timing | Focus |
|---|---|---|
| 1st | < 12 weeks (ideally < 8 wk) | Registration, dating, screening |
| 2nd | 14-26 weeks | Anomaly scan, anaemia check |
| 3rd | 28-34 weeks | Growth scan, GDM screen, RH status |
| 4th+ | 36 weeks onwards | Birth preparedness, malpresentation |
Make a pdf and send
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && ls -la /tmp/workspace/
mkdir -p /tmp/workspace/high-risk-pregnancy && cat > /tmp/workspace/high-risk-pregnancy/generate_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY output_path = "/tmp/workspace/high-risk-pregnancy/High_Risk_Pregnancy_PSM.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm ) styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( 'CustomTitle', parent=styles['Title'], fontSize=20, textColor=colors.HexColor('#1a3a5c'), spaceAfter=6, alignment=TA_CENTER, fontName='Helvetica-Bold' ) subtitle_style = ParagraphStyle( 'Subtitle', parent=styles['Normal'], fontSize=11, textColor=colors.HexColor('#4a6fa5'), spaceAfter=14, alignment=TA_CENTER, fontName='Helvetica' ) h1_style = ParagraphStyle( 'H1', parent=styles['Heading1'], fontSize=13, textColor=colors.white, spaceBefore=14, spaceAfter=6, fontName='Helvetica-Bold', backColor=colors.HexColor('#1a3a5c'), leftIndent=-10, rightIndent=-10, borderPad=5, ) h2_style = ParagraphStyle( 'H2', parent=styles['Heading2'], fontSize=11, textColor=colors.HexColor('#1a3a5c'), spaceBefore=10, spaceAfter=4, fontName='Helvetica-Bold', ) body_style = ParagraphStyle( 'Body', parent=styles['Normal'], fontSize=9.5, textColor=colors.HexColor('#222222'), spaceAfter=4, leading=14, alignment=TA_JUSTIFY, ) bullet_style = ParagraphStyle( 'Bullet', parent=styles['Normal'], fontSize=9.5, textColor=colors.HexColor('#222222'), spaceAfter=3, leftIndent=14, bulletIndent=4, leading=13, ) note_style = ParagraphStyle( 'Note', parent=styles['Normal'], fontSize=8.5, textColor=colors.HexColor('#555555'), spaceAfter=4, leading=12, fontName='Helvetica-Oblique', ) story = [] # ── Title ────────────────────────────────────────────────────────────────────── story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("HIGH-RISK PREGNANCY", title_style)) story.append(Paragraph("Preventive & Social Medicine (PSM) | Community Medicine", subtitle_style)) story.append(HRFlowable(width="100%", thickness=2, color=colors.HexColor('#1a3a5c'))) story.append(Spacer(1, 0.4*cm)) # ── Definition ───────────────────────────────────────────────────────────────── story.append(Paragraph("1. DEFINITION", h1_style)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph( "A <b>high-risk pregnancy</b> is one in which the mother, fetus, or newborn is at significantly greater " "risk of morbidity or mortality compared to an uncomplicated pregnancy. Identification and management " "of these pregnancies is a key strategy in reducing maternal and infant mortality — a central focus " "of community medicine.", body_style)) # ── Risk Factors ─────────────────────────────────────────────────────────────── story.append(Paragraph("2. CLASSIFICATION OF RISK FACTORS", h1_style)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("A. Socio-demographic Factors", h2_style)) socio_data = [ [Paragraph('<b>Factor</b>', body_style), Paragraph('<b>Risk</b>', body_style)], [Paragraph('Age < 18 years or > 35 years', body_style), Paragraph('Obstetric complications, Down syndrome', body_style)], [Paragraph('Height < 145 cm', body_style), Paragraph('Contracted pelvis, cephalopelvic disproportion', body_style)], [Paragraph('Weight < 40 kg or severe obesity', body_style), Paragraph('Poor maternal and fetal outcomes', body_style)], [Paragraph('Grand multiparity (≥ 5 deliveries)', body_style), Paragraph('PPH, uterine rupture', body_style)], [Paragraph('Primi with age > 30 years', body_style), Paragraph('Increased operative delivery', body_style)], [Paragraph('Poverty / low socioeconomic status', body_style), Paragraph('Malnutrition, poor ANC attendance', body_style)], ] t = Table(socio_data, colWidths=[8*cm, 9*cm]) t.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.white), ('ROWBACKGROUNDS', (0, 1), (-1, -1), [colors.HexColor('#eef3fa'), colors.white]), ('GRID', (0, 0), (-1, -1), 0.4, colors.HexColor('#b0bec5')), ('TOPPADDING', (0, 0), (-1, -1), 5), ('BOTTOMPADDING', (0, 0), (-1, -1), 5), ('LEFTPADDING', (0, 0), (-1, -1), 6), ])) story.append(t) story.append(Spacer(1, 0.3*cm)) story.append(Paragraph("B. Obstetric History (Past)", h2_style)) obs_history = [ "3 or more spontaneous abortions", "2 or more fetal deaths / stillbirths", "2 or more neonatal deaths", "Previous caesarean section", "Previous PPH or retained placenta", "Previous difficult or instrumental delivery", "Previous baby with congenital anomaly", "Rh sensitization in previous pregnancy", "Pre-eclampsia / eclampsia in previous pregnancy", ] for item in obs_history: story.append(Paragraph(f"• {item}", bullet_style)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("C. Current Obstetric Complications", h2_style)) current_obs = [ "Antepartum haemorrhage (placenta previa, abruption)", "Abnormal fetal presentation (breech, transverse lie)", "Pregnancy-induced hypertension / pre-eclampsia / eclampsia", "Multiple pregnancy (twins, triplets)", "Polyhydramnios or oligohydramnios", "IUGR (intrauterine growth restriction)", "Premature labour (< 37 weeks)", "Post-dated pregnancy (> 42 weeks)", "Rh isoimmunization", ] for item in current_obs: story.append(Paragraph(f"• {item}", bullet_style)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph("D. Pre-existing Medical Conditions", h2_style)) medical = [ "Diabetes mellitus", "Hypertension (chronic)", "Heart disease (especially Class III/IV)", "Renal disease / nephritis", "Severe anaemia (Hb < 7 g/dL)", "Thyroid disorders", "Epilepsy", "Tuberculosis", "HIV/AIDS / STIs", "Sickle cell disease", ] med_pairs = [] for i in range(0, len(medical), 2): row = [Paragraph(f"• {medical[i]}", bullet_style)] if i+1 < len(medical): row.append(Paragraph(f"• {medical[i+1]}", bullet_style)) else: row.append(Paragraph("", bullet_style)) med_pairs.append(row) t2 = Table(med_pairs, colWidths=[8.5*cm, 8.5*cm]) t2.setStyle(TableStyle([ ('GRID', (0, 0), (-1, -1), 0, colors.white), ('TOPPADDING', (0, 0), (-1, -1), 2), ('BOTTOMPADDING', (0, 0), (-1, -1), 2), ])) story.append(t2) # ── Scoring System ───────────────────────────────────────────────────────────── story.append(Paragraph("3. SCORING SYSTEM (COOPLAND SYSTEM)", h1_style)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph( "Points are assigned to risk factors; a total score of <b>3 or more = High Risk</b>.", body_style)) story.append(Spacer(1, 0.2*cm)) score_data = [ [Paragraph('<b>Risk Factor</b>', body_style), Paragraph('<b>Score</b>', body_style)], [Paragraph('Age < 16 or > 35 years', body_style), Paragraph('1', body_style)], [Paragraph('Height < 145 cm', body_style), Paragraph('1', body_style)], [Paragraph('Grand multiparity (≥ 5)', body_style), Paragraph('1', body_style)], [Paragraph('Anaemia (Hb < 8 g/dL)', body_style), Paragraph('1', body_style)], [Paragraph('Malpresentation', body_style), Paragraph('2', body_style)], [Paragraph('Antepartum haemorrhage (APH)', body_style), Paragraph('3', body_style)], [Paragraph('Pre-eclampsia / PIH', body_style), Paragraph('2', body_style)], [Paragraph('Previous stillbirth / neonatal death (each)', body_style), Paragraph('1', body_style)], [Paragraph('Medical disease (DM, HTN, heart disease)', body_style), Paragraph('2-3', body_style)], ] interp_data = [ [Paragraph('<b>Score</b>', body_style), Paragraph('<b>Risk Level</b>', body_style), Paragraph('<b>Action</b>', body_style)], [Paragraph('0-2', body_style), Paragraph('Low Risk', body_style), Paragraph('Routine ANC', body_style)], [Paragraph('3-6', body_style), Paragraph('Moderate Risk', body_style), Paragraph('Increased surveillance', body_style)], [Paragraph('≥ 7', body_style), Paragraph('High Risk', body_style), Paragraph('Refer to higher facility (FRU/DH)', body_style)], ] t3 = Table(score_data, colWidths=[13*cm, 4*cm]) t3.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.white), ('ROWBACKGROUNDS', (0, 1), (-1, -1), [colors.HexColor('#eef3fa'), colors.white]), ('GRID', (0, 0), (-1, -1), 0.4, colors.HexColor('#b0bec5')), ('TOPPADDING', (0, 0), (-1, -1), 5), ('BOTTOMPADDING', (0, 0), (-1, -1), 5), ('LEFTPADDING', (0, 0), (-1, -1), 6), ('ALIGN', (1, 0), (1, -1), 'CENTER'), ])) story.append(t3) story.append(Spacer(1, 0.3*cm)) t4 = Table(interp_data, colWidths=[3*cm, 5*cm, 9*cm]) t4.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#4a6fa5')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.white), ('ROWBACKGROUNDS', (0, 1), (-1, -1), [colors.HexColor('#fff8e1'), colors.HexColor('#ffe0b2'), colors.HexColor('#ffccbc')]), ('GRID', (0, 0), (-1, -1), 0.4, colors.HexColor('#b0bec5')), ('TOPPADDING', (0, 0), (-1, -1), 5), ('BOTTOMPADDING', (0, 0), (-1, -1), 5), ('LEFTPADDING', (0, 0), (-1, -1), 6), ])) story.append(t4) # ── Identification ───────────────────────────────────────────────────────────── story.append(Paragraph("4. IDENTIFICATION OF HIGH-RISK PREGNANCIES", h1_style)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph( "<b>When:</b> At first ANC contact (ideally first trimester) and re-evaluated at each visit.", body_style)) story.append(Paragraph( "<b>Who:</b> ANM at subcentre level for initial identification; ASHA facilitates registration and referral.", body_style)) story.append(Paragraph("<b>How:</b>", body_style)) how_items = [ "Detailed history - obstetric, medical, family, social", "Clinical examination - weight, height, BP, pallor, oedema", "Laboratory investigations - Hb, blood group, Rh, urine, blood glucose, VDRL, HIV", "Ultrasound where available", ] for item in how_items: story.append(Paragraph(f"• {item}", bullet_style)) # ── Government Schemes ───────────────────────────────────────────────────────── story.append(Paragraph("5. GOVERNMENT SCHEMES (INDIA)", h1_style)) story.append(Spacer(1, 0.2*cm)) schemes = [ ("PMSMA (2016)", "Pradhan Mantri Surakshit Matritva Abhiyan", "Free ANC on the 9th of every month at government facilities. Minimum package of investigations and drugs. Involves private sector volunteers. Over 11.66 lakh high-risk pregnancies identified across the country."), ("JSY", "Janani Suraksha Yojana", "Cash incentive scheme to promote institutional deliveries. ~100.41 lakh pregnant women benefited in 2018-19. Subsidizes cost of C-section and obstetric complications (up to Rs. 1500)."), ("JSSK", "Janani Shishu Suraksha Karyakaram", "Free delivery (including C-section) in public health institutions. Includes free drugs, diagnostics, blood, diet, transport. Extended to ANC/PNC complications and sick infants."), ("SUMAN (2019)", "Surakshit Matritva Aashwasan", "Assured, dignified, quality healthcare at zero cost. Zero tolerance for denial of services. Goal: Zero preventable maternal and newborn deaths."), ("LaQshya (2017)", "Labour Room Quality Improvement Initiative", "Improves quality of care in labour rooms and maternity OTs. Evidence-based approach for intrapartum and postpartum periods."), ("FRU", "First Referral Units", "High-risk cases referred to FRUs at CHC/sub-district level. Provide emergency obstetric care (EmOC), C-sections, newborn care, blood storage 24/7. Minimum 20-30 beds; functional OT, labour room, blood bank."), ("Vandemataram Scheme", "Voluntary obstetric care scheme", "Any obstetric/gynaec specialist or lady doctor can volunteer. Enrolled doctors display 'Vandemataram logo'. IFA tablets, oral pills, TT injections provided free by DMO."), ] scheme_table_data = [ [Paragraph('<b>Scheme</b>', body_style), Paragraph('<b>Full Name</b>', body_style), Paragraph('<b>Key Features</b>', body_style)] ] for s in schemes: scheme_table_data.append([ Paragraph(s[0], body_style), Paragraph(s[1], body_style), Paragraph(s[2], body_style), ]) t5 = Table(scheme_table_data, colWidths=[3.5*cm, 4.5*cm, 9*cm]) t5.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.white), ('ROWBACKGROUNDS', (0, 1), (-1, -1), [colors.HexColor('#eef3fa'), colors.white]), ('GRID', (0, 0), (-1, -1), 0.4, colors.HexColor('#b0bec5')), ('TOPPADDING', (0, 0), (-1, -1), 5), ('BOTTOMPADDING', (0, 0), (-1, -1), 5), ('LEFTPADDING', (0, 0), (-1, -1), 6), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ])) story.append(t5) # ── Management ───────────────────────────────────────────────────────────────── story.append(Paragraph("6. MANAGEMENT (COMMUNITY MEDICINE PERSPECTIVE)", h1_style)) story.append(Spacer(1, 0.2*cm)) mgmt_data = [ [Paragraph('<b>Level</b>', body_style), Paragraph('<b>Provider</b>', body_style), Paragraph('<b>Role</b>', body_style)], [Paragraph('Subcentre', body_style), Paragraph('ANM / ASHA', body_style), Paragraph('Identification & registration, basic ANC (weight, BP, FHR, fundal height), IFA + TT, referral', body_style)], [Paragraph('PHC', body_style), Paragraph('Medical Officer', body_style), Paragraph('Detailed ANC + investigations, manage anaemia & mild PIH, counselling, refer high-risk cases', body_style)], [Paragraph('FRU / CHC', body_style), Paragraph('Specialist', body_style), Paragraph('Specialist obstetric care, manage severe complications, C-section, newborn care, NICU', body_style)], [Paragraph('District Hospital', body_style), Paragraph('Senior Specialist', body_style), Paragraph('Full EmOC, blood bank, NICU, management of eclampsia, APH, obstructed labour', body_style)], ] t6 = Table(mgmt_data, colWidths=[2.5*cm, 3.5*cm, 11*cm]) t6.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.white), ('ROWBACKGROUNDS', (0, 1), (-1, -1), [colors.HexColor('#eef3fa'), colors.white]), ('GRID', (0, 0), (-1, -1), 0.4, colors.HexColor('#b0bec5')), ('TOPPADDING', (0, 0), (-1, -1), 5), ('BOTTOMPADDING', (0, 0), (-1, -1), 5), ('LEFTPADDING', (0, 0), (-1, -1), 6), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ])) story.append(t6) # ── 3 Delays ─────────────────────────────────────────────────────────────────── story.append(Paragraph("7. THREE DELAYS MODEL", h1_style)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph( "Maternal deaths in high-risk pregnancies are often explained by the Three Delays Model:", body_style)) delays = [ "<b>Delay 1 - Recognizing danger signs:</b> Failure or delay in deciding to seek care at family/community level.", "<b>Delay 2 - Reaching a facility:</b> Transport barriers, long distance to appropriate facility.", "<b>Delay 3 - Receiving adequate care:</b> Delay in getting proper treatment once at the facility.", ] for d in delays: story.append(Paragraph(f"• {d}", bullet_style)) # ── Danger Signs ─────────────────────────────────────────────────────────────── story.append(Paragraph("8. DANGER SIGNS REQUIRING IMMEDIATE REFERRAL", h1_style)) story.append(Spacer(1, 0.2*cm)) danger = [ "Vaginal bleeding at any gestational age", "Severe headache, blurred vision, convulsions", "Fever > 38°C", "Severe abdominal pain", "Decreased or absent fetal movements", "Swelling of face and hands (severe oedema)", "Difficulty breathing", "Bag of waters broken without onset of labour", ] danger_pairs = [] for i in range(0, len(danger), 2): row = [Paragraph(f"• {danger[i]}", bullet_style)] if i+1 < len(danger): row.append(Paragraph(f"• {danger[i+1]}", bullet_style)) else: row.append(Paragraph("", bullet_style)) danger_pairs.append(row) t7 = Table(danger_pairs, colWidths=[8.5*cm, 8.5*cm]) t7.setStyle(TableStyle([ ('GRID', (0, 0), (-1, -1), 0, colors.white), ('TOPPADDING', (0, 0), (-1, -1), 2), ('BOTTOMPADDING', (0, 0), (-1, -1), 2), ('ROWBACKGROUNDS', (0, 0), (-1, -1), [colors.HexColor('#fff8e1'), colors.white]), ])) story.append(t7) # ── ANC Schedule ─────────────────────────────────────────────────────────────── story.append(Paragraph("9. ANTENATAL CARE SCHEDULE", h1_style)) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph( "India follows the WHO-recommended ANC schedule (now 8+ visits recommended). High-risk pregnancies require more frequent visits and specialist involvement.", body_style)) story.append(Spacer(1, 0.2*cm)) anc_data = [ [Paragraph('<b>Visit</b>', body_style), Paragraph('<b>Timing</b>', body_style), Paragraph('<b>Focus</b>', body_style)], [Paragraph('1st', body_style), Paragraph('< 12 weeks (ideally < 8 wk)', body_style), Paragraph('Registration, dating ultrasound, initial screening, blood group, Hb, VDRL, HIV', body_style)], [Paragraph('2nd', body_style), Paragraph('14-26 weeks', body_style), Paragraph('Anomaly scan, anaemia check, IFA compliance', body_style)], [Paragraph('3rd', body_style), Paragraph('28-34 weeks', body_style), Paragraph('Growth scan, GDM screening, Rh status, TT 2nd dose', body_style)], [Paragraph('4th+', body_style), Paragraph('36 weeks onwards', body_style), Paragraph('Birth preparedness, malpresentation check, danger signs counselling', body_style)], ] t8 = Table(anc_data, colWidths=[2*cm, 4.5*cm, 10.5*cm]) t8.setStyle(TableStyle([ ('BACKGROUND', (0, 0), (-1, 0), colors.HexColor('#1a3a5c')), ('TEXTCOLOR', (0, 0), (-1, 0), colors.white), ('ROWBACKGROUNDS', (0, 1), (-1, -1), [colors.HexColor('#eef3fa'), colors.white]), ('GRID', (0, 0), (-1, -1), 0.4, colors.HexColor('#b0bec5')), ('TOPPADDING', (0, 0), (-1, -1), 5), ('BOTTOMPADDING', (0, 0), (-1, -1), 5), ('LEFTPADDING', (0, 0), (-1, -1), 6), ('VALIGN', (0, 0), (-1, -1), 'TOP'), ])) story.append(t8) # ── MMR ──────────────────────────────────────────────────────────────────────── story.append(Paragraph("10. MATERNAL MORTALITY IN INDIA", h1_style)) story.append(Spacer(1, 0.2*cm)) mmr_items = [ "India's MMR has declined from <b>254/100,000 live births</b> (2004-06) to approximately <b>97/100,000 live births</b> (2018-20)", "<b>Leading direct causes:</b> Haemorrhage (PPH), sepsis, eclampsia, obstructed labour, unsafe abortion", "<b>SDG Target:</b> MMR < 70/100,000 live births by 2030", "High-risk pregnancy identification and management is central to achieving this target", ] for item in mmr_items: story.append(Paragraph(f"• {item}", bullet_style)) # ── Footer note ──────────────────────────────────────────────────────────────── story.append(Spacer(1, 0.6*cm)) story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#b0bec5'))) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph( "Source: Park's Textbook of Preventive and Social Medicine (pp. 514-596); Community Medicine principles on Maternal and Child Health.", note_style)) # Build PDF doc.build(story) print(f"PDF created: {output_path}") PYEOF python3 /tmp/workspace/high-risk-pregnancy/generate_pdf.py
High Risk Pregnancy PSM
PDF Document · PDF