Skip to main content

Review comments

FormComment documents attach to a form (optional stepKey / stepNumber). Only Super Admin can create comments.
status: approved | rejected | under_review. Principals see comments on the dashboard (?view=comments) and on the form. Comments can be marked fixed; DELETE-style removal is via the comment id route.

Goals

/admin/goals and GET /api/admin/goals cluster plan answers (including N/A detection) and honor school year query params. District targets live on SchoolYearSettings.districtGoals.

How to export table data

Table answers print as real grids in PDF and Word (src/lib/exportTables.js). District CSVs are roster/status reports, not cell-by-cell table dumps.
1

Export one plan (PDF or Word)

Open /form/[id] or /view/[id] and use PDF / Word, or call GET /api/forms/[id]/export/pdf and .../docx. Anyone with form view access can download. The file header uses the product name from src/lib/branding.js. Locked table columns (from the question bank) are the headers in the file. Empty tables still show the header row so the paper copy can be filled in.
2

Export a submissions report CSV

Super Admin → /admin/submissions → generate report. That POSTs /api/admin/reports with optional startDate, endDate, and status. Columns are school, principal, status, progress, review fields — not the inner table cells. Principals (level 4) hitting the same route only receive their school (schoolScopeFilter).
3

Export the year workbook

Super Admin: GET /api/admin/forms/export?schoolYear=2026-2027&format=csv (or html). Includes compare-step answers for attendance, housing, and counseling.
Need a spreadsheet of staff-contact rows rather than a status report? Fill the table on the plan, then export Word and copy the table, or keep the source in Excel and paste back into the form.
Plan PDF/DOCX are limited to 10 downloads per user per 60s (rl:export-pdf:*, rl:export-docx:*). District year export is 5 per 60s (rl:export-district:*).

Exports

PDF/DOCX use pdfkit / docx on the server (webpack externals). Table questions render via exportTables.js, not as joined text.