how to take history in detail from an obstetric pt
| Parameter | What to Ask |
|---|---|
| G (Gravida) | Total number of times pregnant (including current) |
| P (Para) | Number of deliveries at ≥20 weeks (or ≥500g) |
| T (Term) | Deliveries ≥37 weeks |
| P (Preterm) | Deliveries 20-36+6 weeks |
| A (Abortus) | Miscarriages + terminations |
| L (Living) | Number of living children |
| System | Conditions to Ask About |
|---|---|
| CVS | Hypertension, cardiac disease (congenital, valvular), DVT/PE, thrombophilia |
| Endocrine | Diabetes (Type 1/2), thyroid disease, Addison's |
| Renal | CKD, recurrent UTIs, single kidney |
| Respiratory | Asthma, TB |
| Neurological | Epilepsy, MS, migraine |
| Haematological | Anaemia (type), sickle cell, thalassaemia, ITP, thrombophilia |
| Autoimmune | SLE, antiphospholipid syndrome, rheumatoid arthritis |
| GI/Hepatic | Liver disease, IBD, cholestasis of pregnancy (in prior pregnancies) |
| Mental health | Depression, anxiety, bipolar disorder, eating disorders, previous perinatal mental illness |
| Infections | HIV status, Hepatitis B/C, TB, history of TORCH infections |
| Domain | Specifics |
|---|---|
| Smoking | Current/ex-smoker, number of cigarettes/day, willing to quit? |
| Alcohol | Units per week, type; CAGE screening; any binge drinking in early pregnancy |
| Recreational drugs | Cannabis, cocaine, heroin, methadone (if on OST - dose, compliance) |
| Diet | Vegetarian/vegan (iron, B12 supplementation?), food aversions/cravings, pica |
| Housing | Stable housing, overcrowding, hygiene |
| Support | Partner support, family support, single parent |
| Occupation | Work environment risks (radiation, chemicals, heavy lifting); maternity leave plans |
| Domestic violence | Ask sensitively and privately: "Do you feel safe at home?" |
| Travel | Recent travel to malaria-endemic or Zika-affected areas |
| Immigration status | May affect healthcare access and screening history |
Create a printable checklist for obstetric history-taking in clinic
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace does not exist yet"
mkdir -p /home/daytona/workspace/obstetric-checklist && ls /home/daytona/skills/docx/
~/obstetric-checklist/generate_checklist.js
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
AlignmentType, HeadingLevel, BorderStyle, WidthType, ShadingType,
VerticalAlign, LevelFormat, PageNumber, Header, Footer,
convertInchesToTwip
} = require('docx');
const fs = require('fs');
// ─── Color palette ───────────────────────────────────────────────
const TEAL = "006D77"; // section header bg
const TEAL_LIGHT = "E8F4F5"; // alternating row bg
const WHITE = "FFFFFF";
const DARK_GRAY = "2D2D2D";
const MID_GRAY = "555555";
// ─── Helpers ──────────────────────────────────────────────────────
/** Checkbox cell (small square) */
function checkboxCell() {
return new TableCell({
width: { size: 360, type: WidthType.DXA },
shading: { type: ShadingType.SOLID, color: WHITE },
verticalAlign: VerticalAlign.CENTER,
margins: { top: 40, bottom: 40, left: 80, right: 80 },
children: [
new Paragraph({
alignment: AlignmentType.CENTER,
children: [
new TextRun({ text: "\u25A1", font: "Arial", size: 22, color: "888888" })
]
})
]
});
}
/** Item text cell */
function itemCell(text, bold = false, shade = WHITE) {
return new TableCell({
width: { size: 4200, type: WidthType.DXA },
shading: { type: ShadingType.SOLID, color: shade },
verticalAlign: VerticalAlign.CENTER,
margins: { top: 40, bottom: 40, left: 120, right: 60 },
children: [
new Paragraph({
children: [
new TextRun({ text, font: "Arial", size: 18, bold, color: DARK_GRAY })
]
})
]
});
}
/** Notes / finding cell */
function notesCell(label = "Notes / Findings:", shade = WHITE) {
return new TableCell({
width: { size: 4600, type: WidthType.DXA },
shading: { type: ShadingType.SOLID, color: shade },
verticalAlign: VerticalAlign.CENTER,
margins: { top: 40, bottom: 40, left: 120, right: 80 },
children: [
new Paragraph({
children: [
new TextRun({ text: label, font: "Arial", size: 16, color: "999999", italics: true })
]
})
]
});
}
/** Full-width section header row */
function sectionHeader(title) {
return new TableRow({
children: [
new TableCell({
columnSpan: 3,
shading: { type: ShadingType.SOLID, color: TEAL },
margins: { top: 80, bottom: 80, left: 160, right: 160 },
children: [
new Paragraph({
alignment: AlignmentType.LEFT,
children: [
new TextRun({ text: title, font: "Arial", size: 22, bold: true, color: WHITE })
]
})
]
})
]
});
}
/** Standard checklist row */
function checkRow(label, shade = WHITE) {
return new TableRow({
children: [
checkboxCell(),
itemCell(label, false, shade),
notesCell("", shade)
]
});
}
/** Sub-row (indented) */
function subRow(label, shade = WHITE) {
return new TableRow({
children: [
checkboxCell(),
new TableCell({
width: { size: 4200, type: WidthType.DXA },
shading: { type: ShadingType.SOLID, color: shade },
verticalAlign: VerticalAlign.CENTER,
margins: { top: 30, bottom: 30, left: 280, right: 60 },
children: [
new Paragraph({
children: [
new TextRun({ text: "- " + label, font: "Arial", size: 17, color: MID_GRAY })
]
})
]
}),
notesCell("", shade)
]
});
}
/** Column header row */
function colHeaderRow() {
const style = (text, w) => new TableCell({
width: { size: w, type: WidthType.DXA },
shading: { type: ShadingType.SOLID, color: "EEEEEE" },
margins: { top: 60, bottom: 60, left: 120, right: 80 },
children: [
new Paragraph({
children: [new TextRun({ text, font: "Arial", size: 17, bold: true, color: MID_GRAY })]
})
]
});
return new TableRow({
children: [
style("", 360),
style("Item", 4200),
style("Notes / Findings", 4600)
]
});
}
// ─── Build document ───────────────────────────────────────────────
function makeTable(rows) {
return new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" },
bottom: { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" },
left: { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" },
right: { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" },
insideH:{ style: BorderStyle.SINGLE, size: 1, color: "DDDDDD" },
insideV:{ style: BorderStyle.SINGLE, size: 1, color: "DDDDDD" },
},
rows
});
}
// ─── SECTION TABLES ──────────────────────────────────────────────
// Alternating shading helper
const S = (i) => i % 2 === 0 ? WHITE : TEAL_LIGHT;
// 1. Patient Info
const patientInfoRows = [
sectionHeader("1. PATIENT IDENTIFICATION"),
colHeaderRow(),
checkRow("Full name", S(0)),
checkRow("Date of birth / Age", S(1)),
checkRow("Address & contact number", S(2)),
checkRow("Occupation (patient & partner)", S(3)),
checkRow("Ethnicity / Nationality", S(4)),
checkRow("Marital / relationship status", S(5)),
checkRow("Referring clinician / GP", S(6)),
];
// 2. Presenting Complaint
const presentingRows = [
sectionHeader("2. PRESENTING COMPLAINT"),
colHeaderRow(),
checkRow("Chief complaint in patient's own words", S(0)),
checkRow("Duration of complaint", S(1)),
checkRow("Reason for visit (booking / emergency / follow-up)", S(2)),
];
// 3. Menstrual & Pregnancy Dating
const menstrualRows = [
sectionHeader("3. MENSTRUAL HISTORY & PREGNANCY DATING"),
colHeaderRow(),
checkRow("LMP (1st day of last menstrual period)", S(0)),
checkRow("Certainty of LMP (certain / uncertain)", S(1)),
checkRow("Cycle length & regularity", S(2)),
checkRow("OCP or contraception used before conception", S(3)),
checkRow("EDD by dates (Naegele's rule)", S(4)),
checkRow("EDD confirmed by dating scan (CRL)", S(5)),
checkRow("Current gestational age", S(6)),
];
// 4. Current Pregnancy
const currentPregRows = [
sectionHeader("4. CURRENT PREGNANCY HISTORY"),
colHeaderRow(),
checkRow("Pregnancy test (date, type)", S(0)),
checkRow("Nausea / vomiting (severity, hyperemesis?)", S(1)),
checkRow("Bleeding PV (when, how much, clots, pain?)", S(2)),
checkRow("Vaginal discharge (colour, odour, itch)", S(3)),
checkRow("Fetal movements felt (quickening date)", S(4)),
checkRow("Current fetal movement pattern (reduced?)", S(5)),
checkRow("Urinary symptoms (frequency, dysuria, haematuria)", S(6)),
checkRow("Headache / visual disturbance / epigastric pain", S(7)),
checkRow("Oedema (hands, face, ankles)", S(8)),
checkRow("Leaking liquor / PROM suspected", S(9)),
checkRow("Contractions / Braxton Hicks", S(10)),
checkRow("Pelvic girdle / back pain", S(11)),
];
// 5. Antenatal Care
const antenatalRows = [
sectionHeader("5. ANTENATAL CARE THIS PREGNANCY"),
colHeaderRow(),
checkRow("Booking clinic (where, gestation at booking)", S(0)),
checkRow("Blood group & Rh status", S(1)),
checkRow("Anti-D prophylaxis given (if Rh negative)", S(2)),
checkRow("FBC (haemoglobin, platelets)", S(3)),
checkRow("Infection screen: HIV, Hep B/C, Syphilis (VDRL)", S(4)),
checkRow("Rubella immune status", S(5)),
checkRow("MSU / urinalysis results", S(6)),
checkRow("GBS swab (if done)", S(7)),
checkRow("Down syndrome / aneuploidy screening", S(8)),
subRow("Combined test (PAPP-A + HCG + NT) / NIPT", S(9)),
subRow("Result & risk given", S(10)),
checkRow("Dating scan (11-14 wks) - date, findings", S(11)),
checkRow("Anomaly scan (18-20 wks) - date, findings", S(12)),
checkRow("Any additional scans - dates, findings", S(13)),
checkRow("Folic acid (dose, when started)", S(14)),
checkRow("Vitamin D / iron / aspirin supplementation", S(15)),
checkRow("Vaccinations: Tdap, influenza, COVID-19", S(16)),
checkRow("Any hospitalisations this pregnancy", S(17)),
checkRow("Any complications (HTN, GDM, anaemia, infections)", S(18)),
];
// 6. Past Obstetric History
const pastObsRows = [
sectionHeader("6. PAST OBSTETRIC HISTORY (G___ T___ P___ A___ L___)"),
colHeaderRow(),
checkRow("Gravida / Para / Abortus / Living (GPAL)", S(0)),
checkRow("For each previous pregnancy:", S(1)),
subRow("Year & gestational age at delivery", S(2)),
subRow("Mode of delivery (SVD / instrumental / LSCS - reason)", S(3)),
subRow("Duration / complications of labour", S(4)),
subRow("Antepartum / postpartum haemorrhage", S(5)),
subRow("Pre-eclampsia / gestational hypertension", S(6)),
subRow("Gestational diabetes", S(7)),
subRow("Malpresentation / cord prolapse / shoulder dystocia", S(8)),
subRow("Perineal tears (degree) / retained placenta", S(9)),
subRow("Baby: sex, birth weight, APGAR, NICU admission", S(10)),
subRow("Neonatal problems / congenital anomalies", S(11)),
checkRow("Miscarriages / terminations: gestation, type, ERPC?", S(12)),
checkRow("Anti-D given after miscarriage (if Rh negative)", S(13)),
checkRow("Previous uterine surgery (myomectomy, metroplasty)", S(14)),
];
// 7. Gynaecological History
const gynaeRows = [
sectionHeader("7. GYNAECOLOGICAL HISTORY"),
colHeaderRow(),
checkRow("Last cervical smear (Pap) - date, result", S(0)),
checkRow("History of STIs (chlamydia, gonorrhoea, HSV, HPV)", S(1)),
checkRow("Fibroids / ovarian cysts / endometriosis / PCOS", S(2)),
checkRow("Previous pelvic surgery / D&C / LLETZ / cone biopsy", S(3)),
checkRow("Infertility treatment (IVF, ovulation induction)", S(4)),
checkRow("Contraception history", S(5)),
];
// 8. Past Medical History
const pmhRows = [
sectionHeader("8. PAST MEDICAL HISTORY"),
colHeaderRow(),
checkRow("Hypertension / cardiac disease / DVT / PE", S(0)),
checkRow("Thrombophilia (Factor V Leiden, antiphospholipid syndrome)", S(1)),
checkRow("Diabetes mellitus (Type 1 / Type 2)", S(2)),
checkRow("Thyroid disease (hypo / hyperthyroidism)", S(3)),
checkRow("Renal disease / recurrent UTIs", S(4)),
checkRow("Asthma / respiratory disease / TB", S(5)),
checkRow("Epilepsy / neurological conditions", S(6)),
checkRow("Anaemia (type: iron deficiency / B12 / sickle cell / thalassaemia)", S(7)),
checkRow("SLE / autoimmune conditions / rheumatoid arthritis", S(8)),
checkRow("Mental health: depression, anxiety, bipolar disorder", S(9)),
checkRow("Liver / GI disease", S(10)),
checkRow("HIV status / Hepatitis B or C", S(11)),
];
// 9. Surgical & Blood Transfusion History
const surgicalRows = [
sectionHeader("9. SURGICAL & ANAESTHETIC HISTORY"),
colHeaderRow(),
checkRow("Previous surgeries (abdominal / pelvic)", S(0)),
checkRow("Blood transfusions (when, units, indication)", S(1)),
checkRow("Anaesthetic complications / difficult intubation", S(2)),
];
// 10. Drug History
const drugRows = [
sectionHeader("10. MEDICATIONS & ALLERGIES"),
colHeaderRow(),
checkRow("Current prescribed medications (list all)", S(0)),
checkRow("OTC medications / herbal / traditional remedies", S(1)),
checkRow("Folic acid dose (400 mcg standard / 5 mg high-risk)", S(2)),
checkRow("Aspirin 75-150 mg (pre-eclampsia prevention)", S(3)),
checkRow("Teratogenic drug exposure in early pregnancy", S(4)),
checkRow("Drug allergies (drug name + type of reaction)", S(5)),
checkRow("Food / latex / other allergies", S(6)),
];
// 11. Family History
const familyRows = [
sectionHeader("11. FAMILY HISTORY"),
colHeaderRow(),
checkRow("Hypertension / diabetes / cardiac disease", S(0)),
checkRow("Pre-eclampsia / eclampsia (mother or sisters)", S(1)),
checkRow("Congenital anomalies / chromosomal conditions", S(2)),
checkRow("Neural tube defects / congenital heart disease", S(3)),
checkRow("Genetic conditions: CF, sickle cell, thalassaemia, haemophilia", S(4)),
checkRow("Twins (maternal side - dizygotic risk)", S(5)),
checkRow("Consanguinity", S(6)),
];
// 12. Social History
const socialRows = [
sectionHeader("12. SOCIAL HISTORY"),
colHeaderRow(),
checkRow("Smoking: current / ex / never (cigarettes/day)", S(0)),
checkRow("Alcohol: units/week, any binge drinking in pregnancy", S(1)),
checkRow("Recreational drugs / opioid substitution therapy", S(2)),
checkRow("Diet: vegetarian/vegan, pica, food aversions", S(3)),
checkRow("Housing: stable, overcrowding, sanitation", S(4)),
checkRow("Social support (partner, family, single parent)", S(5)),
checkRow("Occupation & workplace hazards", S(6)),
checkRow("Recent travel (malaria / Zika endemic areas)", S(7)),
checkRow("Domestic violence screen: 'Do you feel safe at home?'", S(8)),
checkRow("Immigration status / access to healthcare", S(9)),
];
// 13. Systemic Review
const sysrevRows = [
sectionHeader("13. SYSTEMIC REVIEW"),
colHeaderRow(),
checkRow("General: weight gain pattern, fatigue, fever", S(0)),
checkRow("CVS: palpitations, chest pain, breathlessness", S(1)),
checkRow("Respiratory: cough, wheeze, shortness of breath", S(2)),
checkRow("GI: heartburn, nausea, constipation, abdominal pain", S(3)),
checkRow("Urinary: frequency, dysuria, haematuria", S(4)),
checkRow("Neurological: headache, visual changes, numbness", S(5)),
checkRow("MSK: back pain, pelvic girdle pain, carpal tunnel", S(6)),
checkRow("Skin: itching (obstetric cholestasis?), rashes", S(7)),
];
// 14. Mental Health
const mhRows = [
sectionHeader("14. MENTAL HEALTH SCREEN"),
colHeaderRow(),
checkRow("Whooley questions (depression screen)", S(0)),
subRow("'During the past month, have you often been bothered by feeling down, depressed or hopeless?'", S(1)),
subRow("'Have you had little interest or pleasure in doing things?'", S(2)),
checkRow("Anxiety screen", S(3)),
checkRow("History of perinatal mental illness (previous pregnancies)", S(4)),
checkRow("Current psychiatric treatment / medications", S(5)),
checkRow("Safeguarding concerns / child protection issues", S(6)),
];
// ─── DOCUMENT ─────────────────────────────────────────────────────
const doc = new Document({
styles: {
default: {
document: { run: { font: "Arial", size: 20, color: DARK_GRAY } }
}
},
sections: [
{
properties: {
page: {
size: { width: 11906, height: 16838 },
margin: { top: 720, bottom: 720, left: 720, right: 720 }
}
},
headers: {
default: new Header({
children: [
new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.NONE },
bottom: { style: BorderStyle.SINGLE, size: 4, color: TEAL },
left: { style: BorderStyle.NONE },
right: { style: BorderStyle.NONE },
insideH: { style: BorderStyle.NONE },
insideV: { style: BorderStyle.NONE },
},
rows: [
new TableRow({
children: [
new TableCell({
width: { size: 7000, type: WidthType.DXA },
borders: { top: { style: BorderStyle.NONE }, bottom: { style: BorderStyle.NONE }, left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE } },
children: [
new Paragraph({
children: [
new TextRun({ text: "OBSTETRIC HISTORY-TAKING CHECKLIST", font: "Arial", size: 26, bold: true, color: TEAL })
]
}),
new Paragraph({
children: [
new TextRun({ text: "Comprehensive Clinical Assessment Form", font: "Arial", size: 18, color: "888888", italics: true })
]
})
]
}),
new TableCell({
width: { size: 2906, type: WidthType.DXA },
borders: { top: { style: BorderStyle.NONE }, bottom: { style: BorderStyle.NONE }, left: { style: BorderStyle.NONE }, right: { style: BorderStyle.NONE } },
children: [
new Paragraph({
alignment: AlignmentType.RIGHT,
children: [new TextRun({ text: "Date: ___________________", font: "Arial", size: 18, color: MID_GRAY })]
}),
new Paragraph({
alignment: AlignmentType.RIGHT,
children: [new TextRun({ text: "Clinician: _______________", font: "Arial", size: 18, color: MID_GRAY })]
}),
new Paragraph({
alignment: AlignmentType.RIGHT,
children: [new TextRun({ text: "Clinic / Ward: __________", font: "Arial", size: 18, color: MID_GRAY })]
}),
]
})
]
})
]
})
]
})
},
footers: {
default: new Footer({
children: [
new Paragraph({
alignment: AlignmentType.CENTER,
children: [
new TextRun({ text: "Page ", font: "Arial", size: 16, color: "999999" }),
new PageNumber(),
new TextRun({ text: " | Obstetric History Checklist | For clinical use only", font: "Arial", size: 16, color: "999999" })
]
})
]
})
},
children: [
// Spacing after header
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(patientInfoRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(presentingRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(menstrualRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(currentPregRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(antenatalRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(pastObsRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(gynaeRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(pmhRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(surgicalRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(drugRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(familyRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(socialRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(sysrevRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
makeTable(mhRows),
new Paragraph({ children: [new TextRun({ text: "" })] }),
// Clinician sign-off
makeTable([
sectionHeader("CLINICIAN SIGN-OFF"),
new TableRow({
children: [
new TableCell({
columnSpan: 3,
margins: { top: 80, bottom: 80, left: 160, right: 160 },
children: [
new Paragraph({
children: [
new TextRun({ text: "Summary / Impression: ", font: "Arial", size: 18, bold: true }),
new TextRun({ text: "_______________________________________________________________________________", font: "Arial", size: 18, color: "BBBBBB" })
]
}),
new Paragraph({ children: [new TextRun({ text: "" })] }),
new Paragraph({
children: [
new TextRun({ text: "Plan / Referrals: ", font: "Arial", size: 18, bold: true }),
new TextRun({ text: "_______________________________________________________________________________", font: "Arial", size: 18, color: "BBBBBB" })
]
}),
new Paragraph({ children: [new TextRun({ text: "" })] }),
new Paragraph({
children: [
new TextRun({ text: "Signature: ______________________________ ", font: "Arial", size: 18 }),
new TextRun({ text: "Date: ____________________ ", font: "Arial", size: 18 }),
new TextRun({ text: "Bleep/GMC No.: ________________", font: "Arial", size: 18 })
]
}),
]
})
]
})
])
]
}
]
});
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync("/home/daytona/workspace/obstetric-checklist/Obstetric_History_Checklist.docx", buffer);
console.log("Done: Obstetric_History_Checklist.docx");
});
cd /home/daytona/workspace/obstetric-checklist && node generate_checklist.js 2>&1
~/obstetric-checklist/generate_checklist.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/obstetric-checklist/generate_checklist.js'
~/obstetric-checklist/generate_checklist.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/obstetric-checklist/generate_checklist.js'
cd /home/daytona/workspace/obstetric-checklist && node generate_checklist.js 2>&1
python /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/workspace/obstetric-checklist/Obstetric_History_Checklist.docx 2>&1
python3 -c "import zipfile, sys; z=zipfile.ZipFile('/home/daytona/workspace/obstetric-checklist/Obstetric_History_Checklist.docx'); print('Files in docx:', z.namelist()[:8]); print('Size:', round(z.fp.seek(0,2)/1024), 'KB')" 2>&1
Obstetric History Checklist
Word Document · DOCX