---
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
---

# ID Registry: CRM → Regions

This ledger reserves the module’s artifact and row identifiers before authoring. Existing identifiers remain assigned permanently, including those in retired artifacts. CRM actors use the shared product-area series; Regions creates no additional actor.

## Series

| Series | Allocated | Next free |
|---|---|---|
| `MOD-CRM-REG` | the module charter | — |
| `FEAT-CRM-REG-` | 01 to 04 | 05 |
| `CON-CRM-REG-` | 001 to 004 | 005 |
| `ACT-CRM-` | 001 to 005 (product-area wide; none added by this module) | 006 |
| `CAP-CRM-REG-` | 001 to 015 | 016 |
| `JNY-CRM-REG-` | 001 to 005 | 006 |
| `ATS-CRM-REG-` | 001 to 015 (one per capability, same number) | 016 |
| `FND-CRM-REG-` | 001 to 061 | 062 |
| `OQ-CRM-REG-` | 001 to 005 | 006 |
| `DOM-CRM-REG-` | 001 to 004 (one per Key Concept, the same number) | 005 |
| `STATE-CRM-REG-` | 001 to 004 | 005 |
| `WF-CRM-REG-` | 001 to 005 | 006 |
| `SVC-CRM-REG-` | `SVC-CRM-REG-regions` (source module `modules/regions`) | — |
| `SCR-CRM-REG-` | 001 to 003 | 004 |
| `ADR-CRM-REG-` | 001 to 013 | 014 |
| `FAS-CRM-REG-` | 01 to 04 (same numbers as the features) | 05 |
| `TST-CRM-REG-` | 001 to 068 | 069 |
| `IOP-CRM-REG-` | none allocated: the module asks no model a question | 001 |

## Rows Inside Artifacts

| Capability | Title | Rules (`BR-…-NN`) | Scenarios and edge cases (`SC-…-NN`) | Next free BR | Next free SC |
|---|---|---|---|---|---|
| `CAP-CRM-REG-001` | Maintain the region catalogue | 01 to 13 | 01 to 04 | 14 | 05 |
| `CAP-CRM-REG-002` | Retire regions while preserving their references | 01 to 11 | 01 to 03 | 12 | 04 |
| `CAP-CRM-REG-003` | Configure automatic placement and its address sources | 01 to 14 | 01 to 03 | 15 | 04 |
| `CAP-CRM-REG-004` | Build the geographic assignment policy | 01 to 14 | 01 to 03 | 15 | 04 |
| `CAP-CRM-REG-005` | Maintain individual rules alongside the shared policy | 01 to 11 | 01 to 03 | 12 | 04 |
| `CAP-CRM-REG-006` | Determine an address’s geographic region | 01 to 12 | 01 to 05 | 13 | 06 |
| `CAP-CRM-REG-007` | Check an address against the saved policy | 01 to 09 | 01 to 02 | 10 | 03 |
| `CAP-CRM-REG-008` | Keep placements aligned with address changes | 01 to 14 | 01 to 03 | 15 | 04 |
| `CAP-CRM-REG-009` | Preserve a deliberate regional exception | 01 to 07 | 01 to 03 | 08 | 04 |
| `CAP-CRM-REG-010` | Identify placements that need recalculation | 01 to 10 | 01 to 02 | 11 | 03 |
| `CAP-CRM-REG-011` | Apply the current policy across existing records | 01 to 12 | 01 to 03 | 13 | 04 |
| `CAP-CRM-REG-012` | Monitor recalculation and recover from failure | 01 to 09 | 01 to 02 | 10 | 03 |
| `CAP-CRM-REG-013` | Restrict regional work to authorised users | 01 to 08 | 01 to 02 | 09 | 03 |
| `CAP-CRM-REG-014` | Import a catalogue of regions | 01 to 06 | 01 to 01 | 07 | 02 |
| `CAP-CRM-REG-015` | Share regions through record references and exports | 01 to 06 | 01 to 01 | 07 | 02 |

| Journey | Title | Assertions (`AS-…-NN`) | Next free AS |
|---|---|---|---|
| `JNY-CRM-REG-001` | An administrator establishes geographic placement | 01 to 03 | 04 |
| `JNY-CRM-REG-002` | An administrator applies revised coverage to existing records | 01 to 03 | 04 |
| `JNY-CRM-REG-003` | A coordinator maintains and releases a regional exception | 01 to 02 | 03 |
| `JNY-CRM-REG-004` | An administrator retires and removes a referenced region | 01 to 02 | 03 |
| `JNY-CRM-REG-005` | An organization address change updates linked placements | 01 to 01 | 02 |

| Acceptance Test Set | Scope | Scenarios (`ATS-…-NN`) | Next free |
|---|---|---|---|
| `ATS-CRM-REG-001` | `CAP-CRM-REG-001` | 01 to 11 | 12 |
| `ATS-CRM-REG-002` | `CAP-CRM-REG-002` | 01 to 08 | 09 |
| `ATS-CRM-REG-003` | `CAP-CRM-REG-003` | 01 to 09 | 10 |
| `ATS-CRM-REG-004` | `CAP-CRM-REG-004` | 01 to 11 | 12 |
| `ATS-CRM-REG-005` | `CAP-CRM-REG-005` | 01 to 09 | 10 |
| `ATS-CRM-REG-006` | `CAP-CRM-REG-006` | 01 to 15 | 16 |
| `ATS-CRM-REG-007` | `CAP-CRM-REG-007` | 01 to 08 | 09 |
| `ATS-CRM-REG-008` | `CAP-CRM-REG-008` | 01 to 16 | 17 |
| `ATS-CRM-REG-009` | `CAP-CRM-REG-009` | 01 to 06 | 07 |
| `ATS-CRM-REG-010` | `CAP-CRM-REG-010` | 01 to 09 | 10 |
| `ATS-CRM-REG-011` | `CAP-CRM-REG-011` | 01 to 11 | 12 |
| `ATS-CRM-REG-012` | `CAP-CRM-REG-012` | 01 to 08 | 09 |
| `ATS-CRM-REG-013` | `CAP-CRM-REG-013` | 01 to 08 | 09 |
| `ATS-CRM-REG-014` | `CAP-CRM-REG-014` | 01 to 05 | 06 |
| `ATS-CRM-REG-015` | `CAP-CRM-REG-015` | 01 to 03 | 04 |

## Design Rows Inside Artifacts

| Domain Object | Title | Invariants (`INV-…-NN`) | Next free |
|---|---|---|---|
| `DOM-CRM-REG-001` | Region | 01 to 08 | 09 |
| `DOM-CRM-REG-002` | Assignment Policy | 01 to 10 | 11 |
| `DOM-CRM-REG-003` | Regional Placement | 01 to 08 | 09 |
| `DOM-CRM-REG-004` | Recalculation Run | 01 to 07 | 08 |

## Allocation Order

Initial allocation reserves features, concepts, capabilities with acceptance sets, and journeys. Findings and questions follow their discovery order. Examination additionally reserves the rule-version reset and seven findings before adding their rows. The design draft (job crm-regions-desi-draft-1, 2026-10-23) reserves the design series above, findings 024 to 030 and open questions 003 to 005 before writing any design file.

## Examination Allocation Erratum

The initial examination allocation increments the address-settings rule series instead of the geographic-policy rule series. The unused address-settings rule reservation remains permanent and is not reused. This correction records the geographic-policy version-reset rule in its proper series; its ledger correction follows the rule’s initial authoring, which is a deviation from allocation-before-authoring.

| Reserved Identifier | Disposition |
|---|---|
| `BR-CAP-CRM-REG-003-14` | Reserved but unused after the allocation error; never reused. |
| `BR-CAP-CRM-REG-004-14` | Whole-policy replacement resets individual rule versions. |

## Design Examination Allocations

The OpenAI examination reserves findings 031 through 040 before recording the missing inputs, concurrency limits, screen gaps and evidence corrections. No design identifiers change, and no inference operation is allocated because the scoped callers make no model request.

## Testing Back-Fill Allocations

The testing pass reserves four feature suites and their five scenarios each, the executable suites below, and new capability scenarios before authoring. Findings cover missing category, transition, permission and executable proofs; they do not establish product approval.

| Suite | Scenarios | Next Free |
|---|---|---|
| `FAS-CRM-REG-01` | 01 to 05 | 06 |
| `FAS-CRM-REG-02` | 01 to 05 | 06 |
| `FAS-CRM-REG-03` | 01 to 05 | 06 |
| `FAS-CRM-REG-04` | 01 to 05 | 06 |

| Executable Suite | Repository | File |
|---|---|---|
| `TST-CRM-REG-001` | react-console | `acceptance/crm/playwright/journeys/adversarial/CRM-ACC-0749.spec.ts` |
| `TST-CRM-REG-002` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0311.spec.ts` |
| `TST-CRM-REG-003` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0318.spec.ts` |
| `TST-CRM-REG-004` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0321.spec.ts` |
| `TST-CRM-REG-005` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0333.spec.ts` |
| `TST-CRM-REG-006` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0357.spec.ts` |
| `TST-CRM-REG-007` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0358.spec.ts` |
| `TST-CRM-REG-008` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0359.spec.ts` |
| `TST-CRM-REG-009` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0360.spec.ts` |
| `TST-CRM-REG-010` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0361.spec.ts` |
| `TST-CRM-REG-011` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0362.spec.ts` |
| `TST-CRM-REG-012` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0364.spec.ts` |
| `TST-CRM-REG-013` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0365.spec.ts` |
| `TST-CRM-REG-014` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0366.spec.ts` |
| `TST-CRM-REG-015` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0369.spec.ts` |
| `TST-CRM-REG-016` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0372.spec.ts` |
| `TST-CRM-REG-017` | react-console | `acceptance/crm/playwright/journeys/configuration/CRM-ACC-0373.spec.ts` |
| `TST-CRM-REG-018` | react-console | `acceptance/crm/playwright/journeys/contacts/CRM-ACC-0001.spec.ts` |
| `TST-CRM-REG-019` | react-console | `acceptance/crm/playwright/journeys/contacts/CRM-ACC-0011.spec.ts` |
| `TST-CRM-REG-020` | react-console | `acceptance/crm/playwright/journeys/contacts/CRM-ACC-0023.spec.ts` |
| `TST-CRM-REG-021` | react-console | `acceptance/crm/playwright/journeys/contacts/CRM-ACC-0058.spec.ts` |
| `TST-CRM-REG-022` | react-console | `acceptance/crm/playwright/journeys/contacts/CRM-ACC-0068.spec.ts` |
| `TST-CRM-REG-023` | react-console | `acceptance/crm/playwright/journeys/data-operations/CRM-ACC-0649.spec.ts` |
| `TST-CRM-REG-024` | react-console | `acceptance/crm/playwright/journeys/organizations/CRM-ACC-0100.spec.ts` |
| `TST-CRM-REG-025` | react-console | `acceptance/crm/playwright/journeys/organizations/CRM-ACC-0103.spec.ts` |
| `TST-CRM-REG-026` | react-console | `acceptance/crm/playwright/journeys/organizations/CRM-ACC-0106.spec.ts` |
| `TST-CRM-REG-027` | react-console | `acceptance/crm/playwright/journeys/organizations/CRM-ACC-0109.spec.ts` |
| `TST-CRM-REG-028` | react-console | `acceptance/crm/playwright/journeys/organizations/CRM-ACC-0119.spec.ts` |
| `TST-CRM-REG-029` | react-console | `acceptance/crm/playwright/journeys/organizations/CRM-ACC-0120.spec.ts` |
| `TST-CRM-REG-030` | react-console | `acceptance/crm/playwright/journeys/organizations/CRM-ACC-0129.spec.ts` |
| `TST-CRM-REG-031` | react-console | `acceptance/crm/playwright/journeys/security/CRM-ACC-0548.spec.ts` |
| `TST-CRM-REG-032` | react-console | `acceptance/crm/playwright/journeys/security/CRM-ACC-0549.spec.ts` |
| `TST-CRM-REG-033` | react-console | `acceptance/crm/playwright/journeys/security/CRM-ACC-0550.spec.ts` |
| `TST-CRM-REG-034` | react-console | `acceptance/crm/playwright/journeys/security/CRM-ACC-0575.spec.ts` |
| `TST-CRM-REG-035` | react-console | `components/regions/__tests__/assignment-draft.test.ts` |
| `TST-CRM-REG-036` | react-console | `components/regions/__tests__/assignment-rules-editor.test.tsx` |
| `TST-CRM-REG-037` | react-console | `components/regions/__tests__/assignment-rules-view.test.tsx` |
| `TST-CRM-REG-038` | react-console | `components/regions/__tests__/editor-drawers.test.tsx` |
| `TST-CRM-REG-039` | react-console | `components/regions/__tests__/recalculation.test.tsx` |
| `TST-CRM-REG-040` | react-console | `components/regions/__tests__/regions-row-menu.test.tsx` |
| `TST-CRM-REG-041` | react-console | `components/regions/__tests__/regions-screen.test.tsx` |
| `TST-CRM-REG-042` | react-console | `components/regions/__tests__/rules-tab.test.tsx` |
| `TST-CRM-REG-043` | react-console | `components/regions/__tests__/tabs.test.ts` |
| `TST-CRM-REG-044` | react-console | `components/regions/__tests__/test-address-dialog.test.tsx` |
| `TST-CRM-REG-045` | react-console | `e2e/dev/regions.dev.spec.ts` |
| `TST-CRM-REG-046` | react-console | `lib/configuration/regions.test.ts` |
| `TST-CRM-REG-047` | services-crm | `modules/regions/tests/e2e/regions.e2e.spec.js` |
| `TST-CRM-REG-048` | services-crm | `modules/regions/tests/integration/db/region-assignment-settings.table.integration.spec.js` |
| `TST-CRM-REG-049` | services-crm | `modules/regions/tests/integration/db/regions.table.integration.spec.js` |
| `TST-CRM-REG-050` | services-crm | `modules/regions/tests/integration/services/persistence/region-assignment-settings.integration.spec.js` |
| `TST-CRM-REG-051` | services-crm | `modules/regions/tests/integration/services/persistence/region-assignment-settings.queries.integration.spec.js` |
| `TST-CRM-REG-052` | services-crm | `modules/regions/tests/integration/services/persistence/region-recalculations.integration.spec.js` |
| `TST-CRM-REG-053` | services-crm | `modules/regions/tests/integration/services/persistence/region-recalculations.queries.integration.spec.js` |
| `TST-CRM-REG-054` | services-crm | `modules/regions/tests/integration/services/persistence/regions.integration.spec.js` |
| `TST-CRM-REG-055` | services-crm | `modules/regions/tests/integration/services/persistence/regions.queries.integration.spec.js` |
| `TST-CRM-REG-056` | services-crm | `modules/regions/tests/integration/services/region-assignment/region-assignment-delivery.integration.spec.js` |
| `TST-CRM-REG-057` | services-crm | `modules/regions/tests/integration/services/region-assignment/region-assignment-rules.integration.spec.js` |
| `TST-CRM-REG-058` | services-crm | `modules/regions/tests/integration/services/region-assignment/region-assignment.integration.spec.js` |
| `TST-CRM-REG-059` | services-crm | `modules/regions/tests/integration/services/region-assignment/region-recalculation-errors.integration.spec.js` |
| `TST-CRM-REG-060` | services-crm | `modules/regions/tests/legacy/rolodex-regions/tests/e2e/assign-region.e2e.spec.js` |
| `TST-CRM-REG-061` | services-crm | `modules/regions/tests/legacy/rolodex-regions/tests/e2e/recalculate-regions.e2e.spec.js` |
| `TST-CRM-REG-062` | services-crm | `modules/regions/tests/legacy/rolodex-regions/tests/integration/assign-region.int.spec.js` |
| `TST-CRM-REG-063` | services-crm | `modules/regions/tests/legacy/rolodex-regions/tests/unit/logic/assign-region.unit.spec.js` |
| `TST-CRM-REG-064` | services-crm | `modules/regions/tests/legacy/rolodex-regions/tests/unit/logic/calculate-region.unit.spec.js` |
| `TST-CRM-REG-065` | services-crm | `modules/regions/tests/unit/region-matching.spec.js` |
| `TST-CRM-REG-066` | services-crm | `tests/e2e/dev/regions.dev.spec.ts` |
| `TST-CRM-REG-067` | services-crm | `tests/unit/regions-authorization.spec.ts` |

## Control Backfill Allocations

| Id | Purpose |
|---|---|
| `FND-CRM-REG-041` | The regional declaration inherits the service’s internal-use classification without a separate classification for geographic processing that reads personal address information and records its results. |
| `FND-CRM-REG-042` | Regional locks change through ordinary record writes and imports without a dedicated permission or append-only lock-change event; regional definitions and geographic policy retain only their latest modification attribution. |
| `FND-CRM-REG-043` | Settings replacement accepts an omitted version, and whole-policy replacement recreates retained rules at their initial version; a stale individual edit can therefore pass after a newer complete policy save. |
| `FND-CRM-REG-044` | The recalculation screen drops polling and history failures from its returned state and does not restore a failed historical run on reload, leaving the customer without the complete visible failure and recovery outcome. |
| `FND-CRM-REG-045` | Final-delivery failure settlement is best effort; if recording failure also fails, a recalculation can remain running after its delivery is dead-lettered, with no regional recovery operation to settle it. |

## Allocation Collision Resolution

The default-branch merge introduces five landed control findings while this testing draft is uncommitted. Their permanent identifiers remain unchanged; testing coverage findings are allocated from the new next-free range before the draft references are corrected.

| Coverage Finding | Capability |
|---|---|
| `FND-CRM-REG-046` | `CAP-CRM-REG-001` |
| `FND-CRM-REG-047` | `CAP-CRM-REG-002` |
| `FND-CRM-REG-048` | `CAP-CRM-REG-003` |
| `FND-CRM-REG-049` | `CAP-CRM-REG-004` |
| `FND-CRM-REG-050` | `CAP-CRM-REG-005` |
| `FND-CRM-REG-051` | `CAP-CRM-REG-006` |
| `FND-CRM-REG-052` | `CAP-CRM-REG-007` |
| `FND-CRM-REG-053` | `CAP-CRM-REG-008` |
| `FND-CRM-REG-054` | `CAP-CRM-REG-009` |
| `FND-CRM-REG-055` | `CAP-CRM-REG-010` |
| `FND-CRM-REG-056` | `CAP-CRM-REG-011` |
| `FND-CRM-REG-057` | `CAP-CRM-REG-012` |
| `FND-CRM-REG-058` | `CAP-CRM-REG-013` |
| `FND-CRM-REG-059` | `CAP-CRM-REG-014` |
| `FND-CRM-REG-060` | `CAP-CRM-REG-015` |

## Source-Audit Allocations

The final source audit reserves the coverage-analysis unit suite, four additional matching scenarios, a saved-preview scenario and a finding for contradictory acceptance expectations before writing them.

| Identifier | Purpose |
|---|---|
| `TST-CRM-REG-068` | Console geographic coverage analysis unit suite. |
| `ATS-CRM-REG-006-12` | Recognized input presence and fallback. |
| `ATS-CRM-REG-006-13` | Reversed geographic intervals. |
| `ATS-CRM-REG-006-14` | Save-time address normalization. |
| `ATS-CRM-REG-006-15` | Retired matching across preview and recalculation. |
| `ATS-CRM-REG-007-08` | Preview independent of placement eligibility. |
| `FND-CRM-REG-061` | Acceptance journey expects versionless individual-rule replacement to succeed contrary to the pinned API. |
