## TL;DR
A score below its floor is an arithmetic defect, never a customer verdict. One component is unbounded below (an uncapped penalty, a ratio with a near-zero denominator) or a penalty is applied in two layers. Print every component for a negative account and the offender is visible immediately.

```text
health score formula error: negative scores for active accounts
```

## Use this when
- Scores below zero exist for accounts that are active
- The scale is documented as 0 to 100
- The negatives cluster on one trait (old tickets, low seats, long tenure)

## Not for this skill when
- The model intentionally allows negative scores, making this a display question
- Scores are low but positive, which is a weighting debate

## Steps
1. List every account with a negative score and its full component breakdown. Verify: the negative accounts and their components are in one table
2. Find the component that is negative or larger than the total scale for those accounts. Verify: the offending component is identified
3. Trace that component's formula for missing floors, caps, or a denominator that can approach zero. Verify: the exact arithmetic flaw is located
4. Check whether the same penalty also enters through a second component or a risk deduction layer. Verify: any double-count is confirmed or cleared
5. Clamp or fix the formula, re-score, and add a range validation that rejects scores outside 0 to 100. Verify: no negative scores remain and the validation guards the next run

## Variant phrasings
### negative health score bug
A related phrasing for the same underlying problem.
### health score below zero
A related phrasing for the same underlying problem.
### penalty component uncapped
A related phrasing for the same underlying problem.

Compatibility: Compatibility: formula-based health scoring in SQL, Python, or CS platform rule builders, current versions.

## Why it happens
Bounded scales break at their extremes first, on accounts with extreme inputs: ancient tickets, tiny denominators, huge penalties. Those accounts are a gift because they turn a vague wrongness into a formula you can read line by line.

## Edge cases / pitfalls
- Clamping the final score without fixing the component hides real ordering problems among low accounts. Fix the component, then clamp as a guard.
- Ratios like tickets per seat explode for one-seat accounts. Use minimum-denominator rules rather than dropping small accounts.
- Historical negative scores may already have triggered playbooks. Tell CS which accounts were mislabelled.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_tN2TuzCVQKX1GSuWl_dKZw
