diff --git a/components/StaffReportView.tsx b/components/StaffReportView.tsx
index c53e7c6..efe2643 100644
--- a/components/StaffReportView.tsx
+++ b/components/StaffReportView.tsx
@@ -121,6 +121,16 @@ export function StaffReportView({
const membersField = checkInSection?.fields.find((f) => f.descriptor.name === MEMBERS_ACTUAL_NAME);
const goalField = checkInSection?.fields.find((f) => f.descriptor.name === MEMBERS_GOAL_NAME);
+ // Most recent Survey_completed_by / _email values from the activity history.
+ // Activities are returned newest-first by /api/staff/report, so the first
+ // non-empty history entry on each field is "most recent."
+ const submitterName = pickLatestText(
+ checkInSection?.fields.find((f) => f.descriptor.name === "Survey_completed_by"),
+ );
+ const submitterEmail = pickLatestText(
+ checkInSection?.fields.find((f) => f.descriptor.name === "Survey_completed_by_email"),
+ );
+
const stageLabel = data.currentStage
? data.options[STAGE_OPTION_GROUP_ID]?.find((o) => o.value === data.currentStage)?.label
?? data.currentStage
@@ -149,6 +159,25 @@ export function StaffReportView({
/>
+
+ Most recent submitter
+ {" "}
+ {submitterName ?? "—"}
+ {submitterEmail && (
+ <>
+ {" · "}
+
+ {submitterEmail}
+
+ >
+ )}
+
@@ -539,11 +612,11 @@ function Y1MatrixTable({
{rows.map((row) => (
Metric
- {quarters.map((q) => (
- Q{q}
+ {periods.map((p) => (
+ {periodLetter}{p}
))}
{row.label}
- {quarters.map((q) => {
- const f = row.byQuarter.get(q);
+ {periods.map((p) => {
+ const f = row.byPeriod.get(p);
const latest = f?.history[0];
return (
-
+
{f && latest ? (