Source: https://guthlabs.ai/docs/instruments/smoking-pack-year-calculator/mechanism/

instrument mechanism / verified-clean

# Smoking Pack-Year Calculator mechanism

The inspectable method record for Smoking Pack-Year Calculator, kept separate from implementation and qualification.

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

## Model scope

The honest-label language is appropriate, but the specification must resolve the exact ambiguity between cigarettes/day and packs/day and explicitly define the pack-size assumption before release.

- The stated formula is correct only when the input is packs per day, but the specified input is cigarettes per day; cigarettes/day must be divided by cigarettes per pack first.

- The pack size is unspecified. A 20-cigarette pack is a common convention, but pack sizes vary, so the instrument must state or collect the assumed pack size.

- For multiple smoking periods, the formula must sum each period: total pack-years = sum((cigarettes/day ÷ cigarettes/pack) × years) rather than applying one undifferentiated period formula.

## Units and conventions

- Unless otherwise specified, one pack is assumed to contain 20 cigarettes.

- Years smoked are elapsed years and must be nonnegative; fractional years are allowed.

- Cigarettes/day must be nonnegative and cigarettes/pack must be a positive integer.

- Pack-years means packs per day multiplied by years, with output units of pack-years.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "cigarettes_per_day": 20,
    "years_smoked": 15,
    "assumed_cigarettes_per_pack": 20
  },
  "expected_outputs": {
    "total_pack_years": 15
  },
  "working": "packs/day = 20 cigarettes/day ÷ 20 cigarettes/pack = 1 pack/day; pack-years = 1 × 15 years = 15 pack-years."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

The specification does not define the cigarettes-per-pack conversion, so the same cigarette history can produce different totals. Extreme finite inputs also overflow ordinary JavaScript arithmetic to Infinity, which requires validation or rejection.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/smoking-pack-year-calculator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/smoking-pack-year-calculator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/smoking-pack-year-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-tranche5/tranche5-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
