# insurance.no-claims-discount
The no-claims discount (NCD, or no-claims bonus) a policyholder holds at
renewal, from the years they held, the claims in the year just ended and the
insurer's scale.
## The scale is the caller's
Every insurer publishes its own scale: the discount at each number of
claim-free years, and how far a claim steps you back. So the scale is an
argument, not data in this package. Each level says:
- `years`: the claim-free years from which it applies (the scale starts at 0
and rises; gaps are fine: years 6 to 8 on a scale with levels at 5 and 9
get the 5-year discount);
- `discountBasisPoints`: its discount;
- `stepBack`: the years held after 1, 2, 3... claims in a year from this
level. More claims than listed use the last entry, and an empty list means
any claim goes back to 0. A step never rises above the level or the step
before it.
The vectors use an illustrative scale (0, 30, 40, 50, 60, 65% up to 5 years,
70% at 9; one claim at 5 years steps back to 3), not any insurer's.
## The rules applied
- A claim-free year earns one year. Years keep counting beyond the top of the
scale (UK insurers quote "9+ years"), and the discount is that of the
highest level not above them.
- A year with claims steps back by the level the policyholder held at the
start of the year: 12 years with a top level at 9 uses the 9-year steps.
- **Protected NCD**: when `claimsInWindow` (this year's claims included) is
within `claimLimit` (commonly 2 claims in 5 years), the years stay as they
were. The claim year earns no extra year, which is how protection is
usually sold: it protects the discount, not the premium. Beyond the limit
the normal step-back applies. Some insurers do let a protected claim year
earn; add one to `years` if yours does.
Which claims count against NCD (a non-fault claim where costs are fully
recovered usually does not) is for the caller to decide before calling.
Applying the discount to a premium is `money.apply-rate` or
`insurance.rating-factors`.
## Before you rely on this
**Not professional advice.** This capability calculates insurance figures from published rules. It is a software component for developers, not financial advice. Rules change and every rate here has an effective date. Check that the dates cover your case. Verify results against the official sources listed above, and have an actuary review how you use it, before anyone relies on the output. Provided "as is" under its licence, without warranty.
**Unreviewed.** This capability's implementations agree in every language and pass its published test vectors, which were worked out from the official sources cited. But no qualified actuary has yet checked those vectors, or confirmed that the capability covers the cases it claims. Treat it as a draft. Do not use it for real people, money or decisions without your own expert review. Once a qualified reviewer signs off, this notice is replaced with their name, qualification and the date. Each new version needs fresh sign-off.
1.0.1 marks it unreviewed. The code and the tests are unchanged.