{
  "project": "UCP — Universal Calculation Platform",
  "version": "0.3.1",
  "status": "experimental-static-documentation",
  "apiAvailable": false,
  "mcpAvailable": false,
  "executionLocation": "browser",
  "notice": "This file defines calculators; it is not a callable HTTP computation API.",
  "calculators": [
    {
      "id": "rectangle-area",
      "version": "0.3.1",
      "title": "Rectangular area",
      "formula": "A=w*l",
      "input": {
        "width": {
          "type": "number",
          "minimumExclusive": 0
        },
        "length": {
          "type": "number",
          "minimumExclusive": 0
        },
        "unit": {
          "enum": [
            "m",
            "cm",
            "ft",
            "in"
          ],
          "default": "m"
        },
        "wastePercent": {
          "type": "number",
          "minimum": 0,
          "maximum": 100,
          "default": 0
        },
        "pricePerSqM": {
          "type": "number",
          "minimum": 0,
          "default": 0
        }
      },
      "outputs": [
        "squareMeters",
        "squareFeet",
        "purchasingSquareMeters",
        "totalPrice"
      ],
      "limitations": [
        "rectangular surfaces only",
        "price manually entered, no tax or live price feed"
      ],
      "documentation": "/en/tools/area/"
    },
    {
      "id": "slope",
      "version": "0.3.1",
      "title": "Geometric slope",
      "formula": "percent=rise/run*100; degrees=atan2(rise,run)*180/pi",
      "input": {
        "rise": {
          "type": "number",
          "minimum": 0
        },
        "run": {
          "type": "number",
          "minimumExclusive": 0
        },
        "unit": {
          "enum": [
            "m",
            "cm",
            "ft",
            "in"
          ],
          "default": "cm"
        }
      },
      "outputs": [
        "percent",
        "degrees",
        "inclineMeters",
        "runPerRise"
      ],
      "limitations": [
        "geometry only; not jurisdiction-specific regulatory compliance"
      ],
      "documentation": "/en/tools/slope/"
    },
    {
      "id": "percentage",
      "version": "0.3.1",
      "title": "Percentage of number",
      "formula": "portion=base*percent/100",
      "input": {
        "base": {
          "type": "number"
        },
        "percent": {
          "type": "number"
        }
      },
      "outputs": [
        "portion",
        "afterAddition",
        "afterSubtraction"
      ],
      "limitations": [
        "simple arithmetic; not compound interest or tax advice"
      ],
      "documentation": "/en/tools/percentage/"
    },
    {
      "id": "rainwater-drainage",
      "version": "0.3.1",
      "title": "Preliminary gravity roof drainage (non-compliance)",
      "formula": "Q=L*Bplan*rain_mm_h*C/3600; rectangular Manning–Strickler Qg; vertical circular Wyly–Eaton Qd; N=ceil(Q/Qd)",
      "input": {
        "roofLengthMeters": {
          "type": "number",
          "minimumExclusive": 0
        },
        "roofWidthMeters": {
          "type": "number",
          "minimumExclusive": 0
        },
        "roofWidthBasis": {
          "enum": [
            "slope",
            "plan"
          ]
        },
        "roofPitchDegrees": {
          "type": "number",
          "minimum": 0,
          "maximumExclusive": 80
        },
        "rainIntensityMmHour": {
          "type": "number",
          "minimumExclusive": 0
        },
        "runoffCoefficient": {
          "type": "number",
          "minimumExclusive": 0,
          "maximum": 1
        },
        "gutterWidthMm": {
          "type": "number",
          "minimumExclusive": 0
        },
        "gutterDepthMm": {
          "type": "number",
          "minimumExclusive": 0
        },
        "gutterFillPercent": {
          "type": "number",
          "minimumExclusive": 0,
          "maximumExclusive": 100
        },
        "gutterSlopePercent": {
          "type": "number",
          "minimumExclusive": 0,
          "maximum": 10
        },
        "stricklerKs": {
          "type": "number",
          "minimumExclusive": 0
        },
        "downpipeInternalDiameterMm": {
          "type": "number",
          "minimumExclusive": 0
        },
        "downpipeFillFraction": {
          "enum": [
            0.2,
            0.33
          ]
        },
        "downpipeRoughnessMm": {
          "type": "number",
          "minimumExclusive": 0
        },
        "manualDownpipeCapacityLs": {
          "type": "number",
          "minimum": 0,
          "default": 0
        },
        "gutterComparisonMode": {
          "enum": [
            "whole",
            "reach"
          ],
          "default": "whole"
        },
        "gutterReachLengthMeters": {
          "type": "number",
          "minimumExclusive": 0,
          "applicableIf": "gutterComparisonMode == reach"
        }
      },
      "outputs": [
        "roofPlanAreaSqM",
        "rainfallFlowLs",
        "gutterTheoreticalLs",
        "gutterComparedFlowLs",
        "gutterMarginLs",
        "theoreticalRequiredGutterSlopePercent",
        "downpipeCapacityLs",
        "theoreticalDownpipes",
        "nominalSpacingMeters",
        "gutterNominallyLevel",
        "systemDesignVerified"
      ],
      "references": [
        "EN 12056-3:2000 (national adoption/jurisdiction must be checked)",
        "Gauckler–Manning–Strickler for uniform open-channel flow",
        "Wyly–Eaton circular vertical pipe relation"
      ],
      "limitations": [
        "NOT a normative or structural design verification",
        "rainfall intensity is input by the user, not location-specific",
        "gutter checks do not include inlet/outlet throat/freeboard/length effects",
        "even if gutter uniform-flow comparison passes, overall gutter may not be adequate",
        "nominally level <=0.3 percent gutter needs a different method",
        "per-gutter-reach comparison requires explicitly declared tributary lengths and assumes uniform lateral runoff",
        "whole-catchment comparison is deliberately conservative but not normative",
        "number of downpipes is arithmetic and does not verify actual outlets",
        "DN is a nominal product label, not necessarily actual internal diameter"
      ],
      "documentation": "/en/tools/rainwater/"
    }
  ]
}
