fix(dashboard): include all CAPAs in on-time rate, count open+not-overdue as on-time

This commit is contained in:
2026-07-28 16:36:57 +08:00
parent 87251b3fc6
commit dbc66460c4
+9 -9
View File
@@ -74,9 +74,9 @@ export default async function HseDashboardPage({
dueDate: capaActions.dueDate,
completedAt: capaActions.completedAt,
verifiedAt: capaActions.verifiedAt,
status: capaActions.status,
})
.from(capaActions)
.where(isNotNull(capaActions.completedAt))
),
asAdmin(db =>
db.select({ id: doshReports.id })
@@ -131,16 +131,16 @@ export default async function HseDashboardPage({
.slice(0, 10)
const zoneMax = by_zone[0]?.count ?? 1
const today = now.toISOString().slice(0, 10)
const capas = completedCapas
const onTime = capas.filter(c => {
if (!c.dueDate) return false
const due = new Date(c.dueDate)
const done = c.verifiedAt
? new Date(c.verifiedAt)
: c.completedAt
? new Date(c.completedAt)
: null
return done !== null && done <= due
if (!c.dueDate) return true
if (c.completedAt) {
const done = c.verifiedAt ? new Date(c.verifiedAt) : new Date(c.completedAt)
return done <= new Date(c.dueDate)
}
// Still open — on time if not yet past due
return c.dueDate >= today
})
const capaOnTimeRate = capas.length > 0
? Math.round((onTime.length / capas.length) * 100)