@beerwright/core
    Preparing search index...

    Function effectiveMashTempC

    • A single mash temperature that stands in for a whole schedule, in °C, or undefined when the recipe has no rest that converts starch.

      A step mash has no single temperature, but fermentability mostly depends on how much conversion happened where beta-amylase is fast and makes maltose, versus where alpha-amylase dominates and leaves dextrins. So we collapse the schedule to the duration-weighted mean of its saccharification rests and drop everything else:

      • Sparge steps are a rinse and convert nothing.
      • Rests outside [MASH_SACCHARIFICATION_MIN_C, MASH_SACCHARIFICATION_MAX_C] °C are excluded, not clamped. An acid or protein rest below 55 °C converts no starch, and a mash-out above 75 °C denatures the amylases within minutes. Including either would move the answer in the wrong direction.
      • decoction and temperature steps count the same as infusion ones. How the tun got to the rest doesn't matter; the enzymes only see the rest temperature.

      Each rest is weighted by max(timeMinutes, 1), so a step with a zero or missing duration still moves the mean a little instead of disappearing.

      This is our own heuristic, not a published model. With it, a Hochkurz mash of 62 °C × 40 min then 72 °C × 20 min reads as (62×40 + 72×20) / 60 = 65.33 °C, a beer that finishes near the middle. Using the 62 °C of the first rest would predict a beer far drier than it ever ferments to.

      Parameters

      Returns number | undefined