Source: https://guthlabs.ai/docs/instruments/eoq-inventory-reorder-calculator/mechanism/

instrument mechanism / verified-with-binding-errata

# EOQ / Inventory Reorder Calculator mechanism

The inspectable method record for EOQ / Inventory Reorder Calculator, kept separate from implementation and qualification.

Status: **VERIFIED_WITH_ERRATA**Lifecycle: **verified-with-binding-errata**

## Model scope

The EOQ and reorder-point formulas are standard under classical inventory assumptions, but the specification is incomplete for its stated outputs. Define daily demand explicitly, define the total-cost formula and inclusions, specify the 365/360/business-day convention, and add validation for zero or negative inputs before labeling the instrument fully verified.

- EOQ=√(2DS/H) is the standard classical EOQ formula when D is annual unit demand, S is ordering cost per order, and H is annual holding cost per unit; those unit assumptions must be enforced.

- ReorderPoint=daily_demand*lead_time_days+safety_stock is standard, but daily_demand is not an explicit input or defined as D/365 in the specification.

- The specification lists orders/year and total cost as outputs but supplies no formulas for them. A standard assumption is orders_per_year=D/EOQ and relevant_annual_total_cost=(D/EOQ)*S+(EOQ/2)*H, excluding purchase cost.

- The total-cost definition is ambiguous: it does not state whether purchase cost, shortage cost, safety-stock holding cost, or other inventory costs are included.

## Units and conventions

- D is annual demand in units/year.

- S is ordering cost in currency/order.

- H is annual holding cost in currency/unit/year.

- EOQ is reported in units.

- lead_time_days is measured in calendar days, and daily demand is assumed to be D/365 units/day.

- safety_stock is measured in units.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "annual_demand_D_units_per_year": 7200,
    "order_cost_S_currency_per_order": 50,
    "holding_cost_H_currency_per_unit_per_year": 2,
    "lead_time_days": 14,
    "safety_stock_units": 80
  },
  "expected_outputs": {
    "eoq_units": 600,
    "reorder_point_units": 356.1643836,
    "orders_per_year": 12,
    "annual_relevant_total_cost_currency": 1800
  },
  "working": "EOQ = √(2×7200×50/2) = √360000 = 600 units. Daily demand = 7200/365 = 19.7260274 units/day. Reorder point = 19.7260274×14+80 = 276.1643836+80 = 356.1643836 units. Orders/year = 7200/600 = 12. Ordering cost = 12×50 = 600. Holding cost = (600/2)×2 = 600. Total relevant annual cost = 600+600 = 1800."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

The calculator should reject H=0 because EOQ divides by zero, and should reject negative annual demand because the EOQ square-root argument becomes negative. In addition, the unspecified annual-to-daily conversion convention changes the reorder point: 105 units using 365 days versus 106.388888888889 units using 360 days.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/eoq-inventory-reorder-calculator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/eoq-inventory-reorder-calculator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/eoq-inventory-reorder-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`
