wim

Record Identity

The root envelope of every WIM record. Carries the administrative, versioning, caching, and governance metadata that makes each record machine-addressable, auditable, and cache-safe across all downstream consumers.

WIM v1.0 31 fields 18 required
31
Total fields
18
Required
13
Optional
6
Field groups
4
Enum fields
Purpose
Root envelope

Every WIM record must include exactly one wim object. It is the outermost wrapper — consumers read this first to determine record version, validity window, and cache behaviour before parsing any other object.

Hierarchy position
Top-level · always present

The wim object sits at the root of the JSON document. All other objects — place, topology, status, accessibility, channels — are siblings at the same root level, not nested inside wim.

Standards alignment
No single governing standard

The wim object is a WIM-native construct. Its field conventions draw from established API design patterns.

RFC 7232 (ETags) BCP 47 (Language) ISO 8601 (Dates) RFC 4122 (UUID)
01 Versioning & Record Type 8 fields
version
string required

The WIM specification version this record was authored against. Consumers use this to select the correct parser and validate the record structure.

Pattern: semver major.minor — Current: "1.0"

"version": "1.0"
schema_version
string required

JSON Schema document version used to validate this record. Distinct from the WIM spec version — allows schema iterations within a spec version without breaking compatibility.

Pattern: YYYY-MM — Current: "2026-01"

"schema_version": "2026-01"
api_version
string required

The API version of the system that produced this record. Used by consumers to know which endpoint features and response formats apply.

Pattern: "v" + integer — Current: "v1"

"api_version": "v1"
record_id
UUID required

Globally unique, immutable identifier for this WIM record. Assigned on creation and never changes across revisions. Use this to reference the record from external systems.

Format: RFC 4122 UUID v4 — Immutable after creation

"record_id": "a3f47c12-8b2e-4d9a-b1f3-2c6e8d0f5a91"
record_type
enum required

Top-level classification of the entity this record describes. Drives which object schemas are required and which channel renderers apply.

destination route zone level building campus amenity exit
"record_type": "destination"
record_subtype
enum optional

Subclassification within a record type. Used to apply domain-specific rendering rules and routing logic beyond what the top-level type provides.

clinic ward pharmacy entrance reception emergency retail toilet
"record_subtype": "clinic"
record_status
enum required

Lifecycle status of this record. Controls whether the record is served to consumers and which downstream systems receive updates.

draft review published suspended retired archived
"record_status": "published"
record_scope
enum required

Visibility scope of the record. Determines which consumer systems and API clients are permitted to receive and cache this record.

public internal restricted confidential
"record_scope": "public"
02 Organisation & Scope 5 fields
tenant_id
UUID required

Identifier of the tenant (top-level account) that owns this record. Used for multi-tenant isolation — ensures records from different operators never cross-contaminate.

"tenant_id": "f1a2b3c4-0000-4000-a000-000000000001"
organisation_id
UUID required

Organisation sub-unit within a tenant that is responsible for this record. Enables different departments or facilities within a tenant to manage their own record sets independently.

"organisation_id": "b8e9f0a1-0000-4000-b000-000000000002"
site_id
UUID required

Physical site (campus or facility) this record belongs to. Ties the record into the IMDF site graph and determines which coordinate reference system applies.

"site_id": "c3d4e5f6-0000-4000-c000-000000000003"
namespace
string required

Logical namespace used to segment records within a site. Prevents name collisions between facilities sharing the same physical campus. Reverse-DNS convention recommended.

Pattern: lowercase, hyphens — Max: 64 chars

"namespace": "nl.umc.main-hospital"
canonical_uri
URI required

Stable, dereferenceable HTTPS URI for this record. Guaranteed not to redirect. Consumers use this as the permanent reference — safe to store in third-party systems and deep-link to.

Must resolve to: the current published record JSON

"canonical_uri": "https://wim.example.org/records/a3f47c12-8b2e-4d9a"
03 Temporal Bounds 8 fields
created_at
datetime required

UTC timestamp of when this record was first created. Set by the system on record creation and never modified. Used for audit purposes and chronological ordering.

Format: ISO 8601 — Timezone: always UTC (Z)

"created_at": "2024-01-15T09:00:00Z"
created_by
UUID required

UUID of the user account or service identity that created this record. May reference a human user or an automated import service. Immutable after creation.

"created_by": "usr-00000000-0001"
updated_at
datetime required

UTC timestamp of the most recent modification to any field in any object of this record. Updated automatically on every write. Primary field for cache invalidation and sync detection.

Format: ISO 8601 — Timezone: always UTC (Z)

"updated_at": "2026-04-22T14:30:00Z"
updated_by
UUID required

UUID of the user account or service identity responsible for the most recent modification. Updated on every write alongside updated_at.

"updated_by": "usr-00000000-0042"
published_at
datetime optional

UTC timestamp when this record was first transitioned to published status. Null while in draft or review. Does not reset if the record is later suspended and republished.

"published_at": "2026-04-22T15:00:00Z"
retired_at
datetime optional

UTC timestamp when this record was permanently retired. Once set, the record is no longer served by the live API. Null for all non-retired records.

"retired_at": null
valid_from
datetime optional

Start of the window during which this record is considered current and authoritative. Used for pre-scheduling record activations, e.g. a department opening on a future date.

"valid_from": "2026-01-01T00:00:00Z"
valid_until
datetime optional

End of the validity window. Consumers must not treat this record as authoritative past this timestamp. Used for temporary facilities, pop-up clinics, and seasonal services.

"valid_until": "2026-12-31T23:59:59Z"
04 Audit Trail 4 fields
revision_number
integer required

Monotonically increasing counter incremented on every write to this record. Starts at 1 on creation. Consumers use this to detect missed updates during a sync gap — a gap in numbers indicates skipped revisions.

Min: 1 — Never resets

"revision_number": 14
change_reason
string optional

Human-readable description of why this record was modified. Free text. Recommended for all changes affecting physical signage or routing — provides an audit paper trail for operations teams.

Max: 512 chars

"change_reason": "Room renumbered from A-02-143 to A-02-145 per estate works"
change_type
enum required

Classifies the nature of the change that produced this revision. Downstream systems use this to decide propagation urgency — a structural_change triggers immediate sign updates; a metadata_update may batch.

initial_creation content_update structural_change status_change metadata_update correction
"change_type": "structural_change"
checksum
string required

SHA-256 hash of the canonical serialisation of the full record payload (excluding the checksum and etag fields themselves). Consumers use this to verify record integrity after transport and to detect silent modifications.

Algorithm: SHA-256 — Encoding: lowercase hex

"checksum": "e3b0c44298fc1c149afbf4c8996fb924..."
05 Cache Control 2 fields
etag
string required

HTTP ETag value for this record version, following RFC 7232. Consumers pass this in If-None-Match headers to receive 304 Not Modified responses when the record has not changed. Dramatically reduces bandwidth on high-frequency polling.

Format: Quoted string per RFC 7232 — changes on every revision

"etag": "\"a3f47c12-rev14\""
cache_ttl
integer required

Recommended time-to-live for caching this record, in seconds. Set by the data owner based on expected change frequency. Consumers must not cache beyond this value. Physical signage systems should halve this value for safety.

Min: 30 — Max: 86400 (24h) — Default: 300

"cache_ttl": 300
06 Data Governance 6 fields
language_default
BCP 47 required

Default language for all free-text fields in this record. All text fields without an explicit language tag are assumed to be in this language. Follows BCP 47 language tags.

Format: ISO 639-1 + optional region subtag

"language_default": "en-GB"
data_owner
UUID required

UUID of the person or role accountable for the accuracy and completeness of this record. Receives notifications on validation failures and escalation alerts. Should reference a named individual, not a shared mailbox.

"data_owner": "usr-00000000-0099"
data_steward
UUID optional

UUID of the operational steward responsible for day-to-day record maintenance. Receives workflow tasks for pending updates. Distinct from data_owner — steward acts, owner is accountable.

"data_steward": "usr-00000000-0077"
source_system
string optional

Identifier of the originating system when this record is created via an automated import or integration (e.g. a Building Management System, CAFM, or CMDB). Useful for tracing data lineage and debugging conflicting updates.

Max: 64 chars — Convention: SYSTEM-SUBSYSTEM-ID

"source_system": "BMS-WARD-CAFM-01"
source_priority
integer optional

Priority weight used when the same record is fed from multiple source systems. Lower number = higher priority. When two systems update the same record simultaneously, the update from the lower source_priority wins.

Range: 1 (highest) – 100 (lowest) — Default: 50

"source_priority": 1
confidence_score
float optional

Data quality confidence score for this record, expressed as a float between 0.0 and 1.0. Computed automatically from field completeness, last-verified date, and source reliability scores. Records below 0.7 trigger a steward review workflow.

Range: 0.0 – 1.0 — Review threshold: < 0.7 — Computed, not editable

"confidence_score": 0.97
Complete wim object — example

A fully populated Record Identity object. Required fields are always present; optional fields shown with representative values.

wim-record-identity.json