---
id: CAP-PFM-CSH-018
title: Follow a record reference to the right page
feature: FEAT-PFM-CSH-03
product_area: platform
module: console-shell
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes: []
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
intent_sources: []
purpose: >-
  Shared record references take staff to a recognizable record page when the console can construct a
  suitable destination.
outcomes:
  - References use the same record destinations across the console.
  - An unusable reference remains text rather than leading to an invented record page.
concepts:
  - CON-PFM-CSH-003
actors:
  - ACT-PFM-001
  - ACT-PFM-002
  - ACT-PFM-004
  - ACT-PFM-005
surfaces:
  - console
preconditions: []
postconditions: []
permissions: []
rules:
  - id: BR-CAP-PFM-CSH-018-01
    proved_by: [ATS-PFM-CSH-018-01, TST-PFM-CSH-020]
    statement: >-
      Record references resolve through the shared record-type catalogue to a record page in the
      workspace named by the console address.
    kind: policy
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: 'react-console:lib/console/record-types.ts:recordHref, recordDestination'
    origin: none
  - id: BR-CAP-PFM-CSH-018-02
    proved_by: [ATS-PFM-CSH-018-01, TST-PFM-CSH-020]
    statement: >-
      A built-in record reference has no destination when its screen is planned, the person lacks
      its read permission, or the record needs a parent identifier the reference does not supply.
    kind: permission
    enforced_at:
      - console
    must_prove: true
    provenance: test
    source: >-
      react-console:lib/console/__tests__/record-destination.test.ts#answers null for a child noun,
      whose URL needs a parent id
    origin: none
  - id: BR-CAP-PFM-CSH-018-03
    proved_by: [ATS-PFM-CSH-018-02, ATS-PFM-CSH-018-04]
    statement: >-
      A custom record reference has a destination only when its definition is already known to the
      console and the person passes the general custom-record read check.
    kind: permission
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: 'react-console:lib/console/record-types.ts:customObjectDestination'
    origin: none
  - id: BR-CAP-PFM-CSH-018-04
    proved_by: [ATS-PFM-CSH-018-03]
    statement: >-
      A reference to an unrecognized record type refuses route construction, while an unrecognized
      object reference returns no destination.
    kind: validation
    enforced_at:
      - console
    must_prove: true
    provenance: observed
    source: 'react-console:lib/console/record-types.ts:recordHref, recordDestination'
    origin: none
  - id: BR-CAP-PFM-CSH-018-05
    proved_by: [ATS-PFM-CSH-018-01, TST-PFM-CSH-020]
    statement: >-
      Record identifiers are encoded as address values so punctuation cannot create a different page
      path.
    kind: invariant
    enforced_at:
      - console
    must_prove: true
    provenance: test
    source: >-
      react-console:lib/console/__tests__/record-destination.test.ts#escapes the record id into the
      path
    origin: none
scenarios:
  - id: SC-CAP-PFM-CSH-018-01
    given: A contact reference is visible to a person who can read contacts.
    when: The console resolves the reference.
    then: It supplies the contact page in the current address workspace.
    provenance: test
    source: >-
      react-console:lib/console/__tests__/record-destination.test.ts#opens a contact and an
      organization on their record screens
  - id: SC-CAP-PFM-CSH-018-02
    given: A record requires a parent identity that the reference does not carry.
    when: The console resolves the reference.
    then: It supplies no link.
    provenance: test
    source: >-
      react-console:lib/console/__tests__/record-destination.test.ts#answers null for a child noun,
      whose URL needs a parent id
edge_cases: []
constraints: []
depends_on:
  - CAP-PFM-CSH-009
  - CAP-PFM-CSH-014
related:
  - CAP-PFM-CSH-008
journeys: []
open_questions: []
evidence:
  - >-
    react-console:lib/console/record-types.ts (record-type lookup, object lookup, permission and
    build checks, custom fallback); react-console:lib/console/__tests__/record-destination.test.ts
controls: [TC-AVL-001, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-DAT-001, TC-DAT-003, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-PI-001, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
exercised_by: [FAS-PFM-CSH-03-02]
suites: [TST-PFM-CSH-020]
---
# Follow a record reference to the right page

## Purpose

Shared references give staff one dependable way to open a record.

## How It Works

A screen presents a reference to a record. The shared catalogue identifies the kind of record and its destination. Read authority and screen availability determine whether a useful link can be supplied. A reference that cannot produce a suitable destination remains text. Custom record types participate when their definitions are known.

## Relationships

- Console addresses provide workspace binding.
- Application access supplies permission checks.
