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

# Every finding explained

> Each check WatchMyCover runs, the sentence it produces, what it means for the verdict, and what to do about it.

This page lists every finding the rules can produce. On the vendor's page you see the sentence, with **Required** and **On file** beneath it; the code under each heading is for reference, if you write to us about a finding.

Severity depends on whether the coverage is mandatory in the template. On a mandatory coverage, a problem is **Critical** (or **Cannot verify**); on an optional one, the same problem is **Info** only and never changes the verdict or triggers a chase. See [Verdicts explained](/docs/certificates/verdicts).

## Summary

| Finding                                                                         | Severity on a mandatory coverage | Verdict        | Chased                       |
| ------------------------------------------------------------------------------- | -------------------------------- | -------------- | ---------------------------- |
| [No requirements assigned](#no-requirements-assigned)                           | Critical                         | Non-compliant  | No                           |
| [No certificate on file](#no-certificate-on-file)                               | Critical                         | No certificate | Yes, at once                 |
| [Required coverage missing](#required-coverage-missing)                         | Critical                         | Non-compliant  | Yes, at once                 |
| [Coverage expired](#coverage-expired)                                           | Critical                         | Non-compliant  | Yes, on the ladder (overdue) |
| [Coverage not yet in force](#coverage-not-yet-in-force)                         | Critical                         | Non-compliant  | No                           |
| [Limit below the minimum](#limit-below-the-minimum)                             | Critical                         | Non-compliant  | Yes, at once                 |
| [Limit not provided](#limit-not-provided)                                       | Critical                         | Non-compliant  | Yes, at once                 |
| [Endorsement not evidenced](#endorsement-not-evidenced)                         | Critical                         | Non-compliant  | Yes, at once                 |
| [Endorsement stated but not verifiable](#endorsement-stated-but-not-verifiable) | Cannot verify                    | Needs review   | Yes, at once                 |
| [Certificate too old](#certificate-too-old-or-dated-in-the-future)              | Cannot verify                    | Needs review   | Yes, at once                 |
| [Certificate dated in the future](#certificate-too-old-or-dated-in-the-future)  | Cannot verify                    | Needs review   | No                           |
| [Coverage expiring](#coverage-expiring)                                         | Warning                          | Expiring soon  | Yes, on the ladder           |
| [Coverage carried but not required](#coverage-carried-but-not-required)         | Info                             | No effect      | No                           |

"Chased" assumes [chasing is switched on](/docs/chasing/how-chasing-works) and the vendor has an email address.

***

## No requirements assigned

Code `TEMPLATE_MISSING`. "No insurance requirements are assigned to this vendor, so compliance cannot be determined."

Without a template there is nothing to measure against, and reporting the vendor as compliant would be false. No other check runs.

**What to do:** edit the vendor and choose a template under **Insurance requirements**.

## No certificate on file

Code `CERTIFICATE_MISSING`. "No certificate of insurance is on file for this vendor."

The vendor has a template but nothing recorded. The status is **No certificate**.

**What to do:** record the certificate if you have it. If chasing is on, the subcontractor is emailed "Certificate of insurance needed" with an upload link, once, until a certificate is on file.

## Required coverage missing

Code `COVERAGE_MISSING`. "Umbrella / Excess Liability is required but is not evidenced on the certificate."

Required: *Required*. On file: *Not on certificate*.

A coverage the template makes mandatory is not on any certificate in force.

**What to do:** check whether the coverage came on a separate certificate, and record that one too. If it is genuinely absent, the subcontractor needs to obtain the coverage. Chasing asks for a corrected certificate.

## Coverage expired

Code `COVERAGE_EXPIRED`. "General Liability expired 12 days ago on Mar 1, 2027." On the expiry date itself: "General Liability expired today, Mar 1, 2027: a policy ends at the start of its expiry date."

Required: *In force on (today)*. On file: *Expired (date)*.

Policies run 12:01 a.m. to 12:01 a.m., so there is no cover on the expiry date.

**What to do:** record the renewal certificate. If chasing is on, the subcontractor received the ladder of renewal emails and now receives the overdue email.

## Coverage not yet in force

Code `COVERAGE_NOT_YET_EFFECTIVE`. "Workers' Compensation is not in force yet — it does not take effect until Jul 1, 2027."

Required: *In force on (today)*. On file: *Effective (date)*.

No policy on file for this coverage is in force today, and the next one starts in the future, so the subcontractor has no cover on site today. This is treated like an expired policy.

**What to do:** if an earlier policy covers today, record that certificate too; WatchMyCover then judges the coverage on the policy in force and the future one carries it forward. See [Renewals and several certificates](/docs/certificates/renewals). This finding is not chased automatically.

## Coverage expiring

Code `COVERAGE_EXPIRING`. "Automobile Liability expires in 21 days on Apr 30, 2027."

Required: *More than (window) days remaining*. On file: *(n) days remaining*.

A mandatory policy expires inside your warning window (30 days by default, set in **Settings → Renewal chasing**). The subcontractor is still compliant today; the status is **Expiring soon**.

If a renewal is already on file and starts on or before the old policy ends, the expiry used is the end of the renewal, so this finding does not appear.

**What to do:** nothing yet. Chasing emails at 30, 14, 7 and 1 days before expiry.

## Limit below the minimum

Code `LIMIT_BELOW_REQUIRED`. "General Liability aggregate limit of \$1,000,000 is below the required \$2,000,000."

Required: \$2,000,000. On file: \$1,000,000.

Checked separately for each-occurrence and aggregate limits.

**What to do:** first check the figure was typed correctly. If it was, the subcontractor needs higher limits (often through umbrella cover, which WatchMyCover checks as its own coverage). Chasing asks for a corrected certificate.

## Limit not provided

Code `LIMIT_NOT_PROVIDED`. "Workers' Compensation each-occurrence limit is required but no limit is stated on the certificate."

Required: *(the minimum)*. On file: *Not provided*.

The template sets a minimum and no figure was recorded. For workers' compensation this often means only **Per Statute** was ticked; enter the **E.L. Each Accident** figure. See [Coverage types](/docs/requirements/coverage-types#each-occurrence-and-aggregate).

**What to do:** enter the limit if it is on the certificate. If it is not, chasing asks for a certificate that states it. If your contract does not need the figure, clear the minimum in the template.

## Endorsement not evidenced

Code `ENDORSEMENT_MISSING`. "General Liability does not evidence the required additional insured endorsement."

Required: *Required*. On file: *Not evidenced*.

The template requires the endorsement and the evidence was recorded as **Not on certificate**.

**What to do:** check the ADDL INSD and SUBR WVD columns and the description box. If the certificate states it, record it as **Stated on certificate**; if you hold the form, **Endorsement form on file**. Otherwise chasing asks for a corrected certificate.

## Endorsement stated but not verifiable

Code `ENDORSEMENT_NOT_VERIFIABLE`. "General Liability states the waiver of subrogation on the certificate, but a certificate cannot amend a policy. Request the endorsement form (CG 24 04) to confirm it."

Required: *Endorsement form on file*. On file: *Stated on certificate only*.

The certificate says the endorsement is in place, but only the endorsement form proves it. The finding names the standard form to ask for, by coverage: for general liability CG 20 10 / CG 20 37 (additional insured), CG 24 04 (waiver of subrogation) and CG 20 01 (primary & non-contributory); for auto CA 20 48 (additional insured) and CA 04 44 (waiver of subrogation); for workers' comp WC 00 03 13 (waiver of subrogation). Where there is no standard form, it asks for the endorsement form without naming one.

**What to do:** ask the broker for the endorsement form, upload it, and record the coverage again with **Endorsement form on file**. Chasing sends "Documents needed to confirm …" listing each missing form. See [Endorsements and evidence levels](/docs/requirements/endorsements).

## Certificate too old, or dated in the future

Code `CERTIFICATE_STALE`.

**Too old:** "The certificate on file was issued 400 days ago. It cannot confirm the policy is still in force today — ask the broker for a current certificate."

Required: *Issued within 365 days*. On file: *Issued (date)*.

A certificate is a snapshot on its issue date, and a carrier can cancel a policy mid-term without the certificate changing. After 365 days it stops being evidence of cover today. The check uses the most recently issued certificate in force.

**Dated in the future:** "The certificate on file is dated Jan 5, 2028, which is in the future. Check the issue date against the document."

Required: *Issued on or before (today)*. This is almost always a typing error in the **Issued on** field, so it is not chased.

**What to do:** for an old certificate, ask the broker for a current one and record it; chasing asks for it. For a future date, correct the issue date by recording the certificate again.

## Coverage carried but not required

Code `COVERAGE_NOT_REQUIRED`. "Pollution Liability is carried but is not required by this template."

Required: *Not required*. On file: *Expires (date)*.

Recorded for information only. It never affects the verdict, is not chased, and is not listed among the vendor's problems.

***

## Findings on optional coverages

If a coverage is in the template but not marked **Coverage is mandatory**, any of the problems above (expired, expiring, not yet in force, short limit, missing or unverifiable endorsement) is recorded as **Info**. It is kept for the record but never changes the verdict, never appears on the vendor's page as a problem, and is never chased.
