---
id: FAS-CRM-REG-04
title: Policy Recalculation acceptance
feature: FEAT-CRM-REG-04
product_area: crm
module: regions
revision: 1
status: proposed
product_intent: proposed
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
capabilities:
  - CAP-CRM-REG-010
  - CAP-CRM-REG-011
  - CAP-CRM-REG-012
scenarios:
  - id: FAS-CRM-REG-04-01
    title: Explicit recalculation applies saved coverage
    kind: behaviour
    exercises:
      - CAP-CRM-REG-010
      - CAP-CRM-REG-011
      - CAP-CRM-REG-012
    relies_on:
      - ATS-CRM-REG-010-01
      - ATS-CRM-REG-011-05
      - ATS-CRM-REG-012-01
    preconditions: Existing addressed records retain the old target after a saved policy change.
    steps: 'Inspect need, start recalculation and read the finished run and records.'
    expected: Eligible records adopt the saved target and the finished run exposes progress.
    negative: false
    data_needs: Existing addressed records retain the old target after a saved policy change.
    bound_to:
      - TST-CRM-REG-066
    provenance: test
    source: 'services-crm:tests/e2e/dev/regions.dev.spec.ts#moves the contact to its region under the new rules'
  - id: FAS-CRM-REG-04-02
    title: Newer policy changes remain outstanding after an older run
    kind: interaction
    exercises:
      - CAP-CRM-REG-010
      - CAP-CRM-REG-011
      - CAP-CRM-REG-012
    relies_on:
      - ATS-CRM-REG-010-04
      - ATS-CRM-REG-011-04
      - ATS-CRM-REG-012-01
    preconditions: A small-batch run is still processing.
    steps: >-
      Save a rule during processing, finish the run, read its completed status and inspect policy
      currency.
    expected: Completion is visible while the newer generation still needs recalculation.
    negative: false
    data_needs: A small-batch run is still processing.
    bound_to:
      - TST-CRM-REG-057
    provenance: test
    source: >-
      services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment-rules.integration.spec.js#says
      one is still needed, because the run was recorded under the rules as they were before
  - id: FAS-CRM-REG-04-03
    title: A retryable failure recovers through the same run
    kind: lifecycle
    exercises:
      - CAP-CRM-REG-010
      - CAP-CRM-REG-011
      - CAP-CRM-REG-012
    relies_on:
      - ATS-CRM-REG-012-03
      - ATS-CRM-REG-012-05
    preconditions: A recorded run fails a batch once.
    steps: 'Read its running error, repair the fixture and redeliver until completion, then inspect currency.'
    expected: 'The same run resumes committed progress, clears its error and covers its starting generation.'
    negative: false
    data_needs: A recorded run fails a batch once.
    bound_to: []
    provenance: proposed
    source: WF-CRM-REG-003
  - id: FAS-CRM-REG-04-04
    title: Readers inspect processing but cannot start it
    kind: permission
    exercises:
      - CAP-CRM-REG-010
      - CAP-CRM-REG-011
      - CAP-CRM-REG-012
    relies_on:
      - ATS-CRM-REG-011-01
      - ATS-CRM-REG-012-01
    preconditions: A reader has regional read authority without the recalculation key.
    steps: 'Read settings and run history, then attempt to start recalculation.'
    expected: Reads remain available and start is refused without inserting another run.
    negative: true
    data_needs: A reader has regional read authority without the recalculation key.
    bound_to: []
    provenance: proposed
    source: SVC-CRM-REG-regions
  - id: FAS-CRM-REG-04-05
    title: Coincident timestamps cannot hide a policy change
    kind: regression
    exercises:
      - CAP-CRM-REG-010
      - CAP-CRM-REG-011
    relies_on:
      - ATS-CRM-REG-010-05
    preconditions: A completed run and a later rule write use the same clock instant.
    steps: Read currency before and after the rule write.
    expected: The generation comparison reports a new need despite equal timestamps.
    negative: false
    data_needs: A completed run and a later rule write use the same clock instant.
    bound_to:
      - TST-CRM-REG-057
    provenance: test
    source: >-
      services-crm:modules/regions/tests/integration/services/region-assignment/region-assignment-rules.integration.spec.js#says
      one is needed after a rule is added at the very instant the run started
evidence:
  - FEAT-CRM-REG-04
  - CAP-CRM-REG-010
  - CAP-CRM-REG-011
  - CAP-CRM-REG-012
---

# Policy Recalculation acceptance

## What the Feature Must Do as a Whole

The suite connects policy currency, traversal and run inspection. Completion and outstanding policy changes are checked together so a finished older run cannot conceal newer work.

## Interactions Between Capabilities

Newer policy changes remain outstanding after an older run. Completion is visible while the newer generation still needs recalculation.

## Regression Record

| Revision | Change | Scenario | Why |
|---|---|---|---|
| 1 | initial | all | Establish cumulative feature coverage from the landed specifications and pinned executable assertions. |
