Functional Weave
Code in TypeScript

inventory.reorder-point@1.0.0

impl/python.py

1,066 bytes · the Python implementation · view raw

Imports name this capability’s declared dependencies, which fune builds next to it in your project; each one links to its page.

from .math_round_div import round_div  ← from math.round-div ^1.0.0 · built alongside by fune


def _whole_units(name: str, value: int) -> None:
    if isinstance(value, bool) or not isinstance(value, int) or value < 0:
        raise ValueError("%s must be a whole number, not negative, received %r" % (name, value))


def reorder_point(demand: int, demand_period_days: int, lead_time_days: int, safety_stock: int) -> int:
    """Lead-time demand, rounded up to whole units, plus safety stock.

    Rounding up rather than to nearest: 233.33 units of lead-time demand needs
    234 in hand, or the last third of a unit is a stock-out.
    """
    _whole_units("demand", demand)
    _whole_units("leadTimeDays", lead_time_days)
    _whole_units("safetyStock", safety_stock)
    if isinstance(demand_period_days, bool) or not isinstance(demand_period_days, int) or demand_period_days <= 0:
        raise ValueError(
            "demandPeriodDays must be a whole number of days, at least 1, received %r" % (demand_period_days,)
        )
    return round_div(demand * lead_time_days, demand_period_days, "up") + safety_stock