Chapter 47: Assets

An asset is an individually identifiable item of property whose ownership can be recorded and transferred. Assets include houses, land, cars, boats, paintings, and expensive or unique items of jewellery. Unlike fungible goods, each asset has its own identity and may have its own ownership, valuation, and transfer history.

Assets are recorded in particular collections because the appropriate way to identify and index an asset depends on its kind. For example, real estate may be indexed by geographical partitions such as provinces, states, regions, suburbs, and streets. Vehicles may be indexed by a 17-character Vehicle Identification Number (VIN).


value AssetRegistration
{
    Person initialOwner;
    String identifier;
    String evidenceReference;
}

value OwnershipTransfer
{
    Person from;
    Person to;
    TransferReason reason;
    Contract contract?;

    constraints
    {
        from != to;
    }
}

value InheritanceTransfer
{
    OwnershipTransfer transfer;
    Person deceased;
    Contract will?;
    String authorityReference;
}

entity SecurityInterest
{
    NodeId node;
    Uint64 id;
    Asset asset;
    Loan loan;
    Person grantor;
    Person securedParty;
    Contract terms;

    key {node,id};
}

enum SecurityInterestAction
{
    registration,
    release,
    enforcement
}

value SecurityInterestEvent
{
    SecurityInterest securityInterest;
    SecurityInterestAction action;
}

value TheftReport
{
    Person reportedOwner;
    TimeStamp allegedTheftTime;
    String evidenceReference;
}

value AssetRecovery
{
    Person recoveredBy;
    String evidenceReference;
}

variant AssetEventVariant
{
    AssetRegistration registration;
    OwnershipTransfer ownershipTransfer;
    InheritanceTransfer inheritanceTransfer;
    TheftReport theftReport;
    AssetRecovery recovery;
    SecurityInterestEvent securityInterest;
}

entity AssetEvent
{
    Asset asset;
    Uint64 sequence;
    TimeStamp recordedTime;
    TimeStamp effectiveTime;
    Person recordedBy;
    AssetEventVariant details;

    key {asset,sequence};
}

abstract entity Asset
{
    NodeId node;
    Uint64 id;
    String description;
    AssetEvent event* where event.asset = this;

    key {node,id};
}

entity RealEstateAsset isa Asset
{
    NodeId node;
    Uint64 id;
    String description;
    AssetEvent event* where event.asset = this;
    String jurisdiction;
    String titleReference;

    key {jurisdiction,titleReference};
}

entity VehicleAsset isa Asset
{
    NodeId node;
    Uint64 id;
    String description;
    AssetEvent event* where event.asset = this;
    String vin;

    key {vin};
}

entity BoatAsset isa Asset
{
    NodeId node;
    Uint64 id;
    String description;
    AssetEvent event* where event.asset = this;
    String hullIdentificationNumber;

    key {hullIdentificationNumber};
}

entity ArtworkAsset isa Asset
{
    NodeId node;
    Uint64 id;
    String description;
    AssetEvent event* where event.asset = this;
}

entity JewelleryAsset isa Asset
{
    NodeId node;
    Uint64 id;
    String description;
    AssetEvent event* where event.asset = this;
}

entity OtherAsset isa Asset
{
    NodeId node;
    Uint64 id;
    String description;
    AssetEvent event* where event.asset = this;
}

value AssetRegistry
{
    RealEstateAsset realEstate*;
    VehicleAsset vehicle*;
    BoatAsset boat*;
    ArtworkAsset artwork*;
    JewelleryAsset jewellery*;
    OtherAsset other*;
}

Each concrete asset type implements the common Asset identity and event history while providing identifiers appropriate to that kind of property. The sequence number is allocated monotonically by the asset's authoritative node and gives the permanent order in which CATS accepted the events. The effectiveTime may differ from recordedTime, for example when an inheritance or court decision is registered after it took legal effect.

The history is append-only. An error, withdrawal, release, or reversal is represented by a later event rather than by changing or deleting an earlier event. Current ownership and the current state of any theft report or security interest are derived from the valid events in sequence order.