Skip to content

CAP-CRM-ENT-019Resolve the forms and layouts used for CRM records

Markdown

CAP-CRM-ENT-019

Resolve the forms and layouts used for CRM records

Markdown
  • DocumentApproved
  • Product intentProposed
  • ImplementationObserved

KindCapabilityProduct areaCRMModuleEntitiesRevision1Approved byAndrewApproved at2026-10-22

Read atservices-crm 7ea48a41react-console da630758

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Each screen asks which definition is in force and gets one answer.Each section of the settings is changed only by its own administrator.
Surfaces
consoleportalapi

Controls

15 controls apply, from the corpus control catalogue.

TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-005 TC-AZ-006 TC-DAT-001 TC-DAT-003 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-003 TC-TEN-001 TC-TEN-002 TC-TEN-003

Repositories Read

RepositoryPaths
undefined:modules/entities/
undefined:modules/entities/tests/e2e/page-layouts.e2e.spec.js
undefined:modules/entities/tests/integration/services/persistence/crm-settings.integration.spec.js

Where It Lives

Permissions

KeyChecked atScope
crm.contact-layouts.readapitenant
crm.contact-layouts.updateapitenant
crm.organization-layouts.readapitenant
crm.organization-layouts.updateapitenant
crm.contacts.readapitenant
crm.organizations.readapitenant

Business Rules

7 rules, 7 to be proved before approval. A rule's product intent is derived from its origin: 0 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01must prove
Proposed
CRM settings reads return only authorized sections, omit forbidden sections rather than returning null and govern the default affiliation type with affiliation-type permissions.
permissionapi, servicetest
services-crm:modules/entities/tests/e2e/page-layouts.e2e.spec.js#is not answered the section it may not read: it is ABSENT, not null, so "forbidden" and "unset" never look alike
02must prove
Proposed
Settings updates require every named section’s update permission and make no change when any requested section is unauthorized.
permissionapi, servicetest
services-crm:modules/entities/tests/e2e/page-layouts.e2e.spec.js#writes NEITHER section for that refused save: the decision is made before anything is written
03must prove
Proposed
Settings updates check the read version, preserve unnamed sections and reject unknown properties.
validationapi, servicetest
04must prove
Proposed
Tenant or type layout assignments require tenant-owned definitions matching the record purpose and console or portal layout or form slot, with invalid assignments identified by section and field.
validationservicetest
services-crm:modules/entities/tests/integration/services/persistence/crm-settings.integration.spec.js#refuses a definition of the wrong kind: a console form in the console page layout slot
05must prove
Proposed
Type replacements preserve their five omitted layout and form assignments, while removing or nulling one assignment through a patch clears only that slot.
policyservicetest
services-crm:modules/entities/tests/e2e/page-layouts.e2e.spec.js#KEEPS all five through a PUT that does not mention them: an older client cannot wipe a tenant’s assignments
06must prove
Proposed
Effective definitions resolve each slot from the type override to the tenant default to not configured, distinguish create and edit forms, support console-only results and reject unknown types or missing record kinds.
calculationservicetest
services-crm:modules/entities/tests/e2e/page-layouts.e2e.spec.js#falls back to the tenant’s default for a kind the type leaves empty
07must prove
Proposed
Record readers can retrieve effective definitions, while tenant-default administration requires the separate layout permissions.
permissionapi, servicetest
services-crm:modules/entities/tests/e2e/page-layouts.e2e.spec.js#is refused the tenant’s defaults (403): reading a record does not make one an administrator of layouts

Scenarios

IdGivenWhenThenProvenance
01A tenant with a default contact layout and a Member type with its own edit form.A caller requests the effective Member edit-form and contact-layout definitions.The API returns the type’s edit-form assignment and the tenant’s default contact layout.test
services-crm:modules/entities/tests/e2e/page-layouts.e2e.spec.js#answers the type’s own definition for the kind the type assigns

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.