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

# Know when the pay calendar runs out

> Read the Sentry condition, check how many days of pay periods are left, and load the next year in time

export const Touches = ({systems}) => <p>
    <strong>Systems involved:</strong>{" "}
    {systems.split(",").map((s, i) => <span key={s}>
        {i > 0 ? " · " : ""}
        <a href={"/systems/" + s.trim()}>{s.trim().replace(/-/g, " ")}</a>
      </span>)}
  </p>;

<Touches systems="supabase-backend, sentry" />

The timesheet reminders, the overnight auto-submit and the **Hours** screen in the app all read the pay calendar. When the calendar runs out they do not fail; they go quiet. The monitor warns you before that happens, so treat its condition as the cue to load the next year.

## Before you start

* Access to Sentry, where the monitor opens its conditions. See [How the monitor works](/handbook/running/how-the-monitor-works).
* The ADP schedule PDF for the next year, if the calendar is short.

## Steps

<Steps>
  <Step title="Read the condition">
    The monitor opens a condition titled **The payroll calendar has insufficient future coverage** when 60 days or fewer remain. It is marked for review while some days remain, and urgent when none remain or no calendar is loaded. The Sentry issue carries the number of days left and the last submit-by date loaded; where to find that on the issue is on [Act on a Sentry email](/handbook/running/act-on-a-sentry-email).
  </Step>

  <Step title="Check the calendar yourself">
    The days left are the last submit-by date loaded minus today, on Ottawa's clock. The last pay period of a year ends in late December and its submit-by date is a few days before that, so the warning arrives in the autumn.
  </Step>

  <Step title="Load the next year">
    Follow [Load the year's payroll calendar](/handbook/hours/load-the-payroll-calendar). Nothing else needs a restart: the jobs read the calendar each time they run.
  </Step>
</Steps>

## How you know it worked

* The condition closes on the monitor's next run once more than 60 days remain.
* The **Hours** screen in the app shows the next year's first period once the calendar reaches it.

## If it did not work

* The condition stays open: the PDF did not parse, so no periods were written. Open the Payroll record in Zoho and read **Processing Status**; see [Load the year's payroll calendar](/handbook/hours/load-the-payroll-calendar).
* A second condition, **Timesheets have no matching payroll period**, is the same check's other half: a timesheet names a pay period that is not loaded. It is urgent when such a sheet holds hours, is submitted or approved, or covers today. Loading the missing year clears it. For what to do with any condition, see [Act on a Sentry email](/handbook/running/act-on-a-sentry-email).

## Related

* [How timesheets work](/handbook/hours/how-timesheets-work)
* [How the monitor works](/handbook/running/how-the-monitor-works)
* [Monitor checks](/reference/monitor-checks)
