---
id: JNY-CRM-DQ-005
title: An administrator configures blocking and an accountable exception
feature: FEAT-CRM-DQ-01
product_area: crm
module: data-quality
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - CRM-ACC-0240
  - CRM-ACC-0241
  - CRM-ACC-0242
  - CRM-ACC-0243
  - CRM-ACC-0244
  - CRM-ACC-0245
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
actor: ACT-CRM-009
goal: 'Prevent ordinary duplicate creation while retaining authorized, explained exceptions.'
capabilities:
  - CAP-CRM-DQ-003
  - CAP-CRM-DQ-004
  - CAP-CRM-ENT-001
  - CAP-CRM-DQ-005
screens:
  - '/console/{tenantId}/configuration/crm/duplicateRules'
  - '/console/{tenantId}/crm/contacts/new'
steps:
  - 'n': 1
    surface: '/console/{tenantId}/configuration/crm/duplicateRules'
    action: Open duplicate configuration and prioritize the e-mail blocking rule.
    capability: CAP-CRM-DQ-003
    expected: Versioned updates save existing rules without adding or removing them.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0240.spec.ts#CRM-ACC-0240'
  - 'n': 2
    surface: '/console/{tenantId}/crm/contacts/new'
    action: 'As a coordinator, enter a member resembling an existing e-mail match.'
    capability: CAP-CRM-DQ-004
    expected: The form identifies the match and blocking setting.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0243.spec.ts#CRM-ACC-0243'
  - 'n': 3
    surface: createContact
    action: Attempt ordinary creation.
    capability: CAP-CRM-ENT-001
    expected: The refusal includes the match and offers this caller no exception.
    provenance: observed
    source: 'services-crm:modules/duplicates/services/detection/duplicate-checks.ts:refuseBlockedDuplicateCreate'
  - 'n': 4
    surface: createContact
    action: 'As an override holder, select Create Anyway and enter an explanation.'
    capability: CAP-CRM-DQ-004
    expected: The contact and attributed rule-and-match override record are created.
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#audits the override with its reason and
      the record it was let past
  - 'n': 5
    surface: listDuplicateGroups
    action: Inspect duplicate review.
    capability: CAP-CRM-DQ-003
    expected: The created and existing contacts remain candidates despite blocking.
    provenance: observed
    source: 'services-crm:modules/duplicates/services/detection/duplicate-detection.ts:detectForRecords'
  - 'n': 6
    surface: startDuplicateRescan
    action: 'After configuration changes, request a contact re-check through the API.'
    capability: CAP-CRM-DQ-005
    expected: A single run applies refreshed evaluation to existing records.
    provenance: unknown
    source: FND-CRM-DQ-031
alternates:
  - from_step: 1
    condition: A warning rule precedes the matching blocker.
    path: Evaluate the earlier qualifying warning.
    outcome: Creation proceeds with warning and review remains available.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0244.spec.ts#CRM-ACC-0244'
failures:
  - from_step: 4
    condition: An override submission lacks its explanation.
    path: Validation identifies the required reason.
    outcome: No contact is created.
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#refuses the key holder’s confirmed
      create without a reason 400, naming the field
  - from_step: 3
    condition: An ordinary caller sends confirmation directly.
    path: The service retains the blocking refusal and reports no override authority.
    outcome: Creation remains unapplied.
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#refuses an ordinary user’s confirmed
      create 409 as well: confirming is not a way past a block (D-32)
rules_in_play:
  - BR-CAP-CRM-DQ-003-01
  - BR-CAP-CRM-DQ-003-02
  - BR-CAP-CRM-DQ-003-06
  - BR-CAP-CRM-DQ-004-02
  - BR-CAP-CRM-DQ-004-06
  - BR-CAP-CRM-ENT-001-12
  - BR-CAP-CRM-DQ-005-02
assertions:
  - id: AS-JNY-CRM-DQ-005-01
    statement: 'The immutable override retains author, time, explanation, applicable rule and bypassed record.'
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-block-overrides.integration.spec.js#is
      not rewritable by the application, which holds no UPDATE on the audit
  - id: AS-JNY-CRM-DQ-005-02
    statement: Blocking affects ordinary creation while retaining existing candidates for review.
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/unit/services/detection/duplicate-rule-actions.spec.js#stores the
      candidate for a block rule too, the block acting at the create and never on the queue (D-32)
e2e_policy: required
e2e_reason: >-
  Configuration, draft warnings and the exception dialog involve browser permissions and service
  authorization; re-check management currently requires API evidence.
evidence:
  - repository: react-console
    source_sha: baf6dae382d6f41dce976c7f848667ccc37e076f
    paths:
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0240.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0241.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0243.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0244.spec.ts
    note: >-
      Static examination uses the cited records and implementation anchors; repository tests are not executed
      by this corpus check.
  - repository: services-crm
    source_sha: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
    paths:
      - modules/duplicates/tests/e2e/duplicates.e2e.spec.js
      - >-
        modules/duplicates/tests/integration/services/persistence/duplicate-block-overrides.integration.spec.js
    note: >-
      Static examination uses the cited records and implementation anchors; repository tests are not executed
      by this corpus check.
proved_by: []
---

# An administrator configures blocking and an accountable exception

## Story

An administrator places the e-mail blocker first in duplicate configuration. A coordinator encounters its refusal while creating a look-alike contact. An administrator with override authority then provides a reason and creates the distinct person. The exception receives its own retained record, and the resulting pair remains reviewable. Applying later configuration to existing records requires an API re-check; the proposed console management flow remains incomplete.
