EN 14960:2019 Calculators

EN 14960:2019 Requirements for Inflatable Play Equipment

Calculate Required Anchors

Calculate required anchors for a given inflatable area based on EN 14960:2019 standards.

Unit Dimensions
Calculation Formula
((Area × 114.0 × 1.5) ÷ 1600.0)
Ruby Source Code

Method: calculate_required_anchors

def calculate_required_anchors(area_m2)
  # EN 14960-1:2019 Annex A (Lines 1175-1210) - Anchor calculation formula
  # Force = 0.5 × Cw × ρ × V² × A
  # Where: Cw = 1.5, ρ = 1.24 kg/m³, V = 11.1 m/s (Lines 1194-1199)
  # Number of anchors = Force / 1600N (Line 450 - each anchor withstands 1600N)
  return 0 if area_m2.nil? || area_m2 <= 0

  # Pre-calculated: 0.5 × 1.5 × 1.24 × 11.1² ≈ 114
  area_coeff = Constants::ANCHOR_CALCULATION_CONSTANTS[:area_coefficient]
  base_div = Constants::ANCHOR_CALCULATION_CONSTANTS[:base_divisor]
  safety_mult = Constants::ANCHOR_CALCULATION_CONSTANTS[:safety_factor]

  ((area_m2.to_f * area_coeff * safety_mult) / base_div).ceil
end

Source: EN14960::Calculators::AnchorCalculator (en14960 gem)

API Details

Endpoint:

POST https://play-test.co.uk/safety_standards

Headers:

Content-Type: application/json
Accept: application/json

Parameters:

{
  "calculation": {
    "type": "anchors",
    "length": 5.0,
    "width": 5.0,
    "height": 3.0
  }
}

Example Response:

{
  "passed": true,
  "status": "Calculation completed successfully",
  "result": {
    "value": 8,
    "value_suffix": "",
    "breakdown": [
      [
        "Front/back area",
        "5.0m (W) × 3.0m (H) = 15.0m²"
      ],
      [
        "Sides area",
        "5.0m (L) × 3.0m (H) = 15.0m²"
      ],
      [
        "Front & back anchor counts",
        "((15.0 × 114.0 * 1.5) ÷ 1600.0 = 2"
      ],
      [
        "Left & right anchor counts",
        "((15.0 × 114.0 * 1.5) ÷ 1600.0 = 2"
      ],
      [
        "Calculated total anchors",
        "(2 + 2) × 2 = 8"
      ]
    ]
  }
}

Test with curl:

curl -X POST https://play-test.co.uk/safety_standards \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"calculation":{"type":"anchors","length":5.0,"width":5.0,"height":3.0}}'

Calculate User Capacity

Calculate the maximum number of users based on playing area dimensions and user height restrictions.

Playing Area Dimensions
User Height Limit
Calculation Formula
Area ÷ space_per_user (varies by height: 1-2 m² per user)
Ruby Source Code

Method: calculate

def calculate(length, width, max_user_height = nil, negative_adjustment_area = 0)
  return default_result if length.nil? || width.nil?

  total_area = (length * width).round(2)
  negative_adjustment_area = negative_adjustment_area.to_f.abs
  usable_area = [total_area - negative_adjustment_area, 0].max.round(2)

  breakdown = build_breakdown(length, width, total_area, negative_adjustment_area, usable_area)
  capacities = calculate_capacities(usable_area, max_user_height, breakdown)

  CalculatorResponse.new(
    value: capacities,
    value_suffix: "",
    breakdown: breakdown
  )
end

Source: EN14960::Calculators::UserCapacityCalculator (en14960 gem)

API Details

Endpoint:

POST https://play-test.co.uk/safety_standards

Headers:

Content-Type: application/json
Accept: application/json

Parameters:

{
  "calculation": {
    "type": "user_capacity",
    "length": 10.0,
    "width": 8.0,
    "negative_adjustment_area": 15.0,
    "max_user_height": 1.5
  }
}

Example Response:

{
  "passed": true,
  "status": "Calculation completed successfully",
  "result": {
    "length": 10.0,
    "width": 8.0,
    "area": 80.0,
    "negative_adjustment_area": 15.0,
    "usable_area": 65.0,
    "max_user_height": 1.5,
    "capacities": {
      "users_1000mm": 65,
      "users_1200mm": 48,
      "users_1500mm": 39,
      "users_1800mm": 0
    },
    "breakdown": [
      [
        "Total area",
        "10m × 8m = 80m²"
      ],
      [
        "Obstacles/adjustments",
        "- 15m²"
      ],
      [
        "Usable area",
        "65m²"
      ],
      [
        "Capacity calculations",
        "Based on usable area"
      ],
      [
        "1m users",
        "65 ÷ 1 = 65 users"
      ],
      [
        "1.2m users",
        "65 ÷ 1.3 = 48 users"
      ],
      [
        "1.5m users",
        "65 ÷ 1.7 = 39 users"
      ],
      [
        "1.8m users",
        "Not allowed (exceeds height limit)"
      ]
    ]
  }
}

Test with curl:

curl -X POST https://play-test.co.uk/safety_standards \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"calculation":{"type":"user_capacity","length":10.0,"width":8.0,"negative_adjustment_area":15.0,"max_user_height":1.5}}'

Capacity Guidelines

User capacity is calculated based on the play area and the height of users. Taller users require more space for safe play.

User Height Space Required Users per m²
1.0m 1.0 m² per user 1.0
1.2m 1.33 m² per user 0.75
1.5m 1.66 m² per user 0.60
1.8m 2.0 m² per user 0.50

Important Notes

  • Only calculate capacity for user heights that are allowed on the unit
  • If a unit has a maximum user height restriction, do not calculate capacity for taller users
  • Always round down fractional users for safety
  • Consider obstacles and unusable areas when calculating total play area

Calculate Required Runout Length

Minimum runout distance for safe slide deceleration.

Input Parameters
Calculation Formula
50% of platform height, minimum 300mm
Ruby Source Code

Method: calculate_required_runout

def calculate_runout_value(platform_height, has_stop_wall: false)
  return 0 if platform_height.nil? || platform_height <= 0

  height_ratio = Constants::RUNOUT_CALCULATION_CONSTANTS[:platform_height_ratio]
  minimum_runout = Constants::RUNOUT_CALCULATION_CONSTANTS[:minimum_runout_meters]
  stop_wall_add = Constants::RUNOUT_CALCULATION_CONSTANTS[:stop_wall_addition]

  calculated_runout = platform_height * height_ratio
  base_runout = [calculated_runout, minimum_runout].max

  has_stop_wall ? base_runout + stop_wall_add : base_runout
end

def calculate_required_runout(platform_height, has_stop_wall: false)
  # EN 14960-1:2019 Section 4.2.11 (Lines 930-939) - Runout requirements
  # Line 934-935: The runout distance must be at least half the height of the slide's
  # highest platform (measured from ground level), with an absolute minimum of 300mm
  # Line 936: If a stop-wall is installed at the runout's end, an additional
  # 50cm must be added to the total runout length
  return CalculatorResponse.new(value: 0, value_suffix: "m", breakdown: []) if platform_height.nil? || platform_height <= 0

  # Get constants
  height_ratio = Constants::RUNOUT_CALCULATION_CONSTANTS[:platform_height_ratio]
  minimum_runout = Constants::RUNOUT_CALCULATION_CONSTANTS[:minimum_runout_meters]
  stop_wall_add = Constants::RUNOUT_CALCULATION_CONSTANTS[:stop_wall_addition]

  # Calculate values using the shared method
  calculated_runout = platform_height * height_ratio
  base_runout = calculate_runout_value(platform_height, has_stop_wall: false)
  final_runout = calculate_runout_value(platform_height, has_stop_wall: has_stop_wall)

  # Build breakdown
  breakdown = [
    ["50% calculation", "#{platform_height}m × 0.5 = #{calculated_runout}m"],
    ["Minimum requirement", "#{minimum_runout}m (300mm)"],
    ["Base runout", "Maximum of #{calculated_runout}m and #{minimum_runout}m = #{base_runout}m"]
  ]

  # Add stop-wall if applicable
  if has_stop_wall
    breakdown << ["Stop-wall addition", "#{base_runout}m + #{stop_wall_add}m = #{final_runout}m"]
  end

  CalculatorResponse.new(
    value: final_runout,
    value_suffix: "m",
    breakdown: breakdown
  )
end

Source: EN14960::Calculators::SlideCalculator (en14960 gem)

API Details

Endpoint:

POST https://play-test.co.uk/safety_standards

Headers:

Content-Type: application/json
Accept: application/json

Parameters:

{
  "calculation": {
    "type": "slide_runout",
    "platform_height": 2.5
  }
}

Example Response:

{
  "passed": true,
  "status": "Calculation completed successfully",
  "result": {
    "value": 1.25,
    "value_suffix": "m",
    "breakdown": [
      [
        "50% calculation",
        "2.5m × 0.5 = 1.25m"
      ],
      [
        "Minimum requirement",
        "0.3m (300mm)"
      ],
      [
        "Base runout",
        "Maximum of 1.25m and 0.3m = 1.25m"
      ]
    ]
  }
}

Test with curl:

curl -X POST https://play-test.co.uk/safety_standards \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"calculation":{"type":"slide_runout","platform_height":2.5}}'

Runout Requirements

  • Minimum length: 50% of highest platform height
  • Absolute minimum: 300mm in any case
  • Maximum inclination: Not more than 10°
  • If stop wall fitted: adds 50cm to required run-out length
  • Wall height on run-out sides: 50% of user height

Calculate Wall Height Requirements

Containing wall heights must scale with user height based on platform height thresholds.

Input Parameters
Calculation Formula
Tiered requirements based on platform height thresholds
Ruby Source Code

Method: meets_height_requirements?

def meets_height_requirements?(platform_height, user_height, containing_wall_height, has_permanent_roof)
  # EN 14960-1:2019 Section 4.2.9 (Lines 854-887) - Containment requirements
  # Lines 859-860: Containing walls become mandatory for platforms exceeding 0.6m in height
  # Lines 861-862: Platforms between 0.6m and 3.0m need walls at least as tall as the maximum user height
  # Lines 863-864: Platforms between 3.0m and 6.0m require walls at least 1.25 times the maximum user height OR a permanent roof
  # Lines 865-866: Platforms over 6.0m must have both containing walls and a permanent roof structure
  return false if platform_height.nil? || user_height.nil? || containing_wall_height.nil? || has_permanent_roof.nil?

  enhanced_multiplier = Constants::WALL_HEIGHT_CONSTANTS[:enhanced_height_multiplier]
  thresholds = Constants::SLIDE_HEIGHT_THRESHOLDS

  case platform_height
  when 0..thresholds[:no_walls_required]
    true # No containing walls required
  when (thresholds[:no_walls_required]..thresholds[:basic_walls])
    containing_wall_height >= user_height
  when (thresholds[:basic_walls]..thresholds[:enhanced_walls])
    # EITHER walls at 1.25x user height OR permanent roof
    has_permanent_roof || containing_wall_height >= (user_height * enhanced_multiplier)
  when (thresholds[:enhanced_walls]..thresholds[:max_safe_height])
    # BOTH containing walls AND permanent roof required
    has_permanent_roof && containing_wall_height >= (user_height * enhanced_multiplier)
  else
    false # Exceeds safe height limits
  end
end

Source: EN14960::Calculators::SlideCalculator (en14960 gem)

API Details

Endpoint:

POST https://play-test.co.uk/safety_standards

Headers:

Content-Type: application/json
Accept: application/json

Parameters:

{
  "calculation": {
    "type": "wall_height",
    "platform_height": 2.0,
    "user_height": 1.5
  }
}

Example Response:

{
  "passed": true,
  "status": "Calculation completed successfully",
  "result": {
    "value": 1.5,
    "value_suffix": "m",
    "breakdown": [
      [
        "Height range",
        "0.6m - 3.0m"
      ],
      [
        "Calculation",
        "1.5m (user height)"
      ]
    ]
  }
}

Test with curl:

curl -X POST https://play-test.co.uk/safety_standards \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"calculation":{"type":"wall_height","platform_height":2.0,"user_height":1.5}}'

Requirements by Platform Height

Platform Height Wall Requirement
Under 600mm No containing walls required
600mm - 3000mm Containing walls equal to platform height
3000mm - 6000mm Containing walls 1.25 times platform height
Over 6000mm Containing walls AND permanent roof required

Material Requirements

Fabric

  • Tensile strength: 1850 Newtons minimum
  • Tear strength: 350 Newtons minimum
  • Fire retardancy: Must meet EN 71-3 requirements

Thread

  • Material: Non-rotting yarn required
  • Tensile strength: 88 Newtons minimum
  • Stitch length: 3-8mm

Rope

  • Diameter range: 18mm - 45mm
  • Material: Non-monofilament
  • Attachment: Fixed at both ends
  • Swing limitation: No greater than 20% to prevent strangulation

Netting

  • Vertical mesh size: 30mm maximum for >1m height
  • Roof mesh size: 8mm maximum
  • Strength: Support heaviest intended user

Electrical Safety Requirements

General Requirements

  • PAT (Portable Appliance Test) required
  • Minimum pressure: 1.0 KPA operational pressure
  • Finger probe: 8mm probe must not contact moving/hot parts
  • Return flap: Required to reduce deflation time
  • Blower distance: 1.2m minimum from equipment edge

Grounding Test Weights

User Height Test Weight
1.0m 25kg
1.2m 35kg
1.5m 65kg
1.8m 85kg

Additional Safety Requirements

Additional Safety Requirements

  • Maximum evacuation time: 30 seconds
  • Maximum fall height: 0.6m (600mm)
  • Multiple exits required for >15 users
  • First metre gradient: Special requirements for slides
  • Surface requirements: Non-slip surface material required
  • Edge protection: Rounded edges and smooth transitions