---
id: SCR-CRM-DQ-003
title: Duplicate group
route: '/console/{tenantId}/crm/dataQuality/duplicates/{objectType}/groups/{groupId}'
surface: console
product_area: crm
module: data-quality
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
purpose: >-
  Compare a shared review group, reject its comparisons or start an authorized
  merge.
supports:
  - JNY-CRM-DQ-001
  - JNY-CRM-DQ-002
  - JNY-CRM-DQ-004
  - CAP-CRM-DQ-007
  - CAP-CRM-DQ-008
  - CAP-CRM-DQ-009
  - CAP-CRM-DQ-002
permission: >-
  crm.duplicates.read; decisions need crm.duplicates.review; merging needs the
  record type merge and read keys
entry_from:
  - A directly shared group address
  - Selection within the review queue
exits_to:
  - '/console/{tenantId}/crm/dataQuality/duplicates/{objectType}'
  - '/console/{tenantId}/crm/merges/plans/{planId}'
displays:
  - field: 'Side-by-side participant labels, numbers and record chips.'
    source: getDuplicateGroup (DOM-CRM-DQ-001)
  - field: 'Constituent comparisons with confidence, score and explanation.'
    source: getDuplicateGroup pairs
  - field: Attribution of the decision returned by whole-group dismissal.
    source: dismissDuplicateGroup answer
actions:
  - label: Not A Duplicate (whole group)
    operation_id: dismissDuplicateGroup
    permission: crm.duplicates.review
    confirm: true
  - label: Not A Duplicate Of The Others (one record)
    operation_id: dismissDuplicateCandidate (each pair with the other members)
    permission: crm.duplicates.review
    confirm: true
  - label: Undo
    operation_id: restoreDuplicateGroupDismissal
    permission: crm.duplicates.review
    confirm: false
  - label: Merge
    operation_id: createMergePlan
    permission: the record type merge and read keys
    confirm: false
  - label: Add A Record (hidden in the console today)
    operation_id: addManualDuplicateCandidate
    permission: crm.duplicates.review
    confirm: false
states:
  - loading
  - error
  - empty
  - read-only
validation:
  - BR-CAP-CRM-DQ-008-01
  - BR-CAP-CRM-DQ-008-02
  - BR-CAP-CRM-DQ-008-11
  - BR-CAP-CRM-DQ-009-03
  - BR-CAP-CRM-DQ-007-09
patterns:
  - PageLayout
  - RequirePermission
  - DataQualityAdapter
  - GroupInspector
  - DismissDialog
component: >-
  components/duplicates/data-quality/group-inspector.tsx (GroupInspector inside
  DuplicateQueueScreen)
evidence:
  - >-
    react-console at baf6dae3:
    app/(console)/console/[tenantId]/crm/dataQuality/duplicates/[objectType]/groups/[groupId]/page.tsx;
    components/duplicates/data-quality/group-inspector.tsx;
    components/console/duplicates/duplicate-queue-screen.tsx (no
    renderRecordPicker passed).
controls: [TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-003, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003]
---

# Duplicate Group

## What the Screen Is For

A group address opens the review queue with that component selected. It supports a shared point of discussion rather than a separate group editor.

## What It Shows and Lets People Do

Whole-group dismissal is atomic. Removing one member instead submits its pair dismissals separately and can partially succeed. The component supports adding a record only when a picker is provided; the current console mount supplies none.

## States and Errors

Missing groups return the reviewer to queue context. Merge limits and permission booleans determine available controls, and repeated dismissal shows the earlier decision where the service returns it.

## Patterns It Must Respect

The inspector and dismiss dialog provide the comparison and explanation controls. Its answer displays the resulting component, and no unmounted picker is treated as available behavior.
