Assets Schema
Assets covers catalog structure, inventory objects, and movement or repair tracking.
Namespace
These tables should move into the assets PostgreSQL schema.
assets.asset_manufacturersassets.asset_typesassets.asset_modelsassets.assetsassets.asset_assignmentsassets.asset_circulationsassets.asset_repairs
Catalog Tables
assets.asset_manufacturers
- Primary key:
id - Required fields:
tenant_id,name - Unique key: (
tenant_id,name) - Foreign key:
tenant_id -> platform.tenants.id
assets.asset_types
- Primary key:
id - Required fields:
tenant_id,name - Optional field:
end_of_support_label - Unique key: (
tenant_id,name) - Foreign key:
tenant_id -> platform.tenants.id
assets.asset_models
- Primary key:
id - Required fields:
tenant_id,name,tracking_type,manufacturer_id,asset_type_id - Optional field:
end_of_support tracking_typecheck:serializedorcountable- Foreign keys:
tenant_id -> platform.tenants.idmanufacturer_id -> assets.asset_manufacturers.idasset_type_id -> assets.asset_types.id
Inventory Tables
assets.assets
- Primary key:
id - Required fields:
tenant_id,model_id,name,quantity - Optional fields:
project_id,serial_number - Check:
quantity > 0 - Foreign keys:
tenant_id -> platform.tenants.idmodel_id -> assets.asset_models.idproject_id -> public.projects.id(ON DELETE SET NULL)
assets.asset_assignments
- Primary key:
id - Required fields:
tenant_id,asset_id,start_date - Optional fields:
person_id,location_id,end_date - Check: exactly one of
person_idorlocation_idmust be set - Check:
end_dateis null orend_date >= start_date - Foreign keys:
tenant_id -> platform.tenants.idasset_id -> assets.assets.idperson_id -> census.persons.idlocation_id -> locations.locations.id
assets.asset_circulations
- Primary key:
id - Required fields:
tenant_id,asset_id,circulation_type,occurred_at - Optional fields:
person_id,location_id,notes - Foreign keys:
tenant_id -> platform.tenants.idasset_id -> assets.assets.idperson_id -> census.persons.idlocation_id -> locations.locations.id
- Allowed
circulation_typevalues:issued_to_personreturned_from_personmoved_to_locationreceived_at_locationlocation_confirmation
Repair Table
assets.asset_repairs
- Primary key:
id - Required fields:
tenant_id,asset_id,issue_id,title,status,priority,reported_at - Optional fields:
description,location_id,resolved_at - Check: non-empty title
- Check: valid status and priority enums
- Check:
resolved_atis null orresolved_at >= reported_at - Foreign keys:
tenant_id -> platform.tenants.idasset_id -> assets.assets.idissue_id -> public.issues.idlocation_id -> locations.locations.id
Relationship Notes
- Assets belong to models, and models belong to manufacturer + type.
- Assets are owned by a tenant and can optionally be grouped by a project.
- Assignments and circulations are separate: assignment stores ownership period; circulation stores event timeline.
- Repairs are linked across schemas to parent service issues using
assets.asset_repairs.issue_id.