---
id: JNY-CRM-DQ-002
title: An administrator combines a sparse contact with a member record
feature: FEAT-CRM-DQ-04
product_area: crm
module: data-quality
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - CRM-ACC-0248
  - CRM-ACC-0253
  - CRM-ACC-0254
  - CRM-ACC-0255
  - CRM-ACC-0257
  - CRM-ACC-0258
  - CRM-ACC-0286
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
actor: ACT-CRM-009
goal: 'Combine the member records, inspect retained information and verify the completed result.'
capabilities:
  - CAP-CRM-DQ-010
  - CAP-CRM-DQ-012
  - CAP-CRM-DQ-013
  - CAP-CRM-DQ-014
  - CAP-CRM-DQ-015
  - CAP-CRM-DQ-016
  - CAP-CRM-DQ-018
  - CAP-CRM-DQ-019
screens:
  - '/console/{tenantId}/crm/contacts/{id}'
  - '/console/{tenantId}/crm/merges/new'
  - '/console/{tenantId}/crm/merges/plans/{planId}'
  - '/console/{tenantId}/crm/dataQuality/merges/{mergeId}'
steps:
  - 'n': 1
    surface: '/console/{tenantId}/crm/contacts/{id}'
    action: 'Expand duplicate suggestions, select the sparse contact and launch Merge With Selected.'
    capability: CAP-CRM-DQ-010
    expected: Both records enter the workspace without forcing the current record to survive.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0286.spec.ts#CRM-ACC-0286'
  - 'n': 2
    surface: createMergePlan
    action: Inspect the new preview.
    capability: CAP-CRM-DQ-012
    expected: 'Participant summaries, survivor reasoning and outstanding choices are visible.'
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0248.spec.ts#CRM-ACC-0248'
  - 'n': 3
    surface: updateMergePlan
    action: Choose the sparse contact's title and retain the member's e-mails.
    capability: CAP-CRM-DQ-013
    expected: The plan retains each answer and recomputes its result.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0249.spec.ts#CRM-ACC-0249'
  - 'n': 4
    surface: '/console/{tenantId}/crm/merges/plans/{planId}'
    action: 'Inspect automatic combinations and discarded values, then acknowledge them.'
    capability: CAP-CRM-DQ-014
    expected: 'The preview shows restricted consent, the filled birth date and reasons for omissions.'
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0254.spec.ts#CRM-ACC-0254'
  - 'n': 5
    surface: '/console/{tenantId}/crm/merges/plans/{planId}'
    action: Review the related-work actions.
    capability: CAP-CRM-DQ-015
    expected: Readable counts describe tasks and activities moving to the survivor.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0258.spec.ts#CRM-ACC-0258'
  - 'n': 6
    surface: executeMergePlan
    action: Confirm the two-contact merge.
    capability: CAP-CRM-DQ-016
    expected: The monitored job completes successfully.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0253.spec.ts#CRM-ACC-0253'
  - 'n': 7
    surface: '/console/{tenantId}/crm/contacts/{id}'
    action: Follow the sparse contact's earlier link.
    capability: CAP-CRM-DQ-018
    expected: The survivor page explains the move using both record numbers.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0253.spec.ts#CRM-ACC-0253'
  - 'n': 8
    surface: '/console/{tenantId}/crm/dataQuality/merges/{mergeId}'
    action: Open the outcome from the completion message and history.
    capability: CAP-CRM-DQ-019
    expected: 'Attribution and retained, moved and discarded information are available.'
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0253.spec.ts#CRM-ACC-0253'
alternates:
  - from_step: 3
    condition: The administrator keeps all recommendations.
    path: Confirm acceptance of defaults.
    outcome: The survivor uses recommended values and the outcome identifies defaults.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0254.spec.ts#CRM-ACC-0254'
  - from_step: 1
    condition: No detected pair connects the records.
    path: Select Merge from the record and choose its counterpart.
    outcome: The chosen records open in the same merge workspace.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0286.spec.ts#CRM-ACC-0286'
failures:
  - from_step: 6
    condition: A participant is locked.
    path: The preview prevents confirmation and explains the block.
    outcome: Record information remains unchanged.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0265.spec.ts#CRM-ACC-0265'
  - from_step: 6
    condition: Ordinary survivor validation rejects a planned value.
    path: Execution identifies the field and reopens the plan.
    outcome: The transaction leaves all participants unchanged.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0265.spec.ts#CRM-ACC-0265'
rules_in_play:
  - BR-CAP-CRM-DQ-010-06
  - BR-CAP-CRM-DQ-012-03
  - BR-CAP-CRM-DQ-013-05
  - BR-CAP-CRM-DQ-014-01
  - BR-CAP-CRM-DQ-014-14
  - BR-CAP-CRM-DQ-015-03
  - BR-CAP-CRM-DQ-016-02
  - BR-CAP-CRM-DQ-016-06
  - BR-CAP-CRM-DQ-018-01
  - BR-CAP-CRM-DQ-019-04
assertions:
  - id: AS-JNY-CRM-DQ-002-01
    statement: 'Absorbed record routes identify their survivor, while a never-held identity still returns not found.'
    provenance: test
    source: >-
      services-crm:modules/merges/tests/e2e/merged-records.e2e.spec.js#still answers 404 for an id nothing was
      merged under
  - id: AS-JNY-CRM-DQ-002-02
    statement: The permanent outcome retains selected decisions alongside original participant values.
    provenance: test
    source: >-
      services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#carries the decision that was made in the
      merge’s own record, so what was chosen is evidence
  - id: AS-JNY-CRM-DQ-002-03
    statement: Repeated confirmation returns the existing merge instead of another combination.
    provenance: test
    source: >-
      services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#answers the same merge to a second execution
      request, rather than merging twice
e2e_policy: required
e2e_reason: >-
  This flow crosses record-page selection, decision review, acknowledgement, job monitoring and history,
  including browser-specific old-link navigation.
evidence:
  - repository: react-console
    source_sha: baf6dae382d6f41dce976c7f848667ccc37e076f
    paths:
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0248.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0249.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0253.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0254.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0258.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0265.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0286.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/merges/tests/e2e/merged-records.e2e.spec.js
      - modules/merges/tests/e2e/merges.e2e.spec.js
    note: >-
      Static examination uses the cited records and implementation anchors; repository tests are not executed
      by this corpus check.
---

# An administrator combines a sparse contact with a member record

## Story

An administrator investigating a member selects an event-created duplicate from the page indicator. They inspect the survivor recommendation and retain the appropriate member identity. After choosing the sparse record's job title, they review consent and other automatic outcomes, the related work and all omissions. They confirm and follow the job. The old record link and retained merge outcome then let them check where the sparse record went and what the survivor received.
