> ## Documentation Index
> Fetch the complete documentation index at: https://docs.timetracker.in/llms.txt
> Use this file to discover all available pages before exploring further.

# Timesheet statuses

> Every timesheet and time entry status in TimeTracker, the exact moves allowed between them, who can make each move, and what each state locks.

A timesheet moves through a fixed set of states. Nothing skips a step, and every move has one owner. This page is the reference.

## Two status layers

Timesheets carry two layers of status. They answer different questions, so they have different values.

| Layer                 | Question                                 | Values                                                           |
| --------------------- | ---------------------------------------- | ---------------------------------------------------------------- |
| **Submission status** | Where is the whole period in the review? | Not submitted, Submitted, Approved, Changes requested, Withdrawn |
| **Entry status**      | Where is this one time entry?            | Draft, Submitted, Approved, Locked, Invoiced                     |

A period's overall reading follows its **least advanced entry**. Nine approved entries and one draft entry make a draft week.

## Entry statuses

These are the states a single time entry lives in.

| Status      | Badge     | What it means                                               | Can you edit it? |
| ----------- | --------- | ----------------------------------------------------------- | ---------------- |
| `draft`     | Draft     | Tracked but not sent for review                             | Yes              |
| `rejected`  | Rejected  | A draft that was sent back, carrying a reason               | Yes              |
| `submitted` | Submitted | Sent for review, waiting on a decision                      | No               |
| `approved`  | Approved  | A reviewer accepted it                                      | No               |
| `locked`    | Locked    | A period close froze it. "Period closed – no further edits" | No               |
| `invoiced`  | Invoiced  | It is on an invoice                                         | No               |

<Note>
  **Rejected** is not stored as its own status. A rejected entry goes back to `draft` and keeps the reason attached. TimeTracker shows it as **Rejected** everywhere until you redo it, so the same entry never reads "Draft" on one screen and "Rejected" on another.
</Note>

## The state machine

Each row is a state. Each move is a legal transition. Anything not listed is refused.

| From        | To          | What triggers it              | Who can do it                                                           |
| ----------- | ----------- | ----------------------------- | ----------------------------------------------------------------------- |
| `draft`     | `submitted` | Submit the period             | The person, with `time.submit`. Or a manager with `time.submitOnBehalf` |
| `submitted` | `approved`  | Approve the period            | A reviewer with `time.approve`                                          |
| `submitted` | `draft`     | Request changes, or withdraw  | Reviewer with `time.approve`. Or the submitter withdrawing              |
| `approved`  | `locked`    | Close a period through a date | Owner or Admin, with `period.close`                                     |
| `approved`  | `draft`     | Reopen the approval           | Owner or Admin, with `time.reopenApproval`                              |
| `locked`    | `invoiced`  | Put the time on an invoice    | Owner, Admin, Project Manager, Finance, with `invoice.manage`           |
| `invoiced`  | `locked`    | Void the invoice              | Owner, Admin, Project Manager, Finance, with `invoice.manage`           |

Three rules follow from that table, and they are worth reading twice.

<Warning>
  **A status is never its own successor.** Approving an already-approved period is refused, not silently ignored. This is what stops a double click from writing twice.
</Warning>

* **Only two moves go backwards.** `submitted → draft` returns work to its author. `approved → draft` reverses a decision.
* **Reopening is blocked once anything is locked or invoiced.** At that point the correction route is an adjustment, not a reopen.
* **`invoiced → locked` only happens by voiding the invoice.** Nothing else releases invoiced time.

## Submission statuses

These are the states of the whole period.

| Status              | Badge             | What it means                              |
| ------------------- | ----------------- | ------------------------------------------ |
| Not submitted       | Not submitted     | No submission exists for the period yet    |
| `submitted`         | Submitted         | Sent, waiting on a reviewer                |
| `approved`          | Approved          | A reviewer accepted the period             |
| `changes_requested` | Changes requested | A reviewer sent it back, with a reason     |
| `withdrawn`         | Withdrawn         | The submitter pulled it back before review |

### When the period is editable again

A period is editable when it has **no submission at all**, or its status is **Changes requested** or **Withdrawn**.

**Submitted** and **Approved** are frozen.

### Reopening lands on Changes requested

Reopening an approved period does **not** return it to "Not submitted". It sets the period to **Changes requested** and records a **Reopened** event in the activity log, with the reason. The entries go back to draft.

## Activity events

The review screen shows an append-only log of everything that happened to the period.

| Event                 | Written when                                     |
| --------------------- | ------------------------------------------------ |
| **Submitted**         | The period was sent for the first time           |
| **Resubmitted**       | It was sent again after coming back              |
| **Approved**          | A reviewer accepted it                           |
| **Requested changes** | A reviewer sent it back, with the reason         |
| **Withdrew**          | The submitter pulled it back                     |
| **Reopened**          | A reviewer reversed an approval, with the reason |

Each event records the date, the time, who did it, and any comment.

## Example

Sarah Lin's week at Northwind Studio.

<Steps>
  <Step title="Monday to Friday">
    Sarah tracks 32 hours. Every entry is **Draft**. The period badge reads **Not submitted**.
  </Step>

  <Step title="Friday afternoon">
    She submits. All entries become **Submitted**, the period becomes **Submitted**, and her week freezes.
  </Step>

  <Step title="Friday evening">
    Priya Raman asks for changes: "3h on homepage wireframes should be billable." Every entry returns to **Draft** and shows as **Rejected**. The period reads **Changes requested**.
  </Step>

  <Step title="Monday">
    Sarah fixes the 3 hours and resubmits. Entries are **Submitted** again. The log shows **Submitted**, **Requested changes**, **Resubmitted**.
  </Step>

  <Step title="Monday afternoon">
    Priya approves. Entries become **Approved** and the period reads **Approved**.
  </Step>

  <Step title="Month end">
    Tom Whitfield closes the period through the last day of the month. Sarah's entries become **Locked** – no further edits.
  </Step>

  <Step title="Invoicing">
    Daniel Okafor bills Bluebird Coffee. The billable entries become **Invoiced**.
  </Step>
</Steps>

## Permissions

| Move                     | Capability            | Default roles                                     |
| ------------------------ | --------------------- | ------------------------------------------------- |
| Submit                   | `time.submit`         | Owner, Admin, Project Manager, Member, Contractor |
| Submit for someone else  | `time.submitOnBehalf` | Owner, Admin, Project Manager                     |
| Approve, request changes | `time.approve`        | Owner, Admin, Project Manager                     |
| Reopen an approval       | `time.reopenApproval` | Owner, Admin                                      |
| Close a period           | `period.close`        | Owner, Admin                                      |
| Correct settled time     | `time.adjust`         | Owner, Admin, Project Manager, Finance            |
| Invoice or void          | `invoice.manage`      | Owner, Admin, Project Manager, Finance            |

Holding the capability is only half of it. Supervision scope decides **whose** period you can act on. See [/concepts/supervision-scope](/concepts/supervision-scope).

## Plan gating

Moving a period out of **Submitted** – approving or requesting changes – is a **Pro** feature.

Reversing a decision is **not** gated. Reopening an approval and withdrawing an approval work on every plan, so a workspace that lapses is never stuck holding a decision it can neither finish nor undo.

## Common questions

<AccordionGroup>
  <Accordion title="Why can I not approve an already-approved period?">
    A state is never its own successor. Once the period is approved, the only moves out are locking it or reopening it.
  </Accordion>

  <Accordion title="Why does my week read Draft when most of it is approved?">
    A week takes the status of its least advanced entry. One draft entry makes the whole week read as draft.
  </Accordion>

  <Accordion title="What is the difference between Locked and Approved?">
    Approved means a reviewer accepted it, and it can still be reopened. Locked means a period close froze it, and only an adjustment can correct it.
  </Accordion>

  <Accordion title="Is Rejected a real status?">
    Not a stored one. A rejected entry is a draft carrying a reason. It reads as **Rejected** so you know it needs redoing.
  </Accordion>

  <Accordion title="Can invoiced time ever be edited?">
    Not directly. Voiding the invoice returns its entries to **Locked**, where an adjustment can correct them.
  </Accordion>
</AccordionGroup>

## Troubleshooting

* **"This has already been submitted."** Refresh to see the period's current state.
* **"Someone else changed this while you had it open."** Two people acted at once. Refresh, then act again.
* **"That period is closed."** The entries are locked or invoiced. Reopening is refused – use an adjustment.
* **"There's nothing submitted for that period yet, so there's nothing to act on."** No submission exists for that person and period.

## Related guides

<CardGroup cols={2}>
  <Card title="How timesheets work" icon="workflow" href="/timesheets/how-timesheets-work">
    The full loop, in plain language.
  </Card>

  <Card title="Reopen an approval" icon="rotate-ccw" href="/approvals/reopen-an-approval">
    Reverse a decision and what it does to the time.
  </Card>

  <Card title="Close a period" icon="lock" href="/approvals/close-a-period">
    Lock approved time through a date.
  </Card>

  <Card title="Adjustments" icon="calculator" href="/approvals/adjustments">
    Correct time that can no longer be edited.
  </Card>

  <Card title="All statuses" icon="list" href="/reference/statuses">
    Every status set in the product, in one place.
  </Card>

  <Card title="Roles and capabilities" icon="shield" href="/concepts/roles-and-capabilities">
    Who holds which capability by default.
  </Card>
</CardGroup>
