Skip to content

CAP-MBR-STR-006Maintain a unit’s identity and local details

Markdown

CAP-MBR-STR-006

Maintain a unit’s identity and local details

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationObserved

KindCapabilityProduct areaMembershipModuleOrganizational Structure, Membership Configuration and TermsRevision1

Read atservices-membership 5994c270react-console baf6dae3

The Formal Contract

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

Outcomes
Each unit has its own contact information and customer-specific values.Saved changes retain attribution and version information.
Surfaces
api
Intent sources
services-membership:AGENTS.md#Custom Fields Are Opt-In Per Entity: R2-ARCH-001 (Andrew, 2026-10-19; organizational units declare custom fields)

Controls

38 controls apply, from the corpus control catalogue.

TC-AVL-002 TC-AVL-003 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-005 TC-AZ-006 TC-CHG-001 TC-CHG-002 TC-CHG-003 TC-CHG-004 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-DAT-007 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-SEC-001 TC-SEC-004 TC-TEN-001 TC-TEN-002 TC-TEN-003

Permissions

KeyChecked atScope
membership.structure.readapitenant
membership.structure.manageapitenant
membership.application.accessapitenant

Business Rules

10 rules, 9 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
A unit code uses lowercase letters, digits and single underscores, is unique within the workspace and can change through detail replacement.
validationapi, service, databasetest
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › the refusals › refuses a code the tenant already has
02must prove
Proposed
Creation fixes the unit kind and validates placement; detail replacement cannot change kind, parent or status, while later tree operations change placement or status.
invariantapi, serviceobserved
03must prove
Proposed
Unit e-mail input is trimmed, normalized to lowercase and validated, with blank input stored as empty.
validationserviceobserved
04must prove
Proposed
Latitude must be between minus 90 and 90 and longitude between minus 180 and 180; other address and telephone details have no format validation.
validationdatabaseobserved
05must prove
Proposed
Unit detail replacement requires the version read and resets omitted ordinary fields to their defaults, while custom values change only for submitted fields.
validationdatabasedocumented
06must prove
Proposed
Organizational units accept customer-defined fields validated against unit definitions, with required values checked on creation.
origin: services-membership:AGENTS.md#Custom Fields Are Opt-In Per Entity: R2-ARCH-001 (Andrew, 2026-10-19; organizational units declare custom fields)
validationservice, databaseobserved
07must prove
Proposed
Single-unit reads include custom values, whereas ordinary unit lists and tree reads omit them.
policyapi, serviceobserved
08must prove
Proposed
Unit and parent-history changes retain attributed versions for audit and historical reconstruction.
calculationserviceobserved
09must prove
Proposed
Welcome-template selection is stored without an implemented sender.
invariantdatabasetest
services-membership:modules/structure/tests/integration/services/persistence/organizational-units.integration.spec.ts#organizational units in the database › the versions › writes a version of the unit for its creation, its update and its move, each with the actor of its context
10
Proposed
Inactive units allow detail replacement; merged units reject it.
policyserviceobserved

Scenarios

IdGivenWhenThenProvenance
01Staff are preparing Atlanta’s local record.They save mailing, geographic, contact and custom details together with visibility.A subsequent single-record read returns the saved details.test
services-membership:tests/acceptance/structure/MBR-ACC-0006.acceptance.ts#MBR-ACC-0006 a complete chapter, recorded and read back

Edge Cases

IdGivenWhenThenProvenance
02An integration expects omitted replacement fields to remain unchanged.It submits code, name and version while omitting optional details.Ordinary details return to defaults, while omitted custom values remain intact.test
services-membership:tests/acceptance/structure/MBR-ACC-0032.acceptance.ts#MBR-ACC-0032 a client that thinks PUT is a patch, and a unit deleted behind the service

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.