> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sensorup.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Model: CAM Asset Model

> The complete data dictionary for the Connected Asset Management (CAM) Model, detailing how core assets and customer-provided extensions are stored and linked.

This document describes the **CAM Model**, which creates a unified and extensible representation of various company assets. The model is built on two primary storage partitions in the database: one for the **Core Asset State** and others for customer-provided **Asset Extensions**.

The processes of **DUMP** (syncing to S3) and **seedSync** (ingesting and linking data) ensure data integrity and performance.

***

## Partition 1: Core Asset State

This partition (`<assetTypeId>`) holds the core, enriched properties of an asset, serving as the central record. It is built by combining foundational data with synced information from various extensions.

<AccordionGroup>
  <Accordion title="assetId — Asset ID">
    * **Description**: The unique, system-generated primary key (sort key) for each asset record across all partitions.
    * **Data Type**: `UUID`
    * **Example**: `a1b2c3d4-e5f6-7890-1234-567890abcdef`
  </Accordion>

  <Accordion title="Core Properties (id, name, etc.)">
    * **Description**: Standard, foundational attributes of any asset, such as its name and hierarchical references.
    * **Data Type**: Varies (`String`, `Integer`, etc.)
    * **Notes**: Includes default properties and any attributes defined through mutations.
  </Accordion>

  <Accordion title="Connection Properties (e.g., suSiteId, FLOC)">
    * **Description**: A property that links the core asset to its extension data. It is created on the core asset using the `stateProperty` defined in an extension's `connectionDetails`. This field holds the value that is used to join with the extension's `idProperty`.
    * **Data Type**: `String`
    * **Example**: `FLOC-12345`
  </Accordion>

  <Accordion title="Enriched Properties (from stateProperties)">
    * **Description**: Core asset properties that are populated or "enriched" by data from an extension dataset, as defined in the extension's `stateProperties` mapping. This allows customer data to fill in the asset's official state.
    * **Data Type**: Varies (`String`, `Integer`, `Float`)
    * **Example**: The `name` field might be populated from a `SAP_FUNCTIONAL_LOCATION_DESCRIPTION` column in a customer's dataset.
  </Accordion>

  <Accordion title="geometry — GeoJSON Geometry">
    * **Description**: The official GeoJSON geometry for the asset. This property is populated from the column specified in an extension's `geometryColumn` definition.
    * **Data Type**: `String` (GeoJSON)
    * **Example**: `"{ 'type': 'Point', 'coordinates': [-104.9903, 39.7392] }"`
  </Accordion>

  <Accordion title="Component-Defined Properties (e.g., isAttributable)">
    * **Description**: Fields added and managed by other internal components or backend services that interact with the asset model.
    * **Data Type**: Varies (`Boolean`, `String`)
  </Accordion>
</AccordionGroup>

***

## Partition 2+: Asset Extensions

Each extension has a dedicated partition (`<assetTypeId>:<extensionId>`) that stores the raw, unmodified data provided by the customer. This data is read-only within the CAM model and serves as the source for enriching the Core Asset State.

<AccordionGroup>
  <Accordion title="assetId — Asset ID">
    * **Description**: The unique primary key (sort key) that links the extension record back to the corresponding record in the Core Asset State partition. This ID is established during the `seed` and `seedExtension` processes.
    * **Data Type**: `UUID`
    * **Example**: `a1b2c3d4-e5f6-7890-1234-567890abcdef`
  </Accordion>

  <Accordion title="Extension Data Properties">
    * **Description**: All other columns and values provided in the customer's source dataset for the extension. These fields are not directly mutable and reflect the customer's data "as-is."
    * **Data Type**: Varies (Depends on customer data)
    * **Notes**: The specific fields in this partition are dynamic and match the schema of the customer's source file. The `seedSync` process uses this data to update the Core Asset State.
  </Accordion>
</AccordionGroup>
