Assets¶
Assets represent persistent, non-temporal physical or conceptual objects that can eventually become inventory when paired with a product/productDate. They are the "things" BC Parks manages that exist independently of time. They have spatial context as they are operationally tied to one place - a facility.
An asset * always exists * does not change based on time (daily, seasonally, annually, etc) * is NOT reservable on its own * belongs to a parent facility * becomes reservable only when paired with a product that makes it available on specific dates.
Assets are the foundation for fixed inventory (physical assets like specific tentpads) and the conceptual anchor for flex inventory (conceptual assets like trail capacity).
Assets vs Inventory¶
Asset = the persistent object Inventory = the asset on a specific date
Example: - Asset: Tentpad #43 at Rathtrevor Beach - Inventory: Tentpad #43 on 2024‑08‑15
The tentpad exists all year, but it only becomes reservable as inventory when a product defines - when it is available - how it is governed - how many exist (in flex asset cases)
The separation keeps the system clean: assets define what exists, while products/productDates and inventory define when it is reservable and how it behaves.
Assets allow the system to: - represent physical infrastructure (campsites, cabins, parking stalls) - represent conceptual capacity (trail day‑use slots, backcountry tentpad counts) - attach metadata (location, images, amenities) - supplement map rendering - supplement search and discovery - support future features like asset‑level analytics or maintenance tracking
Assets are not created or destroyed seasonally — they persist even when the experience is closed or otherwise unavailable.
Example: Turning an asset into inventory¶
A tentpad exists year‑round, but the campground is only open May–September. - Asset: Tentpad #43 - Product: “Rathtrevor Beach Camping – Regular Site” - ProductDate: All dates from May 1 to September 30 - Inventory: Tentpad #43 on each of those dates
The Product is what “activates” the asset for a specific season.
Properties¶
Assets¶
| Property | Type | Description |
|---|---|---|
pk |
String | Partition key for the item. Always begins with asset::<collectionId>::<facilityType>::<facilityId>. Groups all assets that belong to a facility. |
sk |
String | Sort key uniquely identifying the item within the partition. Typically just <assetType>::<assetId> |
schema |
String | Item datatype/schema. Will always be 'product' for products |
globalId |
String | UUID used for GSIs and cross‑collection lookups. |
collectionId |
String | Identifier linking the asset to its operational collection (e.g., bcparks_1). |
facilityType |
String | Parent facilityType |
facilitySubType |
String | Parent facilitySubType, if available |
facilityId |
String | Parent facilityId |
assetType |
String | Type of asset |
assetId |
String | Identifier uniquely distinguishing this particular asset from other assets of the same type within the same partition |
identifier |
Number | See assetId |
displayName |
String | Human‑readable name of the item. |
description |
String | Optional descriptive text explaining the purpose or operational meaning of the item. |
location |
OSGeo | Asset geospatial centroid |
minMapZoom |
Number | The smallest zoom level (furthest zoomed out) at which the object will render on a map if it is not in focus |
maxMapZoom |
Number | The largest zoom level (furthest zoomed in) at which the object will render on a map if it is not in focus |
imageUrls |
[String] | Array of urls of images of this data item |
gsipk |
String | GSIPK - for assets, this is the pk of the parent facility |
gsisk |
String | GSISK - for assets, this is the sk of the parent facility |
isVisible |
Boolean | Whether or not this item will be returned if it generates a search hit |
creationDate |
DateTime | Timestamp of when the item was first created |
lastUpdated |
DateTime | Timestamp of when the item was last updated |
version |
Number | Data revision number |
| `searchTerms | String | Comma-separated list of terms OpenSearch can use to link text searches to this data item |
adminNotes |
String | Administrative notes to describe the data, will never be surfaced to the public |
Assets may have many properties unique to their assetType. Some examples follow for a campsite assetType:
| Property | Type | Description |
|---|---|---|
assetGroupIds |
[String] | Future consideration, if assets need further grouping mechanisms beyond what their parent facility and collection allow for |
siteNumber |
Number | The number of the campsite in the campground |
siteType |
String | Type of campsite, if differentiation is useful. Examples: "regular", "walk-in", "rv"... |
hasSani |
Boolean | Whether or not the site has a sanitary hookup |
hasElec |
Boolean | Whether or not the site has an electrical hookup |
onCampgroundPerimeter |
Boolean | Whether or not the campsite is on the edge of the campground (typically more popular) |
onShoreline |
Boolean | Whether or not the campsite is on the edge of a lake, river, the ocean, etc. |
metersToPotWater |
Number | Distance in meters to nearest source of potable water |
metersToToilet |
Number | Distance in meters to the nearest toilet |
metersToShower |
Number | Distance in meters to the nearest shower |
area |
Number | Square meterage of the site |
... and many more properties. These can be useful to help users narrow down exactly what they are looking for once they select a campground.
{
"pk": "asset::bcparks_1::campground::1",
"sk": "tentpad::1",
"gsi1pk": "facility::bcparks_1",
"gsi1sk": "campground::1",
"schema": "asset",
"globalId": "23ertrg4-t54e-tyhr-ghnj-rer4323e543t",
"collectionId": "bcparks_1",
"facilityType": "campground",
"facilitySubType": "",
"facilityId": 1,
"assetType": "tentpad",
"assetId": 1,
"identifier": 1,
"displayName": "Baby Bedwell Lake Campground Tentpad 1",
"description": "Tentpad 1 at Baby Bedwell Lake campground, a designated backcountry camping area on the Bedwell Lake Trail in Strathcona Provincial Park.",
"location": {
"type": "point",
"coordinates": [
-125.605,
49.505
]
},
"imageUrls": [
"https://...",
"https://..."
],
"minMapZoom": 10,
"maxMapZoom": 20,
"creationDate": "2026-01-06T15:30:00.000Z",
"lastUpdated": "2026-01-06T15:30:00.000Z",
"version": 1,
"searchTerms": "baby bedwell lake, bedwell lake, strathcona park...",
"adminNotes": ""
}