---
id: SCR-PFM-MTD-006
title: Contact console form designer
route: /console/{tenantId}/configuration/{module}/forms/console/contacts/{id}
surface: console
product_area: platform
module: metadata
revision: 1
status: draft
design_intent: proposed
origin: 'PLAT-M5 D17 (Andrew, 2026-10-19: forms and record views) for the form engine; services- platform:docs/layouts.md
  for storage'
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
purpose: Administrators arrange how staff enter contact information. The resulting named definition can serve contact
  creation or editing.
supports:
- CAP-PFM-MTD-008
- CAP-PFM-MTD-002
permission: crm.contact-layouts.read to open; crm.contact-layouts.create or .update to save
entry_from:
- SCR-PFM-MTD-005
- /console/{tenantId}/configuration/{module}/forms/console/contacts/new?from=default|blank|<id>
exits_to:
- SCR-PFM-MTD-005
displays:
- field: The stored form, or its diagnostics when it cannot be rendered
  source: getConsoleForm
- field: The contact's fields, standard and custom, with write access and requirement
  source: describeObject (contacts)
- field: A live preview
  source: shared form engine
actions:
- label: Save a new form
  operation_id: createConsoleForm
  permission: crm.contact-layouts.create
  confirm: false
- label: Save changes
  operation_id: updateConsoleForm
  permission: crm.contact-layouts.update
  confirm: false
states:
- loading
- error
- read-only
- diagnostics (stored form not renderable, kept unchanged)
validation:
- BR-CAP-PFM-MTD-008-01
- BR-CAP-PFM-MTD-008-02
- BR-CAP-PFM-MTD-008-07
- BR-CAP-PFM-MTD-008-12
patterns:
- PageLayout (full width, collapsed sidebar)
- form designer and builder host
- shared form engine preview
- EditorActionBar
- unsaved-changes guard
component: components/forms/designer/saved-contact-form.tsx, new-contact-form.tsx, contact-form-designer.tsx
evidence:
- 'react-console at baf6dae3: app/(console)/console/[tenantId]/configuration/[module]/forms/console/contacts/[id]/page.tsx
  and new/page.tsx; components/forms/designer/**; lib/forms/storage/console-forms.ts'
controls: [TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-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-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]
---

# Contact console form designer

## What the Screen Is For

Administrators arrange how staff enter contact information. The resulting named definition can serve contact creation or editing.

## What It Shows and Lets People Do

The designer loads the shared contact description, presents a live form preview and saves the complete document at its current version. Unsupported stored content is diagnosed instead of silently removed.

## States and Errors

Oversized documents are rejected, stale saves report conflict, and read-only callers can inspect without saving. Content diagnostics preserve the original definition.

## Patterns It Must Respect

The built form designer uses the full-width frame with a collapsed sidebar, shared renderer, action bar and unsaved-change guard.
