Skip to content

Cycle is stuck in OUTPUT_IMPORTED

You uploaded the Infotech output and expected the cycle to advance to CLIENT_REVIEW so the approval flow can fire. Instead, the cycle has been sitting in OUTPUT_IMPORTED for more than a few minutes. This is almost always one of four things; work them top to bottom.

1. The output parser failed on a column mismatch

The platform parses the uploaded Infotech output workbook and expects a known column shape. If Infotech changed a column name or the wrong workbook version was uploaded, parsing fails and the cycle never advances — but the output file appears uploaded because the file landed on storage before the parse step ran.

Check: open the cycle's Output tab. Look for an error banner or a parse-error row on the most recent output upload — it usually reads "Could not find expected column X" or "Unexpected sheet name". The audit log shows an output.parse_failed event around the upload timestamp.

Fix:

  1. Confirm with the Payroll Executive who pulled the output from Infotech that they downloaded the correct workbook version.
  2. Re-upload the correct workbook via Upload the Infotech output. The platform parses on each upload — a fresh, correctly-shaped file will succeed and advance the cycle automatically.
  3. If the workbook is the standard Infotech format and parsing still fails, the column rules for this client may be stale. Talk to your Payroll Lead — the parse rules are configured per-template.

2. The Spade approval report didn't generate

The output parsed cleanly but the comparison report (the side-by-side report the client sees on the approval portal) is queued and hasn't built yet. Without it, the approval round can't open and the cycle waits in OUTPUT_IMPORTED.

Check: open the cycle's Approval tab. If you see "No approval round yet" and the Output tab confirms the parse succeeded, the report-build job is what's missing. Wait 5 minutes — the build typically completes within ~30 seconds, but a busy worker can stretch that to a minute or two.

Fix:

  • If 5 minutes have passed and the Approval tab is still empty, the report-build job is genuinely stuck. This is the same failure shape as a stuck outbox dispatcher — escalate via the Outbox stuck runbook. The runbook covers worker-queue stalls in general.
  • Don't re-upload the output to retry — that creates a second parse and a second report-build attempt without clearing the first. Wait for the engineer.

3. The client has no active approver

The output parsed, the report built, but the auto-open of the approval round fails because there's no contact to address it to. The cycle stays at OUTPUT_IMPORTED waiting for a recipient.

Check: open the client (from Clients in the sidebar) → Contacts tab. Filter by Can approve = Yes and Active. If the result list is empty, that's your cause. The audit log shows an approval.skipped_no_approver event around the output upload timestamp.

Fix:

  1. Add or activate at least one approver via Add or edit client contacts.
  2. Return to the cycle and click Request approval manually — see Request client approval. This both advances the cycle to CLIENT_REVIEW and fires the email.

This is the same root cause as Approval request didn't auto-fire — the difference is that there, the export step had already moved the cycle past OUTPUT_IMPORTED; here, the parse step stops there.

4. The cycle actually moved, the page is stale

In rare cases the cycle has already advanced (to CLIENT_REVIEW or REVISION_REQUESTED) but your browser tab is showing a stale view from before the transition.

Check: hard-refresh the cycle page (Cmd+Shift+R on macOS, Ctrl+F5 on Windows). Look at the status banner again.

Fix: if the refresh updates the banner, you were looking at stale state — no further action needed. If the refresh shows CLIENT_REVIEW but the approval round is empty, that's cause #2 (report didn't build); if it shows REVISION_REQUESTED, the client has already requested a revision and you need Handle a revision request.

Still not finding it?

If all four check out — output parsed, report built, an active approver exists, and the page is fresh — and the cycle is still in OUTPUT_IMPORTED more than 10 minutes after the upload:

  • Check the audit log for any cycle.transition_blocked events. These would name the reason in the event detail.
  • The cycle may be in a state the platform doesn't expect to recover from automatically. Escalate to the on-call engineer using the tenant leak suspected runbook — closest match for "the cycle is genuinely stuck and no surface is reporting why". Don't try to manually transition the cycle through any backend tool.

For the full set of allowed transitions out of OUTPUT_IMPORTED, see the Payroll cycle status machine.

Internal use only — BreezyCorp