@beerwright/core
    Preparing search index...

    Type Alias RecipeCheck

    RecipeCheck:
        | CheckBase & {
            id: "boil-over-kettle";
            kettleVolumeL: Litres;
            overflowL: Litres;
            preBoilVolumeL: Litres;
        }
        | CheckBase & {
            id: "mash-over-tun";
            mashTunVolumeL: Litres;
            mashVolumeL: Litres;
            overflowL: Litres;
        }
        | CheckBase & {
            fermenterVolumeL: Litres;
            headspaceL: Litres;
            id: "fermenter-headspace";
            volumeIntoFermenterL: Litres;
            wantedHeadspaceL: Litres;
        }
        | CheckBase & {
            acidAdded: boolean;
            band: Band;
            direction: "below"
            | "above";
            id: "mash-ph-out-of-band";
            ph: number;
        }
        | CheckBase & { additions: number; id: "sparge-acid-without-sparge" }
        | CheckBase & {
            achievedPitchRate: number;
            id: "pitch-short";
            packsRequired: number;
            remedy: "starter" | "starter-planned" | "more-packs";
            shortfallBillion: number;
            targetPitchRate: number;
        }
        | CheckBase & {
            band: Band;
            gramsPitched: number;
            gramsWanted: number;
            id: "pitch-short-dry";
            packsRequired: number;
        }
        | CheckBase & {
            band: Band;
            gramsEnough: number;
            gramsPitched: number;
            id: "pitch-heavy-dry";
            packsSuggested: number;
        }
        | CheckBase & {
            direction: "below"
            | "above";
            id: "ferment-temp-outside-yeast";
            rangeMaxC: number;
            rangeMinC: number;
            tempC: number;
            yeastName: string;
        }
        | CheckBase & {
            band: Band;
            direction: "below"
            | "above";
            id: "style-band";
            value: number;
            vital: StyleBandVital;
        }

    One thing the pre-brew pass found. Discriminate on id.

    Type Declaration

    • CheckBase & {
          id: "boil-over-kettle";
          kettleVolumeL: Litres;
          overflowL: Litres;
          preBoilVolumeL: Litres;
      }

      The boil won't fit in the kettle.

      • Readonlyid: "boil-over-kettle"

        Which check this is.

      • ReadonlykettleVolumeL: Litres

        The kettle's capacity, in liters.

      • ReadonlyoverflowL: Litres

        How much the pre-boil volume exceeds the kettle, in liters.

      • ReadonlypreBoilVolumeL: Litres

        Wort volume at the start of the boil, in liters.

    • CheckBase & {
          id: "mash-over-tun";
          mashTunVolumeL: Litres;
          mashVolumeL: Litres;
          overflowL: Litres;
      }

      The mash won't fit in the tun.

      • Readonlyid: "mash-over-tun"

        Which check this is.

      • ReadonlymashTunVolumeL: Litres

        The mash tun's capacity, in liters.

      • ReadonlymashVolumeL: Litres

        Volume of the mash, grain and water together, in liters.

      • ReadonlyoverflowL: Litres

        How much the mash exceeds the tun, in liters.

    • CheckBase & {
          fermenterVolumeL: Litres;
          headspaceL: Litres;
          id: "fermenter-headspace";
          volumeIntoFermenterL: Litres;
          wantedHeadspaceL: Litres;
      }

      The fermenter has too little room over the beer. headspaceL is negative if the batch doesn't fit at all, which is the warning case.

      • ReadonlyfermenterVolumeL: Litres

        The fermenter's capacity, in liters.

      • ReadonlyheadspaceL: Litres

        Room left over the wort, in liters. Negative when the batch doesn't fit.

      • Readonlyid: "fermenter-headspace"

        Which check this is.

      • ReadonlyvolumeIntoFermenterL: Litres

        Wort going into the fermenter, in liters.

      • ReadonlywantedHeadspaceL: Litres

        Room the check wants left over the wort, in liters (see FERMENTER_HEADSPACE_FRACTION).

    • CheckBase & {
          acidAdded: boolean;
          band: Band;
          direction: "below" | "above";
          id: "mash-ph-out-of-band";
          ph: number;
      }

      The predicted mash pH is outside the band. acidAdded says whether anything is already acidifying the mash, so callers can tell "you haven't adjusted this" from "you've adjusted it and it's still out".

      • ReadonlyacidAdded: boolean

        True when an acid addition or acidulated malt is already in the recipe.

      • Readonlyband: Band

        The pH band it was checked against, MASH_PH_BAND.

      • Readonlydirection: "below" | "above"

        Which side of the band the pH falls on.

      • Readonlyid: "mash-ph-out-of-band"

        Which check this is.

      • Readonlyph: number

        The predicted mash pH.

    • CheckBase & { additions: number; id: "sparge-acid-without-sparge" }

      An acid addition for sparge water on equipment that doesn't sparge.

      The acid list isn't updated when the equipment changes, so a recipe moved to a no-sparge or BIAB profile keeps its sparge acid addition. This is always a note. predictMashPh already ignores a sparge acid, so the calculated figures are right. The problem is that every acid addition is a brew-day instruction, and this one tells the brewer to treat water they won't use.

      • Readonlyadditions: number

        How many sparge acid additions the recipe has.

      • Readonlyid: "sparge-acid-without-sparge"

        Which check this is.

    • CheckBase & {
          achievedPitchRate: number;
          id: "pitch-short";
          packsRequired: number;
          remedy: "starter" | "starter-planned" | "more-packs";
          shortfallBillion: number;
          targetPitchRate: number;
      }

      The yeast pitch is short of the style-appropriate rate. remedy says which fix starter.ts thinks will reach the target.

      starter-planned means the recipe already has a starter, pitchPlan has grown it, and the pitch is still short by shortfallBillion. This is why a saved starter is stored as its inputs and not as a boolean. A flag saying "a starter is planned" would have hidden this finding.

      • ReadonlyachievedPitchRate: number

        Pitch rate the recipe's yeast reaches, in million cells per mL per °Plato.

      • Readonlyid: "pitch-short"

        Which check this is.

      • ReadonlypacksRequired: number

        Packs needed to reach the target with no starter, rounded up.

      • Readonlyremedy: "starter" | "starter-planned" | "more-packs"

        The fix most likely to reach the target.

      • ReadonlyshortfallBillion: number

        Cells still needed to reach the target, in billions.

      • ReadonlytargetPitchRate: number

        Pitch rate aimed for, in million cells per mL per °Plato.

    • CheckBase & {
          band: Band;
          gramsPitched: number;
          gramsWanted: number;
          id: "pitch-short-dry";
          packsRequired: number;
      }

      A dry yeast pitch short of the maker's dosage.

      This is separate from pitch-short because dry yeast is specified by mass. It compares grams against a published g/hL band and never converts to cells. See DRY_DOSAGE_G_PER_HL for why a cell-count target overstates a dry pitch.

      • Readonlyband: Band

        The maker's dosage band, in grams per hectoliter.

      • ReadonlygramsPitched: number

        Dry yeast in the recipe, in grams.

      • ReadonlygramsWanted: number

        Dry yeast the maker's lowest dosage asks for at this volume, in grams.

      • Readonlyid: "pitch-short-dry"

        Which check this is.

      • ReadonlypacksRequired: number

        Sachets needed to reach gramsWanted, rounded up.

    • CheckBase & {
          band: Band;
          gramsEnough: number;
          gramsPitched: number;
          id: "pitch-heavy-dry";
          packsSuggested: number;
      }

      More dry yeast than the maker asks for, by more than rounding up to whole sachets explains.

      This is never a warning. Over-pitching dry yeast costs money and a little ester character, but it won't ruin the beer. See dryPitchPlan for why this isn't just "over the ceiling". At homebrew volumes a whole number of sachets usually can't land inside the band, and flagging that would contradict the shortfall check.

      • Readonlyband: Band

        The maker's dosage band, in grams per hectoliter.

      • ReadonlygramsEnough: number

        Dry yeast the maker's lowest dosage asks for at this volume, in grams.

      • ReadonlygramsPitched: number

        Dry yeast in the recipe, in grams.

      • Readonlyid: "pitch-heavy-dry"

        Which check this is.

      • ReadonlypacksSuggested: number

        Sachets that cover gramsEnough, rounded up.

    • CheckBase & {
          direction: "below" | "above";
          id: "ferment-temp-outside-yeast";
          rangeMaxC: number;
          rangeMinC: number;
          tempC: number;
          yeastName: string;
      }

      A primary fermentation step sits outside a yeast's published range.

      There's one per yeast, for the primary step furthest outside its range, so a schedule with two warm primaries gives one finding. It's always a note, because a Kölsch strain run cool or a saison yeast pushed hot can be intentional. It's meant to catch a schedule nobody updated, like an ale's 20 °C primary left in place with a lager yeast.

      • Readonlydirection: "below" | "above"

        Which side of the range the step falls on.

      • Readonlyid: "ferment-temp-outside-yeast"

        Which check this is.

      • ReadonlyrangeMaxC: number

        Top of the yeast's published range, in °C.

      • ReadonlyrangeMinC: number

        Bottom of the yeast's published range, in °C.

      • ReadonlytempC: number

        Temperature of the primary step furthest outside the range, in °C.

      • ReadonlyyeastName: string

        Name of the yeast, as given in the recipe.

    • CheckBase & {
          band: Band;
          direction: "below" | "above";
          id: "style-band";
          value: number;
          vital: StyleBandVital;
      }

      A vital sits outside the chosen style's published band.

      • Readonlyband: Band

        The style's band for that vital.

      • Readonlydirection: "below" | "above"

        Which side of the band the value falls on.

      • Readonlyid: "style-band"

        Which check this is.

      • Readonlyvalue: number

        The recipe's value for that vital, in the same unit as the band.

      • Readonlyvital: StyleBandVital

        Which vital is outside its band.