Source: https://guthlabs.ai/docs/instruments/heart-rate-zone-calculator/mechanism/

instrument mechanism / verified-clean

# Heart Rate Zone Calculator mechanism

The inspectable method record for Heart Rate Zone Calculator, kept separate from implementation and qualification.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Model scope

The arithmetic formulas are standard conditional on the stated assumptions, but the specification is not implementation-complete. The exact unresolved ambiguities are the zone endpoint convention, bpm rounding policy, accepted age and heart-rate ranges, and whether intensity inputs are decimal fractions or whole percentages. Retain the honest label that 220 − age is a population-average estimate and not medical advice.

- HRmax = 220 − age is a population estimate, not an individually measured maximum and is not the only accepted HRmax equation; the implementation must preserve the educational-estimate label.

- Karvonen requires a valid resting HR when that method is selected, but resting HR is described as optional without stating this conditional requirement.

- Zone boundary conventions are unspecified: inclusive endpoints can make adjacent zones overlap, while exclusive endpoints change displayed ranges.

- Rounding policy for fractional bpm endpoints is unspecified; rounding, flooring, or retaining decimals produces different tables.

- The phrase ACSM-style, widely published does not identify one exact zone-boundary and rounding convention.

## Units and conventions

- age is an integer or real number measured in completed years, not months or another unit.

- heart rates and HRmax are measured in beats per minute (bpm).

- %intensity is represented as a decimal fraction from 0.50 through 1.00, not as 50 through 100.

- For the test vectors, zones use lower-inclusive and upper-exclusive intervals, except Zone 5, which includes its upper endpoint; fractional bpm values are retained without rounding.

- For Karvonen, HRmax and HRrest are both in bpm, and HRmax must exceed HRrest.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "age_years": 30,
    "method": "percent_HRmax",
    "resting_HR_bpm": null
  },
  "expected_outputs": {
    "HRmax_bpm": 190,
    "zones_bpm": [
      {
        "zone": "50-60%",
        "range": "95 to <114"
      },
      {
        "zone": "60-70%",
        "range": "114 to <133"
      },
      {
        "zone": "70-80%",
        "range": "133 to <152"
      },
      {
        "zone": "80-90%",
        "range": "152 to <171"
      },
      {
        "zone": "90-100%",
        "range": "171 to 190 inclusive"
      }
    ]
  },
  "working": "HRmax = 220 − 30 = 190 bpm. Zone boundaries: 190×0.50 = 95; 190×0.60 = 114; 190×0.70 = 133; 190×0.80 = 152; 190×0.90 = 171; 190×1.00 = 190. Therefore the five intervals are [95,114), [114,133), [133,152), [152,171), and [171,190]."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

An extreme but syntactically numeric age such as 1e308 can produce a finite negative HRmax and entirely negative zone values instead of being rejected. Age zero is also accepted arithmetically despite being an invalid real-world demographic input.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/heart-rate-zone-calculator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/heart-rate-zone-calculator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/heart-rate-zone-calculator/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche4/tranche4-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
