# Compliance checks

Source: https://meptools.com/tools/ceiling-coordination-studio/docs/compliance-rules/

The **Validation** panel lists every issue the current layout has, split into
**Violations** (must fix) and **Warnings** (worth a look). Each issue card can expand to show
**Where**, **Why**, and — for some issues — a one-click **Fix**.

![Validation panel showing issue cards with Where, Why, and Fix](./_assets/ccs-validation-panel.png)

The checks fall into five families:

## Zone boundaries

- A zone reaching past the sides of the void, up into the **Structural Beam Band**, or down
  into the **Ceiling Device Drops Band** is flagged — that space doesn't exist for anything
  placed inside it.
- A duct, tray, or pipe that has drifted outside its own zone is flagged.
- A standard duct sitting over Zone A's width is flagged — only a **Low Condensation Risk
  Duct** may pass over the electrical zone.

## The access corridor (Zone B)

- Zone B narrower than the **Zone B minimum width** threshold is flagged as too narrow to
  work in; at exactly the minimum it's a warning instead.
- Zone B not sharing an edge with Zone A is flagged — the trays become unreachable.
- A cable tray further than the **Arm's reach limit** from the nearest Zone B edge is
  flagged.
- A tray or pipe crossing Zone B is a warning — a crossing is sometimes unavoidable, but it
  should be a deliberate, agreed position rather than an accident of routing.

See [Zones & bands](/tools/ceiling-coordination-studio/docs/zones-and-bands) for what each
zone is for, and [Rule set](/tools/ceiling-coordination-studio/docs/rule-set) for the exact
threshold values and how to adjust them per project.

## Clearances

- Two services occupying the same space is a collision.
- A pipe running directly above a cable tray is flagged — pipework leaks and sweats, and
  water is kept beside or below power, never above it.
- Two services of the same family closer than the project's clearance are flagged; an
  ELV/signal tray closer than the **ELV / non-ELV separation** threshold to a power tray gets
  its own message calling out the interference risk.
- A main sitting closer than the **Clearance above dry tray** threshold above a cable tray is
  flagged — cable is loaded into a tray from above, and needs headroom to keep being loaded
  over the life of the building.

## Branch routing

- A branch whose take-off, runs, and termination don't join up into a drawable route is
  flagged, naming the specific problem.
- A branch that crosses another service family on its way to its outlet is flagged.
- A cable tray branch taking off from the top or bottom face is flagged — cable only leaves a
  tray over its side wall.
- A branch that crosses back over its own parent service, or doubles back on itself with no
  horizontal travel, is flagged — neither can be built from real fittings.
- A side take-off that doesn't leave level with its parent's centreline, or a run/bend that
  overlaps the parent's body, the void's walls, or the slab/ceiling boundary, is flagged.
- Bends ordered so the route reverses direction partway through are flagged.
- A branch ending at the slab or ceiling with no end position set, or an end position outside
  the void, is flagged.
- A branch ending at the slab is also given a warning to confirm the opening with the
  structural engineer — this is a check, not an error.

See [Branches & take-offs](/tools/ceiling-coordination-studio/docs/branches) for take-off
sides, terminations, and how the panel keeps edits legal.

## Document integrity

If any field the other checks compare against isn't a real number — from a hand-edited or
imported file — it's flagged by name (for example `zones.zoneB.w`) before any other check
runs. This exists because a comparison against a non-numeric value never fails on its own,
so without this check a broken document could otherwise read as fully compliant.

## Fixing an issue

Click **Zoom to it** on an issue card to jump the canvas to the offending element. Where a
**Fix** button is offered, it applies the repair directly; otherwise, follow the **Why**
text and adjust the element from its own inspector panel.
