NAV Navbar

Introduction

The GRESB API is used for submitting asset data to GRESB and includes live validation. Applications can receive historical data when authorised by a given entity. Data is split between building data; characteristics which are constant over time - and annual data; updated annualy. Annual data is used to submit a response in the Real Estate Assessment. Asset level indicators are RC5.1, NC.RC1.1, NC.RC2.1, PI1.1, PI2.1, PI3.1, and PI4.1. See the Real Estate Reference Guide for more information.

For testing the API, we suggest using one of the following tools:

We also have an OpenAPI compatible specification file, which you can import into Postman, for example, to get you started with the available URLs. You can find the API specification in JSON format here.

Basic Operations

For all API actions below the same basic principals apply:

All API actions are over HTTPS. The API is designed in the spirit of REST. JSON is the primary encoding used for content. OAUTH2 is used to authenticate your application to the API and authorize access to our user's accounts.

Endpoints

The API is now versioned, in order to support backwards-incompatible changes. The current version is v0. This means the base URLs are:

The following paths/endpoints are available:

Path HTTP verbs/methods
/user GET
/entities GET
/entities/{entity_id} GET
/entities/{entity_id}/assets GET, POST
/entities/{entity_id}/assets/{gresb_asset_id} GET, PATCH, DELETE
/entities/{entity_id}/assets/batches POST

Common HTTP Verbs

There are four HTTP verbs we use in the API:

In all cases an error on the part of the client or server could also occur. The very common status of 422 Unprocessable Entity indicates some sort of validation error and 404 Not Found typically indicates an invalid resource URI (e.g. the resource may have been deleted). Other likely codes are below but any HTTP 1.1 code could occur.

Common HTTP Status

Standard HTTP statue codes indicate success or failure of an API request.

Code Text Description
200 OK Command was a success. The response body may include the result.
201 Created Command was a success and a new resource has been created. The response body may include the result.
204 No Content Command was a success. There is no futher content available.
400 Bad Request The request was invalid. Often there is a missing parameter. An accompanying error message with further information may be provided.
401 Unauthorized Authentication credentials were missing or invalid. See authorization for more assistance.
403 Forbidden The request was refused because your account did not receive permission to complete this action or exceeded rate limits.
404 Not Found The requested item does not exist.
422 Unprocessable Entity The request to create or update a resource resulted in validation errors. Error details are returned in the response body. See errors & warnings.
5xx Serverside Error An error has occurred on our servers. Please wait a few minutes and try again or notify us if the errors persists.

Request and Response Encoding

Request parameters should be provided using the application/json Content-Type. The only exception is the IDs of entities or assets which are part of the URLs.

Unless otherwise documented all responses are JSON-encoded. Content-Type: application/json.

API Authorization

The GRESB API uses OAuth 2.0 protocol to securely authorize accounts. Each request made to the GRESB API requires an access token unique to your application. The process for obtaining an access token is outlined below.

Registering your Application

1. Obtain OAuth 2.0 Credentials

Before receiving an access token, you must register your application and obtain OAuth credentials. This will include a unique client_id and client_secret. First, ensure that you are logged into your GRESB account, then add your application to https://api.gresb.com/oauth/applications. You will need to include a name and one or more redirect URIs.

New Application

registration pic

Once you submit, you will be directed to a page with your unique client ID and secret. You may also return to https://api.gresb.com/oauth/applications to see your registered applications.

Sample Application**

credential pic

You may register as many applications as you like.

Requesting API Access

To use the GRESB API, you must receive authorization from your users to access their accounts. There are many ways to do this. This step is typically handled using a client library (see Client Libraries at http://oauth.net/2/ for examples in many languages). We support the following standard flows:

OAuth Scopes

OAuth allows you to request different levels of access to a user's account. By default all applications are granted access to the public scope. For the GRESB API that doesn't allow access to any user data. To use the API in a meaningful way, you need to request one or more of the following scopes:

Scope Access Endpoints
user Read access to user info GET /user
entities Read access to entities GET /entities and GET /entities/{id}
read:assets Read access to assets GET /entities/{id}/assets and GET /entities/{id}/assets/{id}
write:assets Write access to assets POST /entities/{id}/assets, PATCH/DELETE /entities/{id}/assets/{id}, POST /entities/{id}/assets/batches

If your user is not already signed in to their GRESB account they will be prompted to sign in or create a new account. Once signed in, the user will then be shown an authorization request with the option to 'Authorize' or 'Deny' your application access.

Example: Web Applications

As an example we will describe in detail the Authorization Code Grant Flow for a web application. This is the most secure method to authorize your application. It is also the most complex and is made simpler by using an OAuth client library.

Step 1 - Request Authorization

The first time you grant a user access to the GRESB API via your application, link the user to https://api.gresb.com/oauth/authorize, passing the following parameters:

The full URL should look like this:

https://api.gresb.com/oauth/authorize?client_id=CLIENT_ID&redirect_uri=https://www.example.com/oauth2/callback&response_type=code&scope=write:assets

If you are testing this on the API sandbox, you can use the "Authorize" button, to simulate this step:

authorize test app

Authorization Code Screen:

The user will be requested to authorize or deny access to your application:

authorization screen

If the user denies your request you will receive a request at the redirect_uri with error and error_description parameters:

https://www.example.com/oauth2/callback?error=access_denied&error_description=User+denied

If the user authorizes your request you will receive a request at the redirect_uri with the authorization code in the code parameter. You will use this to request an access_token. The authorization code will expire in 10 minutes. Once expired a fresh code must be requested. For example if your redirect_uri was http://example.com/oauth2/callback you should expect a callback to:

https://www.example.com/oauth2/callback?code=AUTHORIZATION_CODE

Note: It is also possible to use the urn:ietf:wg:oauth:2.0:oob as a redirect_uri. Doing this will display the code to the user in a webpage and ask them to copy and paste it into your application's configuration. This might be useful during testing or if your application does not have a web server component.

authorization code screen

It is important to remember that users may revoke your application's access at any time. The easiest course of action if this happens is to request access again starting at Step 1.

Step 2 - Exchange Authorization Code for Access Token

curl \
  -F "client_id=$CLIENT_ID" \
  -F "client_secret=$CLIENT_SECRET" \
  -F "code=$AUTHORIZATION_CODE" \
  -F "grant_type=authorization_code" \
  -F "redirect_uri=urn:ietf:wg:oauth:2.0:oob" \
  -X POST https://api.gresb.com/oauth/token

Response

{
  "access_token":"0123456789abcdef...",
  "token_type":"bearer",
  "expires_in":null,
  "scope":"write:assets"
}
curl \
  -F "access_token=$ACCESS_TOKEN" \
  -X POST https://api.gresb.com/oauth/token/info?

Response

{
  "resource_owner_id":5654,
  "scope":["public","write:assets"],
  "expires_in":null,
  "application": {
    "uid":"d26b1521a034a2e4cfc6372b0db51e6790421e1fd00fd97d5a0d923fe67b685b"
  },
  "created_at":1548944742
}

You can now request an access token by issuing a POST request to /oauth/token. You must include grant_type=authorization_code, your client_id, client_secret, and the authorization code as parameters to your request. In return you will receive an access_token for you application.

POST /oauth/token?client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET&code=$AUTHORIZATION_CODE&redirect_uri=urn:ietf:wg:oauth:2.0:oob

Step 3. Use Access Token

The access token can now be used to make requests to the GRESB API. The token must be included either as a Authorization: Bearer HTTP header, or as a request parameter named access_token.

As an HTTP Header:

curl https://api.gresb.com/api/responses -H 'Authorization: Bearer $ACCESS_TOKEN'

As a request parameter:

curl https://api.gresb.com/api/responses?access_token=$ACCESS_TOKEN

OAuth Errors

Common

Access Grant Errors

Access Token Errors

Password Access Token Errors

Invalid Tokens

Users

GET /user

curl https://api.gresb.com/api/v0/user \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response

{
    "id": 12345,
    "username": "api_user_1",
    "email": "api_user_1@gresb.com",
    "first_name": "API",
    "last_name": "User 1",
    "job_title": "API tester",
    "organization": "GRESB",
    "telephone": "+31207740220",
    "address": "Barbara Strozzilaan 101",
    "city": "Amsterdam",
    "state": "NH",
    "zip": "1083 HN",
    "country": "NL",
    "status": "active",
    "full_address": "Barbara Strozzilaan 101, Amsterdam, NH, 1083 HN, NL",
    "full_name": "API User 1",
    "created_at": "2017-03-22T11:32:19.221Z",
    "updated_at": "2018-10-23T14:57:39.618Z"
}

Returns details on the current authenticated user. This request requires the user scope.

Reporting Entities

To submit data for another entity, you need to be invited as a contributor, by an account manager. For testing purposes, you can create a reporting entity, using the GRESB sandbox portal.

GET /entities

curl https://api.gresb.com/api/v0/entities \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response

[
    {
        "id": 1517,
        "name": "Blue Buildings",
        "manager": "Blue Bridge LLC",
        "reporting_preferences": {
            "currency": "USD",
            "area_units_name": "Square Feet"
        },
        "created_at": "2017-10-26T13:20:48.127Z",
        "updated_at": "2018-04-01T15:01:27.557Z"
    },
    {
        "id": 5028,
        "name": "Rainbow Offices",
        "manager": "Rainbow Offices plc",
        "reporting_preferences": {
            "currency": "EUR",
            "area_units_name": "Square Meters"
        },
        "created_at": "2017-11-13T16:26:16.719Z",
        "updated_at": "2018-07-05T12:30:48.765Z"
    }
]

Returns all the entities (companies or funds) for which the user has contributor access. The required scope is entities.

GET /entities/{entity_id}

curl https://api.gresb.com/api/v0/entities/5028 \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response

{
    "id": 5028,
    "name": "Rainbow Offices",
    "manager": "Rainbow Offices plc",
    "reporting_preferences": {
        "currency": "EUR",
        "area_units_name": "Square Meters"
    },
    "created_at": "2017-11-13T16:26:16.719Z",
    "updated_at": "2018-07-05T12:30:48.765Z"
}

Similar to the above, but returns the details on a specific entity (company or fund), identified by the ID in the URL. Requires that the user has contributor access to the entity. The required scope is entities.

Asset Data

Asset data can be posted via the assets endpoint. The data consists of building characteristics and annual data. Building characteristics are constant over time, whereas annual data changes annually. Some data is only valid for the most current of the two reporting years, other data is valid for both years.

Building characteristics:

Annual data - most current year:

Annual data - both years:

You may submit data for any number of buildings for your user, in one or more of the aforementioned sections. The respondent may also provide data on other assets or for the same assets but in different sections. The data you access through the API is not specific to your application and include data on the respondent's other assets or sections. In other words, you can access assets from a common pool - as long as the assets are part of the same entity. It is the responsibility of the respondent to make sure that data submitted from multiple API partners does not conflict with each other. This API is designed to meet the needs of applications that upload data to GRESB in real-time or as a batch.

GET /entities/{entity_id}/assets

curl https://api.gresb.com/api/v0/entities/5028/assets \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response

[
    {
        "gresb_asset_id": 442,
        "country": "NL",
        "state_province": "Noord-Holland",
        "city": "Amsterdam",
        "address": null,
        "lat": null,
        "lng": null,
        "construction_year": 2000,
        "partners_id": "GRB_OFF_357891Z",
        "annual_data": [
            {
                "year": 2018,
                "asset_name": "GRESB HQ",
                "directly_managed": false,
                "asset_size": 500,
                "property_type_code": "OFF",
                "whole_building": true,
                "new_construction": false,
                "major_renovation": false,
                "dc_change_energy": false,
                "dc_change_water": false,
                "asset_own": 12
            },
            {
                "year": 2017,
                "new_construction": false,
                "major_renovation": false,
                "asset_own": 7
            }
        ],
        "created_at": "2019-01-15T11:07:13.436Z",
        "updated_at": "2019-01-15T11:07:13.436Z"
    }
]

Returns the assets of the entity specified in the URL, along with annual data for the last 2 years (if available). The required scope is read:assets.

GET /entities/{entity_id}/assets/{asset_id}

curl https://api.gresb.com/api/v0/entities/5028/assets/442 \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response

{
    "gresb_asset_id": 442,
    "country": "NL",
    "state_province": "Noord-Holland",
    "city": "Amsterdam",
    "address": null,
    "lat": null,
    "lng": null,
    "construction_year": 2000,
    "partners_id": "GRB_OFF_357891Z",
    "annual_data": [
        {
            "year": 2018,
            "asset_name": "GRESB HQ",
            "directly_managed": false,
            "asset_size": 500,
            "property_type_code": "OFF",
            "whole_building": true,
            "new_construction": false,
            "major_renovation": false,
            "dc_change_energy": false,
            "dc_change_water": false,
            "asset_own": 12
        },
        {
            "year": 2017,
            "new_construction": false,
            "major_renovation": false,
            "asset_own": 7
        }
    ],
    "created_at": "2019-01-15T11:07:13.436Z",
    "updated_at": "2019-01-15T11:07:13.436Z"
}

Returns the asset specified in the URL, along with its annual data for the last 2 years (if available). The required scope is read:assets.

POST /entities/{entity_id}/assets

curl -X POST https://api.gresb.com/api/v0/entities/5028/assets \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d @- <<JSON
{
    "country": "US",
    "state_province": "DC",
    "city": "Washington, DC",
    "address": "1600 Pennsylvania Avenue NW",
    "construction_year": 1800,
    "partners_id": "USGOV_DC456123G",
    "annual_data": [
        {
            "year": 2018,
            "asset_name": "The White House",
            "directly_managed": false,
            "whole_building": true,
            "asset_size": 500,
            "property_type_code": "OFF",
            "new_construction": false,
            "major_renovation": false,
            "dc_change_energy": false,
            "dc_change_water": false,
            "asset_own": 12
        },
        {
            "year": 2017,
            "asset_own": 7,
            "new_construction": false,
            "major_renovation": false
        }
    ]
}
JSON

Response

{
    "gresb_asset_id": 445,
    "country": "US",
    "state_province": "DC",
    "city": "Washington, DC",
    "address": "1600 Pennsylvania Avenue NW",
    "construction_year": 1800,
    "partners_id": "USGOV_DC456123G",
    "annual_data": [
        {
            "year": 2018,
            "asset_name": "The White House",
            "directly_managed": false,
            "whole_building": true,
            "asset_size": 500,
            "property_type_code": "OFF",
            "new_construction": false,
            "major_renovation": false,
            "dc_change_energy": false,
            "dc_change_water": false,
            "asset_own": 12,
            "_validations": {
                "errors": {}
            }
        },
        {
            "year": 2017,
            "asset_own": 7,
            "new_construction": false,
            "major_renovation": false,
            "_validations": {
                "errors": {}
            }
        }
    ],
    "_validations": {
        "errors": {}
    }
}

Creates a new asset for the specified entity in the URL. Returns the created asset, along with any validation errors and warnings. The required scope is write:assets.

For a complete list of fields, and their meaning, see the Data Dictionary. For a complete list of the validations, refer to the Errors & Warnings.

To bulk-create more than a few assets, please submit a Batch Operation.

PATCH /entities/{entity_id}/assets/{asset_id}

curl -X PATCH https://api.gresb.com/api/v0/entities/5028/assets/442 \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d @- <<JSON
{
    "lat": 52.3364617,
    "lng": 4.8849911,
    "annual_data": [
        {
            "year": 2018,
            "asset_own": null
        }
    ]
}
JSON

Response

{
    "gresb_asset_id": 442,
    "country": "NL",
    "state_province": "Noord-Holland",
    "city": "Amsterdam",
    "address": null,
    "lat": 52.3364617,
    "lng": 4.8849911,
    "construction_year": 2000,
    "partners_id": "GRB_OFF_357891Z",
    "annual_data": [
        {
            "year": 2018,
            "asset_name": "GRESB HQ",
            "directly_managed": false,
            "asset_size": 500,
            "property_type_code": "OFF",
            "whole_building": true,
            "new_construction": false,
            "major_renovation": false,
            "dc_change_energy": false,
            "dc_change_water": false,
            "_validations": {
                "errors": {
                    "asset_own": [
                        "can't be blank"
                    ]
                }
            }
        },
        {
            "year": 2017,
            "new_construction": false,
            "major_renovation": false,
            "asset_own": 7,
            "_validations": {
                "errors": {}
            }
        }
    ],
    "_validations": {
        "errors": {}
    }
}

Updates the asset specified in the URL. This endpoint allows partial updates, meaning you only need to provide the changes you want to apply and they are merged with the existing asset fields. To clear an existing value, you need to explicitly set it to null. The changed asset is validated and is only saved if there are no validation errors. In all cases, you get a response with all the asset fields and any validation errors/warnings. The required scope is write:assets.

In the example shown on the right, the update has failed due to the request clearing a required field (asset_own).

For a complete list of fields, and their meaning, see the Data Dictionary. For a complete list of the validations, refer to the Errors & Warnings.

To bulk-update more than a few assets, please submit a Batch Operation.

DELETE /entities/{entity_id}/assets/{asset_id}

curl -X DELETE https://api.gresb.com/api/v0/entities/5028/assets/442 \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Response

{
    "gresb_asset_id": 442,
    "country": "NL",
    "state_province": "Noord-Holland",
    "city": "Amsterdam",
    "address": null,
    "lat": null,
    "lng": null,
    "construction_year": 2000,
    "partners_id": "GRB_OFF_357891Z",
    "annual_data": [
        {
            "year": 2018,
            "asset_name": "GRESB HQ",
            "directly_managed": false,
            "asset_size": 500,
            "property_type_code": "OFF",
            "whole_building": true,
            "new_construction": false,
            "major_renovation": false,
            "dc_change_energy": false,
            "dc_change_water": false,
            "asset_own": 12
        },
        {
            "year": 2017,
            "new_construction": false,
            "major_renovation": false,
            "asset_own": 7
        }
    ],
    "created_at": "2019-02-06T11:07:13.436Z",
    "updated_at": "2019-02-06T11:07:13.436Z"
}

Deletes the asset specified in the URL. Returns the deleted asset if the operation is successful. The required scope is write:assets.

Batch Asset Operations

Request format

{
    "create": [
      // any number of asset representations
    ],
    "always_create": [
      // Same as above, but always creates all items even if they fail
      // some validation rules. A few attributes (see below) are still
      // required, and the batch will fail if they are not found/valid.
    ],
    "update": [
      // any number of partial asset representations
      // each one must include "gresb_asset_id"
    ],
    "always_update": [
      // Same as above, but always updates all (found) items even if they
      // fail some validation rules.
      // Each one must include "gresb_asset_id".
    ],
    "delete": [
      // objects with "gresb_asset_id" only
    ]
}

The API offers an endpoint specifically for scenarios when you need to create or update multiple assets with one request. The request format is similar, with one major difference: all asset representations are enclosed in an array, and assigned to fields which are named create, always_create, update, always_update and delete depending on what you want to do with the array of assets. All five fields are optional. In any case, you probably want to provide at least one, otherwise no operation will be performed.

Response format

{
    "created": [
      // successfully created assets, with their "gresb_asset_id" added
    ],
    "always_created": [
      // created assets (even invalid), with their "gresb_asset_id" added
    ],
    "updated": [
      // successfully updated assets, only those whose "gresb_asset_id" exist
    ],
    "always_updated": [
      // updated assets (even invalid), only those whose "gresb_asset_id" exist
    ],
    "deleted": [
      // successfully deleted assets, only those whose "gresb_asset_id" exist
    ],
    "invalid": [
      // failed creates and updates due to validation errors
    ],
    "not_found": [
      // failed deletes or updates due to incorrect/missing "gresb_asset_id"
    ],
    "counts": { // counts of the items in the arrays above
        "created": 0,
        "always_created": 0,
        "updated": 0,
        "always_updated": 0,
        "deleted": 0,
        "invalid": 0,
        "not_found": 0
    }
}

This endpoint returns a response in a similar format to the request. Instead of create, always_create, update, always_update, delete, you get created, always_created, updated, always_updated, deleted. Each one will contain an array of asset representations which were successfully created, created regardless of validations, successfully updated, updated regardless of validations, or deleted, respectively.

In addition to the fields above, you will also get invalid, not_found and counts. invalid will contain assets you attempted to create, or update, but failed validation. These records will not be saved and you will get a _validations field for each, with more details. You can use always_create and always_update to bypass the validation procedure.

Please be aware that access to this endpoint is limited in order to prevent abuse or overuse caused by a buggy or malicious client. It happens in two ways:

These values are experimental and therefore are subject to change. However, you are unlikely to reach them during normal operation.

The information about the throttling is also provided in the following headers:

POST /entities/{entity_id}/assets/batches

curl -X POST https://api.gresb.com/api/v0/entities/16066/assets/batches \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d @- <<JSON
{
    "create": [
        {
            "city": "Borsele",
            "country": "NL",
            "partners_id": "ABC/X/136941",
            // ... trimmed for brevity ...
            "annual_data": [
                {
                    "year": 2018,
                    "property_type_code": "PAR",
                    "asset_size": 16500,
                    // ... trimmed for brevity ...
                },
                {
                    "year": 2017,
                    // ... trimmed for brevity ...
                }
            ]
        },
        {
            "city": "Paris",
            "country": "FR",
            "partners_id": "FFZ/Q/006941",
            // ... trimmed for brevity ...
            "annual_data": [
                {
                    "year": 2018,
                    // ... trimmed for brevity ...
                },
                {
                    "year": 2017,
                    // ... trimmed for brevity ...
                }
            ]
        }
    ],
    "always_create": [
        {
            "city": "Franekeradeel",
            "state_province": "Flevoland",
            "country": "NL",
            "annual_data": [
                {
                    "year": 2018,
                    "asset_name": "Marcio Dolfing",
                    "property_type_code": "LEI"
                }
            ]
        }
    ],
    "update": [
        {
            "gresb_asset_id": 369076,
            "address": "1775 Lange Viestraat",
            "annual_data": [
                {
                    "year": 2018,
                    "asset_name": "Name changed in 2018"
                }
            ]
        }
    ],
    "always_update": [
        {
            "gresb_asset_id": 369077,
            "annual_data": [
                {
                    "year": 2018,
                    "property_type_code": "OFF"
                }
            ]
        }
    ],
    "delete": [
        {
            "gresb_asset_id": 369074
        },
        {
            "gresb_asset_id": 369075
        }
    ]
}
JSON

Response

{
    "created": [
        {
            "gresb_asset_id": 369078,
            "city": "Borsele",
            "country": "NL",
            "partners_id": "ABC/X/136941",
            // ... trimmed for brevity ...
            "annual_data": [
                {
                    "year": 2018,
                    "property_type_code": "PAR",
                    // ... trimmed for brevity ...
                    "_validations": {
                        "errors": {}
                    }
                },
                {
                    "year": 2017,
                    // ... trimmed for brevity ...
                    "_validations": {
                        "errors": {}
                    }
                }
            ],
            "_validations": {
                "errors": {}
            }
        }
    ],
    "always_created": [
        {
            "gresb_asset_id": 369079,
            "country": "NL",
            "state_province": "Flevoland",
            "city": "Franekeradeel",
            // ... trimmed for brevity ...
            "annual_data": [
                {
                    "year": 2018,
                    "asset_name": "Marcio Dolfing",
                    "property_type_code": "LEI",
                    "_validations": {
                        "errors": {}
                    }
                },
                {
                    "year": 2017,
                    "_validations": {
                        "errors": {}
                    }
                }
            ],
            "_validations": {
                "errors": {}
            }
        }
    ],
    "updated": [
        {
            "gresb_asset_id": 369076,
            "address": "1775 Lange Viestraat",
            // ... trimmed for brevity ...
            "annual_data": [
                {
                    "year": 2018,
                    "asset_name": "Name changed in 2018",
                    // ... trimmed for brevity ...
                }
            ],
            "_validations": {
                "errors": {}
            }
        }
    ],
    "always_updated": [
        {
            "gresb_asset_id": 369077,
            // ... trimmed for brevity ...
            "annual_data": [
                {
                    "year": 2018,
                    // ... trimmed for brevity ...
                    "property_type_code": "OFF",
                    "_validations": {
                        "errors": {}
                    }
                },
                {
                    "year": 2017,
                    "_validations": {
                        "errors": {}
                    }
                }
            ],
            "_validations": {
                "errors": {}
            }
        }
    ],
    "deleted": [
        {
            "gresb_asset_id": 369074,
            // ... trimmed for brevity ...
        }
    ],
    "invalid": [
        {
            "gresb_asset_id": null,
            "city": "Paris",
            "country": "FR",
            "partners_id": "FFZ/Q/006941",
            // ... trimmed for brevity ...
            "_validations": {
                "errors": {
                    "state_province": "can't be blank"
                }
            }
        }
    ],
    "not_found": [369075],
    "counts": {
        "created": 1,
        "always_created": 1,
        "updated": 1,
        "always_updated": 1,
        "deleted": 1,
        "invalid": 1,
        "not_found": 1
    }
}

In this example, we are going to create three new assets where one is always created, update two existing assets where one is always updated, and delete two assets. Many required fields are missing for brevity, but assume that one of the assets we want to create is missing some required data and the other two are fine. Assume both updates are valid and that one of the assets we want to delete does not exist. The example response shows what you would expect to get back.

Data Dictionary

Data may be posted to describe each asset/building and provide an annual snapshot for the two years preceding the Assessment. For example, the 2019 Real Estate Assessment includes data from 2017 and 2018. The data types and object keys for each field/metric are listed below. Validation rules are listed in errors and warnings.

The following data is collected for each building/asset:

{
  "gresb_asset_id": 123456,
  "partners_id": "abc123",
  "address": "20 W 34th St",
  "city": "New York City",
  "state_province": "New York",
  "country": "US",
  "lat": 40.748891,
  "lng": -73.986137,
  "construction_year": 1931
}
Data Variable Data Type Description
gresb_asset_id integer

Unique GRESB Asset ID - Identify and update information for existing assets. Generated automatically. Please do not enter your own IDs. NOTE: In order to see GRESB Asset IDs for existing assets download your data in Excel from the Asset Portal or view them in the data editor. Uploading assets without an ID will create a new asset. Assets with an existing ID will be updated. Assets with a duplicated, non-existing, or ID belonging to another portfolio will be rejected.

partners_id character varying (255)

Self-provided Asset ID that you can use to ensure correct mapping with your system.

address text

Physical street or postal address.

city character varying (255)

City, town, or village.

state_province character varying (255)

State, province, or region.

country character varying (255)

ISO3166 country code. See Country List for further information.

lat numeric

Latitude

lng numeric

Longitude

construction_year smallint

Year of construction.

The following data is collected for the most recent year of the preceding two years only. For example, for a 2019 submission, this data is reported under 2018 only:

{
  "gresb_asset_id": 123456,
  "annual_data": [{
    "year": 2018,
    "asset_name": "Empire State Building",
    "optional_information": "second highest building in NYC",
    "asset_size": 2734033,
    "asset_gav": 534,
    "directly_managed": false,
    "whole_building": true,
    "dc_change_energy": false,
    "dc_change_water": false,
    "en_ind_wwf_cov": 43200,
    "en_ind_wwf_tot": 50000,
    "en_ind_wwe_cov": 2000000,
    "en_ind_wwe_tot": 2734033,
    "ghg_s1_cov": 43200,
    "ghg_s1_tot": 50000,
    "ghg_s2_cov": 43200,
    "ghg_s2_tot": 50000,
    "wat_ind_ww_cov": 2504033,
    "wat_ind_ww_tot": 2504033
  }]
}
Data Variable Data Type Description Unit
asset_name character varying (255)

Name of the asset as displayed to the users with access to this portfolio in the Asset Portal.

optional_information character varying (255)

Any additional information - displayed in the Asset Portal.

property_type_code character varying (255)

GRESB property type classification for the asset. If you select Other you will be able to specify the Other property type in RC5.1. See Property Type List for further information.

asset_size numeric

The total floor area size of the building - without outdoor/exterior areas. Use the same metric as reported in RC3. Value needs to be larger than 0.

m²/sq. ft
asset_gav numeric

Gross asset value of the asset at the end of the reporting period.

million - local currency
directly_managed boolean

Did the company/fund manager have operational control over the asset? See Performance Indicator Definition for further information.

asset_size_common numeric

Floor area size of the common areas. See Performance Indicator Definition for further information.

m²/sq. ft
asset_size_shared numeric

Floor area size of the shared service areas. See Performance Indicator Definition for further information.

m²/sq. ft
asset_size_tenant numeric

Floor area size of the entire Tenant Space. See Performance Indicator Definition for further information.

m²/sq. ft
asset_size_tenant_landlord numeric

Floor area size of the tenant space areas where energy was purchased by the landlord. Used for the energy performance indicators. See Performance Indicator Definition for further information.

m²/sq. ft
asset_size_tenant_tenant numeric

Floor area size of the tenant space areas where energy was purchased by the tenant. Used for the energy performance indicators. See Performance Indicator Definition for further information.

m²/sq. ft
whole_building boolean

Is the energy consumption data of the asset collected for the whole building (TRUE) or separately for base building and tenant space (FALSE)? See Performance Indicator Definition for further information.

new_construction_completed boolean

Was the new construction project completed during the last year of the reporting period?

major_renovation_completed boolean

Was the major renovation completed during the last year of the reporting period?

dc_change_energy boolean

Did the energy data coverage for this asset change over the last two years? Used to determine whether the asset should be excluded from Like-for-Like calculations for energy and GHG emissions.

dc_change_water boolean

Did the water data coverage for this asset change over the last two years? Used to determine whether the asset should be excluded from Like-for-Like calculations for water.

en_man_bcf_cov numeric

Area size of common areas for which fuel consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_bcf_tot numeric

Area size of common areas for which fuel consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_bcd_cov numeric

Area size of common areas for which district heating and cooling consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_bcd_tot numeric

Area size of common areas for which district heating and cooling consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_bce_cov numeric

Area size of common areas for which electricity consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_bce_tot numeric

Area size of common areas for which electricity consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_bsf_cov numeric

Size of area serviced by the shared services/central plant for which fuel consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_bsf_tot numeric

Size of area serviced by the shared services/central plant for which fuel consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_bsd_cov numeric

Size of area serviced by the shared services/central plant for which district heating and cooling consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_bsd_tot numeric

Size of area serviced by the shared services/central plant for which district heating and cooling consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_bse_cov numeric

Size of area serviced by the shared services/central plant for which electricity consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_bse_tot numeric

Size of area serviced by the shared services/central plant for which electricity consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_tlf_cov numeric

Area size of tenant spaces for which energy was purchased by the landlord and fuel consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_tlf_tot numeric

Area size of tenant spaces for which energy was purchased by the landlord and fuel consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_tld_cov numeric

Area size of tenant spaces for which energy was purchased by the landlord and district heating and cooling consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_tld_tot numeric

Area size of tenant spaces for which energy was purchased by the landlord and district heating and cooling consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_tle_cov numeric

Area size of tenant spaces for which energy was purchased by the landlord and electricity consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_tle_tot numeric

Area size of tenant spaces for which energy was purchased by the landlord and electricity consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_ttf_cov numeric

Area size of tenant spaces for which energy was purchased by the tenant and fuel consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_ttf_tot numeric

Area size of tenant spaces for which energy was purchased by the tenant and fuel consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_ttd_cov numeric

Area size of tenant spaces for which energy was purchased by the tenant and district heating and cooling consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_ttd_tot numeric

Area size of tenant spaces for which energy was purchased by the tenant and district heating and cooling consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_tte_cov numeric

Area size of tenant spaces for which energy was purchased by the tenant and electricity consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_tte_tot numeric

Area size of tenant spaces for which energy was purchased by the tenant and electricity consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_wcf_cov numeric

Area size of the whole building for which fuel consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_wcf_tot numeric

Area size of the whole building for which fuel consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_wcd_cov numeric

Area size of the whole building for which district heating and cooling consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_wcd_tot numeric

Area size of the whole building for which district heating and cooling consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_man_wce_cov numeric

Area size of the whole building for which electricity consumption data is available. Applies only to directly managed assets.

m²/sq. ft
en_man_wce_tot numeric

Area size of the whole building for which electricity consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
en_ind_wwf_cov numeric

Area size of the whole building for which fuel consumption data is available. Applies only to indirectly managed assets.

m²/sq. ft
en_ind_wwf_tot numeric

Area size of the whole building for which fuel consumption data could potentially be collected. Applies only to indirectly managed assets.

m²/sq. ft
en_ind_wwd_cov numeric

Area size of the whole building for which district heating and cooling consumption data is available. Applies only to indirectly managed assets.

m²/sq. ft
en_ind_wwd_tot numeric

Area size of the whole building for which district heating and cooling consumption data could potentially be collected. Applies only to indirectly managed assets.

m²/sq. ft
en_ind_wwe_cov numeric

Area size of the whole building for which electricity consumption data is available. Applies only to indirectly managed assets.

m²/sq. ft
en_ind_wwe_tot numeric

Area size of the whole building for which electricity consumption data could potentially be collected. Applies only to indirectly managed assets.

m²/sq. ft
ghg_s1_cov numeric

Area size of the whole building for which scope 1 emissions data is available.

m²/sq. ft
ghg_s1_tot numeric

Area size of the whole building for which scope 1 emissions data could potentially be collected.

m²/sq. ft
ghg_s2_cov numeric

Area size of the whole building for which scope 2 emissions data is available.

m²/sq. ft
ghg_s2_tot numeric

Area size of the whole building for which scope 2 emissions data could potentially be collected.

m²/sq. ft
ghg_s3_cov numeric

Area size of the whole building for which scope 3 emissions data is available.

m²/sq. ft
ghg_s3_tot numeric

Area size of the whole building for which scope 3 emissions data could potentially be collected.

m²/sq. ft
wat_man_bc_cov numeric

Area size of common areas for which water consumption data is available. Applies only to directly managed assets.

m²/sq. ft
wat_man_bc_tot numeric

Area size of common areas for which water consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
wat_man_bs_cov numeric

Size of area serviced by the shared services/central plant for which water consumption data is available. Applies only to directly managed assets.

m²/sq. ft
wat_man_bs_tot numeric

Size of area serviced by the shared services/central plant for which water consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
wat_man_tl_cov numeric

Area size of tenant spaces for which water was purchased by the landlord and water consumption data is available. Applies only to directly managed assets.

m²/sq. ft
wat_man_tl_tot numeric

Area size of tenant spaces for which water was purchased by the landlord and water consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
wat_man_tt_cov numeric

Area size of tenant spaces for which water was purchased by the tenant and water consumption data is available. Applies only to directly managed assets.

m²/sq. ft
wat_man_tt_tot numeric

Area size of tenant spaces for which water was purchased by the tenant and water consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
wat_man_wc_cov numeric

Area size of the whole building for which water consumption data is available. Applies only to directly managed assets.

m²/sq. ft
wat_man_wc_tot numeric

Area size of the whole building for which water consumption data could potentially be collected. Applies only to directly managed assets.

m²/sq. ft
wat_ind_ww_cov numeric

Area size of the whole building for which water consumption data is available. Applies only to indirectly managed assets.

m²/sq. ft
wat_ind_ww_tot numeric

Area size of the whole building for which water consumption data could potentially be collected. Applies only to indirectly managed assets.

m²/sq. ft

The following data is collected for each of the preceding two years. For example, for a 2019 submission, this data is reported under 2017 and 2018:

{
  "gresb_asset_id": 123456,
  "annual_data": [{
      "year": 2017,
      "new_construction": false,
      "major_renovation": false,
      "asset_vacancy": 3,
      "asset_own": 12,
      "en_ind_wwf_abs": 32500,
      "en_ind_wwe_abs": 125000,
      "ghg_s1_abs": 245,
      "ghg_s1_o_abs": 32.50,
      "ghg_s2_abs": 681,
      "ghg_offset_abs": 280,
      "wat_ind_ww_abs": 46000,
      "was_ind_haz_abs": 42,
      "was_ind_nhaz_abs": 2540,
      "was_ind_perc": 95,
      "was_l_perc": 12,
      "was_i_perc": 8,
      "was_wd_perc": 72,
      "was_dwe_perc": 17,
      "was_dr_perc": 55,
      "was_oth_perc": 8
    },
    {
      "year": 2018,
      "new_construction": false,
      "major_renovation": false,
      "asset_vacancy": 2,
      "asset_own": 12,
      "en_ind_wwf_abs": 32250,
      "en_ind_wwe_abs": 124060,
      "ghg_s1_abs": 252,
      "ghg_s1_o_abs": 28,
      "ghg_s2_abs": 673,
      "ghg_offset_abs": 302,
      "wat_ind_ww_abs": 43500,
      "was_ind_haz_abs": 39,
      "was_ind_nhaz_abs": 2780,
      "was_ind_perc": 97,
      "was_l_perc": 12,
      "was_i_perc": 8,
      "was_wd_perc": 74,
      "was_dwe_perc": 19,
      "was_dr_perc": 55,
      "was_oth_perc": 8
    }
  ]
}
Data Variable Data Type Description Unit
new_construction boolean

Was the asset under construction during the reporting period? See New Construction & Major Renovations for further information.

major_renovation boolean

Was the asset undergoing major renovation during the reporting period? See New Construction & Major Renovations for further information.

asset_vacancy integer

Average annual vacancy.

%
asset_own smallint

Number of months of asset ownership in the portfolio. Used to determine whether the asset should be excluded from Like-for-Like calculations for energy, GHG emissions and water.

months
en_man_bcf_abs numeric

Available fuel consumption of common areas. Applies only to directly managed assets.

kWh
en_man_bcd_abs numeric

Available district heating and cooling consumption of common areas. Applies only to directly managed assets.

kWh
en_man_bce_abs numeric

Available electricity consumption of common areas. Applies only to directly managed assets.

kWh
en_man_bsf_abs numeric

Available shared services/central plant fuel consumption. Applies only to directly managed assets.

kWh
en_man_bsd_abs numeric

Available shared services/central plant district heating and cooling consumption. Applies only to directly managed assets.

kWh
en_man_bse_abs numeric

Available shared services/central plant electricity consumption. Applies only to directly managed assets.

kWh
en_man_bof_abs numeric

Available fuel consumption of outdoor, exterior and parking areas. Applies only to directly managed assets.

kWh
en_man_boe_abs numeric

Available electricity consumption of outdoor, exterior and parking areas. Applies only to directly managed assets.

kWh
en_man_tlf_abs numeric

Available fuel consumption of tenant spaces for which energy was purchased by the landlord. Applies only to directly managed assets.

kWh
en_man_tld_abs numeric

Available district heating and cooling consumption of tenant spaces for which energy was purchased by the landlord. Applies only to directly managed assets.

kWh
en_man_tle_abs numeric

Available electricity consumption of tenant spaces for which energy was purchased by the landlord. Applies only to directly managed assets.

kWh
en_man_ttf_abs numeric

Available fuel consumption of tenant spaces for which energy was purchased by the tenant. Applies only to directly managed assets.

kWh
en_man_ttd_abs numeric

Available district heating and cooling consumption of tenant spaces for which energy was purchased by the tenant. Applies only to directly managed assets.

kWh
en_man_tte_abs numeric

Available electricity consumption of tenant spaces for which energy was purchased by the tenant. Applies only to directly managed assets.

kWh
en_man_wcf_abs numeric

Available fuel consumption of the whole building. Applies only to directly managed assets.

kWh
en_man_wcd_abs numeric

Available district heating and cooling consumption of the whole building. Applies only to directly managed assets.

kWh
en_man_wce_abs numeric

Available electricity consumption of the whole building. Applies only to directly managed assets.

kWh
en_ind_wwf_abs numeric

Available fuel consumption of the whole building. Applies only to indirectly managed assets.

kWh
en_ind_wwd_abs numeric

Available district heating and cooling consumption of the whole building. Applies only to indirectly managed assets.

kWh
en_ind_wwe_abs numeric

Available electricity consumption of the whole building. Applies only to indirectly managed assets.

kWh
en_ind_wof_abs numeric

Available fuel consumption of outdoor, exterior and parking areas. Applies only to indrectly managed assets.

kWh
en_ind_woe_abs numeric

Available electricity consumption of outdoor, exterior and parking areas. Applies only to indirectly managed assets.

kWh
ghg_s1_abs numeric

Available scope 1 emissions generated by the asset

tonne (metric)
ghg_s1_o_abs numeric

Available scope 1 emissions from outdoor, exterior and parking areas.

tonne (metric)
ghg_s2_abs numeric

Available scope 2 emissions generated by the asset

tonne (metric)
ghg_s2_o_abs numeric

Available scope 2 emissions from outdoor, exterior and parking areas.

tonne (metric)
ghg_s3_abs numeric

Available scope 3 emissions generated by the asset

tonne (metric)
ghg_s3_o_abs numeric

Available scope 3 emissions from outdoor, exterior and parking areas.

tonne (metric)
ghg_offset_abs numeric

The greenhouse gas offsets purchased for the asset.

tonne (metric)
wat_man_bc_abs numeric

Available water consumption of common areas. Applies only to directly managed assets.

wat_man_bs_abs numeric

Available shared services/central plant water consumption. Applies only to directly managed assets.

wat_man_bo_abs numeric

Available water consumption of outdoor, exterior and parking areas. Applies only to directly managed assets.

wat_man_tl_abs numeric

Available water consumption of tenant spaces for which water was purchased by the landlord. Applies only to directly managed assets.

wat_man_tt_abs numeric

Available water consumption of tenant spaces for which water was purchased by the tenant. Applies only to directly managed assets.

wat_man_wc_abs numeric

Available water consumption of the whole building. Applies only to directly managed assets.

wat_ind_ww_abs numeric

Available water consumption of the whole building. Applies only to indirectly managed assets.

wat_ind_wo_abs numeric

Available water consumption of outdoor, exterior and parking areas. Applies only to indirectly managed assets.

was_man_haz_abs numeric

Available hazardous waste weight for the whole building. Applies only to directly managed assets.

tonne (metric)
was_man_nhaz_abs numeric

Available non-hazardous waste weight for the whole building. Applies only to directly managed assets.

tonne (metric)
was_man_perc numeric

Percentage of the whole building area for which waste data is available. Applies only to directly managed assets.

%
was_ind_haz_abs numeric

Available hazardous waste weight for the whole building. Applies only to indirectly managed assets.

tonne (metric)
was_ind_nhaz_abs numeric

Available non-hazardous waste weight for the whole building. Applies only to indirectly managed assets.

tonne (metric)
was_ind_perc numeric

Percentage of the whole building area for which waste data is available. Applies only to indirectly managed assets.

%
was_l_perc numeric

Percent of waste disposed via landfills.

%
was_i_perc numeric

Percent of waste disposed via incineration.

%
was_wd_perc numeric

Percent of waste diverted from incineration and landfills.

%
was_dwe_perc numeric

Percent of waste diverted through converting waste to energy.

%
was_dr_perc numeric

Percent of waste diverted through recycling.

%
was_do_perc numeric

Percent of waste diverted through other methods.

%
was_oth_perc numeric

Percent of waste disposed via other methods or unknown.

%

Errors & Warnings

When a resource fails validation it will contain an errors key containing an object showing details for each attribute. Each attribute with an error will have a key, an object, and an array of errors. Since we don't know the language you present to your users we normally return the error details in natural language, as such there is no need to translate the errors for your user.

Regular Expression Logic

Prefixes:

General:

Energy:

For example en_man_bcf_abs.

These expression are followed by the different energy types.

GHG:

For example ghg_s1_abs.

Water:

For example wat_man_bc_abs.

Waste:

For example was_man_haz_abs or was_dwe_perc.

The disposal routes.

Error Messages

In the vars, rules, and error messages the suffixes _cy and _ly stand for the year 2018 and 2017, respectively.

var rule error message
asset_gav asset_gav > 0 must be greater than 0
asset_name PresenceValidator can't be blank
asset_own PresenceValidator can't be blank
asset_own asset_own >= 0 must be greater than or equal to 0
asset_own asset_own <= 12 must be less than or equal to 12
asset_size PresenceValidator can't be blank
asset_size asset_size > 0 must be greater than 0
asset_size if(whole_building == false) sum(asset_size_tenant_landlord, asset_size_tenant_tenant) >= asset_size_tenant sum of asset_size_tenant_landlord and asset_size_tenant_tenant must be greater than or equal to %{count} (current value of asset_size_tenant)
asset_size if(whole_building == false) sum(asset_size_common, asset_size_tenant) == asset_size sum of asset_size_common and asset_size_tenant must be equal to %{count} (current value of asset_size)
asset_size if(whole_building == true) sum(en_man_wcf_tot, en_man_wcd_tot, en_man_wce_tot_cy) >= asset_size sum of en_man_wcf_tot_cy, en_man_wcd_tot_cy, and en_man_wce_tot_cy must be greater than or equal to %{count} (current value of asset_size)
asset_size if(whole_building == true) sum(en_man_wwf_tot, en_man_wwd_tot, en_man_wwe_tot_cy) >= asset_size sum of en_man_wwf_tot_cy, en_man_wwd_tot_cy, and en_man_wwe_tot_cy must be greater than or equal to %{count} (current value of asset_size)
asset_size sum(ghg_s1_tot, ghg_s2_tot, ghg_s3_tot) >= asset_size sum of ghg_s1_tot_cy, ghg_s2_tot_cy, and ghg_s3_tot_cy must be greater than or equal to %{count} (current value of asset_size)
asset_size sum(wat_man_bc_tot, wat_man_tl_tot, wat_man_tt_tot) >= asset_size sum of wat_man_bc_tot_cy, wat_man_tl_tot_cy, and wat_man_tt_tot_cy must be greater than or equal to %{count} (current value of asset_size)
asset_size_common if(directly_managed == true & whole_building == false) asset_size_common > 0 must be greater than 0
asset_size_common if(whole_building == false) PresenceValidator can't be blank when not reporting on whole building
asset_size_common if(whole_building == false) sum(asset_size_common, asset_size_tenant) == asset_size sum of asset_size_common and asset_size_tenant must be equal to %{count} (current value of asset_size)
asset_size_common if(whole_building == false) sum(en_man_bcf_tot, en_man_bcd_tot, en_man_bce_tot_cy) >= asset_size_common sum of en_man_bcf_tot_cy, en_man_bcd_tot_cy, and en_man_bce_tot_cy must be greater than or equal to %{count} (current value of asset_size_common)
asset_size_shared if(directly_managed == true & whole_building == false) asset_size_shared > 03 must be greater than 0
asset_size_shared if(whole_building == false) asset_size_shared <= asset_size must be less than or equal to %{count} (the current asset_size)
asset_size_shared if(whole_building == false) sum(en_man_bsf_tot, en_man_bsd_tot, en_man_bse_tot_cy) >= asset_size_shared sum of en_man_bsf_tot_cy, en_man_bsd_tot_cy, and en_man_bse_tot_cy must be greater than or equal to %{count} (current value of asset_size_shared)
asset_size_tenant if(directly_managed == true & whole_building == false) asset_size_tenant > 0 must be greater than 0
asset_size_tenant if(whole_building == false) PresenceValidator can't be blank when not reporting on whole building
asset_size_tenant if(whole_building == false) sum(asset_size_common, asset_size_tenant) == asset_size sum of asset_size_common and asset_size_tenant must be equal to %{count} (current value of asset_size)
asset_size_tenant_landlord if(directly_managed == true & whole_building == false) asset_size_tenant_landlord > 0 must be greater than 0
asset_size_tenant_landlord if(whole_building == false & !is.null(asset_size_tenant)) asset_size_tenant_landlord <= asset_size_tenant must be less than or equal to %{count} (the current asset_size_tenant)
asset_size_tenant_landlord if(whole_building == false & !is.null(asset_size_tenant) &is.null(asset_size_tenant_tenant)) PresenceValidator can't be blank when asset_size_tenant is present
asset_size_tenant_landlord if(whole_building == false) sum(asset_size_tenant_landlord, asset_size_tenant_tenant) >= asset_size_tenant sum of asset_size_tenant_landlord and asset_size_tenant_tenant must be greater than or equal to %{count} (current value of asset_size_tenant)
asset_size_tenant_landlord if(whole_building == false) sum(en_man_tlf_tot, en_man_tld_tot, en_man_tle_tot_cy) >= asset_size_tenant_landlord sum of en_man_tlf_tot_cy, en_man_tld_tot_cy, and en_man_tle_tot_cy must be greater than or equal to %{count} (current value of asset_size_tenant_landlord)
asset_size_tenant_tenant if(directly_managed == true & whole_building == false) asset_size_tenant_tenant > 0 must be greater than 0
asset_size_tenant_tenant if(whole_building == false & !is.null(asset_size_tenant)) asset_size_tenant_tenant <= asset_size_tenant must be less than or equal to %{count} (the current asset_size_tenant)
asset_size_tenant_tenant if(whole_building == false & !is.null(asset_size_tenant) & is.null(asset_size_tenant_landlord)) PresenceValidator can't be blank when asset_size_tenant is present
asset_size_tenant_tenant if(whole_building == false) sum(asset_size_tenant_landlord, asset_size_tenant_tenant) >= asset_size_tenant sum of asset_size_tenant_landlord and asset_size_tenant_tenant must be greater than or equal to %{count} (current value of asset_size_tenant)
asset_size_tenant_tenant if(whole_building == false) sum(en_man_ttf_tot, en_man_ttd_tot, en_man_tte_tot_cy) >= asset_size_tenant_tenant sum of en_man_ttf_tot_cy, en_man_ttd_tot_cy, and en_man_tte_tot_cy must be greater than or equal to %{count} (current value of asset_size_tenant_tenant)
asset_vacancy 0 <= asset_vacancy <= 100 must be between 0% and 100%
city PresenceValidator can't be blank
construction_year construction_year > 999 must be greater than 999
construction_year construction_year < %{current_year} + 10 must be less than 2029
country InclusionValidator is not included in the list
dc_change_energy InclusionValidator can't be blank
dc_change_water InclusionValidator can't be blank
directly_managed InclusionValidator can't be blank
en_ind_woe_abs en_ind_woe_abs >= 0 must be greater than or equal to 0
en_ind_woe_abs if(dc_change_energy == false & directly_managed == false & !is.null(en_ind_woe_abs_cy)) PresenceValidator can't be blank when en_ind_woe_abs_cy is present and data coverage for energy hasn't changed
en_ind_wof_abs en_ind_wof_abs >= 0 must be greater than or equal to 0
en_ind_wof_abs if(dc_change_energy == false & directly_managed == false & !is.null(en_ind_wof_abs_cy)) PresenceValidator can't be blank when en_ind_wof_abs_cy is present and data coverage for energy hasn't changed
en_ind_wwd_abs en_ind_wwd_abs >= 0 must be greater than or equal to 0
en_ind_wwd_abs if(directly_managed == false & whole_building == true & en_ind_wwd_cov > 0 & asset_size > 0) PresenceValidator can't be blank when en_ind_wwd_cov_cy and asset_size are larger than 0
en_ind_wwd_abs if(dc_change_energy == false & directly_managed == false & whole_building == true & !is.null(en_ind_wwd_abs_cy)) PresenceValidator can't be blank when en_ind_wwd_abs_cy is present and data coverage for energy hasn't changed
en_ind_wwd_cov en_ind_wwd_cov >= 0 must be greater than or equal to 0
en_ind_wwd_cov if(en_ind_wwd_tot > 0) PresenceValidator can't be blank when en_ind_wwd_tot_cy is present and larger than 0
en_ind_wwd_cov en_ind_wwd_cov <= en_ind_wwd_tot must be less than or equal to %{count} (maximum coverage en_ind_wwd_tot_cy)
en_ind_wwd_cov if(directly_managed == false & whole_building == true & en_ind_wwd_abs > 0 & asset_size > 0) PresenceValidator can't be blank when en_ind_wwd_abs_cy and asset_size are larger than 0
en_ind_wwd_tot if(directly_managed == false & whole_building == true) en_ind_wwd_tot > 0 must be greater than 0
en_ind_wwd_tot if(directly_managed == false & whole_building == true & !is.null(asset_size)) en_ind_wwd_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
en_ind_wwd_tot if(!is.null(en_ind_wwd_cov)) PresenceValidator can't be blank when en_ind_wwd_cov_cy is present
en_ind_wwd_tot if(whole_building == true) sum(en_ind_wwf_tot, en_ind_wwd_tot, en_ind_wwe_tot_cy) >= asset_size sum of en_ind_wwf_tot_cy, en_ind_wwd_tot_cy, and en_ind_wwe_tot_cy must be greater than or equal to %{count} (current value of asset_size)
en_ind_wwd_tot if(directly_managed == false & whole_building == true & !is.null(asset_size)) !(all(is.null(en_ind_wwf_tot_cy), is.null(en_ind_wwd_tot_cy), is.null(en_ind_wwe_tot_cy)) en_ind_wwf_tot_cy, en_ind_wwd_tot_cy, and en_ind_wwe_tot_cy can't be all blank when asset_size is present
en_ind_wwe_abs en_ind_wwe_abs >= 0 must be greater than or equal to 0
en_ind_wwe_abs if(directly_managed == false & whole_building == true & en_ind_wwe_cov > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_ind_wwe_cov_cy and asset_size_tenant_tenant are larger than 0
en_ind_wwe_abs if(dc_change_energy == false & directly_managed == false & whole_building == true & !is.null(en_ind_wwe_abs_cy)) PresenceValidator can't be blank when en_ind_wwe_abs_cy is present and data coverage for energy hasn't changed
en_ind_wwe_cov en_ind_wwe_cov >= 0 must be greater than or equal to 0
en_ind_wwe_cov if(en_ind_wwe_tot > 0) PresenceValidator can't be blank when en_ind_wwe_tot_cy is present and larger than 0
en_ind_wwe_cov en_ind_wwe_cov <= en_ind_wwe_tot must be less than or equal to %{count} (maximum coverage en_ind_wwe_tot_cy)
en_ind_wwe_cov if(directly_managed == false & whole_building == true & en_ind_wwe_abs > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_ind_wwe_abs_cy and asset_size_tenant_tenant are larger than 0
en_ind_wwe_tot if(directly_managed == false & whole_building == true) en_ind_wwe_tot > 0 must be greater than 0
en_ind_wwe_tot if(directly_managed == false & whole_building == true & !is.null(asset_size)) en_ind_wwe_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
en_ind_wwe_tot if(!is.null(en_ind_wwe_cov)) PresenceValidator can't be blank when en_ind_wwe_cov_cy is present
en_ind_wwe_tot if(whole_building == true) sum(en_ind_wwf_tot, en_ind_wwd_tot, en_ind_wwe_tot_cy) >= asset_size sum of en_ind_wwf_tot_cy, en_ind_wwd_tot_cy, and en_ind_wwe_tot_cy must be greater than or equal to %{count} (current value of asset_size)
en_ind_wwe_tot if(directly_managed == false & whole_building == true & !is.null(asset_size)) !(all(is.null(en_ind_wwf_tot_cy), is.null(en_ind_wwd_tot_cy), is.null(en_ind_wwe_tot_cy)) en_ind_wwf_tot_cy, en_ind_wwd_tot_cy, and en_ind_wwe_tot_cy can't be all blank when asset_size is present
en_ind_wwf_abs en_ind_wwf_abs >= 0 must be greater than or equal to 0
en_ind_wwf_abs if(directly_managed == false & whole_building == true & en_ind_wwf_cov > 0 & asset_size > 0) PresenceValidator can't be blank when en_ind_wwf_cov_cy and asset_size are larger than 0
en_ind_wwf_abs if(dc_change_energy == false & directly_managed == false & whole_building == true & !is.null(en_ind_wwf_abs_cy)) PresenceValidator can't be blank when en_ind_wwf_abs_cy is present and data coverage for energy hasn't changed
en_ind_wwf_cov en_ind_wwf_cov >= 0 must be greater than or equal to 0
en_ind_wwf_cov if(en_ind_wwf_tot > 0) PresenceValidator can't be blank when en_ind_wwf_tot_cy is present and larger than 0
en_ind_wwf_cov en_ind_wwf_cov <= en_ind_wwf_tot must be less than or equal to %{count} (maximum coverage en_ind_wwf_tot_cy)
en_ind_wwf_cov if(directly_managed == false & whole_building == true & en_ind_wwf_abs > 0 & asset_size > 0) PresenceValidator can't be blank when en_ind_wwf_abs_cy and asset_size are larger than 0
en_ind_wwf_tot if(directly_managed == false & whole_building == true) en_ind_wwf_tot > 0 must be greater than 0
en_ind_wwf_tot if(!is.null(en_ind_wwf_cov)) PresenceValidator can't be blank when en_ind_wwf_cov_cy is present
en_ind_wwf_tot if(directly_managed == false & whole_building == true & !is.null(asset_size)) en_ind_wwf_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
en_ind_wwf_tot if(whole_building == true) sum(en_ind_wwf_tot, en_ind_wwd_tot, en_ind_wwe_tot_cy) >= asset_size sum of en_ind_wwf_tot_cy, en_ind_wwd_tot_cy, and en_ind_wwe_tot_cy must be greater than or equal to %{count} (current value of asset_size)
en_ind_wwf_tot if(directly_managed == false & whole_building == true & !is.null(asset_size)) !(all(is.null(en_ind_wwf_tot_cy), is.null(en_ind_wwd_tot_cy), is.null(en_ind_wwe_tot_cy)) en_ind_wwf_tot_cy, en_ind_wwd_tot_cy, and en_ind_wwe_tot_cy can't be all blank when asset_size is present
en_man_bcd_abs en_man_bcd_abs >= 0 must be greater than or equal to 0
en_man_bcd_abs if(directly_managed == true & whole_building == false & en_man_bcd_cov > 0 & asset_size_common > 0) PresenceValidator can't be blank when en_man_bcd_cov_cy and asset_size_common are larger than 0
en_man_bcd_abs if(dc_change_energy == false & !is.null(asset_size_common) & !is.null(en_man_bcd_abs_cy)) PresenceValidator can't be blank when en_man_bcd_abs_cy is present and data coverage for energy hasn't changed
en_man_bcd_cov en_man_bcd_cov >= 0 must be greater than or equal to 0
en_man_bcd_cov if(en_man_bcd_tot > 0) PresenceValidator can't be blank when en_man_bcd_tot_cy is present and larger than 0
en_man_bcd_cov en_man_bcd_cov <= en_man_bcd_tot must be less than or equal to %{count} (maximum coverage en_man_bcd_tot_cy)
en_man_bcd_cov if(directly_managed == true & whole_building == false & en_man_bcd_abs > 0 & asset_size_common > 0) PresenceValidator can't be blank when en_man_bcd_abs_cy and asset_size_common are larger than 0
en_man_bcd_tot if(directly_managed == true & whole_building == false) en_man_bcd_tot > 0 must be greater than 0
en_man_bcd_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_common)) en_man_bcd_tot <= asset_size_common must be less than or equal to %{count} (the current asset_size_common)
en_man_bcd_tot if(!is.null(en_man_bcd_cov)) PresenceValidator can't be blank when en_man_bcd_cov_cy is present
en_man_bcd_tot if(whole_building == false) sum(en_man_bcf_tot, en_man_bcd_tot, en_man_bce_tot_cy) >= asset_size_common sum of en_man_bcf_tot_cy, en_man_bcd_tot_cy, and en_man_bce_tot_cy must be greater than or equal to %{count} (current value of asset_size_common)
en_man_bcd_tot if(!is.null(asset_size_common)) !(all(is.null(en_man_bcf_tot_cy), is.null(en_man_bcd_tot_cy), is.null(en_man_bce_tot_cy)) en_man_bcf_tot_cy, en_man_bcd_tot_cy, and en_man_bce_tot_cy can't be all blank when asset_size_common is present
en_man_bce_abs en_man_bce_abs >= 0 must be greater than or equal to 0
en_man_bce_abs if(directly_managed == true & whole_building == false & en_man_bce_cov > 0 & asset_size_common > 0) PresenceValidator can't be blank when en_man_bce_cov_cy and asset_size_common are larger than 0
en_man_bce_abs if(dc_change_energy == false & !is.null(asset_size_common) & !is.null(en_man_bce_abs_cy)) PresenceValidator can't be blank when en_man_bce_abs_cy is present and data coverage for energy hasn't changed
en_man_bce_cov en_man_bce_cov >= 0 must be greater than or equal to 0
en_man_bce_cov if(en_man_bce_tot > 0) PresenceValidator can't be blank when en_man_bce_tot_cy is present and larger than 0
en_man_bce_cov en_man_bce_cov <= en_man_bce_tot must be less than or equal to %{count} (maximum coverage en_man_bce_tot_cy)
en_man_bce_cov if(directly_managed == true & whole_building == false & en_man_bce_abs > 0 & asset_size_common > 0) PresenceValidator can't be blank when en_man_bce_abs_cy and asset_size_common are larger than 0
en_man_bce_tot if(directly_managed == true & whole_building == false) en_man_bce_tot > 0 must be greater than 0
en_man_bce_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_common)) en_man_bce_tot <= asset_size_common must be less than or equal to %{count} (the current asset_size_common)
en_man_bce_tot if(!is.null(en_man_bce_cov)) PresenceValidator can't be blank when en_man_bce_cov_cy is present
en_man_bce_tot if(whole_building == false) sum(en_man_bcf_tot, en_man_bcd_tot, en_man_bce_tot_cy) >= asset_size_common sum of en_man_bcf_tot_cy, en_man_bcd_tot_cy, and en_man_bce_tot_cy must be greater than or equal to %{count} (current value of asset_size_common)
en_man_bce_tot if(!is.null(asset_size_common)) !(all(is.null(en_man_bcf_tot_cy), is.null(en_man_bcd_tot_cy), is.null(en_man_bce_tot_cy)) en_man_bcf_tot_cy, en_man_bcd_tot_cy, and en_man_bce_tot_cy can't be all blank when asset_size_common is present
en_man_bcf_abs en_man_bcf_abs >= 0 must be greater than or equal to 0
en_man_bcf_abs if(directly_managed == true & whole_building == false & en_man_bcf_cov > 0 & asset_size_common > 0) PresenceValidator can't be blank when en_man_bcf_cov_cy and asset_size_common are larger than 0
en_man_bcf_abs if(dc_change_energy == false & !is.null(asset_size_common) & !is.null(en_man_bcf_abs_cy)) PresenceValidator can't be blank when en_man_bcf_abs_cy is present and data coverage for energy hasn't changed
en_man_bcf_cov en_man_bcf_cov >= 0 must be greater than or equal to 0
en_man_bcf_cov if(en_man_bcf_tot > 0) PresenceValidator can't be blank when en_man_bcf_tot_cy is present and larger than 0
en_man_bcf_cov en_man_bcf_cov <= en_man_bcf_tot must be less than or equal to %{count} (maximum coverage en_man_bcf_tot_cy)
en_man_bcf_cov if(directly_managed == true & whole_building == false & en_man_bcf_abs > 0 & asset_size_common > 0) PresenceValidator can't be blank when en_man_bcf_abs_cy and asset_size_common are larger than 0
en_man_bcf_tot if(directly_managed == true & whole_building == false) en_man_bcf_tot > 0 must be greater than 0
en_man_bcf_tot if(!is.null(en_man_bcf_cov)) PresenceValidator can't be blank when en_man_bcf_cov_cy is present
en_man_bcf_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_common)) en_man_bcf_tot <= asset_size_common must be less than or equal to %{count} (the current asset_size_common)
en_man_bcf_tot if(whole_building == false) sum(en_man_bcf_tot, en_man_bcd_tot, en_man_bce_tot_cy) >= asset_size_common sum of en_man_bcf_tot_cy, en_man_bcd_tot_cy, and en_man_bce_tot_cy must be greater than or equal to %{count} (current value of asset_size_common)
en_man_bcf_tot if(!is.null(asset_size_common)) !(all(is.null(en_man_bcf_tot_cy), is.null(en_man_bcd_tot_cy), is.null(en_man_bce_tot_cy)) en_man_bcf_tot_cy, en_man_bcd_tot_cy, and en_man_bce_tot_cy can't be all blank when asset_size_common is present
en_man_boe_abs en_man_boe_abs >= 0 must be greater than or equal to 0
en_man_boe_abs if(dc_change_energy == false & directly_managed == true & !is.null(en_man_boe_abs_cy)) PresenceValidator can't be blank when en_man_boe_abs_cy is present and data coverage for energy hasn't changed
en_man_bof_abs en_man_bof_abs >= 0 must be greater than or equal to 0
en_man_bof_abs if(dc_change_energy == false & directly_managed == true & !is.null(en_man_bof_abs_cy)) PresenceValidator can't be blank when en_man_bof_abs_cy is present and data coverage for energy hasn't changed
en_man_bsd_abs en_man_bsd_abs >= 0 must be greater than or equal to 0
en_man_bsd_abs if(directly_managed == true & whole_building == false & en_man_bsd_cov > 0 & asset_size_shared > 0) PresenceValidator can't be blank when en_man_bsd_cov_cy and asset_size_shared are larger than 0
en_man_bsd_abs if(dc_change_energy == false & !is.null(asset_size_shared) & !is.null(en_man_bsd_abs_cy)) PresenceValidator can't be blank when en_man_bsd_abs_cy is present and data coverage for energy hasn't changed
en_man_bsd_cov en_man_bsd_cov >= 0 must be greater than or equal to 0
en_man_bsd_cov if(en_man_bsd_tot > 0) PresenceValidator can't be blank when en_man_bsd_tot_cy is present and larger than 0
en_man_bsd_cov en_man_bsd_cov <= en_man_bsd_tot must be less than or equal to %{count} (maximum coverage en_man_bsd_tot_cy)
en_man_bsd_cov if(directly_managed == true & whole_building == false & en_man_bsd_abs > 0 & asset_size_shared > 0) PresenceValidator can't be blank when en_man_bsd_abs_cy and asset_size_shared are larger than 0
en_man_bsd_tot if(directly_managed == true & whole_building == false) en_man_bsd_tot > 0 must be greater than 0
en_man_bsd_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_shared)) en_man_bsd_tot <= asset_size_shared must be less than or equal to %{count} (the current asset_size_shared)
en_man_bsd_tot if(!is.null(en_man_bsd_cov)) PresenceValidator can't be blank when en_man_bsd_cov_cy is present
en_man_bsd_tot if(whole_building == false) sum(en_man_bsf_tot, en_man_bsd_tot, en_man_bse_tot_cy) >= asset_size_shared sum of en_man_bsf_tot_cy, en_man_bsd_tot_cy, and en_man_bse_tot_cy must be greater than or equal to %{count} (current value of asset_size_shared)
en_man_bsd_tot if(!is.null(asset_size_shared)) !(all(is.null(en_man_bsf_tot_cy), is.null(en_man_bsd_tot_cy), is.null(en_man_bse_tot_cy)) en_man_bsf_tot_cy, en_man_bsd_tot_cy, and en_man_bse_tot_cy can't be all blank when asset_size_shared is present
en_man_bse_abs en_man_bse_abs >= 0 must be greater than or equal to 0
en_man_bse_abs if(directly_managed == true & whole_building == false & en_man_bse_cov > 0 & asset_size_shared > 0) PresenceValidator can't be blank when en_man_bse_cov_cy and asset_size_shared are larger than 0
en_man_bse_abs if(dc_change_energy == false & !is.null(asset_size_shared) & !is.null(en_man_bse_abs_cy)) PresenceValidator can't be blank when en_man_bse_abs_cy is present and data coverage for energy hasn't changed
en_man_bse_cov en_man_bse_cov >= 0 must be greater than or equal to 0
en_man_bse_cov if(en_man_bse_tot > 0) PresenceValidator can't be blank when en_man_bse_tot_cy is present and larger than 0
en_man_bse_cov en_man_bse_cov <= en_man_bse_tot must be less than or equal to %{count} (maximum coverage en_man_bse_tot_cy)
en_man_bse_cov if(directly_managed == true & whole_building == false & en_man_bse_abs > 0 & asset_size_shared > 0) PresenceValidator can't be blank when en_man_bse_abs_cy and asset_size_shared are larger than 0
en_man_bse_tot if(directly_managed == true & whole_building == false) en_man_bse_tot > 0 must be greater than 0
en_man_bse_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_shared)) en_man_bse_tot <= asset_size_shared must be less than or equal to %{count} (the current asset_size_shared)
en_man_bse_tot if(!is.null(en_man_bse_cov)) PresenceValidator can't be blank when en_man_bse_cov_cy is present
en_man_bse_tot if(whole_building == false) sum(en_man_bsf_tot, en_man_bsd_tot, en_man_bse_tot_cy) >= asset_size_shared sum of en_man_bsf_tot_cy, en_man_bsd_tot_cy, and en_man_bse_tot_cy must be greater than or equal to %{count} (current value of asset_size_shared)
en_man_bse_tot if(!is.null(asset_size_shared)) !(all(is.null(en_man_bsf_tot_cy), is.null(en_man_bsd_tot_cy), is.null(en_man_bse_tot_cy)) en_man_bsf_tot_cy, en_man_bsd_tot_cy, and en_man_bse_tot_cy can't be all blank when asset_size_shared is present
en_man_bsf_abs en_man_bsf_abs >= 0 must be greater than or equal to 0
en_man_bsf_abs if(directly_managed == true & whole_building == false & en_man_bsf_cov > 0 & asset_size_shared > 0) PresenceValidator can't be blank when en_man_bsf_cov_cy and asset_size_shared are larger than 0
en_man_bsf_abs if(dc_change_energy == false & !is.null(asset_size_shared) & !is.null(en_man_bsf_abs_cy)) PresenceValidator can't be blank when en_man_bsf_abs_cy is present and data coverage for energy hasn't changed
en_man_bsf_cov en_man_bsf_cov >= 0 must be greater than or equal to 0
en_man_bsf_cov if(en_man_bsf_tot > 0) PresenceValidator can't be blank when en_man_bsf_tot_cy is present and larger than 0
en_man_bsf_cov en_man_bsf_cov <= en_man_bsf_tot must be less than or equal to %{count} (maximum coverage en_man_bsf_tot_cy)
en_man_bsf_cov if(directly_managed == true & whole_building == false & en_man_bsf_abs > 0 & asset_size_shared > 0) PresenceValidator can't be blank when en_man_bsf_abs_cy and asset_size_shared are larger than 0
en_man_bsf_tot if(directly_managed == true & whole_building == false) en_man_bsf_tot > 0 must be greater than 0
en_man_bsf_tot if(!is.null(en_man_bsf_cov)) PresenceValidator can't be blank when en_man_bsf_cov_cy is present
en_man_bsf_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_shared)) en_man_bsf_tot <= asset_size_shared must be less than or equal to %{count} (the current asset_size_shared)
en_man_bsf_tot if(whole_building == false) sum(en_man_bsf_tot, en_man_bsd_tot, en_man_bse_tot_cy) >= asset_size_shared sum of en_man_bsf_tot_cy, en_man_bsd_tot_cy, and en_man_bse_tot_cy must be greater than or equal to %{count} (current value of asset_size_shared)
en_man_bsf_tot if(!is.null(asset_size_shared)) !(all(is.null(en_man_bsf_tot_cy), is.null(en_man_bsd_tot_cy), is.null(en_man_bse_tot_cy)) en_man_bsf_tot_cy, en_man_bsd_tot_cy, and en_man_bse_tot_cy can't be all blank when asset_size_shared is present
en_man_tld_abs en_man_tld_abs >= 0 must be greater than or equal to 0
en_man_tld_abs if(directly_managed == true & whole_building == false & en_man_tld_cov > 0 & asset_size_tenant_landlord > 0) PresenceValidator can't be blank when en_man_tld_cov_cy and asset_size_tenant_landlord are larger than 0
en_man_tld_abs if(dc_change_energy == false & !is.null(asset_size_tenant_landlord) & !is.null(en_man_tld_abs_cy)) PresenceValidator can't be blank when en_man_tld_abs_cy is present and data coverage for energy hasn't changed
en_man_tld_cov en_man_tld_cov >= 0 must be greater than or equal to 0
en_man_tld_cov if(en_man_tld_tot > 0) PresenceValidator can't be blank when en_man_tld_tot_cy is present and larger than 0
en_man_tld_cov en_man_tld_cov <= en_man_tld_tot must be less than or equal to %{count} (maximum coverage en_man_tld_tot_cy)
en_man_tld_cov if(directly_managed == true & whole_building == false & en_man_tld_abs > 0 & asset_size_tenant_landlord > 0) PresenceValidator can't be blank when en_man_tld_abs_cy and asset_size_tenant_landlord are larger than 0
en_man_tld_tot if(directly_managed == true & whole_building == false) en_man_tld_tot > 0 must be greater than 0
en_man_tld_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_tenant_landlord)) en_man_tld_tot <= asset_size_tenant_landlord must be less than or equal to %{count} (the current asset_size_tenant_landlord)
en_man_tld_tot if(!is.null(en_man_tld_cov)) PresenceValidator can't be blank when en_man_tld_cov_cy is present
en_man_tld_tot if(whole_building == false) sum(en_man_tlf_tot, en_man_tld_tot, en_man_tle_tot_cy) >= asset_size_tenant_landlord sum of en_man_tlf_tot_cy, en_man_tld_tot_cy, and en_man_tle_tot_cy must be greater than or equal to %{count} (current value of asset_size_tenant_landlord)
en_man_tld_tot if(!is.null(asset_size_tenant_landlord)) !(all(is.null(en_man_tlf_tot_cy), is.null(en_man_tld_tot_cy), is.null(en_man_tle_tot_cy)) en_man_tlf_tot_cy, en_man_tld_tot_cy, and en_man_tle_tot_cy can't be all blank when asset_size_tenant_landlord is present
en_man_tle_abs en_man_tle_abs >= 0 must be greater than or equal to 0
en_man_tle_abs if(directly_managed == true & whole_building == false & en_man_tle_cov > 0 & asset_size_tenant_landlord > 0) PresenceValidator can't be blank when en_man_tle_cov_cy and asset_size_tenant_landlord are larger than 0
en_man_tle_abs if(dc_change_energy == false & !is.null(asset_size_tenant_landlord) & !is.null(en_man_tle_abs_cy)) PresenceValidator can't be blank when en_man_tle_abs_cy is present and data coverage for energy hasn't changed
en_man_tle_cov en_man_tle_cov >= 0 must be greater than or equal to 0
en_man_tle_cov if(en_man_tle_tot > 0) PresenceValidator can't be blank when en_man_tle_tot_cy is present and larger than 0
en_man_tle_cov en_man_tle_cov <= en_man_tle_tot must be less than or equal to %{count} (maximum coverage en_man_tle_tot_cy)
en_man_tle_cov if(directly_managed == true & whole_building == false & en_man_tle_abs > 0 & asset_size_tenant_landlord > 0) PresenceValidator can't be blank when en_man_tle_abs_cy and asset_size_tenant_landlord are larger than 0
en_man_tle_tot if(directly_managed == true & whole_building == false) en_man_tle_tot > 0 must be greater than 0
en_man_tle_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_tenant_landlord)) en_man_tle_tot <= asset_size_tenant_landlord must be less than or equal to %{count} (the current asset_size_tenant_landlord)
en_man_tle_tot if(!is.null(en_man_tle_cov)) PresenceValidator can't be blank when en_man_tle_cov_cy is present
en_man_tle_tot if(whole_building == false) sum(en_man_tlf_tot, en_man_tld_tot, en_man_tle_tot_cy) >= asset_size_tenant_landlord sum of en_man_tlf_tot_cy, en_man_tld_tot_cy, and en_man_tle_tot_cy must be greater than or equal to %{count} (current value of asset_size_tenant_landlord)
en_man_tle_tot if(!is.null(asset_size_tenant_landlord)) !(all(is.null(en_man_tlf_tot_cy), is.null(en_man_tld_tot_cy), is.null(en_man_tle_tot_cy)) en_man_tlf_tot_cy, en_man_tld_tot_cy, and en_man_tle_tot_cy can't be all blank when asset_size_tenant_landlord is present
en_man_tlf_abs en_man_tlf_abs >= 0 must be greater than or equal to 0
en_man_tlf_abs if(directly_managed == true & whole_building == false & en_man_tlf_cov > 0 & asset_size_tenant_landlord > 0) PresenceValidator can't be blank when en_man_tlf_cov_cy and asset_size_tenant_landlord are larger than 0
en_man_tlf_abs if(dc_change_energy == false & !is.null(asset_size_tenant_landlord) & !is.null(en_man_tlf_abs_cy)) PresenceValidator can't be blank when en_man_tlf_abs_cy is present and data coverage for energy hasn't changed
en_man_tlf_cov en_man_tlf_cov >= 0 must be greater than or equal to 0
en_man_tlf_cov if(en_man_tlf_tot > 0) PresenceValidator can't be blank when en_man_tlf_tot_cy is present and larger than 0
en_man_tlf_cov en_man_tlf_cov <= en_man_tlf_tot must be less than or equal to %{count} (maximum coverage en_man_tlf_tot_cy)
en_man_tlf_cov if(directly_managed == true & whole_building == false & en_man_tlf_abs > 0 & asset_size_tenant_landlord > 0) PresenceValidator can't be blank when en_man_tlf_abs_cy and asset_size_tenant_landlord are larger than 0
en_man_tlf_tot if(directly_managed == true & whole_building == false) en_man_tlf_tot > 0 must be greater than 0
en_man_tlf_tot if(!is.null(en_man_tlf_cov)) PresenceValidator can't be blank when en_man_tlf_cov_cy is present
en_man_tlf_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_tenant_landlord)) en_man_tlf_tot <= asset_size_tenant_landlord must be less than or equal to %{count} (the current asset_size_tenant_landlord)
en_man_tlf_tot if(whole_building == false) sum(en_man_tlf_tot, en_man_tld_tot, en_man_tle_tot_cy) >= asset_size_tenant_landlord sum of en_man_tlf_tot_cy, en_man_tld_tot_cy, and en_man_tle_tot_cy must be greater than or equal to %{count} (current value of asset_size_tenant_landlord)
en_man_tlf_tot if(!is.null(asset_size_tenant_landlord)) !(all(is.null(en_man_tlf_tot_cy), is.null(en_man_tld_tot_cy), is.null(en_man_tle_tot_cy)) en_man_tlf_tot_cy, en_man_tld_tot_cy, and en_man_tle_tot_cy can't be all blank when asset_size_tenant_landlord is present
en_man_ttd_abs en_man_ttd_abs >= 0 must be greater than or equal to 0
en_man_ttd_abs if(directly_managed == true & whole_building == false & en_man_ttd_cov > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_ttd_cov_cy and asset_size_tenant_tenant are larger than 0
en_man_ttd_abs if(dc_change_energy == false & !is.null(asset_size_tenant_tenant) & !is.null(en_man_ttd_abs_cy)) PresenceValidator can't be blank when en_man_ttd_abs_cy is present and data coverage for energy hasn't changed
en_man_ttd_cov en_man_ttd_cov >= 0 must be greater than or equal to 0
en_man_ttd_cov if(en_man_ttd_tot > 0) PresenceValidator can't be blank when en_man_ttd_tot_cy is present and larger than 0
en_man_ttd_cov en_man_ttd_cov <= en_man_ttd_tot must be less than or equal to %{count} (maximum coverage en_man_ttd_tot_cy)
en_man_ttd_cov if(directly_managed == true & whole_building == false & en_man_ttd_abs > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_ttd_abs_cy and asset_size_tenant_tenant are larger than 0
en_man_ttd_tot if(directly_managed == true & whole_building == false) en_man_ttd_tot > 0 must be greater than 0
en_man_ttd_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_tenant_tenant)) en_man_ttd_tot <= asset_size_tenant_tenant must be less than or equal to %{count} (the current asset_size_tenant_tenant)
en_man_ttd_tot if(!is.null(en_man_ttd_cov)) PresenceValidator can't be blank when en_man_ttd_cov_cy is present
en_man_ttd_tot if(whole_building == false) sum(en_man_ttf_tot, en_man_ttd_tot, en_man_tte_tot_cy) >= asset_size_tenant_tenant sum of en_man_ttf_tot_cy, en_man_ttd_tot_cy, and en_man_tte_tot_cy must be greater than or equal to %{count} (current value of asset_size_tenant_tenant)
en_man_ttd_tot if(!is.null(asset_size_tenant_tenant)) !(all(is.null(en_man_ttf_tot_cy), is.null(en_man_ttd_tot_cy), is.null(en_man_tte_tot_cy)) en_man_ttf_tot_cy, en_man_ttd_tot_cy, and en_man_tte_tot_cy can't be all blank when asset_size_tenant_tenant is present
en_man_tte_abs en_man_tte_abs >= 0 must be greater than or equal to 0
en_man_tte_abs if(directly_managed == true & whole_building == false & en_man_tte_cov > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_tte_cov_cy and asset_size_tenant_tenant are larger than 0
en_man_tte_abs if(dc_change_energy == false & !is.null(asset_size_tenant_tenant) & !is.null(en_man_tte_abs_cy)) PresenceValidator can't be blank when en_man_tte_abs_cy is present and data coverage for energy hasn't changed
en_man_tte_cov en_man_tte_cov >= 0 must be greater than or equal to 0
en_man_tte_cov if(en_man_tte_tot > 0) PresenceValidator can't be blank when en_man_tte_tot_cy is present and larger than 0
en_man_tte_cov en_man_tte_cov <= en_man_tte_tot must be less than or equal to %{count} (maximum coverage en_man_tte_tot_cy)
en_man_tte_cov if(directly_managed == true & whole_building == false & en_man_tte_abs > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_tte_abs_cy and asset_size_tenant_tenant are larger than 0
en_man_tte_tot if(directly_managed == true & whole_building == false) en_man_tte_tot > 0 must be greater than 0
en_man_tte_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_tenant_tenant)) en_man_tte_tot <= asset_size_tenant_tenant must be less than or equal to %{count} (the current asset_size_tenant_tenant)
en_man_tte_tot if(!is.null(en_man_tte_cov)) PresenceValidator can't be blank when en_man_tte_cov_cy is present
en_man_tte_tot if(whole_building == false) sum(en_man_ttf_tot, en_man_ttd_tot, en_man_tte_tot_cy) >= asset_size_tenant_tenant sum of en_man_ttf_tot_cy, en_man_ttd_tot_cy, and en_man_tte_tot_cy must be greater than or equal to %{count} (current value of asset_size_tenant_tenant)
en_man_tte_tot if(!is.null(asset_size_tenant_tenant)) !(all(is.null(en_man_ttf_tot_cy), is.null(en_man_ttd_tot_cy), is.null(en_man_tte_tot_cy)) en_man_ttf_tot_cy, en_man_ttd_tot_cy, and en_man_tte_tot_cy can't be all blank when asset_size_tenant_tenant is present
en_man_ttf_abs en_man_ttf_abs >= 0 must be greater than or equal to 0
en_man_ttf_abs if(directly_managed == true & whole_building == false & en_man_ttf_cov > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_ttf_cov_cy and asset_size_tenant_tenant are larger than 0
en_man_ttf_abs if(dc_change_energy == false & !is.null(asset_size_tenant_tenant) & !is.null(en_man_ttf_abs_cy)) PresenceValidator can't be blank when en_man_ttf_abs_cy is present and data coverage for energy hasn't changed
en_man_ttf_cov en_man_ttf_cov >= 0 must be greater than or equal to 0
en_man_ttf_cov if(en_man_ttf_tot > 0) PresenceValidator can't be blank when en_man_ttf_tot_cy is present and larger than 0
en_man_ttf_cov en_man_ttf_cov <= en_man_ttf_tot must be less than or equal to %{count} (maximum coverage en_man_ttf_tot_cy)
en_man_ttf_cov if(directly_managed == true & whole_building == false & en_man_ttf_abs > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_ttf_abs_cy and asset_size_tenant_tenant are larger than 0
en_man_ttf_tot if(directly_managed == true & whole_building == false) en_man_ttf_tot > 0 must be greater than 0
en_man_ttf_tot if(!is.null(en_man_ttf_cov)) PresenceValidator can't be blank when en_man_ttf_cov_cy is present
en_man_ttf_tot if(directly_managed == true & whole_building == false & !is.null(asset_size_tenant_tenant)) en_man_ttf_tot <= asset_size_tenant_tenant must be less than or equal to %{count} (the current asset_size_tenant_tenant)
en_man_ttf_tot if(whole_building == false) sum(en_man_ttf_tot, en_man_ttd_tot, en_man_tte_tot_cy) >= asset_size_tenant_tenant sum of en_man_ttf_tot_cy, en_man_ttd_tot_cy, and en_man_tte_tot_cy must be greater than or equal to %{count} (current value of asset_size_tenant_tenant)
en_man_ttf_tot if(!is.null(asset_size_tenant_tenant)) !(all(is.null(en_man_ttf_tot_cy), is.null(en_man_ttd_tot_cy), is.null(en_man_tte_tot_cy)) en_man_ttf_tot_cy, en_man_ttd_tot_cy, and en_man_tte_tot_cy can't be all blank when asset_size_tenant_tenant is present
en_man_wcd_abs en_man_wcd_abs >= 0 must be greater than or equal to 0
en_man_wcd_abs if(directly_managed == true & whole_building == true & en_man_wcd_cov > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_wcd_cov_cy and asset_size_tenant_tenant are larger than 0
en_man_wcd_abs if(dc_change_energy == false & directly_managed == true & whole_building == true & !is.null(en_man_wcd_abs_cy)) PresenceValidator can't be blank when en_man_wcd_abs_cy is present and data coverage for energy hasn't changed
en_man_wcd_cov en_man_wcd_cov >= 0 must be greater than or equal to 0
en_man_wcd_cov if(en_man_wcd_tot > 0)PresenceValidator can't be blank when en_man_wcd_tot_cy is present and larger than 0
en_man_wcd_cov en_man_wcd_cov <= en_man_wcd_tot must be less than or equal to %{count} (maximum coverage en_man_wcd_tot_cy)
en_man_wcd_cov if(directly_managed == true & whole_building == true & en_man_wcd_abs > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_wcd_abs_cy and asset_size_tenant_tenant are larger than 0
en_man_wcd_tot if(directly_managed == true & whole_building == true) en_man_wcd_tot > 0 must be greater than 0
en_man_wcd_tot if(directly_managed == true & whole_building == true & !is.null(asset_size)) en_man_wcd_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
en_man_wcd_tot if(!is.null(en_man_wcd_cov)) PresenceValidator can't be blank when en_man_wcd_cov_cy is present
en_man_wcd_tot if(whole_building == true) sum(en_man_wcf_tot, en_man_wcd_tot, en_man_wce_tot_cy) >= asset_size sum of en_man_wcf_tot_cy, en_man_wcd_tot_cy, and en_man_wce_tot_cy must be greater than or equal to %{count} (current value of asset_size)
en_man_wcd_tot if(directly_managed == true & whole_building == true & !is.null(asset_size)) !(all(is.null(en_man_wcf_tot_cy), is.null(en_man_wcd_tot_cy), is.null(en_man_wce_tot_cy)) en_man_wcf_tot_cy, en_man_wcd_tot_cy, and en_man_wce_tot_cy can't be all blank when asset_size is present
en_man_wce_abs en_man_wce_abs >= 0 must be greater than or equal to 0
en_man_wce_abs if(directly_managed == true & whole_building == true & en_man_wce_cov > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_wce_cov_cy and asset_size_tenant_tenant are larger than 0
en_man_wce_abs if(dc_change_energy == false & directly_managed == true & whole_building == true & !is.null(en_man_wce_abs_cy)) PresenceValidator can't be blank when en_man_wce_abs_cy is present and data coverage for energy hasn't changed
en_man_wce_cov en_man_wce_cov >= 0 must be greater than or equal to 0
en_man_wce_cov if(en_man_wce_tot > 0) PresenceValidator can't be blank when en_man_wce_tot_cy is present and larger than 0
en_man_wce_cov en_man_wce_cov <= en_man_wce_tot must be less than or equal to %{count} (maximum coverage en_man_wce_tot_cy)
en_man_wce_cov if(directly_managed == true & whole_building == true & en_man_wce_abs > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_wce_abs_cy and asset_size_tenant_tenant are larger than 0
en_man_wce_tot if(directly_managed == true & whole_building == true) en_man_wce_tot > 0 must be greater than 0
en_man_wce_tot if(directly_managed == true & whole_building == true & !is.null(asset_size)) en_man_wce_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
en_man_wce_tot if(!is.null(en_man_wce_cov)) PresenceValidator can't be blank when en_man_wce_cov_cy is present
en_man_wce_tot if(whole_building == true) sum(en_man_wcf_tot, en_man_wcd_tot, en_man_wce_tot_cy) >= asset_size sum of en_man_wcf_tot_cy, en_man_wcd_tot_cy, and en_man_wce_tot_cy must be greater than or equal to %{count} (current value of asset_size)
en_man_wce_tot if(directly_managed == true & whole_building == true & !is.null(asset_size)) !(all(is.null(en_man_wcf_tot_cy), is.null(en_man_wcd_tot_cy), is.null(en_man_wce_tot_cy)) en_man_wcf_tot_cy, en_man_wcd_tot_cy, and en_man_wce_tot_cy can't be all blank when asset_size is present
en_man_wcf_abs en_man_wcf_abs >= 0 must be greater than or equal to 0
en_man_wcf_abs if(directly_managed == true & whole_building == true & en_man_wcf_cov > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_wcf_cov_cy and asset_size_tenant_tenant are larger than 0
en_man_wcf_abs if(dc_change_energy == false & directly_managed == true & whole_building == true & !is.null(en_man_wcf_abs_cy)) PresenceValidator can't be blank when en_man_wcf_abs_cy is present and data coverage for energy hasn't changed
en_man_wcf_cov en_man_wcf_cov >= 0 must be greater than or equal to 0
en_man_wcf_cov if(en_man_wcf_tot > 0) PresenceValidator can't be blank when en_man_wcf_tot_cy is present and larger than 0
en_man_wcf_cov en_man_wcf_cov <= en_man_wcf_tot must be less than or equal to %{count} (maximum coverage en_man_wcf_tot_cy)
en_man_wcf_cov if(directly_managed == true & whole_building == true & en_man_wcf_abs > 0 & asset_size_tenant_tenant > 0) PresenceValidator can't be blank when en_man_wcf_abs_cy and asset_size_tenant_tenant are larger than 0
en_man_wcf_tot if(directly_managed == true & whole_building == true) en_man_wcf_tot > 0 must be greater than 0
en_man_wcf_tot if(!is.null(en_man_wcf_cov)) PresenceValidator can't be blank when en_man_wcf_cov_cy is present
en_man_wcf_tot if(directly_managed == true & whole_building == true & !is.null(asset_size)) en_man_wcf_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
en_man_wcf_tot if(whole_building == true) sum(en_man_wcf_tot, en_man_wcd_tot, en_man_wce_tot_cy) >= asset_size sum of en_man_wcf_tot_cy, en_man_wcd_tot_cy, and en_man_wce_tot_cy must be greater than or equal to %{count} (current value of asset_size)
en_man_wcf_tot if(directly_managed == true & whole_building == true & !is.null(asset_size)) !(all(is.null(en_man_wcf_tot_cy), is.null(en_man_wcd_tot_cy), is.null(en_man_wce_tot_cy)) en_man_wcf_tot_cy, en_man_wcd_tot_cy, and en_man_wce_tot_cy can't be all blank when asset_size is present
ghg_offset_abs ghg_offset_abs >= 0 must be greater than or equal to 0
ghg_s1_abs ghg_s1_abs >= 0 must be greater than or equal to 0
ghg_s1_abs if(ghg_s1_cov > 0) PresenceValidator can't be blank when ghg_s1_cov_cy is present and larger than 0
ghg_s1_abs if(dc_change_energy == false & !is.null(ghg_s1_abs_cy)) PresenceValidator can't be blank when ghg_s1_abs_cy is present and data coverage for energy hasn't changed
ghg_s1_cov ghg_s1_cov >= 0 must be greater than or equal to 0
ghg_s1_cov if(ghg_s1_tot > 0) PresenceValidator can't be blank when ghg_s1_tot_cy is present and larger than 0
ghg_s1_cov ghg_s1_cov <= ghg_s1_tot must be less than or equal to %{count} (maximum coverage ghg_s1_tot_cy)
ghg_s1_cov if(ghg_s1_abs > 0) PresenceValidator can't be blank when ghg_s1_abs_cy is larger than zero
ghg_s1_o_abs ghg_s1_o_abs >= 0 must be greater than or equal to 0
ghg_s1_o_abs if(dc_change_energy == false & !is.null(ghg_s1_o_abs_cy)) PresenceValidator can't be blank when ghg_s1_o_abs_cy is present and data coverage for energy hasn't changed
ghg_s1_tot ghg_s1_tot > 0 must be greater than 0
ghg_s1_tot if(!is.null(ghg_s1_cov)) PresenceValidator can't be blank when ghg_s1_cov_cy is present
ghg_s1_tot if(!is.null(asset_size)) ghg_s1_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
ghg_s1_tot sum(ghg_s1_tot, ghg_s2_tot, ghg_s3_tot) >= asset_size sum of ghg_s1_tot_cy, ghg_s2_tot_cy, and ghg_s3_tot_cy must be greater than or equal to %{count} (current value of asset_size)
ghg_s1_tot if(!is.null(asset_size) !(all(is.null(ghg_s1_tot_cy), is.null(ghg_s2_tot_cy), is.null(ghg_s3_tot_cy)) ghg_s1_tot_cy, ghg_s2_tot_cy and ghg_s3_tot_cy can't be all blank when asset_size is present
ghg_s2_abs ghg_s2_abs >= 0 must be greater than or equal to 0
ghg_s2_abs if(ghg_s2_cov > 0) PresenceValidator can't be blank when ghg_s2_cov_cy is present and larger than 0
ghg_s2_abs if(dc_change_energy == false & !is.null(ghg_s2_abs_cy)) PresenceValidator can't be blank when ghg_s2_abs_cy is present and data coverage for energy hasn't changed
ghg_s2_cov ghg_s2_cov >= 0 must be greater than or equal to 0
ghg_s2_cov if(ghg_s2_tot > 0) PresenceValidator can't be blank when ghg_s2_tot_cy is present and larger than 0
ghg_s2_cov ghg_s2_cov <= ghg_s2_tot must be less than or equal to %{count} (maximum coverage ghg_s2_tot_cy)
ghg_s2_cov if(ghg_s2_abs > 0) PresenceValidator can't be blank when ghg_s2_abs_cy is larger than zero
ghg_s2_o_abs ghg_s2_o_abs >= 0 must be greater than or equal to 0
ghg_s2_o_abs if(dc_change_energy == false & !is.null(ghg_s2_o_abs_cy)) PresenceValidator can't be blank when ghg_s2_o_abs_cy is present and data coverage for energy hasn't changed
ghg_s2_tot ghg_s2_tot > 0 must be greater than 0
ghg_s2_tot if(!is.null(asset_size)) ghg_s2_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
ghg_s2_tot if(!is.null(ghg_s2_cov)) PresenceValidator can't be blank when ghg_s1_cov_cy is present
ghg_s2_tot sum(ghg_s1_tot, ghg_s2_tot, ghg_s3_tot) >= asset_size sum of ghg_s1_tot_cy, ghg_s2_tot_cy, and ghg_s3_tot_cy must be greater than or equal to %{count} (current value of asset_size)
ghg_s2_tot if(!is.null(asset_size) !(all(is.null(ghg_s1_tot_cy), is.null(ghg_s2_tot_cy), is.null(ghg_s3_tot_cy)) ghg_s1_tot_cy, ghg_s2_tot_cy and ghg_s3_tot_cy can't be all blank when asset_size is present
ghg_s3_abs ghg_s3_abs >= 0 must be greater than or equal to 0
ghg_s3_abs if(ghg_s3_cov > 0) PresenceValidator can't be blank when ghg_s3_cov_cy is present and larger than 0
ghg_s3_abs if(dc_change_energy == false & !is.null(ghg_s3_abs_cy)) PresenceValidator can't be blank when ghg_s3_abs_cy is present and data coverage for energy hasn't changed
ghg_s3_cov ghg_s3_cov >= 0 must be greater than or equal to 0
ghg_s3_cov if(ghg_s3_tot > 0) PresenceValidator can't be blank when ghg_s3_tot_cy is present and larger than 0
ghg_s3_cov ghg_s3_cov <= ghg_s3_tot must be less than or equal to %{count} (maximum coverage ghg_s3_tot_cy)
ghg_s3_cov if(ghg_s3_abs > 0) PresenceValidator can't be blank when ghg_s3_abs_cy is larger than zero
ghg_s3_o_abs ghg_s3_o_abs >= 0 must be greater than or equal to 0
ghg_s3_o_abs if(dc_change_energy == false & !is.null(ghg_s3_o_abs_cy)) PresenceValidator can't be blank when ghg_s3_o_abs_cy is present and data coverage for energy hasn't changed
ghg_s3_tot ghg_s3_tot > 0 must be greater than 0
ghg_s3_tot if(!is.null(asset_size)) ghg_s3_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
ghg_s3_tot if(!is.null(ghg_s3_cov)) PresenceValidator can't be blank when ghg_s1_cov_cy is present
ghg_s3_tot sum(ghg_s1_tot, ghg_s2_tot, ghg_s3_tot) >= asset_size sum of ghg_s1_tot_cy, ghg_s2_tot_cy, and ghg_s3_tot_cy must be greater than or equal to %{count} (current value of asset_size)
ghg_s3_tot if(!is.null(asset_size) !(all(is.null(ghg_s1_tot_cy), is.null(ghg_s2_tot_cy), is.null(ghg_s3_tot_cy)) ghg_s1_tot_cy, ghg_s2_tot_cy and ghg_s3_tot_cy can't be all blank when asset_size is present
major_renovation InclusionValidator can't be blank
major_renovation_completed if(major_renovation == true) InclusionValidator can't be blank when major renovation is true this year
new_construction InclusionValidator can't be blank
new_construction_completed if(new_construction == true) InclusionValidator can't be blank when new construction is true this year
property_type_code PresenceValidator can't be blank
property_type_code InclusionValidator must be chosen from list
state_province PresenceValidator can't be blank
was_do_perc 0 <= was_do_perc <= 100 must be between 0% and 100%
was_do_perc sum(was_dwe_perc, was_dr_perc, was_do_perc) == was_wd_perc sum of was_dwe_perc, was_dr_perc, and was_do_perc must be equal to %{count} (current value of was_wd_perc)
was_dr_perc 0 <= was_dr_perc <= 100 must be between 0% and 100%
was_dr_perc sum(was_dwe_perc, was_dr_perc, was_do_perc) == was_wd_perc sum of was_dwe_perc, was_dr_perc, and was_do_perc must be equal to %{count} (current value of was_wd_perc)
was_dwe_perc 0 <= was_dwe_perc <= 100 must be between 0% and 100%
was_dwe_perc sum(was_dwe_perc, was_dr_perc, was_do_perc) == was_wd_perc sum of was_dwe_perc, was_dr_perc, and was_do_perc must be equal to %{count} (current value of was_wd_perc)
was_i_perc 0 <= was_i_perc <= 100 must be between 0% and 100%
was_i_perc sum(was_l_perc, was_i_perc, was_wd_perc, was_oth_perc) == 100 sum of was_l_perc, was_i_perc, was_wd_perc, and was_oth_perc must be equal to 100
was_ind_haz_abs was_ind_haz_abs >= 0 must be greater than or equal to 0
was_ind_nhaz_abs was_ind_nhaz_abs >= 0 must be greater than or equal to 0
was_ind_perc 0 <= was_ind_perc <= 100 must be between 0% and 100%
was_ind_perc `if(directly_managed == false & (was_ind_haz_abs > 0 was_ind_nhaz_abs > 0)` PresenceValidator
was_ind_perc if(directly_managed == false & !is.null(asset_size)) !is.null(was_ind_perc_cy) can't be blank when asset_size is present
was_l_perc 0 <= was_l_perc <= 100 must be between 0% and 100%
was_l_perc sum(was_l_perc, was_i_perc, was_wd_perc, was_oth_perc) == 100 sum of was_l_perc, was_i_perc, was_wd_perc, and was_oth_perc must be equal to 100
was_man_haz_abs was_man_haz_abs >= 0 must be greater than or equal to 0
was_man_nhaz_abs was_man_nhaz_abs >= 0 must be greater than or equal to 0
was_man_perc 0 <= was_man_perc <= 100 must be between 0% and 100%
was_man_perc `if(directly_managed == true & (was_man_haz_abs > 0 was_man_nhaz_abs > 0)` PresenceValidator
was_man_perc if(directly_managed == true & !is.null(asset_size)) !is.null(was_man_perc_cy) can't be blank when asset_size is present
was_oth_perc 0 <= was_oth_perc <= 100 must be between 0% and 100%
was_oth_perc sum(was_l_perc, was_i_perc, was_wd_perc, was_oth_perc) == 100 sum of was_l_perc, was_i_perc, was_wd_perc, and was_oth_perc must be equal to 100
was_wd_perc 0 <= was_wd_perc <= 100 must be between 0% and 100%
was_wd_perc sum(was_l_perc, was_i_perc, was_wd_perc, was_oth_perc) == 100 sum of was_l_perc, was_i_perc, was_wd_perc, and was_oth_perc must be equal to 100
wat_ind_wo_abs wat_ind_wo_abs >= 0 must be greater than or equal to 0
wat_ind_wo_abs if(dc_change_water == false & directly_managed == false & !is.null(wat_ind_wo_abs_cy)) PresenceValidator can't be blank when wat_ind_wo_abs_cy is present and data coverage for water hasn't changed
wat_ind_ww_abs wat_ind_ww_abs >= 0 must be greater than or equal to 0
wat_ind_ww_abs if(wat_ind_ww_cov > 0) PresenceValidator can't be blank when wat_ind_ww_cov_cy is present and larger than 0
wat_ind_ww_abs if(dc_change_water == false & directly_managed == false & !is.null(wat_ind_ww_abs_cy)) PresenceValidator can't be blank when wat_ind_ww_abs_cy is present and data coverage for water hasn't changed
wat_ind_ww_cov wat_ind_ww_cov >= 0 must be greater than or equal to 0
wat_ind_ww_cov if(wat_ind_ww_tot > 0) PresenceValidator can't be blank when wat_ind_ww_tot_cy is present and larger than 0
wat_ind_ww_cov wat_ind_ww_cov <= wat_ind_ww_tot must be less than or equal to %{count} (maximum coverage wat_ind_ww_tot_cy)
wat_ind_ww_cov if(wat_ind_ww_abs > 0) PresenceValidator can't be blank when wat_ind_ww_abs_cy is larger than zero
wat_ind_ww_tot if(directly_managed == false) wat_ind_ww_tot > 0 must be greater than 0
wat_ind_ww_tot if(!is.null(wat_ind_ww_cov)) PresenceValidator can't be blank when wat_ind_ww_cov_cy is present
wat_ind_ww_tot if(directly_managed == false & !is.null(asset_size)) wat_ind_ww_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
wat_ind_ww_tot if(directly_managed == false & !is.null(asset_size)) !is.null(wat_ind_ww_tot_cy)) can't be blank when asset_size is present
wat_man_bc_abs wat_man_bc_abs >= 0 must be greater than or equal to 0
wat_man_bc_abs if(wat_man_bc_cov > 0) PresenceValidator can't be blank when wat_man_bc_cov_cy is present and larger than 0
wat_man_bc_abs if(dc_change_water == false & directly_managed == true & !is.null(wat_man_bc_abs_cy)) PresenceValidator can't be blank when wat_man_bc_abs_cy is present and data coverage for water hasn't changed
wat_man_bc_cov wat_man_bc_cov >= 0 must be greater than or equal to 0
wat_man_bc_cov if(wat_man_bc_tot > 0) PresenceValidator can't be blank when wat_man_bc_tot_cy is present and larger than 0
wat_man_bc_cov wat_man_bc_cov <= wat_man_bc_tot must be less than or equal to %{count} (maximum coverage wat_man_bc_tot_cy)
wat_man_bc_cov if(wat_man_bc_abs > 0) PresenceValidator can't be blank when wat_man_bc_abs_cy is larger than zero
wat_man_bc_tot if(directly_managed == true) wat_man_bc_tot > 0 must be greater than 0
wat_man_bc_tot if(!is.null(wat_man_bc_cov)) PresenceValidator can't be blank when wat_man_bc_cov_cy is present
wat_man_bc_tot sum(wat_man_bc_tot, wat_man_tl_tot, wat_man_tt_tot) >= asset_size sum of wat_man_bc_tot_cy, wat_man_tl_tot_cy, and wat_man_tt_tot_cy must be greater than or equal to %{count} (current value of asset_size)
wat_man_bc_tot sum(wat_man_bc_tot, max(wat_man_tl_tot, wat_man_tt_tot)) <= asset_size sum of wat_man_bc_tot_cy and max(wat_man_tl_tot, wat_man_tt_tot) must be less than or equal to (%{count} (current value of asset_size)
wat_man_bc_tot if(directly_managed == true & !is.null(asset_size)) !(all(is.null(wat_man_bc_tot_cy), is.null(wat_man_bs_tot_cy), is.null(wat_man_tl_tot_cy), is.null(wat_man_tt_tot_cy), is.null(wat_man_wc_tot_cy)) can't be blank when asset_size_common is present
wat_man_bo_abs wat_man_bo_abs >= 0 must be greater than or equal to 0
wat_man_bo_abs if(dc_change_water == false & directly_managed == true & !is.null(wat_man_bo_abs_cy)) PresenceValidator can't be blank when wat_man_bo_abs_cy is present and data coverage for water hasn't changed
wat_man_bs_abs wat_man_bs_abs >= 0 must be greater than or equal to 0
wat_man_bs_abs if(wat_man_bs_cov > 0) PresenceValidator can't be blank when wat_man_bs_cov_cy is present and larger than 0
wat_man_bs_abs if(dc_change_water == false & directly_managed == true & !is.null(wat_man_bs_abs_cy)) PresenceValidator can't be blank when wat_man_bs_abs_cy is present and data coverage for water hasn't changed
wat_man_bs_cov wat_man_bs_cov >= 0 must be greater than or equal to 0
wat_man_bs_cov if(wat_man_bs_tot > 0) PresenceValidator can't be blank when wat_man_bs_tot_cy is present and larger than 0
wat_man_bs_cov wat_man_bs_cov <= wat_man_bs_tot must be less than or equal to %{count} (maximum coverage wat_man_bs_tot_cy)
wat_man_bs_cov if(wat_man_bs_abs > 0) PresenceValidator can't be blank when wat_man_bs_abs_cy is larger than zero
wat_man_bs_tot if(directly_managed == true) wat_man_bs_tot > 0 must be greater than 0
wat_man_bs_tot if(!is.null(wat_man_bs_cov)) PresenceValidator can't be blank when wat_man_bs_cov_cy is present
wat_man_bs_tot if(directly_managed == true & !is.null(asset_size)) wat_man_bs_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
wat_man_bs_tot if(directly_managed == true & !is.null(asset_size)) !(all(is.null(wat_man_bc_tot_cy), is.null(wat_man_bs_tot_cy), is.null(wat_man_tl_tot_cy), is.null(wat_man_tt_tot_cy), is.null(wat_man_wc_tot_cy)) can't be blank when asset_size_shared is present
wat_man_tl_abs wat_man_tl_abs >= 0 must be greater than or equal to 0
wat_man_tl_abs if(wat_man_tl_cov > 0) PresenceValidator can't be blank when wat_man_tl_cov_cy is present and larger than 0
wat_man_tl_abs if(dc_change_water == false & directly_managed == true & !is.null(wat_man_tl_abs_cy)) PresenceValidator can't be blank when wat_man_tl_abs_cy is present and data coverage for water hasn't changed
wat_man_tl_cov wat_man_tl_cov >= 0 must be greater than or equal to 0
wat_man_tl_cov if(wat_man_tl_tot > 0) PresenceValidator can't be blank when wat_man_tl_tot_cy is present and larger than 0
wat_man_tl_cov wat_man_tl_cov <= wat_man_tl_tot must be less than or equal to %{count} (maximum coverage wat_man_tl_tot_cy)
wat_man_tl_cov if(wat_man_tl_abs > 0) PresenceValidator can't be blank when wat_man_tl_abs_cy is larger than zero
wat_man_tl_tot if(directly_managed == true) wat_man_tl_tot > 0 must be greater than 0
wat_man_tl_tot if(!is.null(wat_man_tl_cov)) PresenceValidator can't be blank when wat_man_tl_cov_cy is present
wat_man_tl_tot sum(wat_man_bc_tot, wat_man_tl_tot, wat_man_tt_tot) >= asset_size sum of wat_man_bc_tot_cy, wat_man_tl_tot_cy, and wat_man_tt_tot_cy must be greater than or equal to %{count} (current value of asset_size)
wat_man_tl_tot sum(wat_man_bc_tot, max(wat_man_tl_tot, wat_man_tt_tot)) <= asset_size sum of wat_man_bc_tot_cy and max(wat_man_tl_tot, wat_man_tt_tot) must be less than or equal to (%{count} (current value of asset_size)
wat_man_tl_tot sum(wat_man_bc_tot, max(wat_man_tl_tot, wat_man_tt_tot)) <= asset_size sum of wat_man_bc_tot_cy and max(wat_man_tl_tot, wat_man_tt_tot) must be less than or equal to (%{count} (current value of asset_size)
wat_man_tl_tot if(directly_managed == true & !is.null(asset_size)) !(all(is.null(wat_man_bc_tot_cy), is.null(wat_man_bs_tot_cy), is.null(wat_man_tl_tot_cy), is.null(wat_man_tt_tot_cy), is.null(wat_man_wc_tot_cy)) can't be blank when asset_size_tenant_landlord is present
wat_man_tt_abs wat_man_tt_abs >= 0 must be greater than or equal to 0
wat_man_tt_abs if(wat_man_tt_cov > 0) PresenceValidator can't be blank when wat_man_tt_cov_cy is present and larger than 0
wat_man_tt_abs if(dc_change_water == false & directly_managed == true & !is.null(wat_man_tt_abs_cy)) PresenceValidator can't be blank when wat_man_tt_abs_cy is present and data coverage for water hasn't changed
wat_man_tt_cov wat_man_tt_cov >= 0 must be greater than or equal to 0
wat_man_tt_cov if(wat_man_tt_tot > 0) PresenceValidator can't be blank when wat_man_tt_tot_cy is present and larger than 0
wat_man_tt_cov wat_man_tt_cov <= wat_man_tt_tot must be less than or equal to %{count} (maximum coverage wat_man_tt_tot_cy)
wat_man_tt_cov if(wat_man_tt_abs > 0) PresenceValidator can't be blank when wat_man_tt_abs_cy is larger than zero
wat_man_tt_tot if(directly_managed == true) wat_man_tt_tot > 0 must be greater than 0
wat_man_tt_tot if(!is.null(wat_man_tt_cov)) PresenceValidator can't be blank when wat_man_tt_cov_cy is present
wat_man_tt_tot sum(wat_man_bc_tot, wat_man_tl_tot, wat_man_tt_tot) >= asset_size sum of wat_man_bc_tot_cy, wat_man_tl_tot_cy, and wat_man_tt_tot_cy must be greater than or equal to %{count} (current value of asset_size)
wat_man_tt_tot if(directly_managed == true & !is.null(asset_size)) !(all(is.null(wat_man_bc_tot_cy), is.null(wat_man_bs_tot_cy), is.null(wat_man_tl_tot_cy), is.null(wat_man_tt_tot_cy), is.null(wat_man_wc_tot_cy)) can't be blank when asset_size_tenant_tenant is present
wat_man_wc_abs wat_man_wc_abs >= 0 must be greater than or equal to 0
wat_man_wc_abs if(wat_man_wc_cov > 0) PresenceValidator can't be blank when wat_man_wc_cov_cy is present and larger than 0
wat_man_wc_abs if(dc_change_water == false & directly_managed == true & !is.null(wat_man_wc_abs_cy)) PresenceValidator can't be blank when wat_man_wc_abs_cy is present and data coverage for water hasn't changed
wat_man_wc_cov wat_man_wc_cov >= 0 must be greater than or equal to 0
wat_man_wc_cov if(wat_man_wc_tot > 0) PresenceValidator can't be blank when wat_man_wc_tot_cy is present and larger than 0
wat_man_wc_cov wat_man_wc_cov <= wat_man_wc_tot must be less than or equal to %{count} (maximum coverage wat_man_wc_tot_cy)
wat_man_wc_cov if(wat_man_wc_abs > 0) PresenceValidator can't be blank when wat_man_wc_abs_cy is larger than zero
wat_man_wc_tot if(directly_managed == true) wat_man_wc_tot > 0 must be greater than 0
wat_man_wc_tot if(directly_managed == true & !is.null(asset_size)) wat_man_wc_tot <= asset_size must be less than or equal to %{count} (the current asset_size)
wat_man_wc_tot if(!is.null(wat_man_wc_cov)) PresenceValidator can't be blank when wat_man_wc_cov_cy is present
wat_man_wc_tot if(directly_managed == true & !is.null(asset_size)) !(all(is.null(wat_man_bc_tot_cy), is.null(wat_man_bs_tot_cy), is.null(wat_man_tl_tot_cy), is.null(wat_man_tt_tot_cy), is.null(wat_man_wc_tot_cy)) can't be blank when asset_size is present
whole_building InclusionValidator can't be blank
whole_building if(directly_managed == false) whole_building == true must be true when asset is indirectly managed

Threshold Values

Threshold values are calculated for each property_type and performance indicator based on historical data. This sets a range w- if a data point is outside of the range it is flagged as an outlier. A flagged outlier needs to be explained in order to submit your data in the GRESB Real Estate Assessment. To prevent lots of error messages, we intend to share these threshold values in order to resolve outliers beforehand or construct a valid argument as to why the data point is an outlier.

For example, energy consumption is reported in PI1.1 for the sections Base Building + Tenant Space, Managed Whole Building, Indirectly Managed Whole Building, or a combination of them. The lower threshold is compared against the sum of all consumptions divided by the sum of all possible overlapping coverage areas for each section. For the upper threshold all possible overlapping coverage areas are capped at the area given in the pre-table (PI1.0). This methodology is only used for this specific purpose and do not reflect the intensities given in the results, which are calculated in a different manner. As a result, solely energy can result in a total of 20 (property types) * 3 (groups) = 60 outlier error messages which need to be explained. These explanations are given in the Performance Indicator Overview per property type. Please use the threshold values given below to verify your data before filling in the performance indicator section to guarantee the data quality and save time during your submission.

For implementing the outlier validation GRESB provides the following formulas:

Energy

Base Building + Tenant Space

lower_threshold ≤
  sum(
    en_man_bcf_abs,
    en_man_bcd_abs,
    en_man_bce_abs,
    en_man_bsf_abs,
    en_man_bsd_abs,
    en_man_bse_abs,
    en_man_tlf_abs,
    en_man_tld_abs,
    en_man_tle_abs,
    en_man_ttf_abs,
    en_man_ttd_abs,
    en_man_tte_abs
  ) /
  max(
    sum(
      max(en_man_bcf_cov, en_man_bcd_cov, en_man_bce_cov),
      max(en_man_tlf_cov, en_man_tld_cov, en_man_tle_cov),
      max(en_man_ttf_cov, en_man_ttd_cov, en_man_tte_cov)
    ),
    max(en_man_bsf_cov, en_man_bsd_cov, en_man_bse_cov)
  )

upper_threshold ≥
  sum(
    en_man_bcf_abs,
    en_man_bcd_abs,
    en_man_bce_abs,
    en_man_bsf_abs,
    en_man_bsd_abs,
    en_man_bse_abs,
    en_man_tlf_abs,
    en_man_tld_abs,
    en_man_tle_abs,
    en_man_ttf_abs,
    en_man_ttd_abs,
    en_man_tte_abs
  ) /
  max(
    sum(
      min(
        sum(en_man_bcf_cov, en_man_bcd_cov, en_man_bce_cov),
        asset_size_common
      ),
      min(
        sum(en_man_tlf_cov, en_man_tld_cov, en_man_tle_cov),
        asset_size_tenant_landlord
      ),
      min(
        sum(en_man_ttf_cov, en_man_ttd_cov, en_man_tte_cov),
        asset_size_tenant_tenant
      )
    ),
    min(
      sum(en_man_bsf_cov, en_man_bsd_cov, en_man_bse_cov),
      asset_size_shared
     )
  )

Whole Building - Directly Managed

lower_threshold ≤
  sum(en_man_wcf_abs, en_man_wcd_abs, en_man_wce_abs)
  /
  max(en_man_wcf_cov, en_man_wcd_cov, en_man_wce_cov)

upper_threshold ≥
  sum(en_man_wcf_abs, en_man_wcd_abs, en_man_wce_abs)
  /
  min(
    sum(en_man_wcf_cov, en_man_wcd_cov, en_man_wce_cov),
    asset_size_whole
  )

Whole Building - Indirectly Managed

lower_threshold ≤
  sum(en_ind_wwf_abs, en_ind_wwd_abs, en_ind_wwe_abs)
  /
  max(en_ind_wwf_cov, en_ind_wwd_cov, en_ind_wwe_cov)

upper_threshold ≥
  sum(en_ind_wwf_abs, en_ind_wwd_abs, en_ind_wwe_abs)
  /
  min(
    sum(en_ind_wwf_cov, en_ind_wwd_cov, en_ind_wwe_cov),
    asset_size_whole
  )

GHG

lower_threshold ≤
  sum(ghg_s1_abs, ghg_s2_abs)
  /
  sum(ghg_s1_cov, ghg_s2_cov)

upper_threshold ≥
  sum(ghg_s1_abs, ghg_s2_abs)
  /
  min(
    sum(ghg_s1_cov, ghg_s2_cov),
    asset_size
  )

Water

Base Building + Tenant Space

lower_threshold ≤
  sum(wat_man_bc_abs, wat_man_bs_abs, wat_man_tl_abs, wat_man_tt_abs)
  /
  sum(wat_man_bc_cov, wat_man_bs_cov, wat_man_tl_cov, wat_man_tt_cov)

upper_threshold ≥
  sum(wat_man_bc_abs, wat_man_bs_abs, wat_man_tl_abs, wat_man_tt_abs)
  /
  min(
    sum(wat_man_bc_cov, wat_man_bs_cov, wat_man_tl_cov, wat_man_tt_cov),
    asset_size
  )

Whole Building - Directly Managed

lower_threshold ≤
  wat_man_wc_abs / wat_man_wc_cov
≥ upper_threshold

Whole Building - Indirectly Managed

lower_threshold ≤
  wat_ind_ww_abs / wat_ind_ww_cov
≥ upper_threshold

Waste

Directly Managed Assets

lower_threshold ≤
  sum(was_man_haz_abs, was_man_nhaz_abs)
  /
  (was_man_perc / 100) * asset_size)
≥ upper_threshold

Indirectly Managed Assets

lower_threshold ≤
  sum(was_ind_haz_abs, was_ind_nhaz_abs)
  /
  (was_ind_perc / 100) * asset_size)
≥ upper_threshold
Property type Energy intensity range GHG intensity range Water intensity range Waste intensity range
Retail, High Street 40 – 800 kWh/m² 0 – 400 kg/m² 0 – 5000 l/m² 0 – 400 kg/m²
Retail, Shopping Center 40 – 800 kWh/m² 0 – 400 kg/m² 0 – 5000 l/m² 0 – 400 kg/m²
Retail, Warehouse 10 – 400 kWh/m² 0 – 300 kg/m² 0 – 3000 l/m² 0 – 400 kg/m²
Office 80 – 600 kWh/m² 0 – 400 kg/m² 0 – 4000 l/m² 0 – 300 kg/m²
Industrial, Distribution Warehouse 10 – 400 kWh/m² 0 – 200 kg/m² 0 – 2000 l/m² 0 – 200 kg/m²
Industrial, Business Parks 1 – 400 kWh/m² 0 – 200 kg/m² 0 – 2000 l/m² 0 – 200 kg/m²
Industrial, Manufacturing 10 – 400 kWh/m² 0 – 300 kg/m² 0 – 3000 l/m² 0 – 400 kg/m²
Residential, Multifamily 40 – 600 kWh/m² 0 – 300 kg/m² 0 – 4000 l/m² 0 – 300 kg/m²
Residential, Family Homes 40 – 600 kWh/m² 0 – 300 kg/m² 0 – 4000 l/m² 0 – 300 kg/m²
Senior Homes 40 – 600 kWh/m² 0 – 300 kg/m² 0 – 4000 l/m² 0 – 300 kg/m²
Residential, Student Housing 40 – 600 kWh/m² 0 – 300 kg/m² 0 – 4000 l/m² 0 – 300 kg/m²
Hotel 40 – 800 kWh/m² 0 – 400 kg/m² 0 – 5000 l/m² 0 – 300 kg/m²
Healthcare 80 – 800 kWh/m² 0 – 400 kg/m² 0 – 4000 l/m² 0 – 300 kg/m²
Medical Office 20 – 600 kWh/m² 0 – 400 kg/m² 0 – 4000 l/m² 0 – 300 kg/m²
Lodging, Leisure & Recreation 20 – 600 kWh/m² 0 – 300 kg/m² 0 – 4000 l/m² 0 – 300 kg/m²
Data Centers 500 – 8000 kWh/m² 0 – 3000 kg/m² 0 – 5000 l/m² 0 – 200 kg/m²
Self-storage 10 – 400 kWh/m² 0 – 200 kg/m² 0 – 3000 l/m² 0 – 200 kg/m²
Parking (indoors) 1 – 400 kWh/m² 0 – 200 kg/m² 0 – 3000 l/m² 0 – 200 kg/m²
Other 10 – 800 kWh/m² 0 – 400 kg/m² 0 – 5000 l/m² 0 – 400 kg/m²
Other2 10 – 800 kWh/m² 0 – 400 kg/m² 0 – 5000 l/m² 0 – 400 kg/m²

API Version History

All updates to our API will be documented in this section. If a backwards-incompatible update is released, all API users will be notified in advance and be given ample time to upgrade.

Version 0.94 – Jul 11, 2019
  • Change the rules when X-RateLimit-Remaining header appears.
Version 0.93 – Jul 04, 2019
  • Added set of headers X-RateLimit-Limit, X-RateLimit-Reset and X-RateLimit-Remaining to the batch operations endpoint. They contain information about available usage limits and possible throttling.
Version 0.92 – May 28, 2019
  • Added always_create and always_update keys in the batch batch operations endpoint. These operations are always successful, even if validation fails.
Version 0.91 – Mar 29, 2019
  • Added set of "greater than zero" validation rules based on directlymanaged and wholebuilding.
  • Added set of "maximum coverages" validation rules. No longer possible to report an asset without perfomance data.
  • Added set of "lfl-eligible" validation rules. If the data coverage did not change you'll have to report consumption for both years.
Version 0.90 – Feb 07, 2019
  • Breaking change: URLs have changed and now include the API version
  • Breaking change: The endpoint for batch operations has changed significantly
  • Major change: There is a single pool of asset data for each entity. All API partners get access to the same assets as the reporting entity. In the past, each API partner had access only to their own set of assets.
  • Major change: To ensure high data quality and integrity, we have added many more validations. As a result, you may find that some of your previously submitted assets are now considered invalid.
Version 0.20 – Dec 08, 2018
  • Decoupled the asset data from the response, allowing partners to submit asset-level data outside the regular survey period
  • Added new /api/entities endpoints
  • Deprecated the old /api/responses endpoints, which now redirect to the new /api/entities endpoints
Version 0.18 – Oct 08, 2018
  • Added parameter provider_id=0 to get asset data from the participant
Version 0.17 – May 08, 2018
  • Added a paragraph and formulas to the Threshold Values section
Version 0.16 – Apr 06, 2018
  • Added outlier thresholds
  • Updated links and added examples where to put data within the JSON requests, see data dictionary
Version 0.15 – Mar 16, 2018
  • Authorization domain is api.gresb.com, gresb.com was deprecated
Version 0.14 – Feb 12, 2018
  • Updated document for the 2018 assessment
Version 0.12 – Apr 24, 2017
  • Documented missing asset_size and dc_change
Version 0.13 – Apr 24, 2017
  • Asset-level data dictionary formatting
Version 0.11 – Apr 21, 2017
  • asset_size_tenant is now split into two fields asset_size_tenant_tenant and asset_size_tenant_landlord"
Version 0.10 – Mar 06, 2017
  • Update mentions of survey_date to use 2017 as an example
  • Rename two field names from asset dictionary published on Jan 26: asset_year should have been asset_const_year, asset_IDM should have been asset_ind
Version 0.9 – Jan 26, 2017
  • Updated data dictionary for 2017 assessment
Version 0.8 – May 04, 2016
  • Documented new /api/user resource
Version 0.7 – Apr 26, 2016
  • Documented asset_country field
  • Documented waste_diverted_lte_100 errors
  • Removed waste_alloc, not_negative errors
  • Corrected documentation for waste_lte_100, present errors
Version 0.6 – Mar 02, 2016
  • Corrected curl example in Step 2 - Exchange Authorization Code For Access Token
Version 0.5 – Feb 24, 2016
  • Corrected "scopes" parameter name in examples which should have been "scope"
  • Removed references to OAUTH flows that aren't fully supported
Version 0.4 – Feb 17, 2016
  • Documented ghg_offset and ghg_net fields
  • Documented was_wd_perc, was_dwe_perc, was_dr_perc, was_do_perc and was_oth_perc fields
  • Removed documentation for field was_r_pec which has been replaced by was_wd_perc and was_dr_perc
  • Adjust code examples for new waste diverted fields
  • Documented cov_lt_tot, cov_value_required, field_invalid, and waste_alloc errors
  • Updated design of API Authorization screens
Version 0.3 – May 15, 2015
  • "Basic Operations" now explains more about our uses of HTTP/REST/JSON
  • Cleaned up some styling
  • Removed commitment to auto-version the API by application
  • Added production URL and remove under-development warning
  • Documented optional major_renovation asset field
Version 0.2 – Apr 17, 2015
  • Added documentation sections on "Get Response" and "Update Response"
  • Added sample output to "Survey Response" examples
  • Added documentation of survey property of response objects
  • Removed incorrect sentence saying responses can be updated by name or manager
  • Change: The response fields: legal_status, property_type, country, survey_date are now read-only instead of optional
Version 0.1 – Feb 13, 2015
  • Initial version