Skip to content

The renewal cycle

Two clocks, not one

Every person–certification pair runs two independent timers.

The enrolment clock starts when somebody is enrolled and runs for the certification's completion timeframe. If they have not completed when it runs out, they are Overdue.

The certificate clock starts when they complete and runs for the validity period. As it nears its end they become Expiring; when it runs out, the cycle closes.

The two overlap. Somebody enrolled on this year's course while last year's certificate is still valid is running both at once, which is why the User status page shows a completion due date and an expiration date side by side, and why one falling after the other is not an error.

What issues a certificate

Completing a course that belongs to a certification. The certificate is written with the completion date and the validity window that certification defines, and the person's coverage runs from it.

The completion date is a fact and stays as Moodle recorded it. The window is derived from it, so correcting a certification's validity period reaches the certificates already issued: the nightly rebuild works every window out again from the period in force. See Recalculate stored dates.

There is no test to pass beyond the course's own completion, and no edition somebody is supposed to be on. Which edition it was is recorded on the certificate, so what it was earned on stays visible, but it makes no difference to whether the completion counts.

Somebody who completes two editions in one cycle earns two certificates. Their coverage runs to whichever window reaches furthest, so finishing an older edition late cannot shorten coverage that is still running.

What decides a status

One question: does a certificate cover today?

  • YesValid, or Expiring once inside the certification's warning window.
  • NoPending, or Overdue once the completion deadline has passed.

The status the row carried yesterday plays no part. See Compliance statuses.

A cycle ends in renewal or in removal

When a certificate reaches the end of its validity, LOOP asks whether anybody is renewing it.

  • Somebody is — the person has an active enrolment on an edition that can advance them. The row returns to Pending for the new cycle. Its new completion due date is counted from the end of the validity that has just run out, not from the enrolment date, so somebody enrolled months in advance does not start the renewal already late.
  • Nobody is — the row leaves the User status page. The certificate went into the certification history the moment it was issued, and that is where it stays, so the record of who was certified survives. It survives even the deletion of the certification itself.

So the count on the User status page drops when a cycle closes with no renewal under way. Those people are on the Certification history page.

When statuses change, and when they do not

Enrolment and completion are picked up immediately, because Moodle raises an event for them: the person's row is worked out again there and then.

Everything else is the passage of time, which raises no event, so it is handled by a nightly task. On a site where Moodle cron is not running, compliance data stops moving. Nothing is lost: every page carrying a worked-out figure says when it was worked out, and one run brings everything up to date however long it has been.

Nothing is worked out on page view. The pages read stored figures, which is why the date at the top of the page matters.

Notices do not decide statuses

A certification's day lists say when an email goes out. They say nothing about who is in which state. Two sites holding the same data with different day lists show the same statuses.

The reverse is also true: the certification's expiration warning (days) decides when a status becomes Expiring and nothing else. Changing it moves no mail.

Time zones

Every boundary — midnight, "today", the day an expiry falls on — is worked out in the site's time zone, not in the time zone of whoever happens to be looking at the page.