---
id: SCR-PFM-MTD-018
title: Related and owned records cards
route: /console/{tenantId}/crm/contacts/{id}, /console/{tenantId}/crm/organizations/{id} and /console/{tenantId}/objects/{objectKey}/{recordId}
  (cards)
surface: console
product_area: platform
module: metadata
revision: 1
status: draft
design_intent: confirmed
origin: PLAT-M6 plan approved 2026-10-21 (S01 to S12); PLAT-M5 D9 (tied to a record type shown on its page)
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
purpose: "Staff see relationships alongside the records they work on. Platform\u2019s related and owned cards are\
  \ hosted by native and custom record pages."
supports:
- JNY-PFM-MTD-004
- JNY-PFM-MTD-005
- CAP-PFM-MTD-018
- CAP-PFM-MTD-010
- CAP-PFM-MTD-019
permission: platform.associations.read to see links; .create, .update and .delete to change them; platform.custom-records.read
  per object for owned records
entry_from:
- The hosting record page (hosted by CRM's contact and organization pages, and SCR-PFM-MTD-016)
exits_to:
- The other record's page
- SCR-PFM-MTD-015 (?owner=)
- SCR-PFM-MTD-014
displays:
- field: One card per active relationship type naming the record's object, titled by the label from this side
  source: listAssociationTypes
- field: The other records with dates and primary mark; ended links on request
  source: listRecordAssociations (include_ended on Show Ended)
- field: Owned records, one section per object the record's type owns
  source: getCustomObjectsNavigation and the object's records
actions:
- label: Add
  operation_id: createAssociation
  permission: platform.associations.create
  confirm: false
- label: Edit dates, primary or notes
  operation_id: updateAssociation
  permission: platform.associations.update
  confirm: false
- label: End
  operation_id: endAssociation
  permission: platform.associations.update
  confirm: true
- label: Remove
  operation_id: deleteAssociation
  permission: platform.associations.delete
  confirm: true
- label: Show ended
  operation_id: listRecordAssociations
  permission: platform.associations.read
  confirm: false
- label: New owned record
  operation_id: 'none: opens the new record form with the owner'
  permission: platform.custom-records.create
  confirm: false
states:
- loading
- empty (a card with no links)
- absent (no card at all without permission or without a type)
- read-only (no link permission)
- error
validation:
- BR-CAP-PFM-MTD-018-01
- BR-CAP-PFM-MTD-018-03
- BR-CAP-PFM-MTD-018-05
- BR-CAP-PFM-MTD-018-07
- BR-CAP-PFM-MTD-018-08
- BR-CAP-PFM-MTD-018-10
- BR-CAP-PFM-MTD-018-11
patterns:
- record-view cards (custom-records.related, custom-records.owned)
- link dialogs
- confirmation dialogs for end and remove
component: components/custom-objects/related-records.tsx, owned-records.tsx, related-link-dialogs.tsx
evidence:
- 'react-console at baf6dae3: components/custom-objects/related-records.tsx, owned-records.tsx, related-link-dialogs.tsx;
  lib/custom-objects/related.ts; acceptance/custom-objects/playwright/journeys/PLAT-M6-S*.spec.ts'
controls: [TC-AI-001, TC-AI-002, TC-AI-003, TC-AI-004, TC-AI-006, TC-AI-007, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Related and owned records cards

## What the Screen Is For

Staff see relationships alongside the records they work on. Platform’s related and owned cards are hosted by native and custom record pages.

## What It Shows and Lets People Do

Cards present the opposite records with directional labels, dates and primary markers. Granted users maintain connections and request ended history; owned sections group custom entries and offer permitted creation.

## States and Errors

A caller without link-read reach receives no related card, including its heading. Categories without applicable types also omit cards; occupancy refusals explain the competing connection.

## Patterns It Must Respect

The existing cards register with the shared record-view engine and use link editing plus end and removal confirmations. Host layout remains responsible for their placement.
