Skip to content

CAP-CRM-REG-009Preserve a deliberate regional exception

Markdown

CAP-CRM-REG-009

Preserve a deliberate regional exception

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationObserved

KindCapabilityProduct areaCRMModuleRegionsRevision2

Read atservices-crm a8d1364freact-console baf6dae3

The Formal Contract

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

Outcomes
Deliberate exceptions survive address changes and recalculation.Releasing an exception restores eligibility for address-based placement.
Surfaces
consoleapi
Intent sources
services-crm:docs/milestones/CRM-M1-contacts-and-organizations.plan.md#CRM-ACC-0023services-crm:docs/milestones/CRM-M1-contacts-and-organizations.plan.md#CRM-ACC-0120services-crm:docs/migrations/crm-regions/README.md#Behaviour changes, Not changed (kept as Rhythm 1.0 did; accepted by Andrew 2026-10-08)services-crm:docs/migrations/crm-regions/README.md#Behaviour changes, item 3 (Andrew's requirement for the port: a region the workspace lacks is refused and a region in use cannot be deleted)

Controls

18 controls apply, from the corpus control catalogue.

TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-AZ-006 TC-DAT-001 TC-DAT-002 TC-DAT-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

Permissions

KeyChecked atScope
crm.contacts.updateapitenant
crm.organizations.updateapitenant

Business Rules

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

IdRuleKindEnforced atProvenance
01must prove
Confirmed
A record with automatic assignment overridden retains its region through ordinary assignment and recalculation.
no proof recorded yet
policyservicetest
services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment.integration.spec.js#manual regions and the override › never changes the region of a contact that overrides automatic assignment
02must prove
Proposed
Without an override, a manually chosen region survives an unchanged deciding address but yields to matching after that address changes.
origin: services-crm:docs/migrations/crm-regions/README.md#Behaviour changes, Not changed (kept as Rhythm 1.0 did; accepted by Andrew 2026-10-08)
no proof recorded yet
policyservicetest
services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment.integration.spec.js#manual regions and the override › replaces a manual region when the deciding address changes
03must prove
Confirmed
Releasing the override reconciles the current deciding address, including changes made while automatic placement was held.
no proof recorded yet
policyservicetest
services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment.integration.spec.js#manual regions and the override › a contact moved while overridden, then switched back to automatic › assigns the region of the address it moved to once the override is off
04
Proposed
Enabling the override alone causes no assignment change.
policyserviceobserved
05must prove
Proposed
Saving a record with a region outside its workspace is rejected without committing the record.
origin: services-crm:docs/migrations/crm-regions/README.md#Behaviour changes, item 3 (Andrew's requirement for the port: a region the workspace lacks is refused and a region in use cannot be deleted)
no proof recorded yet
validationservice, databasetest
06
Proposed
Region references retained from before the region constraints were introduced remain accepted.
origin: services-crm:docs/migrations/crm-regions/README.md#Behaviour changes, item 3 (Andrew's requirement for the port: a region the workspace lacks is refused and a region in use cannot be deleted)
policydatabasedocumented
07
Proposed
Organizations do not inherit a region through their hierarchy; placement uses each organization’s own address.
invariantservicedocumented

Scenarios

IdGivenWhenThenProvenance
01A Phoenix member deliberately belongs to the Nevada chapter.The coordinator selects Nevada, enables the override and later edits the Arizona address.The member retains Nevada.test
02The member’s manual exception is no longer needed.The coordinator releases the override.Address-based reconciliation can place the member in Arizona.test

Edge Cases

IdGivenWhenThenProvenance
03An organization changed addresses while its placement was held.Staff release its override without another address edit.Assignment evaluates the current address.test
services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment.integration.spec.js#manual regions and the override › an organization moved while overridden, then switched back to automatic › assigns the region of the address it moved to once the override is off

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.