---
id: ATS-CRM-DQ-008
scope: CAP-CRM-DQ-008
product_area: crm
module: data-quality
revision: 1
status: proposed
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-CRM-DQ-008-01
    title: Dismissal retains attribution and the reviewed evidence
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-01
    preconditions: An open pair awaits review.
    steps: Dismiss it using a note padded with spaces.
    expected: >-
      The stored dismissal has trimmed note, author, time and fingerprint and
      moves from open to dismissed work.
    negative: false
    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/duplicates.e2e.spec.js#dismisses
      the pair, stamping who said so, when, and the note as trimmed
    category: transition
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#dismisses
        the pair, stamping who said so, when, and the note as trimmed
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#records
        the evidence the dismissal was made against, which a later score is
        compared with
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#answers
        the stored group the dismissed pair has just joined, so a console needs
        no second request to show it
  - id: ATS-CRM-DQ-008-02
    title: Repeated dismissal preserves the first reviewer
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-02
    preconditions: Prepare a dismissed pair and group.
    steps: Dismiss both again.
    expected: >-
      Both succeed without writes and retain the earlier identity, permitted
      name, time and note.
    negative: false
    data_needs: The existing scenario setup supplies the required records.
    bound_to:
      - TST-CRM-DQ-182
      - TST-CRM-DQ-180
    provenance: test
    source: >-
      services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#tells the
      second request the pair was already dismissed, with the earlier who, when
      and note (D-34)
    category: invariant
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#tells
        the second request the pair was already dismissed, with the earlier who,
        when and note (D-34)
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#is
        one decision however many times it is made: the second dismissal changes
        nothing stored
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicate-groups.e2e.spec.js#answers
        a second dismissal of the dismissed group 200, saying it was already
        dismissed (D-34)
  - id: ATS-CRM-DQ-008-03
    title: A group decision commits all pairs together
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-03
    preconditions: A group has two open pairs and a failure-injection variant.
    steps: Submit group dismissal.
    expected: >-
      The normal request settles both with shared attribution and returns the
      dismissed group; failure settles neither.
    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/persistence/duplicate-candidates.integration.spec.js#stamps
      one actor and one instant on all of them, which is the batch its undo
      takes back
    category: invariant
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#stamps
        one actor and one instant on all of them, which is the batch its undo
        takes back
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#records
        against each pair the evidence that pair rested on, not the group’s
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#leaves
        no pair of the group dismissed, a group being decided about whole or not
        at all
  - id: ATS-CRM-DQ-008-04
    title: Group undo preserves independent dismissals
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-04
    preconditions: Dismiss one pair separately and another through its group.
    steps: Undo the group decision twice.
    expected: Only the group-decided pair reopens and the second undo is refused.
    negative: true
    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/persistence/duplicate-candidates.integration.spec.js#restores
      exactly the pairs that one dismissal dismissed
    category: edge
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#restores
        exactly the pairs that one dismissal dismissed
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#leaves
        the pair somebody dismissed on its own dismissed, that being a decision
        of its own
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#refuses
        an undo of a group with no dismissed pair, rather than reporting one it
        did not make
  - id: ATS-CRM-DQ-008-05
    title: Pair restoration clears dismissal metadata
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-05
    preconditions: A pair is dismissed.
    steps: Restore it twice.
    expected: >-
      It stays open with its score, without dismissal attribution or
      fingerprint, and the repeated restore is harmless.
    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/persistence/duplicate-candidates.integration.spec.js#takes
      the whole dismissal off: who, when, why and on what evidence
    category: transition
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#takes
        the whole dismissal off: who, when, why and on what evidence
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#keeps
        the score and the evidence, which the dismissal never touched
      - >-
        services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#is
        harmless a second time: a pair already open is answered as it is
  - id: ATS-CRM-DQ-008-06
    title: Only new strong evidence reopens a dismissal
    level: unit
    proves:
      - BR-CAP-CRM-DQ-008-06
    preconditions: An existing pair is dismissed.
    steps: Correct a name typo and then add a shared phone.
    expected: >-
      The typo leaves the decision intact; the new phone reopens it with an
      explanation.
    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/unit/services/matching/fingerprint.spec.js#leaves
      a pair dismissed when a name typo is fixed and nothing strong changes
    category: transition
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/unit/services/matching/fingerprint.spec.js#leaves
        a pair dismissed when a name typo is fixed and nothing strong changes
      - >-
        services-crm:modules/duplicates/tests/integration/services/detection/duplicate-detection.integration.spec.js#says
        it reopened the dismissal, the pair now resting on evidence the
        dismissal did not see
  - id: ATS-CRM-DQ-008-07
    title: Review authority controls decisions
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-09
    preconditions: Prepare reader and reviewer callers.
    steps: Attempt dismissal and restoration as both.
    expected: The reviewer succeeds and the reader is refused.
    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/duplicates.e2e.spec.js#answers
      403 to that reader dismissing a pair, which is a decision and not a read
    category: permission
    execution_sources:
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#answers
        403 to that reader dismissing a pair, which is a decision and not a read
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#answers
        403 to that reader restoring a pair
      - >-
        services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#lets a
        reviewer dismiss a pair, which is the permission that decision asks for
  - id: ATS-CRM-DQ-008-08
    title: Review decisions stay coherent across console entry points
    level: browser
    proves:
      - BR-CAP-CRM-DQ-008-01
      - BR-CAP-CRM-DQ-008-03
      - BR-CAP-CRM-DQ-008-04
      - BR-CAP-CRM-DQ-008-06
      - BR-CAP-CRM-DQ-008-09
    preconditions: Prepare a four-record group and a record-page candidate.
    steps: >-
      Dismiss and undo the group, remove a member, dismiss and restore a noted
      pair, then introduce a shared mobile.
    expected: >-
      Dismissed work shows attribution, restoration clears it, new mobile
      evidence reopens the pair and read-only staff receive no decision
      controls.
    negative: false
    data_needs: The existing scenario setup supplies the required records.
    bound_to:
      - TST-CRM-DQ-176
    provenance: test
    source: >-
      react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0234.spec.ts#CRM-ACC-0234
    category: interaction
    execution_sources:
      - >-
        react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0234.spec.ts#CRM-ACC-0234
      - >-
        react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0235.spec.ts#CRM-ACC-0235
      - >-
        react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0236.spec.ts#CRM-ACC-0236
      - >-
        react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0289.spec.ts#CRM-ACC-0289
  - id: ATS-CRM-DQ-008-09
    title: >-
      Observe open becoming dismissed after a reviewer rejects a pair, group or
      one member’s comparisons
    category: transition
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-01
      - BR-CAP-CRM-DQ-008-03
    transition:
      model: STATE-CRM-DQ-001
      index: 4
      from: open
      to: dismissed
      guard: Review authority and a valid optional note are required.
      side_effects:
        - persist the author and dismissal evidence
        - refresh dismissed grouping
    preconditions: >-
      Arrange open standing with the transition guard satisfied: Review
      authority and a valid optional note are required.
    steps: 'A reviewer rejects a pair, group or one member’s comparisons.'
    expected: >-
      Read the dismissed standing and inspect the associated changes: persist
      the author and dismissal evidence; refresh dismissed grouping.
    negative: false
    data_needs: >-
      Fixtures for open, the guard and the affected records; a fixed clock for
      time-dependent changes.
    source: >-
      services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#records
      the evidence the dismissal was made against, which a later score is
      compared with
    design_sources:
      - STATE-CRM-DQ-001
    note: >-
      The design supplies this transition obligation. A runtime binding requires
      assertions for its guard, destination and associated writes in one
      sequence.
    bound_to: []
    provenance: proposed
    execution_sources: []
  - id: ATS-CRM-DQ-008-10
    title: >-
      Observe dismissed becoming dismissed after the same rejection is submitted
      again
    category: transition
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-02
    transition:
      model: STATE-CRM-DQ-001
      index: 5
      from: dismissed
      to: dismissed
      guard: A dismissal is already stored.
      side_effects:
        - retain the existing decision
        - return its attribution and already-dismissed indication
    preconditions: >-
      Arrange dismissed standing with the transition guard satisfied: A
      dismissal is already stored.
    steps: The same rejection is submitted again.
    expected: >-
      Read the dismissed standing and inspect the associated changes: retain the
      existing decision; return its attribution and already-dismissed
      indication.
    negative: false
    data_needs: >-
      Fixtures for dismissed, the guard and the affected records; a fixed clock
      for time-dependent changes.
    source: >-
      services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#answers
      the second reviewer the EARLIER dismissal: its who, its name as visibility
      permits, its when and its note
    design_sources:
      - STATE-CRM-DQ-001
    note: >-
      The design supplies this transition obligation. A runtime binding requires
      assertions for its guard, destination and associated writes in one
      sequence.
    bound_to: []
    provenance: proposed
    execution_sources: []
  - id: ATS-CRM-DQ-008-11
    title: >-
      Observe dismissed becoming open after restoration or newly scored strong
      evidence reopens review
    category: transition
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-05
      - BR-CAP-CRM-DQ-008-06
    transition:
      model: STATE-CRM-DQ-001
      index: 6
      from: dismissed
      to: open
      guard: >-
        Restoration needs review authority and the relevant decision; automatic
        reopening needs new strong evidence.
      side_effects:
        - remove dismissal fields
        - retain the current scoring result
        - refresh open grouping
    preconditions: >-
      Arrange dismissed standing with the transition guard satisfied:
      Restoration needs review authority and the relevant decision; automatic
      reopening needs new strong evidence.
    steps: Restoration or newly scored strong evidence reopens review.
    expected: >-
      Read the open standing and inspect the associated changes: remove
      dismissal fields; retain the current scoring result; refresh open
      grouping.
    negative: false
    data_needs: >-
      Fixtures for dismissed, the guard and the affected records; a fixed clock
      for time-dependent changes.
    source: >-
      services-crm:modules/duplicates/tests/unit/services/matching/fingerprint.spec.js#leaves
      a pair dismissed when a name typo is fixed and nothing strong changes
    design_sources:
      - STATE-CRM-DQ-001
    note: >-
      The design supplies this transition obligation. A runtime binding requires
      assertions for its guard, destination and associated writes in one
      sequence.
    bound_to: []
    provenance: proposed
    execution_sources: []
  - id: ATS-CRM-DQ-008-12
    title: >-
      Observe confirmed becoming dismissed after a reviewer rejects a confirmed
      pair
    category: transition
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-01
    transition:
      model: STATE-CRM-DQ-001
      index: 10
      from: confirmed
      to: dismissed
      guard: Confirmation does not prevent dismissal by a reviewer.
      side_effects:
        - record the rejection
        - refresh dismissed grouping
    preconditions: >-
      Arrange confirmed standing with the transition guard satisfied:
      Confirmation does not prevent dismissal by a reviewer.
    steps: A reviewer rejects a confirmed pair.
    expected: >-
      Read the dismissed standing and inspect the associated changes: record the
      rejection; refresh dismissed grouping.
    negative: false
    data_needs: >-
      Fixtures for confirmed, the guard and the affected records; a fixed clock
      for time-dependent changes.
    source: >-
      services-crm:modules/duplicates/services/persistence/duplicate-candidates.ts:dismissDuplicateCandidate
    design_sources:
      - STATE-CRM-DQ-001
    note: >-
      The design supplies this transition obligation. A runtime binding requires
      assertions for its guard, destination and associated writes in one
      sequence.
    bound_to: []
    provenance: proposed
    execution_sources: []
  - id: ATS-CRM-DQ-008-13
    title: >-
      Observe open group becoming dismissed group after a reviewer dismisses all
      open comparisons in the selected group
    category: transition
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-03
    transition:
      model: STATE-CRM-DQ-002
      index: 3
      from: open group
      to: dismissed group
      guard: Review authority and at least one undecided pair are required.
      side_effects:
        - return the resulting dismissed component and its separate identity
    preconditions: >-
      Arrange open group standing with the transition guard satisfied: Review
      authority and at least one undecided pair are required.
    steps: A reviewer dismisses all open comparisons in the selected group.
    expected: >-
      Read the dismissed group standing and inspect the associated changes:
      return the resulting dismissed component and its separate identity.
    negative: false
    data_needs: >-
      Fixtures for open group, the guard and the affected records; a fixed clock
      for time-dependent changes.
    source: >-
      services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#leaves
      no pair of the group dismissed, a group being decided about whole or not
      at all
    design_sources:
      - STATE-CRM-DQ-002
    note: >-
      The design supplies this transition obligation. A runtime binding requires
      assertions for its guard, destination and associated writes in one
      sequence.
    bound_to: []
    provenance: proposed
    execution_sources: []
  - id: ATS-CRM-DQ-008-14
    title: >-
      Observe dismissed group becoming open group after a reviewer undoes the
      selected group rejection
    category: transition
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-04
    transition:
      model: STATE-CRM-DQ-002
      index: 4
      from: dismissed group
      to: open group
      guard: >-
        Only pairs attributed to that decision reopen; an empty restoration is
        refused.
      side_effects:
        - return the resulting open component
    preconditions: >-
      Arrange dismissed group standing with the transition guard satisfied: Only
      pairs attributed to that decision reopen; an empty restoration is refused.
    steps: A reviewer undoes the selected group rejection.
    expected: >-
      Read the open group standing and inspect the associated changes: return
      the resulting open component.
    negative: false
    data_needs: >-
      Fixtures for dismissed group, the guard and the affected records; a fixed
      clock for time-dependent changes.
    source: >-
      services-crm:modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js#leaves
      the pair somebody dismissed on its own dismissed, that being a decision of
      its own
    design_sources:
      - STATE-CRM-DQ-002
    note: >-
      The design supplies this transition obligation. A runtime binding requires
      assertions for its guard, destination and associated writes in one
      sequence.
    bound_to: []
    provenance: proposed
    execution_sources: []
  - id: ATS-CRM-DQ-008-15
    title: Dismissal cannot be stored with incomplete attribution
    category: invariant
    level: api
    proves:
      - INV-DOM-CRM-DQ-001-03
    preconditions: One open pair and direct writes omitting either dismissal author or time.
    steps: >-
      Attempt each incomplete dismissed row, then dismiss and restore through
      the service.
    expected: >-
      Incomplete direct writes are refused; the restored pair has neither
      dismissal stamp.
    negative: false
    data_needs: >-
      Records, versions and caller contexts owned by the run; transaction
      failure injection when the invariant concerns rollback.
    bound_to: []
    source: >-
      services-crm:modules/duplicates/db/duplicate-candidates.table.ts:candidateConstraints
    design_sources:
      - DOM-CRM-DQ-001
    execution_sources: []
    provenance: proposed
  - id: ATS-CRM-DQ-008-16
    title: A note over its limit leaves the pair undecided
    category: validation
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-10
    preconditions: >-
      An open workspace comparison and a note of one thousand and one
      characters.
    steps: Dismiss with the oversized note; then try an unavailable pair and group.
    expected: >-
      The oversized note is rejected and the unavailable records return not
      found, with no review decision written.
    negative: true
    data_needs: Run-owned records and caller permissions that distinguish the two cases.
    source: >-
      services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#refuses a
      dismissal note longer than a note may be (400)
    design_sources:
      - CAP-CRM-DQ-008
    bound_to: []
    provenance: proposed
    execution_sources: []
  - id: ATS-CRM-DQ-008-17
    title: Removing one member leaves the other comparisons open
    category: rule
    level: browser
    proves:
      - BR-CAP-CRM-DQ-008-11
    preconditions: A connected three-record group.
    steps: Remove one record from the displayed group and read every pair.
    expected: >-
      Only that record’s comparisons are dismissed; the remaining members retain
      their open comparison.
    negative: true
    data_needs: Run-owned records and caller permissions that distinguish the two cases.
    source: >-
      react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0234.spec.ts#CRM-ACC-0234
    design_sources:
      - CAP-CRM-DQ-008
    bound_to: []
    provenance: proposed
    execution_sources: []
  - id: ATS-CRM-DQ-008-18
    title: New evidence and later absorption preserve the right decision
    category: interaction
    level: api
    proves:
      - BR-CAP-CRM-DQ-008-01
      - BR-CAP-CRM-DQ-008-02
      - BR-CAP-CRM-DQ-008-03
      - BR-CAP-CRM-DQ-008-04
      - BR-CAP-CRM-DQ-008-05
      - BR-CAP-CRM-DQ-008-06
      - BR-CAP-CRM-DQ-008-09
      - BR-CAP-CRM-DQ-008-10
      - BR-CAP-CRM-DQ-008-11
    exercises:
      - CAP-CRM-DQ-008
      - CAP-CRM-DQ-001
      - CAP-CRM-DQ-015
    workflow_sources:
      - WF-CRM-DQ-001
      - WF-CRM-DQ-004
    preconditions: >-
      Run-owned contact and organization records, the relevant staff permissions
      and the related state described by the sequence.
    steps: >-
      Dismiss an outside comparison, correct a name, add a shared mobile,
      dismiss again and absorb one participant through a merge.
    expected: >-
      Reopening and carried attribution match the named rules without
      overwriting an independent survivor decision.
    negative: false
    data_needs: >-
      An isolated workspace with related records and fixed timestamps; owned
      participant failure injection where requested.
    source: >-
      CAP-CRM-DQ-008; CAP-CRM-DQ-001; CAP-CRM-DQ-015; WF-CRM-DQ-001;
      WF-CRM-DQ-004
    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/e2e/duplicates.e2e.spec.js
      - >-
        modules/duplicates/tests/integration/services/detection/duplicate-detection.integration.spec.js
      - >-
        modules/duplicates/tests/integration/services/persistence/duplicate-candidates.integration.spec.js
      - modules/duplicates/tests/unit/services/matching/fingerprint.spec.js
    note: >-
      Bindings identify authored proof; empty bindings remain proposed and
      findings record known limitations.
  - repository: react-console
    source_sha: baf6dae382d6f41dce976c7f848667ccc37e076f
    paths:
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0234.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0235.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0236.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0289.spec.ts
    note: >-
      Bindings identify authored proof; empty bindings remain proposed and
      findings record known limitations.
coverage:
  rule: covered
  transition: covered
  validation: covered
  permission: covered
  edge: covered
  failure: 'gap: FND-CRM-DQ-059'
  boundary: 'gap: FND-CRM-DQ-059'
  concurrency: 'gap: FND-CRM-DQ-059'
  invariant: covered
  interaction: covered
coverage_notes:
  failure: >-
    No complete scenario currently isolates this category; the finding lists the
    remaining proof obligation.
  boundary: >-
    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.
permission_coverage:
  - key: crm.duplicates.review
    scenario_ids:
      - ATS-CRM-DQ-008-07
    finding: FND-CRM-DQ-059
proof_matrix:
  - rule: BR-CAP-CRM-DQ-008-01
    scenarios:
      - ATS-CRM-DQ-008-01
      - ATS-CRM-DQ-008-08
      - ATS-CRM-DQ-008-09
      - ATS-CRM-DQ-008-12
      - ATS-CRM-DQ-008-18
  - rule: BR-CAP-CRM-DQ-008-02
    scenarios:
      - ATS-CRM-DQ-008-02
      - ATS-CRM-DQ-008-10
      - ATS-CRM-DQ-008-18
  - rule: BR-CAP-CRM-DQ-008-03
    scenarios:
      - ATS-CRM-DQ-008-03
      - ATS-CRM-DQ-008-08
      - ATS-CRM-DQ-008-09
      - ATS-CRM-DQ-008-13
      - ATS-CRM-DQ-008-18
  - rule: BR-CAP-CRM-DQ-008-04
    scenarios:
      - ATS-CRM-DQ-008-04
      - ATS-CRM-DQ-008-08
      - ATS-CRM-DQ-008-14
      - ATS-CRM-DQ-008-18
  - rule: BR-CAP-CRM-DQ-008-05
    scenarios:
      - ATS-CRM-DQ-008-05
      - ATS-CRM-DQ-008-11
      - ATS-CRM-DQ-008-18
  - rule: BR-CAP-CRM-DQ-008-06
    scenarios:
      - ATS-CRM-DQ-008-06
      - ATS-CRM-DQ-008-08
      - ATS-CRM-DQ-008-11
      - ATS-CRM-DQ-008-18
  - rule: BR-CAP-CRM-DQ-008-09
    scenarios:
      - ATS-CRM-DQ-008-07
      - ATS-CRM-DQ-008-08
      - ATS-CRM-DQ-008-18
  - rule: BR-CAP-CRM-DQ-008-10
    scenarios:
      - ATS-CRM-DQ-008-16
      - ATS-CRM-DQ-008-18
  - rule: BR-CAP-CRM-DQ-008-11
    scenarios:
      - ATS-CRM-DQ-008-17
      - ATS-CRM-DQ-008-18
interaction_coverage:
  related:
    - CAP-CRM-DQ-001
    - CAP-CRM-DQ-015
  workflow_sources:
    - WF-CRM-DQ-001
    - WF-CRM-DQ-004
  scenarios:
    - ATS-CRM-DQ-008-08
    - ATS-CRM-DQ-008-18
---

# Dismiss false matches and reopen review: 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-008-01` | `ATS-CRM-DQ-008-01`, `ATS-CRM-DQ-008-08`, `ATS-CRM-DQ-008-09`, `ATS-CRM-DQ-008-12`, `ATS-CRM-DQ-008-18` |
| `BR-CAP-CRM-DQ-008-02` | `ATS-CRM-DQ-008-02`, `ATS-CRM-DQ-008-10`, `ATS-CRM-DQ-008-18` |
| `BR-CAP-CRM-DQ-008-03` | `ATS-CRM-DQ-008-03`, `ATS-CRM-DQ-008-08`, `ATS-CRM-DQ-008-09`, `ATS-CRM-DQ-008-13`, `ATS-CRM-DQ-008-18` |
| `BR-CAP-CRM-DQ-008-04` | `ATS-CRM-DQ-008-04`, `ATS-CRM-DQ-008-08`, `ATS-CRM-DQ-008-14`, `ATS-CRM-DQ-008-18` |
| `BR-CAP-CRM-DQ-008-05` | `ATS-CRM-DQ-008-05`, `ATS-CRM-DQ-008-11`, `ATS-CRM-DQ-008-18` |
| `BR-CAP-CRM-DQ-008-06` | `ATS-CRM-DQ-008-06`, `ATS-CRM-DQ-008-08`, `ATS-CRM-DQ-008-11`, `ATS-CRM-DQ-008-18` |
| `BR-CAP-CRM-DQ-008-09` | `ATS-CRM-DQ-008-07`, `ATS-CRM-DQ-008-08`, `ATS-CRM-DQ-008-18` |
| `BR-CAP-CRM-DQ-008-10` | `ATS-CRM-DQ-008-16`, `ATS-CRM-DQ-008-18` |
| `BR-CAP-CRM-DQ-008-11` | `ATS-CRM-DQ-008-17`, `ATS-CRM-DQ-008-18` |

## Interactions With Related Capabilities

Dismiss and undo the group, remove a member, dismiss and restore a noted pair, then introduce a shared mobile. Dismiss an outside comparison, correct a name, add a shared mobile, dismiss again and absorb one participant through a merge.

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.
