---
id: ATS-CRM-DQ-011
scope: CAP-CRM-DQ-011
product_area: crm
module: data-quality
revision: 1
status: proposed
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-CRM-DQ-011-01
    title: 'Overview distinguishes records, pairs and group confidence'
    level: api
    proves:
      - BR-CAP-CRM-DQ-011-01
      - BR-CAP-CRM-DQ-011-02
    preconditions: >-
      Prepare two open contact groups, dismissed and confirmed pairs and an
      active contact re-check.
    steps: Read the summary.
    expected: >-
      Counts match the setup, groups use their strongest confidence, the run is
      active and the window contains no merges.
    negative: false
    data_needs: The existing scenario setup supplies the required records.
    bound_to:
      - TST-CRM-DQ-180
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js#counts
      the contact groups, the records in them and the pairs of each status
    category: rule
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js#counts
        the contact groups, the records in them and the pairs of each status
      - >-
        services-crm:modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js#breaks
        the open groups down by band, the group taking the band of its strongest
        pair
      - >-
        services-crm:modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js#says
        a rescan of the contacts is under way, so a reader knows the counts are
        being rebuilt
  - id: ATS-CRM-DQ-011-02
    title: Capped totals identify a lower bound
    level: api
    proves:
      - BR-CAP-CRM-DQ-011-03
    preconditions: Create more open pairs than the configured ceiling.
    steps: Request the summary.
    expected: >-
      The response returns the ceiling and marks both the record type and
      overall result capped.
    negative: false
    data_needs: The existing scenario setup supplies the required records.
    bound_to:
      - TST-CRM-DQ-180
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js#answers
      the CAP rather than the count, so no reader waits for a number nobody
      reads
    category: boundary
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js#answers
        the CAP rather than the count, so no reader waits for a number nobody
        reads
      - >-
        services-crm:modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js#says
        the record type is capped, so every number of it is read as a floor
      - >-
        services-crm:modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js#says
        the overview as a whole is capped, which is what the page needs to know
  - id: ATS-CRM-DQ-011-03
    title: Overview reads require authority
    level: api
    proves:
      - BR-CAP-CRM-DQ-011-05
    preconditions: Use anonymous and permissionless callers.
    steps: Request the overview.
    expected: Both calls are denied.
    negative: true
    data_needs: The existing scenario setup supplies the required records.
    bound_to:
      - TST-CRM-DQ-182
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/e2e/duplicate-groups.e2e.spec.js#refuses
      the anonymous call
    category: permission
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicate-groups.e2e.spec.js#refuses
        the anonymous call
  - id: ATS-CRM-DQ-011-04
    title: Console totals reconcile with the underlying work
    level: browser
    proves:
      - BR-CAP-CRM-DQ-011-06
    preconditions: >-
      Prepare open, dismissed and confirmed work plus a merge reaching thirty
      days old.
    steps: Open the overview and follow its counts.
    expected: >-
      Queue and list totals agree, and the old merge leaves the recent window at
      the boundary.
    negative: false
    data_needs: The existing scenario setup supplies the required records.
    bound_to: []
    provenance: proposed
    source: FND-CRM-DQ-031
    category: interaction
    execution_sources: []
  - id: ATS-CRM-DQ-011-05
    title: Background work and completed merges reconcile with the overview
    category: interaction
    level: api
    proves:
      - BR-CAP-CRM-DQ-011-01
      - BR-CAP-CRM-DQ-011-02
      - BR-CAP-CRM-DQ-011-03
      - BR-CAP-CRM-DQ-011-05
      - BR-CAP-CRM-DQ-011-06
    exercises:
      - CAP-CRM-DQ-011
      - CAP-CRM-DQ-005
      - CAP-CRM-DQ-019
    workflow_sources:
      - WF-CRM-DQ-001
    preconditions: >-
      Run-owned contact and organization records, the relevant staff permissions
      and the related state described by the sequence.
    steps: >-
      Complete a re-check, dismiss a group and execute one merge, then compare
      overview counts with group and merge listings.
    expected: >-
      The overview agrees with the named workload and recent-history rules at
      the fixed observation time.
    negative: false
    data_needs: >-
      An isolated workspace with related records and fixed timestamps; owned
      participant failure injection where requested.
    source: CAP-CRM-DQ-011; CAP-CRM-DQ-005; CAP-CRM-DQ-019; WF-CRM-DQ-001
    note: >-
      This cumulative seam scenario remains proposed until one executable
      sequence establishes all of its outcomes.
    bound_to: []
    provenance: proposed
    workflow_coverage_note: >-
      The workflows identify the handoffs under review. Separate assertions
      leave recovery and failure ordering unproved; the capability coverage
      finding records that limit.
    execution_sources: []
evidence:
  - repository: services-crm
    source_sha: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
    paths:
      - modules/duplicates/tests/e2e/duplicate-groups.e2e.spec.js
      - >-
        modules/duplicates/tests/integration/services/summary/duplicate-summary.integration.spec.js
    note: >-
      Bindings identify authored proof; empty bindings remain proposed and
      findings record known limitations.
coverage:
  rule: covered
  transition: 'gap: FND-CRM-DQ-062'
  validation: 'gap: FND-CRM-DQ-062'
  permission: covered
  edge: 'gap: FND-CRM-DQ-062'
  failure: 'gap: FND-CRM-DQ-062'
  boundary: covered
  concurrency: 'gap: FND-CRM-DQ-062'
  invariant: 'gap: FND-CRM-DQ-062'
  interaction: covered
coverage_notes:
  transition: >-
    No complete scenario currently isolates this category; the finding lists the
    remaining proof obligation.
  validation: >-
    No complete scenario currently isolates this category; the finding lists the
    remaining proof obligation.
  edge: >-
    No complete scenario currently isolates this category; the finding lists the
    remaining proof obligation.
  failure: >-
    No complete scenario currently isolates this category; the finding lists the
    remaining proof obligation.
  concurrency: >-
    No complete scenario currently isolates this category; the finding lists the
    remaining proof obligation.
  invariant: >-
    No complete scenario currently isolates this category; the finding lists the
    remaining proof obligation.
permission_coverage:
  - key: crm.duplicates.read
    scenario_ids:
      - ATS-CRM-DQ-011-03
    finding: FND-CRM-DQ-062
proof_matrix:
  - rule: BR-CAP-CRM-DQ-011-01
    scenarios:
      - ATS-CRM-DQ-011-01
      - ATS-CRM-DQ-011-05
  - rule: BR-CAP-CRM-DQ-011-02
    scenarios:
      - ATS-CRM-DQ-011-01
      - ATS-CRM-DQ-011-05
  - rule: BR-CAP-CRM-DQ-011-03
    scenarios:
      - ATS-CRM-DQ-011-02
      - ATS-CRM-DQ-011-05
  - rule: BR-CAP-CRM-DQ-011-05
    scenarios:
      - ATS-CRM-DQ-011-03
      - ATS-CRM-DQ-011-05
  - rule: BR-CAP-CRM-DQ-011-06
    scenarios:
      - ATS-CRM-DQ-011-04
      - ATS-CRM-DQ-011-05
interaction_coverage:
  related:
    - CAP-CRM-DQ-005
    - CAP-CRM-DQ-019
  workflow_sources:
    - WF-CRM-DQ-001
  scenarios:
    - ATS-CRM-DQ-011-04
    - ATS-CRM-DQ-011-05
---

# Understand the duplicate-review workload: Capability Test Specification

## Coverage

The rule matrix names the authored checks. A covered category means that a scenario exists; it does not report a passing execution. The coverage notes and findings identify missing checks, while execution sources retain the exact assertions inspected.

| Required Rule | Scenarios |
|---|---|
| `BR-CAP-CRM-DQ-011-01` | `ATS-CRM-DQ-011-01`, `ATS-CRM-DQ-011-05` |
| `BR-CAP-CRM-DQ-011-02` | `ATS-CRM-DQ-011-01`, `ATS-CRM-DQ-011-05` |
| `BR-CAP-CRM-DQ-011-03` | `ATS-CRM-DQ-011-02`, `ATS-CRM-DQ-011-05` |
| `BR-CAP-CRM-DQ-011-05` | `ATS-CRM-DQ-011-03`, `ATS-CRM-DQ-011-05` |
| `BR-CAP-CRM-DQ-011-06` | `ATS-CRM-DQ-011-04`, `ATS-CRM-DQ-011-05` |

## Interactions With Related Capabilities

Open the overview and follow its counts. Complete a re-check, dismiss a group and execute one merge, then compare overview counts with group and merge listings.

These sequences test the handoffs named in the interaction coverage record. A proposed sequence remains unbound until an executable run checks its combined outcome; component assertions alone leave that obligation open.
