Ga naar hoofdinhoud
🌐 Publiek

weScan JSON Schema — Nijbegun Isolatieplan

This document describes the JSON format exported by weScan and imported into the Nijbegun insulation plan intake form.

Purpose

Once an advisor has created a customer and a building (with its rekenzone) in Nij Begun, they can upload a JSON file exported from weScan. This automatically fills in building elements, dimensions, and orientations in the intake form — removing the need to enter this data twice.

The import covers building geometry. Insulation values and installations still need to be filled in manually by the advisor. Adjacency defaults to outside air and should be verified per element.

Top-Level Fields

All top-level fields are optional. When present, they are applied to the existing building object/zone.

FieldTypeUnitDescription
building_yearstringConstruction year, e.g. "1978"
building_heightstringmTotal building height, e.g. "6.2"
building_layersarray of stringsGebruiksoppervlak per bouwlaag (floor area per storey), e.g. ["48.0", "44.0"]
childrenGroupsarrayEither building elements (single-zone) or zone entries (multi-zone) — see Rekenzones

All numeric values must be strings, e.g. "28.0" not 28.0.

Rekenzones

The top-level childrenGroups supports two shapes:

  • Single-zone (default): the entries are building elements directly (walls, floor, roof, …). On import they are placed into one rekenzone. The top-level building_layers becomes that zone's floor areas per storey.
  • Multi-zone: the entries are rekenzone entries. Each becomes its own rekenzone. If any top-level entry is a rekenzone, the file is treated as multi-zone and all top-level entries must be rekenzone entries. (zone is accepted as an alias for rekenzone.)

A rekenzone entry has the following structure:

{
"type": "rekenzone",
"name": "Rekenzone A",
"building_layers": ["1.38", "13.9", "24.74", "2.72"],
"childrenGroups": [ /* building elements for this zone */ ]
}
FieldRequiredTypeDescription
typeYes"rekenzone"Marks this entry as a rekenzone ("zone" also accepted)
nameNostringZone name. Defaults to "Rekenzone" (auto-numbered) when omitted.
building_layersNoarray of stringsFloor area per storey (m²) for this zone
childrenGroupsNoarrayBuilding elements in this zone — same structure as below

When importing a multi-zone file, one new rekenzone is created per rekenzone entry. Multi-zone files always create new zones (they are never merged into an existing zone).

Building Elements (childrenGroups)

Each element in childrenGroups has the following structure:

{
"type": "walls",
"name": "Voorgevel",
"additionalFields": { ... },
"childrenGroups": [ ... ]
}

Common Fields

FieldRequiredTypeDescription
typeYesstring (enum)Element type — see Element Types
nameNostringDisplay label in the intake form. Defaults to the Dutch element type name if omitted ("Gevel", "Vloer", "Dak", "Raam", "Deur", "Paneel").
additionalFieldsNoobjectGeometry properties — all values must be strings. Omit the key entirely if no geometry is provided.
childrenGroupsNoarrayChild elements (openings inside this element). Defaults to [] if omitted.

additionalFields per Element Type

All fields inside additionalFields are optional. Omitted fields are left blank in the intake form and must be filled in manually.

FieldUnitApplies toDescription
surface_areaAll typesGross area including any openings
heightmAll typesElement height
widthmAll typesElement width
cardinal_pointwalls, roof, windowOrientation — see Cardinal Points. Defaults to s.
inclination°walls, floor, roofTilt angle: 0 = flat, 90 = vertical. Subgeometries inherit the parent value when omitted. Defaults: wall=90, sloped roof=45, floor/flat roof=0.
adjacencywalls, floor, roofAdjoining space — see Adjacency Types. Defaults to buitenlucht when omitted.
perimetermfloorPerimeter of the floor element
glass_insulationwindowGlass type — see Glass Types
windowFrameKindwindow, panelFrame material — see Frame Types
rc_valuem²K/Wwalls, floor, roofInsulation Rc value. Leading — when present, insulation is set to "yes (Rc value)".
insulation_thicknessmmwalls, floor, roofInsulation thickness. Used only when rc_value is absent; insulation is then set to "yes (known insulation)".
has_cavityboolwallsWhether a cavity (spouw) is present. Overrides the year-based default.
cavity_depthmmwallsCavity (spouw) depth. Optional; only applied when has_cavity is true.

GUIDs and index values are auto-generated on import — do not include them in the JSON.

Isolation mapping

Isolation data is optional per element. When provided:

  • rc_value is leading: if present, it is used and insulation_thickness is ignored.
  • otherwise insulation_thickness is used.
  • has_cavity / cavity_depth set the cavity (spouw) for walls.
  • when none of these are present, the element keeps the form's default isolation (no insulation + a year-based cavity depth) for the advisor to complete.

Element Types

ValueDefault nameDescription
wallsGevelFacade / exterior wall
floorVloerGround floor or intermediate floor
roofDakSloped or flat roof
windowRaamWindow (child of walls or roof)
doorDeurDoor (child of walls)
panelPaneelOpaque panel in a facade (child of walls)

Windows and doors are nested as childrenGroups inside their parent wall or roof element.

Cardinal Points

ValueDutch
nNoord
neNoordoost
eOost
seZuidoost
sZuid (default)
swZuidwest
wWest
nwNoordwest

Glass Types

Applies to window elements only via glass_insulation.

ValueDescription
enkelGlasEnkel glas
dubbelGlasDubbel glas
hrGlasdubbelGlasMetCoatingHR glas
hrPlusGlasHR+ glas
hrPlusPlusGlasHR++ glas
tripleHrGlasDriedubbel glas

Full Example

{
"building_year": "1978",
"building_height": "6.2",
"building_layers": ["48.0", "44.0"],
"childrenGroups": [
{
"type": "walls",
"name": "Voorgevel",
"additionalFields": {
"surface_area": "28.0",
"height": "5.4",
"width": "5.2",
"cardinal_point": "s"
},
"childrenGroups": [
{
"type": "window",
"name": "Raam woonkamer",
"additionalFields": {
"surface_area": "3.6",
"height": "1.5",
"width": "2.4",
"glass_insulation": "hrPlusPlusGlas"
}
},
{
"type": "door",
"name": "Voordeur",
"additionalFields": {
"surface_area": "1.98",
"height": "2.2",
"width": "0.9"
}
},
{
"type": "panel",
"additionalFields": {
"surface_area": "0.5",
"height": "0.5",
"width": "1.0"
}
}
]
},
{
"type": "walls",
"additionalFields": {
"surface_area": "38.0",
"height": "5.4",
"width": "7.0",
"cardinal_point": "e"
}
},
{
"type": "floor",
"name": "Begane grondvloer",
"additionalFields": {
"surface_area": "48.0",
"height": "8.0",
"width": "6.0",
"perimeter": "28.0"
}
},
{
"type": "roof",
"name": "Hellend dak voor",
"additionalFields": {
"surface_area": "30.0",
"height": "5.0",
"width": "6.0",
"cardinal_point": "s"
},
"childrenGroups": [
{
"type": "window",
"additionalFields": {
"surface_area": "0.9",
"height": "0.9",
"width": "1.0",
"glass_insulation": "dubbelGlas"
}
}
]
},
{
"type": "roof",
"additionalFields": {
"surface_area": "8.0",
"height": "4.0",
"width": "2.0"
}
}
]
}

Adjacency Types

Applies to walls, floor, and roof elements via adjacency. Defaults to buitenlucht when omitted.

ValueDescription
buitenluchtOutside air (default)
grondGround
kruipruimteCrawl space
aangrenzendeOnverwarmdeRuimteAdjacent unheated space
aangrenzendeOnverwarmdeSerreAdjacent unheated conservatory
aangrenzendeSterkGeventileerdeRuimteAdjacent strongly ventilated space
aangrenzendeOnverwarmdeKelderAdjacent unheated basement
aangrenzendeVerwarmdeRuimteAdjacent heated space

Frame Types

Applies to window and panel elements via windowFrameKind.

ValueDescription
woodOrPlasticWood or plastic frame
metalThermallyBrokenMetal, thermally broken
metalNonThermallyBrokenMetal, not thermally broken

Validation Rules

  • type is the only required field per element; all other fields are optional
  • If name is omitted, the import assigns the Dutch default for the element type
  • If childrenGroups is omitted, it defaults to an empty list
  • All additionalFields values must be strings, not numbers
  • glass_insulation only applies to window elements
  • windowFrameKind applies to window and panel elements
  • inclination applies to walls, floor, and roof; subgeometries inherit from parent
  • adjacency applies to walls, floor, and roof; defaults to buitenlucht when omitted
  • perimeter only applies to floor elements
  • cardinal_point defaults to s when omitted on walls and roofs
  • Only window, door, and panel elements may appear as children of walls or roof