# NCC 2025: The Facade Calculator

### What is this tool?

The NCC 2025: The Facade Calculator is a web-based single-viewport tool for checking building envelope compliance under Specification 37 - the area-weighted wall-glazing U-Value and orientation-weighted Solar Admittance pathway of Section J. It's aimed at architects, engineers, and ESD consultants who need to iterate quickly on glazing, wall, and shading choices without waiting for a full thermal simulation to finish.

<figure><img src="/files/ifqiJXFXQod5ZsSQJmF2" alt=""><figcaption></figcaption></figure>

The dashboard implements every Spec 37 lookup table and equation and updates Method 1, Method 2, and overall compliance live as inputs change. No black boxes. The calculations are all visible in the Details drawer if you want to check the arithmetic.

It runs as a standalone HTML5 application -- no installation, no login, just a browser. For support or feature requests, contact <support@betterbuilding.io> or use the Support Ticket system.

{% hint style="info" %}
This calculator is not legal or professional advice and at the risk of the user, as per the ABCB NCC 2022 notice and disclaimer. Better Building have thoroughly tested and reviewed all inputs, calculations and outputs in this tool. Any bugs or errors can be reported to [support@betterbuilding.io](/support-and-training.md).&#x20;
{% endhint %}

**Access the tool here:** [NCC 2025: The Facade Calculator](https://files.betterbuilding.io/docs/ncc_2025_facade_calculator_v_1_0.html) (and save it in your browser)

### Key Features

* **NCC 2025: The Facade Calculator Engine:** Every lookup table and equation from Spec 37, covering walls, glazing, and shading
* **Three Compliance Checks in Parallel:** Wall-glazing U-value, Method 1 (per-aspect SA ≤ SA limit), and Method 2 (orientation-weighted energy ratio)
* **Dual Input Modes:** Percentage (%) mode for quick ratio-based exploration; square-metre (m²) mode for detailed area-based calculations
* **Per-Orientation Material Inputs:** In m² mode, each aspect has its own Glazing U-value, SHGC, and Wall R-Value controls that override the global defaults
* **Nine Orientation Slots:** Four cardinals (N, E, S, W), four intercardinals (NE, SE, SW, NW), plus unlimited custom azimuths
* **Custom Azimuths with Linear Interpolation:** Add orientations at any angle 0--359°; ω and SA limits blend between the two adjacent cardinals
* **Horizontal + Vertical Shading:** P/H (overhang), D/W and W/H (vertical fins) with full Table S37C7a/b/c/d/e bilinear interpolation
* **Lock Controls:** Propagate WWR or shading values across all enabled aspects with a single checkbox
* **Snap to Compliance Boundary:** One-click snap to the Method 1 per-aspect maximum or the Method 2 energy-ratio boundary (proportional scaling)
* **Interactive Visualisation:** SA-by-orientation radar chart and compliance-budget gauge update live with every slider movement
* **Transparency Drawer:** Full per-aspect breakdown table, compliance checks with substituted numbers, resolved limits/weightings, and method summary
* **Column Glossary:** Every result table column has hover tooltips and a plain-English definitions list
* **A4 Report Export:** Self-contained HTML with embedded chart snapshots, formatted for A4 print or Save-as-PDF
* **JSON Project Save/Load:** Round-trip the entire project state to a .json file
* **Light / Dark Mode:** Theme toggle with localStorage persistence; charts auto-restyle
* **Responsive Layout:** Fits 1440×900 single-viewport; gracefully stacks on smaller screens down to mobile
* **20%-WWR Gate:** Spec 37 rule S37(6) applied automatically -- aspects with WWR < 20% drop out of Method 2
* **Include Toggle per Aspect:** Exclude party walls or non-external faces from all checks

### System Requirements

| Requirement       | Specification                                                                    |
| ----------------- | -------------------------------------------------------------------------------- |
| Browser           | Chromium-based (Chrome, Edge, Brave), Firefox, Safari                            |
| JavaScript        | Enabled                                                                          |
| RAM               | 2 GB minimum, 4 GB recommended                                                   |
| Screen Resolution | 1280×720 minimum, 1440×900 recommended for single-viewport mode                  |
| Network           | Required once to load Vue and Chart.js from CDN; runs offline after initial load |

### Version History

| Version | Changes                                                                                                                                                                                                                                                         |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1.0     | Initial release. NCC 2025 Spec 37 engine with Methods 1 and 2. Radar and gauge charts. Dual % / m² input modes. Per-orientation materials. Custom azimuths. Snap buttons. A4 report export. JSON save/load. Light/dark mode. Responsive single-viewport layout. |

### Quick Start Guide

#### Basic Workflow (5 Steps)

**Step 1: Set Climate Zone and Building Class**

Open the tool in your browser. It loads with a default project (CZ 5, Commercial, four cardinals enabled at 25% WWR). Use the top settings bar to set your Climate Zone (CZ 1--8) and Building Class (Commercial Class 5--9, or Class 3 or 9c building, or Class 9a ward area). The U-Value limit and SA limits update immediately to match J4D6a and J4D6c.

**Step 2: Set Global Material Properties**

Set three global values using the sliders: total system U-value of glazing (0.5--6.0 W/m²·K), total glazing solar heat gain coefficient (0.05--0.85), and opaque wall Total R-value (0.5--8.0 m²·K/W, stored internally as 1 ÷ R).

**Step 3: Configure Each Orientation**

Tick Include to enable or disable each aspect. In % mode, set WWR and P/H per orientation. In m² mode, set glazing area, wall area, P/H, D/W, and W/H, with the option to override Glaz U, SHGC, and Wall R per aspect. Toggle Show intercardinals to expose NE, SE, SW, and NW rows, or click + Add custom orientation to insert a row at any azimuth.

**Step 4: Read the Results**

The overall compliance tile (COMPLIES / DOES NOT COMPLY) sits top-left. Three KPI tiles show Wall-Glazing U-Value, Method 1 (aspects passing), and Method 2 (energy ratio). The SA radar and Compliance-budget gauge update live with every input change.

**Step 5: Act on the Result**

Snap to Method 2 max proportionally scales WWR to hit the M2 boundary. Snap to Method 1 max sets each aspect to its individual SA limit. Export report downloads a self-contained A4 HTML file for printing or PDF export. Save project downloads a .json file for later reload.

### Compliance Model

#### What's Checked

The tool runs three independent checks against NCC 2025:

1. **Wall-Glazing U-Value** (J4D6a): area-weighted U\_sys across all enabled aspects
2. **Solar Admittance Method 1**: every aspect must satisfy SA ≤ SA\_limit individually
3. **Solar Admittance Method 2**: Σ f·WWR·SHGC·S·ω ≤ Σ f·SA\_limit·ω across all enabled aspects

**Overall compliance:** U-value PASS AND (Method 1 PASS OR Method 2 PASS). Passing either SA method satisfies the SA leg.

#### Method 1 (Per-Aspect)

For each included aspect, the proposed Solar Admittance `SA = WWR × SHGC × S` must be at or below the Spec 37 SA limit for that orientation. The check fails as soon as any single aspect exceeds its limit.

#### Method 2 (Orientation-Weighted)

Each aspect contributes to two sums, weighted by its share `f_a = A_wall,a / Σ A_wall`:

* **ER\_proposed** = Σ f\_a · WWR\_a · SHGC\_a · S\_a · ω\_a
* **ER\_reference** = Σ f\_a · SA\_limit,a · ω\_a

The check passes when ER\_proposed ≤ ER\_reference. This allows over-admittance on some aspects to be offset by under-admittance on others. Aspects with WWR < 20% are gated (ω\_eff = 0).

#### Combined Shading Factor S

`S = min(S_h, S_v)` -- the more conservative of horizontal and vertical shading is applied. S\_h comes from Table S37C7a (N/E/W and intercardinals) or S37C7b (true south). S\_v comes from Tables S37C7c (N), S37C7d (W), S37C7e (E) with climate-zone grouping. South vertical fins have no published multiplier in Spec 37, so `S_v = 1.0` is forced on any south-facing aspect regardless of D/W or W/H values entered.

### Inputs Overview

#### Top Settings Bar

| Control                                   | Range             | Description                                   |
| ----------------------------------------- | ----------------- | --------------------------------------------- |
| Climate Zone                              | CZ 1--8           | Sets UV\_limit (J4D6a) and SA\_limits (J4D6c) |
| Building Class                            | Commercial / Ward | Loads the appropriate limit table             |
| Total system U-value of glazing           | 0.5--6.0 W/m²·K   | NCC term: Total System U-Value                |
| Total glazing solar heat gain coefficient | 0.05--0.85        | NCC term: Total Glazing SHGC                  |
| Opaque wall Total R-value                 | 0.5--8.0 m²·K/W   | Calc uses U = 1 ÷ R internally                |

#### Orientations Column

* **Include** checkbox per aspect
* **Input mode segmented toggle:** `%` or `m²`
* **Lock WWR** (% mode only): dragging any WWR propagates to all enabled aspects
* **Lock shading**: dragging any P/H, D/W, or W/H propagates to all enabled aspects (south-like rows are skipped for D/W / W/H)
* **Intercardinals chip**: show or hide NE, SE, SW, NW rows
* **+ Add custom orientation**: inserts a new editable row

#### Per-Orientation Controls

**In % mode:**

| Control | Range    | Description                                     |
| ------- | -------- | ----------------------------------------------- |
| WWR     | 0--100%  | Window-to-Wall Ratio                            |
| P/H     | 0--1.0   | Horizontal overhang: projection ÷ window height |
| D/W     | 0--0.7   | Vertical fin depth ÷ window width               |
| W/H     | 0.5--1.7 | Window width ÷ height                           |

**In m² mode (all of the above plus):**

| Control             | Range                    | Description                              |
| ------------------- | ------------------------ | ---------------------------------------- |
| Glaz                | 0 to wall area           | Glazing area in m²                       |
| Wall                | 0--500 m² (auto-extends) | Total external wall area in m²           |
| Glaz U (per-aspect) | 0.5--6.0 W/m²·K          | Overrides global; leave blank to inherit |
| SHGC (per-aspect)   | 0.05--0.85               | Overrides global; leave blank to inherit |
| Wall R (per-aspect) | 0.5--8.0 m²·K/W          | Overrides global; leave blank to inherit |

#### Advanced Panel (⋯)

* **Share** (% mode only): relative wall-share weight, 0--200
* **Label** (custom aspects only): text input
* **Azimuth** (custom aspects only): 0--359° numeric input
* **Remove** button (custom aspects only): × icon

### Input Modes

#### Percentage (%) Mode

The simpler of the two modes. Inputs are relative ratios: WWR as a percentage of wall, wall shares as relative weights (auto-normalised to sum to 100% across enabled aspects). Use this when you have architectural intent but geometry isn't resolved yet.

#### Square Metre (m²) Mode

The detailed mode, where inputs are actual areas. WWR is derived: `WWR_a = glazing_area / wall_area`. Wall shares come from the actual wall areas. This mode unlocks per-aspect glazing and wall area inputs, per-orientation material overrides (Glaz U, SHGC, Wall R), and editable number readouts next to every slider. Type a value into any readout to override the slider directly, and the slider updates in lockstep.

### Per-Orientation Materials (Detailed Methodology)

Available in m² mode. Each aspect exposes three additional controls:

| Control | Fallback                               | Description                              |
| ------- | -------------------------------------- | ---------------------------------------- |
| Glaz U  | Global Total system U-value of glazing | Per-aspect Total System U-Value override |
| SHGC    | Global Total glazing SHGC              | Per-aspect Total Glazing SHGC override   |
| Wall R  | Global Opaque wall Total R-value       | Per-aspect Total R-Value override        |

**Inheritance:** If a per-aspect value is blank, the calculation falls back to the global settings-bar value. Clearing a number input reverts to inheritance.

Common use cases include different glazing products on solar-exposed versus non-solar aspects, high-performance glazing on the West facade with standard product elsewhere, and mixed wall constructions like curtain wall versus masonry.

### Shading System

#### Horizontal Overhang (P/H)

P/H = overhang projection depth ÷ window height, evaluated at G/H = 0 (no gap between window head and eave). Values are interpolated from Table S37C7a for N, E, W, and all intercardinals, and from Table S37C7b for true south. Custom azimuths within ±22.5° of 180° are treated as south-like and use S37C7b.

#### Vertical Fins (D/W, W/H)

D/W = fin depth ÷ window width. W/H = window width ÷ height. Values are interpolated from Table S37C7c for north aspects, Table S37C7d for west, and Table S37C7e for east. South aspects get `S_v = 1.0` forced regardless of input, because Spec 37 doesn't define a south vertical fin table (and the tool respects that gap rather than inventing numbers).

Climate zones are grouped: {1, 2, 3, 5, 6}, {4}, {7}, {8}, each with its own sub-table.

#### Combined Shading

`S = min(S_h, S_v)` -- the more conservative of the two reductions is applied to the SA calculation.

#### Intercardinals and Custom Azimuths

For intercardinals (NE, SE, SW, NW) and custom azimuths, the resolved ω, SA\_limit, and S\_v are **linearly interpolated** between the two adjacent cardinals. A custom aspect at 047°, for example, resolves to 52% North + 48% East weighting for both ω and SA\_limit.

### Custom Orientations

Click **+ Add custom orientation** to insert an editable row. Each custom aspect has:

| Property    | Description                                                        |
| ----------- | ------------------------------------------------------------------ |
| Label       | Editable text name (defaults to "Custom 1", "Custom 2", and so on) |
| Azimuth     | 0°--359° (0 = North, 90 = East, 180 = South, 270 = West)           |
| Azimuth tag | Small muted readout shown inline in the aspect cell                |
| × Remove    | Red × button in the advanced panel; deletes the row                |

The main row stays visually consistent with the fixed eight cardinals. Long names truncate with an ellipsis, and the azimuth appears as a compact tag below the name.

### Snap to Compliance

Two snap buttons sit in the action bar.

#### Snap to Method 2 Max

Proportionally scales every enabled aspect's WWR (% mode) or glazing area (m² mode) by a factor `k = ER_reference / ER_proposed`, landing the Method 2 energy ratio exactly on the compliance boundary. The relative WWR shape across aspects is preserved. The tool uses an iterative solver (up to 60 passes, with early exit on convergence) to handle the 20% gate non-linearity: aspects that would otherwise drop below 20% are clamped at the gate floor rather than being excluded from Method 2 entirely.

#### Snap to Method 1 Max

Sets each enabled aspect's WWR to the largest value that still satisfies `SA ≤ SA_limit` for that aspect alone: `WWR_max,a = SA_limit,a / (SHGC × S_a)`. With Lock WWR on, the tool picks the minimum across all aspects so a single shared WWR passes every one of them -- the binding constraint wins.

### Charts

Two charts sit in the top-right of the results column.

#### SA per Orientation (Radar)

A polar chart showing each enabled aspect's **SA proposed** (filled blue polygon) against its **SA limit** (dashed red polygon). Any point sitting outside the dashed ring fails Method 1 on that aspect. The scale auto-adjusts to the largest value across aspects multiplied by 1.2.

#### Compliance Budget Used (Gauges)

Three horizontal bars showing U-value, Method 1 worst face, and Method 2 energy ratio each as a percentage of their respective limit. The x-axis is locked at 0--200%, with a red dashed line at 100%. Bars turn green when under budget and red when over.

Both charts update reactively on every input change and redraw when the light/dark theme switches.

### Details Drawer (Calculation Working)

Click **Details & working** to open a right-side slide-over panel.

#### Per-Aspect Breakdown Table

15 columns with full precision:

Aspect · Share · WWR · P/H · D/W · W/H · S\_h · S\_v · S · SA · SA limit · M1 · ω · ER\_p · ER\_r

#### Column Definitions

A plain-English definitions list pairing each column name with its formula:

* `SA = WWR × SHGC × S`
* `S = min(S_h, S_v)`
* `ER_p = f × WWR × SHGC × S × ω`
* and so on for each column

#### Compliance Checks

U-value, Method 1 enumerated per aspect, Method 2, and the M1-OR-M2 combining step, all with numbers substituted inline so the arithmetic can be verified directly.

#### Resolved Limits and Weightings

The exact NCC lookup values used for the current CZ and class combination.

#### Method Summary

Plain-English notes on the Spec 37 homogeneity reduction, intercardinal approximation, shading table sources, and the 20% gate rule.

### Report Export

Click **Export report** to download a self-contained A4-formatted HTML report.

#### Format

* `@page { size: A4 portrait; margin: 15mm 14mm }` for clean print or Save-as-PDF
* On-screen: a single centred 210×297 mm sheet on a light grey background
* In print: full-bleed A4 with page-break rules to keep sections intact
* 10pt body, 9pt tables, 8pt table headers

#### Contents

1. Header with logo, title, and generation timestamp
2. Overall compliance banner
3. Three metric cards (U, M1, M2)
4. Visual summary with both chart PNG snapshots embedded as base64
5. Per-aspect breakdown table
6. Compliance checks with substituted numbers
7. Method notes

#### File

Downloads as `Spec37_Dashboard_YYYY-MM-DD.html`. Self-contained (roughly 55 KB), no external JS required to view.

### Project Save / Load

#### Save Project

Click **Save project** to download the current dashboard state as `Spec37_Project_YYYY-MM-DD.json`.

The JSON captures every reactive input: climate zone, building class, global glazing U / SHGC, wall U, lock states, input mode, showIntercardinals, and every aspect's full state (key, label, WWR, share, wallArea, glazArea, dw, wh, ph, glazU, glazSHGC, wallU, included, neighbours, custom, azimuth), plus the custom counter.

#### Load Project

Click **Load project** to open a file picker. On valid JSON, scalars are validated lightly (CZ 1--8, class enum, type checks) and fall back silently to current state for anything missing or invalid. Aspects are matched by **key**. Matched aspects are updated in place (preserving Vue reactivity), custom aspects in the loaded file but absent from the current list are appended, and custom aspects in the current list but absent from the loaded file are dropped.

### Light / Dark Mode

Toggle in the header (☾ Dark / ☀︎ Light). The choice persists via `localStorage` under the key `spec37-theme`.

Dark mode uses a deep slate background (`#0f141b`), darker slate panels (`#161d26`), pure white text (`#ffffff`), and an auto-adjusted chart palette with brighter greens and reds and lighter blues.

All accent colours use `#2e4857` in both themes, with theme-specific hover variants. Native browser controls (range sliders, checkboxes) use `accent-color: var(--accent)` to render in the brand colour.

### Keyboard Shortcuts

| Shortcut   | Action                                         |
| ---------- | ---------------------------------------------- |
| Esc        | Close the details drawer                       |
| Tab        | Cycle through input fields                     |
| Enter      | Commit number-input values                     |
| Arrow keys | Nudge slider values on focused slider          |
| Ctrl+S     | (browser default -- not wired to Save project) |

No global hotkeys are defined. All actions are button-driven to keep the interface discoverable.

### Workflow Examples

#### Example 1: Façade Compliance Check for a Class 5 Office in CZ 5

**Goal:** Verify that a commercial building in Sydney (CZ 5) with 50% WWR on all four cardinals complies under Spec 37.

**Steps:**

1. **Set project basics (20 seconds):** Climate Zone: CZ 5, Building Class: Commercial (Class 5--9)
2. **Global materials (30 seconds):** Total system U-value of glazing: 2.7 W/m²·K, Total glazing SHGC: 0.35, Opaque wall Total R-value: 1.5 m²·K/W
3. **Enable four cardinals and set WWR:** Tick Include on N, E, S, W, then turn on Lock WWR and drag any slider to 50% -- all four snap together
4. **Read result:** Compliance banner, U-value card, Method 1 pass count, Method 2 ratio
5. **Export (5 seconds):** Click Export report -- A4 HTML downloads

**Result:** A one-page A4 compliance summary with all three checks, aspect breakdown, and chart snapshots.

#### Example 2: Detailed Mixed-Glazing Building

**Goal:** An office with premium West glazing (low SHGC) and standard glazing elsewhere, with different wall areas per façade.

**Steps:**

1. **Switch to m² mode** (click m² in the segmented toggle)
2. **Enter actual wall and glazing areas** for each enabled cardinal
3. **Override West's glazing properties:** Type `1.5` into West's Glaz U input, `0.18` into West's SHGC input, and leave other aspects blank to inherit globals
4. **Add shading to West:** Set D/W = 0.5, W/H = 1.0
5. **Snap to Method 2 max** to see the maximum compliant WWR across aspects
6. **Export project:** Click Save project to preserve the scenario

**Result:** Detailed per-aspect analysis with heterogeneous materials, with the project saved for future iteration.

#### Example 3: Odd-Angled Custom Façade

**Goal:** A building with a main façade at 047° (between North and East) plus standard cardinals.

**Steps:**

1. **Disable cardinals that aren't external walls:** Untick E and S
2. **Click + Add custom orientation:** In the advanced panel, set Label to "Main entrance" and Azimuth to 47
3. **Configure the custom aspect:** WWR 40%, P/H 0.3, D/W 0.4, W/H 1.2
4. **Check the radar chart:** "Main entrance" appears as a new axis between North and East
5. **Inspect in the details drawer:** ω shown as a weighted blend of north (0.48) + east (0.52)

**Result:** Non-cardinal façades modelled correctly with interpolated weights.

### Best Practices

#### Input Mode Selection

Use % mode for early-stage massing and quick what-ifs. Switch to m² mode once geometry is resolved, or when you need per-aspect material overrides.

#### Method Selection

Method 1 is the strict, per-aspect check -- good for conservative design. Method 2 is the more permissive check, letting over-admittance on one aspect offset under-admittance on another. The tool passes compliance if either method succeeds, so Method 2 is typically the better target if maximising glazing area is the goal.

#### Using Snap Buttons

Start with Snap to Method 2 max -- it preserves relative WWR shape and typically allows more glazing. If a Method 1 pass is also needed (for conservative reporting, say), follow up with Snap to Method 1 max. Repeated clicks are idempotent once the design is on the boundary.

#### Custom Azimuths

Keep custom azimuths within 0--359°. Values within ±22.5° of 180° are treated as south-like (uses the S37C7b horizontal table and forces S\_v = 1.0). Use meaningful labels like "Bay window SW corner" because they appear on the radar chart.

#### Shading

P/H reduces SA directly on both methods. D/W / W/H only help on N, E, and W -- south vertical fins have no calculated effect per Spec 37. Lock shading is useful for buildings with uniform overhangs across façades.

#### Material Overrides

Start with global settings and override per aspect only when materials genuinely differ. Clear a number input to revert to inheritance. The placeholder text shows the global value being inherited, which is a useful reminder when you're iterating quickly.

### Troubleshooting

#### Overall shows DOES NOT COMPLY but Method 2 passes

**Symptoms:** Overall banner is red despite a green Method 2 badge.

**Solution:** Check the U-value tile. Overall compliance requires U-value PASS AND (M1 OR M2). If U\_sys exceeds the J4D6a limit, even a perfect Method 2 result won't rescue it. Reduce glazing U-value or increase wall R-value.

#### South D/W and W/H appear locked

**Symptoms:** Typing into South's fin inputs doesn't change the result.

**Solution:** This is intentional. NCC Spec 37 doesn't define a south vertical fin table, so `S_v = 1.0` is forced regardless of D/W / W/H. The inputs remain editable in V1.0 but have no calculation effect. An asterisk on `D/W*` / `W/H*` labels flags this.

#### Snap button appears to do nothing on second click

**Symptoms:** Clicking Snap to Method 2 max twice produces identical state.

**Solution:** This is correct idempotent behaviour. The first click lands the design exactly on the compliance boundary. Subsequent clicks compute `k = 1.0` and make no change.

#### Aspect drops out of Method 2 calculation

**Symptoms:** An aspect's ER contributions show as 0 in the breakdown table.

**Solution:** Check its WWR. Any aspect with WWR < 20% is gated under Spec 37 rule S37(6) -- ω\_eff is forced to 0. Either raise the WWR above 20% or accept that the aspect contributes nothing to Method 2.

#### Custom orientation math doesn't match a cardinal

**Symptoms:** A custom aspect at azimuth 90° gives slightly different results than the built-in East.

**Solution:** At exact cardinal angles (0, 90, 180, 270°) custom aspects should match cardinals exactly. If they differ, check that the azimuth is typed correctly (not 89 or 91), that WWR and share match, and that shading D/W and W/H match (note that custom aspects use S37C7d for West exactly at 90°).

#### Report won't print as A4

**Symptoms:** Printed output has wrong margins or page breaks.

**Solution:** In the browser print dialog, set destination to Save as PDF (or a physical A4 printer), set paper size to A4, set margins to Default or None (the report supplies its own via `@page`), and enable background graphics -- otherwise pass/fail colouring won't appear in the printout.

#### Load project restores wrong layout

**Symptoms:** The loaded project shows different aspects than were saved.

**Solution:** Aspects are matched by internal `key`, not label. Custom aspects get timestamped keys like `custom_1745123456789_1`, so a project saved before renaming retains the original key. Matched aspects are updated in place; unmatched customs are appended.

### Glossary

| Term                     | Definition                                                                             |
| ------------------------ | -------------------------------------------------------------------------------------- |
| NCC                      | National Construction Code (Australia)                                                 |
| Spec 37                  | NCC Specification 37 -- wall-glazing U-value and solar admittance compliance pathway   |
| J4D6a                    | NCC clause defining maximum Total System U-Value by climate zone and class             |
| J4D6c                    | NCC clause defining maximum Solar Admittance by orientation, climate zone, and class   |
| S37C6a / S37C6b          | Spec 37 clause defining orientation weighting factor ω for Commercial / Ward buildings |
| S37C7a / S37C7b          | Spec 37 horizontal shading multiplier tables (N/E/W / South)                           |
| S37C7c / S37C7d / S37C7e | Spec 37 vertical fin shading multiplier tables (N / W / E)                             |
| Total System U-Value     | NCC term for a glazed element's U-value inclusive of frame                             |
| Total Glazing SHGC       | NCC term for the Solar Heat Gain Coefficient of a glazed element                       |
| Total R-Value            | NCC term for opaque construction thermal resistance, m²·K/W                            |
| WWR                      | Window-to-Wall Ratio -- percentage of wall area occupied by glazing                    |
| SA                       | Solar Admittance -- `WWR × SHGC × S` per aspect                                        |
| SA limit                 | Per-aspect SA ceiling from J4D6c                                                       |
| S\_h                     | Horizontal shading multiplier from S37C7a/b                                            |
| S\_v                     | Vertical fin shading multiplier from S37C7c/d/e                                        |
| S                        | Combined shading factor, `min(S_h, S_v)`                                               |
| ω                        | Orientation weighting factor for Method 2                                              |
| f                        | Per-aspect share of total wall area                                                    |
| ER\_proposed             | Σ f·WWR·SHGC·S·ω across enabled aspects                                                |
| ER\_reference            | Σ f·SA\_limit·ω across enabled aspects                                                 |
| 20% Gate                 | Rule S37(6): aspects with WWR < 20% have ω\_eff = 0 under Method 2                     |
| Method 1                 | Per-aspect SA ≤ SA\_limit compliance check                                             |
| Method 2                 | Orientation-weighted energy-ratio compliance check                                     |
| Intercardinal            | NE, SE, SW, or NW -- ω and SA\_limit are the mean of the two adjacent cardinals        |
| Custom Azimuth           | User-defined orientation at any angle 0--359°; ω and limits linearly interpolated      |
| South-like               | A custom aspect within ±22.5° of 180°; uses S37C7b and forces S\_v = 1.0               |
| P/H                      | Horizontal overhang ratio: projection ÷ window height                                  |
| D/W                      | Vertical fin depth ÷ window width                                                      |
| W/H                      | Window width ÷ window height                                                           |
| Snap to Method X         | One-click scaling of WWR to hit the respective method's compliance boundary            |

### Lookup Tables

All lookup values below are the actual constants used by the Spec 37 Compliance Dashboard v1.0. They are sourced from NCC 2025 Specification 37 and related J4D6 clauses.

#### Aggregate Wall-Glazing U-Value Limits (J4D6a)

Maximum Total System U-Value of the wall-glazing construction, in **W/m²·K**.

| Climate zone | Commercial (Class 5--9) | Class 3/9c or 9a ward |
| :----------: | :---------------------: | :-------------------: |
|       1      |           1.6           |          1.1          |
|       2      |           1.9           |          1.6          |
|       3      |           1.7           |          1.2          |
|       4      |           1.7           |          1.3          |
|       5      |           1.7           |          1.6          |
|       6      |           1.8           |          1.6          |
|       7      |           1.7           |          1.2          |
|       8      |           2.0           |          1.1          |

> **Note.** The CZ 5 Commercial value was updated to 1.7 per NCC 2025 Envelope Guidance §2.2.3. Other climate-zone values are retained from prior references; verify against the current published J4D6a if your project is not CZ 5.

#### Solar Admittance Limits (J4D6c) -- Commercial

| Climate zone | North | East | South | West |
| :----------: | :---: | :--: | :---: | :--: |
|       1      |  0.09 | 0.10 |  0.11 | 0.09 |
|       2      |  0.09 | 0.10 |  0.11 | 0.09 |
|       3      |  0.09 | 0.10 |  0.11 | 0.09 |
|       4      |  0.09 | 0.10 |  0.11 | 0.09 |
|       5      |  0.09 | 0.10 |  0.11 | 0.07 |
|       6      |  0.09 | 0.10 |  0.11 | 0.09 |
|       7      |  0.09 | 0.10 |  0.11 | 0.09 |
|       8      |  0.10 | 0.10 |  0.20 | 0.10 |

> **Note.** CZ 5 West was updated to 0.07 per NCC 2025 Envelope Guidance §2.2.4. CZ 8 Commercial has a relaxed South (0.20) and West (0.10) per the published table.

#### Solar Admittance Limits (J4D6c) -- Class 3 or 9c building or Class 9a ward area

| Climate zone | North | East | South | West |
| :----------: | :---: | :--: | :---: | :--: |
|       1      |  0.06 | 0.06 |  0.06 | 0.06 |
|       2      |  0.06 | 0.06 |  0.06 | 0.06 |
|       3      |  0.06 | 0.06 |  0.06 | 0.06 |
|       4      |  0.06 | 0.06 |  0.06 | 0.06 |
|       5      |  0.06 | 0.06 |  0.06 | 0.06 |
|       6      |  0.06 | 0.06 |  0.06 | 0.06 |
|       7      |  0.06 | 0.06 |  0.06 | 0.06 |
|       8      |  0.06 | 0.06 |  0.06 | 0.06 |

#### Orientation Weighting Factor ω (S37C6a) -- Commercial

South is always ω = 1.00 (reference direction).

| Climate zone | North | East | South | West |
| :----------: | :---: | :--: | :---: | :--: |
|       1      |  1.47 | 1.39 |  1.00 | 1.41 |
|       2      |  1.95 | 1.58 |  1.00 | 1.68 |
|       3      |  1.95 | 1.63 |  1.00 | 1.65 |
|       4      |  2.05 | 1.72 |  1.00 | 1.69 |
|       5      |  2.28 | 1.72 |  1.00 | 1.75 |
|       6      |  2.12 | 1.62 |  1.00 | 1.67 |
|       7      |  2.40 | 1.84 |  1.00 | 1.92 |
|       8      |  1.88 | 1.92 |  1.00 | 1.25 |

#### Orientation Weighting Factor ω (S37C6b) -- Class 3 or 9c building or Class 9a ward area

| Climate zone | North | East | South | West |
| :----------: | :---: | :--: | :---: | :--: |
|       1      |  1.42 | 1.30 |  1.00 | 1.37 |
|       2      |  1.77 | 1.49 |  1.00 | 1.54 |
|       3      |  1.72 | 1.48 |  1.00 | 1.50 |
|       4      |  1.55 | 1.37 |  1.00 | 1.36 |
|       5      |  1.88 | 1.48 |  1.00 | 1.52 |
|       6      |  1.52 | 1.28 |  1.00 | 1.33 |
|       7      |  1.60 | 1.35 |  1.00 | 1.40 |
|       8      |  1.24 | 1.26 |  1.00 | 1.05 |

#### Horizontal Shading Multiplier -- Table S37C7a (North, East, West, and intercardinals)

Rows are **G/H** (gap between window head and eave ÷ window height). Columns are **P/H** (overhang projection ÷ window height). The tool interpolates bilinearly at `G/H = 0`.

| G/H \ P/H |  0.0 |  0.1 |  0.2 |  0.3 |  0.4 |  0.5 |  0.6 |  0.7 |  0.8 |  0.9 |  1.0 |
| :-------: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |
|    0.0    | 1.00 | 0.90 | 0.80 | 0.72 | 0.64 | 0.57 | 0.51 | 0.46 | 0.41 | 0.38 | 0.35 |
|    0.1    | 1.00 | 0.95 | 0.89 | 0.81 | 0.74 | 0.66 | 0.59 | 0.52 | 0.47 | 0.42 | 0.40 |
|    0.2    | 1.00 | 0.98 | 0.94 | 0.89 | 0.82 | 0.75 | 0.68 | 0.62 | 0.56 | 0.51 | 0.47 |
|    0.3    | 1.00 | 1.00 | 0.97 | 0.94 | 0.89 | 0.84 | 0.78 | 0.72 | 0.66 | 0.61 | 0.57 |
|    0.4    | 1.00 | 1.00 | 0.99 | 0.97 | 0.94 | 0.90 | 0.86 | 0.82 | 0.77 | 0.73 | 0.68 |
|    0.5    | 1.00 | 1.00 | 1.00 | 0.99 | 0.97 | 0.95 | 0.92 | 0.90 | 0.86 | 0.83 | 0.79 |

#### Horizontal Shading Multiplier -- Table S37C7b (South only)

| G/H \ P/H |  0.0 |  0.1 |  0.2 |  0.3 |  0.4 |  0.5 |  0.6 |  0.7 |  0.8 |  0.9 |  1.0 |
| :-------: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |
|    0.0    | 1.00 | 0.93 | 0.87 | 0.82 | 0.77 | 0.73 | 0.69 | 0.65 | 0.62 | 0.60 | 0.58 |
|    0.1    | 1.00 | 0.97 | 0.93 | 0.88 | 0.84 | 0.79 | 0.75 | 0.71 | 0.67 | 0.64 | 0.62 |
|    0.2    | 1.00 | 0.98 | 0.96 | 0.93 | 0.89 | 0.85 | 0.81 | 0.77 | 0.73 | 0.70 | 0.68 |
|    0.3    | 1.00 | 0.99 | 0.98 | 0.96 | 0.93 | 0.90 | 0.87 | 0.83 | 0.80 | 0.77 | 0.74 |
|    0.4    | 1.00 | 1.00 | 0.99 | 0.98 | 0.96 | 0.94 | 0.91 | 0.89 | 0.86 | 0.84 | 0.81 |
|    0.5    | 1.00 | 1.00 | 0.99 | 0.99 | 0.98 | 0.96 | 0.95 | 0.93 | 0.91 | 0.90 | 0.88 |

#### Vertical Fin Shading Multiplier -- Table S37C7c (North)

Rows are **D/W** (fin depth ÷ window width). Columns are **W/H** (window width ÷ height). Climate zones are grouped.

**Climate zones 1, 2, 3, 5, 6**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.90 | 0.90 | 0.90 | 0.91 |
|    0.3    | 0.81 | 0.82 | 0.83 | 0.85 |
|    0.5    | 0.74 | 0.76 | 0.78 | 0.82 |
|    0.7    | 0.70 | 0.73 | 0.76 | 0.81 |

**Climate zone 4**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.90 | 0.90 | 0.91 | 0.91 |
|    0.3    | 0.82 | 0.83 | 0.84 | 0.87 |
|    0.5    | 0.76 | 0.78 | 0.80 | 0.84 |
|    0.7    | 0.73 | 0.75 | 0.78 | 0.83 |

**Climate zone 7**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.90 | 0.91 | 0.91 | 0.92 |
|    0.3    | 0.82 | 0.83 | 0.85 | 0.87 |
|    0.5    | 0.78 | 0.79 | 0.82 | 0.86 |
|    0.7    | 0.75 | 0.78 | 0.80 | 0.85 |

**Climate zone 8**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.91 | 0.91 | 0.92 | 0.92 |
|    0.3    | 0.85 | 0.86 | 0.88 | 0.90 |
|    0.5    | 0.83 | 0.85 | 0.87 | 0.91 |
|    0.7    | 0.84 | 0.86 | 0.88 | 0.91 |

#### Vertical Fin Shading Multiplier -- Table S37C7d (West)

**Climate zones 1, 2, 3, 5, 6**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.90 | 0.90 | 0.91 | 0.93 |
|    0.3    | 0.84 | 0.84 | 0.85 | 0.87 |
|    0.5    | 0.79 | 0.80 | 0.82 | 0.85 |
|    0.7    | 0.75 | 0.77 | 0.79 | 0.83 |

**Climate zone 4**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.89 | 0.90 | 0.90 | 0.93 |
|    0.3    | 0.84 | 0.85 | 0.86 | 0.88 |
|    0.5    | 0.81 | 0.82 | 0.84 | 0.87 |
|    0.7    | 0.79 | 0.81 | 0.83 | 0.86 |

**Climate zone 7**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.95 | 0.95 | 0.95 | 0.96 |
|    0.3    | 0.93 | 0.94 | 0.94 | 0.94 |
|    0.5    | 0.93 | 0.93 | 0.93 | 0.94 |
|    0.7    | 0.92 | 0.93 | 0.93 | 0.94 |

**Climate zone 8**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.89 | 0.89 | 0.90 | 0.93 |
|    0.3    | 0.87 | 0.87 | 0.88 | 0.90 |
|    0.5    | 0.86 | 0.87 | 0.88 | 0.90 |
|    0.7    | 0.86 | 0.87 | 0.89 | 0.90 |

#### Vertical Fin Shading Multiplier -- Table S37C7e (East)

**Climate zones 1, 2, 3, 5, 6**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.93 | 0.93 | 0.94 | 0.94 |
|    0.3    | 0.87 | 0.88 | 0.89 | 0.90 |
|    0.5    | 0.83 | 0.84 | 0.85 | 0.88 |
|    0.7    | 0.79 | 0.81 | 0.83 | 0.87 |

**Climate zone 4**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.92 | 0.92 | 0.93 | 0.94 |
|    0.3    | 0.88 | 0.89 | 0.89 | 0.91 |
|    0.5    | 0.85 | 0.86 | 0.88 | 0.90 |
|    0.7    | 0.83 | 0.85 | 0.87 | 0.89 |

**Climate zone 7**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.93 | 0.94 | 0.94 | 0.95 |
|    0.3    | 0.91 | 0.91 | 0.92 | 0.91 |
|    0.5    | 0.89 | 0.90 | 0.91 | 0.93 |
|    0.7    | 0.88 | 0.90 | 0.91 | 0.93 |

**Climate zone 8**

| D/W \ W/H |  0.5 |  0.7 |  1.0 |  1.7 |
| :-------: | :--: | :--: | :--: | :--: |
|    0.1    | 0.92 | 0.93 | 0.93 | 0.94 |
|    0.3    | 0.92 | 0.93 | 0.93 | 0.94 |
|    0.5    | 0.92 | 0.93 | 0.94 | 0.95 |
|    0.7    | 0.93 | 0.94 | 0.95 | 0.95 |

#### Vertical Fin Shading Multiplier -- South

South has no published vertical fin table in NCC Spec 37. The tool forces **S\_v = 1.0** on any aspect classified as south-like (cardinal South, or a custom azimuth within ±22.5° of 180°) regardless of D/W or W/H values entered.

#### Interpolation Rules

| Table                    | Axes                                | Interpolation                           | Boundary behaviour    |
| ------------------------ | ----------------------------------- | --------------------------------------- | --------------------- |
| S37C7a / S37C7b          | G/H (row) × P/H (col)               | Bilinear, at G/H = 0 only               | Clamp to nearest edge |
| S37C7c / S37C7d / S37C7e | D/W (row) × W/H (col), per CZ group | Bilinear within each CZ-group sub-table | Clamp to nearest edge |

Values outside the published grid are clamped to the edge; no extrapolation is performed.

#### Intercardinal and Custom-Azimuth Resolution

For the intercardinals (NE, SE, SW, NW) and any custom azimuth, the resolved ω, SA\_limit, and S\_v are the **linear blend** of the two adjacent cardinals, weighted by angular proximity.

**Fixed intercardinals** (weights fixed at 50/50):

| Aspect | Weights                |
| ------ | ---------------------- |
| NE     | 0.50 North + 0.50 East |
| SE     | 0.50 South + 0.50 East |
| SW     | 0.50 South + 0.50 West |
| NW     | 0.50 North + 0.50 West |

**Custom azimuths** -- linear interpolation along the compass:

| Azimuth range | Neighbours   | Weight formula (t = (az − a\_low) ÷ 90) |
| ------------- | ------------ | --------------------------------------- |
| 0°--90°       | North ↔ East | `{north: 1 − t, east: t}`               |
| 90°--180°     | East ↔ South | `{east: 1 − t, south: t}`               |
| 180°--270°    | South ↔ West | `{south: 1 − t, west: t}`               |
| 270°--360°    | West ↔ North | `{west: 1 − t, north: t}`               |

#### 20% WWR Gate (S37(6))

Any included aspect with **WWR < 20%** has its effective ω forced to 0 under Method 2, so that aspect contributes nothing to either `ER_proposed` or `ER_reference`. Method 1 still evaluates these aspects against their SA limits as normal.

### Data Structures

#### Project JSON Schema

```json
{
  "schema": "spec37-dashboard",
  "version": 1,
  "savedAt": "2026-04-20T02:07:31.937Z",
  "state": {
    "climateZone": 5,
    "buildingClass": "commercial",
    "glazU": 2.7,
    "glazSHGC": 0.35,
    "wallU": 0.6666666666666666,
    "lockWWR": true,
    "lockShading": false,
    "inputMode": "ratio",
    "showIntercardinals": false,
    "detailedMaterials": false,
    "aspects": [ /* array of aspect objects, see below */ ],
    "customCounter": 0
  }
}
```

#### Aspect Object

```json
{
  "key": "north",
  "label": "North",
  "wwr": 25,
  "share": 100,
  "wallArea": 100,
  "glazArea": 45,
  "dw": 0,
  "wh": 0.5,
  "ph": 0,
  "glazU": null,
  "glazSHGC": null,
  "wallU": null,
  "included": true,
  "neighbours": null,
  "custom": false,
  "azimuth": 0
}
```

Fields:

| Field      | Type                      | Description                                                                |
| ---------- | ------------------------- | -------------------------------------------------------------------------- |
| key        | string                    | Stable identifier (matches across save/load)                               |
| label      | string                    | Display name (editable for custom aspects)                                 |
| wwr        | number                    | Window-to-Wall Ratio percentage (0--100)                                   |
| share      | number                    | Relative wall-share weight for % mode (0--200)                             |
| wallArea   | number                    | Actual wall area in m² (m² mode)                                           |
| glazArea   | number                    | Actual glazing area in m² (m² mode)                                        |
| dw         | number                    | Vertical fin D/W ratio (0--0.7)                                            |
| wh         | number                    | Window W/H ratio (0.5--1.7)                                                |
| ph         | number                    | Horizontal overhang P/H ratio (0--1.0)                                     |
| glazU      | number or null            | Per-aspect glazing U override; null inherits global                        |
| glazSHGC   | number or null            | Per-aspect SHGC override; null inherits global                             |
| wallU      | number or null            | Per-aspect wall U override; null inherits global (stored as U, input as R) |
| included   | boolean                   | Whether aspect contributes to calculations                                 |
| neighbours | \[string, string] or null | Adjacent cardinals for intercardinals                                      |
| custom     | boolean                   | True for user-added orientations                                           |
| azimuth    | number                    | 0--359° for custom aspects                                                 |

### Export Specifications

#### Numeric Precision

| Element          | Precision                              |
| ---------------- | -------------------------------------- |
| U-value          | 2 decimal places in UI, 4 dp in report |
| SHGC             | 2 decimal places                       |
| Wall R-Value     | 2 decimal places                       |
| WWR              | 1 decimal place (%)                    |
| SA               | 3 decimal places                       |
| ER contributions | 4 decimal places                       |
| Share / f        | 1 decimal place (%)                    |
| ω                | 2 decimal places                       |
| Azimuth          | 1 decimal place                        |

#### Report HTML Structure

* Compliant with modern browsers (Chrome, Firefox, Safari, Edge)
* Single-file, no external dependencies after download
* Embedded Chart.js PNG snapshots via base64 (roughly 10 KB each)
* `@media print` rules for clean A4 output
* `page-break-inside: avoid` on metric cards, aspect blocks, `<pre>` blocks, and tables

#### JSON Save File

* UTF-8 encoded
* Schema-versioned for future migration safety
* Pretty-printed (2-space indent) for human readability
* Typical size: 3--10 KB per project
* Round-trips through Load project without data loss


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.betterbuilding.io/user-guide/tools-and-plugins/ncc-2025-the-facade-calculator.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
