P4 Software / cifraHQ

Annual Reset

Annual Reset

Every January 1, each employee's incapacity balance resets to a fresh allotment for the new calendar year. CifraHQ automates this via a Hangfire background job.

How the reset works

On January 1, the AnnualResetJob runs for every tenant:

  1. For each active employee with an indefinite-term contract, creates a new IncapacityBalance record for the new year.
  2. Sets DaysAllotted from the current Incapacity Policy (default 18).
  3. Sets DaysUsedEmployerPaid = 0 and DaysUsedCssPaid = 0.
  4. Sets CutoffDate = January 1 of the new year.

The prior year's balance is retained as a historical record (not deleted).


Ensuring balances exist mid-year

If a tenant enables the Incapacity module mid-year, or if a new employee is hired after January 1, the balance row may not exist yet. Use the Ensure Current Year button on Payroll > Incapacity > Balances to create missing balance rows for the current year for all active Employees.

The button calls api/IncapacityBalance/EnsureCurrentYear and creates a row with the full annual allotment (18 days). It does not prorate for partial-year hires - see below.


Partial-year hires

By default, CifraHQ gives new hires the full annual allotment (18 days) regardless of their hire date. Panama law does not mandate proration of the sick-leave allotment for partial years - the 18-day minimum applies from the first day of employment.

If your company policy prorates the allotment (e.g., 1.5 days per month hired), you can adjust the individual employee's balance row manually via the API or by contacting support for a batch adjustment script.


Viewing prior-year balances

The Balances grid at Payroll > Incapacity > Balances shows the current year's balance for each employee by default. To view prior years, filter by year using the grid's column filter on the Year field.

Prior-year balances are read-only - they reflect the actual consumption as of December 31 of that year.


Certificates that span January 1

A certificate with StartDate in December and EndDate in January is automatically split at the year boundary:

  • December days consume from the prior year balance (Year = current year - 1).
  • January days consume from the new year balance (Year = current year).

If the new year balance does not exist yet when the certificate is submitted (e.g., the reset job has not run), the system uses the prior year balance for all days and corrects at reset time.


Checking reset job status

  1. Go to /{tenant}.CifraHQ.cloud/hangfire.
  2. Under Recurring Jobs, look for IncapacityAnnualReset.
  3. Confirm the last execution was January 1 and completed successfully.

If the job failed (rare - usually a DB connectivity issue at midnight), you can trigger it manually via the Hangfire dashboard's Trigger button, or use the Ensure Current Year button in the UI.


What "reset" does NOT do

  • Does not delete prior-year certificate records.
  • Does not carry over unused days to the new year (vacation carryover does not apply to sick leave under Panama law).
  • Does not change the DaysAllotted if the policy was updated mid-year - the new year balance uses the current policy value at the time the reset runs.

Related: Overview - Policy Setup - Certificate Intake - Payday Split

Was this page helpful?