Variable: STRANDED_ENTRY_STATUSES
constSTRANDED_ENTRY_STATUSES: readonly ["submitted","approved"]
Defined in: src/server/services/strandedHours.ts:25
Statuses a stranded (late, unpaid) entry can hold. Close locks draft/submitted/approved
on every paid assignment (close_and_lock_payroll_batch, 0041) — but only over the CALENDAR range,
while pricing spans the settling weeks (#162). So a submitted/approved entry whose paying run
is closed is one of two things, split by when it was created vs the batch's pricing snapshot:
created after → arrived too late, payable-but-never-paid (genuinely stranded); created before →
PRICED by that run but left unlocked (a tail day outside the calendar lock range) — already paid,
never to be paid again. pending_approval is deliberately excluded: pre-close ones were already
paid at the contracted cap, and post-close ones must clear the overage gate first (approval flips
them to approved, which lands them here). draft is not payable at all.