URSY.DEVPART OF THE URSY NETWORKSign inBuild with URSY

Every contract sourcedEvery check datedGaps shown, never filledBuild with URSY

Capabilities

Reorder Point Calculator

Estimate when to reorder stock from average usage, lead time and safety stock.

How this capability is exposed

Stable ID
ursy.io:reorder-point-calculator
Owning service
URSY.io
Runtime
@ursy/runtime · 1.0.0
Execution modes
browser, node, mcp-local, remote_transient
Remote execution
Available at the owning service
Remote endpoint
https://api.ursy.io/v1/run
Input schemaOutput schemaOpen the owning interface ↗

Capability declarations describe what the service exposes. They are not a guarantee of availability or permission to execute an operation.

Accepted contract

REGISTRY JSON
{
    "schema": "ursy.io/capability/v1",
    "id": "ursy.io:reorder-point-calculator",
    "slug": "reorder-point-calculator",
    "name": "Reorder Point Calculator",
    "version": "1.0.0",
    "summary": "Estimate when to reorder stock from average usage, lead time and safety stock.",
    "intents": [
        "reorder point calculator"
    ],
    "aliases": [],
    "keywords": [],
    "category": "business-tools",
    "deterministic": true,
    "side_effects": false,
    "network_required": false,
    "execution": {
        "preferred": "local",
        "supported": [
            "browser",
            "node",
            "mcp-local",
            "remote_transient"
        ],
        "local_executable": true,
        "remote_safe": true,
        "remote_enabled": true,
        "remote_endpoint": "https://api.ursy.io/v1/run"
    },
    "privacy": {
        "input_leaves_device_by_default": false,
        "payload_logged": false
    },
    "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
            "daily": {
                "type": "number",
                "minimum": 1.0e-6,
                "maximum": 1000000000000000,
                "description": "Items per day."
            },
            "lead": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000000000,
                "description": "Days."
            },
            "safety": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000000000,
                "description": "Items."
            },
            "stock": {
                "type": "number",
                "minimum": 0,
                "maximum": 1000000000000000,
                "description": "Items."
            },
            "locale": {
                "type": "string",
                "minLength": 2,
                "maxLength": 35,
                "pattern": "^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$",
                "default": "en-US",
                "description": "Locale for display text; numerical result fields are locale independent."
            }
        },
        "required": [
            "daily",
            "lead",
            "safety",
            "stock"
        ],
        "additionalProperties": false
    },
    "output_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
            "text": {
                "type": "string",
                "maxLength": 26214400
            },
            "metrics": {
                "type": "array",
                "items": {
                    "type": "object",
                    "required": [
                        "label",
                        "value"
                    ],
                    "properties": {
                        "label": {
                            "type": "string",
                            "maxLength": 100
                        },
                        "value": {
                            "type": [
                                "string",
                                "number"
                            ],
                            "maxLength": 1000
                        }
                    },
                    "additionalProperties": false
                },
                "maxItems": 10
            },
            "lead_demand": {
                "type": "number",
                "minimum": 0,
                "maximum": 1.0e+300,
                "description": "Items."
            },
            "reorder_point": {
                "type": "number",
                "minimum": 0,
                "maximum": 1.0e+300,
                "description": "Items."
            },
            "days_stock": {
                "type": "number",
                "minimum": 0,
                "maximum": 1.0e+300,
                "description": "Days."
            }
        },
        "required": [
            "text",
            "metrics",
            "lead_demand",
            "reorder_point",
            "days_stock"
        ],
        "additionalProperties": false
    },
    "examples": [
        {
            "input": {
                "daily": 12,
                "lead": 8,
                "safety": 30,
                "stock": 150
            },
            "output": {
                "text": "Lead-time demand = average daily usage \u00d7 lead days = 96\nReorder point = lead-time demand + safety stock = 126\nDays of stock = stock on hand / daily usage = 12.5\nCurrent stock is above the calculated reorder point.",
                "metrics": [
                    {
                        "label": "Reorder point",
                        "value": "126"
                    },
                    {
                        "label": "Days in stock",
                        "value": "12.5"
                    },
                    {
                        "label": "Lead demand",
                        "value": "96"
                    }
                ],
                "lead_demand": 96,
                "reorder_point": 126,
                "days_stock": 12.5
            }
        }
    ],
    "limits": {
        "max_input_bytes": 5308416,
        "max_output_bytes": 26214400,
        "max_json_depth": 100,
        "max_csv_cells": 1000000
    },
    "canonical_url": "https://ursy.io/business-tools/reorder-point-calculator/",
    "descriptor_url": "https://ursy.io/wp-json/ursy-tools/v2/capabilities/reorder-point-calculator",
    "runtime": {
        "package": "@ursy/runtime",
        "version": "1.0.0",
        "module": "@ursy/runtime",
        "entry": "run",
        "slug": "reorder-point-calculator"
    },
    "health": {
        "status": "ok",
        "last_tested": "2026-09-11T17:24:33.220Z",
        "runtime_version": "1.0.0",
        "golden_fixtures": 1,
        "node_contract_tests": 2,
        "browser_verified": true,
        "tests_passed": 5,
        "tests_total": 5,
        "test_suite": "tests/runtime-canary.test.mjs",
        "browser_suite": "tests/runtime-browser.py"
    },
    "audit": {
        "classification": "A",
        "engine": "calculator",
        "mode": "reorder-point",
        "headless_possible": true,
        "notes": "Deterministic calculation/text core can be separated from the existing DOM workbench; schemas and regression fixtures remain required."
    },
    "assumptions": [],
    "formulae": [],
    "input_schema_id": "ursy.io:reorder-point-calculator:input_schema",
    "output_schema_id": "ursy.io:reorder-point-calculator:output_schema",
    "service_id": "ursy-io",
    "parent_id": "",
    "source_url": "https://ursy.io/wp-json/ursy-tools/v2/catalog",
    "source_type": "capability_manifest",
    "verified_at": "2026-10-14 04:02:18",
    "revision": "bd6c17a93f92b8bb9bb3e2e622d8c5e09fd1e23e781b90b607919f0bece926ba",
    "type": "capabilities",
    "source": {
        "url": "https://ursy.io/wp-json/ursy-tools/v2/catalog",
        "type": "capability_manifest"
    },
    "last_verified_at": "2026-10-14 04:02:18",
    "stale": false
}