Hello Ares, you know I have uploaded an IRB and EC form. It is actually an order form in which I have written some of the questions regarding my audit. And I just want to make it, and I just want to put these questions in a Microsoft Word for the data collection for about 100 to 150 patients. Can you write it for me in a column and rows for me to easily collect my data to enter it so that after collecting the data, I just enter it into my SPSS so that I can, you know, make my results very easily.
cd /home/daytona/workspace && pandoc --track-changes=all "attachments/55593037-f…
ls /home/daytona/workspace/ && ls /home/daytona/skills/docx/
mkdir -p /home/daytona/workspace/audit-data-sheet
~/audit-data-sheet/create_sheet.js
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
AlignmentType, PageOrientation, WidthType, BorderStyle, VerticalAlign,
HeadingLevel, ShadingType
} = require('docx');
const fs = require('fs');
// ── Column definitions ──────────────────────────────────────────────────────
// Each object: { label, spssVar, width (in twips), note }
const columns = [
{ label: "Patient\nNo.", spssVar: "Pt_No", w: 500 },
{ label: "Date", spssVar: "Date", w: 900 },
{ label: "Age\n(years)", spssVar: "Age", w: 600 },
{ label: "Gender\n(1=M 2=F)", spssVar: "Gender", w: 700 },
{ label: "Education\n(1=Primary 2=Secondary 3=Inter 4=Grad+)", spssVar: "Education", w: 1200 },
{ label: "Doctor\nintroduced?\n(1=Yes 0=No)", spssVar: "DrIntro", w: 900 },
{ label: "Doctor\nSpecialty", spssVar: "DrSpecialty", w: 1000 },
{ label: "Understands\nwhy admitted?\n(1=Yes 0=No)", spssVar: "UnderstandAdm", w: 900 },
{ label: "Department\nadmitted to", spssVar: "Dept", w: 1000 },
{ label: "Diagnosis\nexplained?\n(1=Yes 0=No)", spssVar: "DiagExplain", w: 900 },
{ label: "Prognosis\nexplained?\n(1=Yes 0=No)", spssVar: "ProgExplain", w: 900 },
{ label: "Investigations\nexplained?\n(1=Yes 0=No)", spssVar: "InvExplain",w: 900 },
{ label: "Understands\ntreatment?\n(1=Yes 0=No)", spssVar: "UnderTx", w: 900 },
{ label: "Able to make\nown decisions?\n(1=Yes 0=No)", spssVar: "Autonomy",w: 900 },
{ label: "Questions\nanswered?\n(1=Yes 0=No)", spssVar: "QnAnswered", w: 900 },
{ label: "Satisfied with\ncommunication?\n(1=Yes 0=No)", spssVar: "CommSat",w: 900 },
{ label: "Attendant\npresent?\n(1=Yes 0=No)", spssVar: "Attendant", w: 900 },
{ label: "Felt rushed\nin decisions?\n(1=Yes 0=No)", spssVar: "Rushed", w: 900 },
];
const NUM_DATA_ROWS = 100; // blank rows for data entry
// ── Colour palette ───────────────────────────────────────────────────────────
const HEADER_BG = "1F4E79"; // dark blue
const SUBHDR_BG = "2E75B6"; // medium blue
const VARROW_BG = "D6E4F0"; // light blue
const ALT_ROW_BG = "F2F7FC"; // very light blue (alternate rows)
const WHITE = "FFFFFF";
function solidFill(hex) {
return { type: ShadingType.SOLID, color: hex, fill: hex };
}
function noBorder() {
return { style: BorderStyle.NONE, size: 0, color: "FFFFFF" };
}
function thinBorder(color = "ADB9CA") {
return { style: BorderStyle.SINGLE, size: 4, color };
}
function cell(text, opts = {}) {
const {
bold = false, color = "000000", bg = WHITE, fontSize = 14,
vAlign = VerticalAlign.CENTER, align = AlignmentType.CENTER,
width = null, wrap = true, italic = false
} = opts;
const runs = text.split("\n").flatMap((line, i) => {
const r = new TextRun({ text: line, bold, color, size: fontSize, font: "Arial", italics: italic });
return i === 0 ? [r] : [new TextRun({ break: 1 }), r];
});
const cellProps = {
shading: solidFill(bg),
borders: {
top: thinBorder(),
bottom: thinBorder(),
left: thinBorder(),
right: thinBorder(),
},
verticalAlign: vAlign,
children: [
new Paragraph({
alignment: align,
spacing: { before: 30, after: 30 },
children: runs,
})
],
};
if (width) cellProps.width = { size: width, type: WidthType.DXA };
return new TableCell(cellProps);
}
function emptyCell(bg = WHITE, width = null) {
const cellProps = {
shading: solidFill(bg),
borders: {
top: thinBorder(),
bottom: thinBorder(),
left: thinBorder(),
right: thinBorder(),
},
verticalAlign: VerticalAlign.CENTER,
children: [new Paragraph({ children: [] })],
};
if (width) cellProps.width = { size: width, type: WidthType.DXA };
return cellProps;
}
// ── Build rows ───────────────────────────────────────────────────────────────
// Row 1: Title span
const titleRow = new TableRow({
children: [
new TableCell({
columnSpan: columns.length,
shading: solidFill(HEADER_BG),
borders: { top: thinBorder("FFFFFF"), bottom: thinBorder("FFFFFF"), left: noBorder(), right: noBorder() },
verticalAlign: VerticalAlign.CENTER,
children: [
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 80, after: 80 },
children: [
new TextRun({
text: "Assessment of Patient Understanding of Diagnosis and Treatment in the General Medicine Ward",
bold: true, color: "FFFFFF", size: 22, font: "Arial"
})
]
}),
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 0, after: 60 },
children: [
new TextRun({
text: "DATA COLLECTION SHEET | Northwest General Hospital & Research Centre | NWGH – General Medicine",
color: "BDD7EE", size: 16, font: "Arial"
})
]
}),
]
})
]
});
// Row 2: SPSS variable names
const spssRow = new TableRow({
children: columns.map(c =>
cell(c.spssVar, { bold: true, color: "FFFFFF", bg: SUBHDR_BG, fontSize: 13, width: c.w })
)
});
// Row 3: Column headers
const headerRow = new TableRow({
children: columns.map(c =>
cell(c.label, { bold: true, color: "FFFFFF", bg: SUBHDR_BG, fontSize: 13, width: c.w })
)
});
// Row 4: Coding guide
const codingGuide = [
"1–100", "DD/MM/YY", "Numeric", "1 or 2",
"1 / 2 / 3 / 4",
"1=Yes\n0=No", "Free text", "1=Yes\n0=No", "Free text",
"1=Yes\n0=No", "1=Yes\n0=No", "1=Yes\n0=No", "1=Yes\n0=No",
"1=Yes\n0=No", "1=Yes\n0=No", "1=Yes\n0=No", "1=Yes\n0=No", "1=Yes\n0=No",
];
const codingRow = new TableRow({
children: codingGuide.map((g, i) =>
cell(g, { bold: false, color: "1F4E79", bg: VARROW_BG, fontSize: 12, width: columns[i].w, italic: true })
)
});
// Data rows
const dataRows = Array.from({ length: NUM_DATA_ROWS }, (_, rowIdx) => {
const bg = rowIdx % 2 === 0 ? WHITE : ALT_ROW_BG;
return new TableRow({
children: columns.map(c => {
const cp = emptyCell(bg, c.w);
// Pre-fill patient number
if (c.spssVar === "Pt_No") {
cp.children = [
new Paragraph({
alignment: AlignmentType.CENTER,
children: [new TextRun({ text: String(rowIdx + 1), size: 14, font: "Arial", color: "555555" })]
})
];
}
return new TableCell(cp);
})
});
});
// ── Assemble table ───────────────────────────────────────────────────────────
const table = new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
rows: [titleRow, spssRow, headerRow, codingRow, ...dataRows],
layout: "fixed",
});
// ── Document ─────────────────────────────────────────────────────────────────
const doc = new Document({
styles: {
default: { document: { run: { font: "Arial", size: 20 } } }
},
sections: [{
properties: {
page: {
size: {
width: 12240,
height: 15840,
orientation: PageOrientation.LANDSCAPE,
},
margin: { top: 500, right: 400, bottom: 500, left: 400 },
}
},
children: [
table,
new Paragraph({
alignment: AlignmentType.LEFT,
spacing: { before: 200 },
children: [
new TextRun({
text: "Coding Key: Gender: 1=Male, 2=Female | Education: 1=Primary, 2=Secondary, 3=Intermediate, 4=Graduate+ | All Yes/No items: 1=Yes, 0=No",
size: 14, font: "Arial", color: "555555", italics: true
})
]
}),
new Paragraph({
alignment: AlignmentType.LEFT,
children: [
new TextRun({
text: "Inclusion Criteria: Age >25 yrs · Higher education · Admitted ≥48 hrs · Clinically stable · Willing to participate",
size: 14, font: "Arial", color: "555555", italics: true
})
]
}),
new Paragraph({
alignment: AlignmentType.LEFT,
children: [
new TextRun({
text: "Exclusion Criteria: Critically ill · Cognitive impairment · Refused consent · Age <25 yrs",
size: 14, font: "Arial", color: "555555", italics: true
})
]
}),
new Paragraph({
alignment: AlignmentType.LEFT,
children: [
new TextRun({
text: "Investigators: Dr Saad Rafi (HO), Dr M. Sajid (SR), Dr Shahzeb (HO), Dr Fatima Hassan (HO-Psych), Dr Shakeel (PGY1) | Analysis: SPSS v26",
size: 14, font: "Arial", color: "555555", italics: true
})
]
}),
]
}]
});
Packer.toBuffer(doc).then(buf => {
fs.writeFileSync("/home/daytona/workspace/audit-data-sheet/Patient_Audit_DataSheet.docx", buf);
console.log("Done.");
});
cd /home/daytona/workspace/audit-data-sheet && node create_sheet.js 2>&1
python /home/daytona/skills/docx/scripts/office/validate.py /home/daytona/worksp…
# Verify the file is a valid ZIP/docx and check its size ls -lh /home/daytona/wo…
Patient Audit DataSheet
Word Document · DOCX
| Row | Purpose |
|---|---|
| Row 1 | Study title banner (dark blue) — "Assessment of Patient Understanding..." + NWGH |
| Row 2 | SPSS variable names (e.g. Pt_No, Age, Gender, DrIntro, DiagExplain…) — copy-paste directly into SPSS |
| Row 3 | Full column headers (human-readable questions) |
| Row 4 | Coding guide (e.g. 1=Yes, 0=No; 1=M, 2=F; education scale) |
| Rows 5–104 | 100 blank data rows — pre-numbered 1–100, alternating shading for easy reading |