---
id: JNY-CRM-DQ-004
title: An administrator unifies duplicate organizations
feature: FEAT-CRM-DQ-04
product_area: crm
module: data-quality
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - CRM-ACC-0270
  - CRM-ACC-0271
  - CRM-ACC-0282
source_sha:
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
actor: ACT-CRM-009
goal: 'Combine company identities while preserving domains, hierarchy, employees and linked information.'
capabilities:
  - CAP-CRM-DQ-010
  - CAP-CRM-DQ-012
  - CAP-CRM-DQ-017
  - CAP-CRM-DQ-016
  - CAP-CRM-DQ-018
screens:
  - '/console/{tenantId}/crm/organizations/{id}'
  - '/console/{tenantId}/crm/merges/plans/{planId}'
steps:
  - 'n': 1
    surface: '/console/{tenantId}/crm/organizations/{id}'
    action: Launch Merge from the organization page with the duplicate.
    capability: CAP-CRM-DQ-010
    expected: Both organizations enter the preview.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0270.spec.ts#CRM-ACC-0270'
  - 'n': 2
    surface: createMergePlan
    action: Inspect the proposed result.
    capability: CAP-CRM-DQ-012
    expected: The preview explains survivor ranking and the number of people affected.
    provenance: test
    source: >-
      services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#says how many of each record’s people the merge
      moves, in a sentence with no id in it
  - 'n': 3
    surface: updateMergePlan
    action: Choose the primary domain and a valid parent.
    capability: CAP-CRM-DQ-017
    expected: Other domains remain alternate and cycle-producing parents are unavailable.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0270.spec.ts#CRM-ACC-0270'
  - 'n': 4
    surface: executeMergePlan
    action: Confirm the reviewed organization combination.
    capability: CAP-CRM-DQ-016
    expected: Background execution succeeds.
    provenance: test
    source: 'services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#runs the merge to the end'
  - 'n': 5
    surface: '/console/{tenantId}/crm/organizations/{id}'
    action: Inspect the survivor's people.
    capability: CAP-CRM-DQ-017
    expected: 'Affiliations move, equivalent stays combine and work links use the retained details.'
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0282.spec.ts#CRM-ACC-0282'
  - 'n': 6
    surface: getOrganization
    action: Open the absorbed organization's prior link.
    capability: CAP-CRM-DQ-018
    expected: The response identifies its survivor.
    provenance: test
    source: >-
      services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#answers 410 record_merged to a read of the id
      the merge took away, naming the survivor
alternates:
  - from_step: 2
    condition: The plan moves a very large employee population.
    path: Review its duration and editing-wait warning.
    outcome: The administrator chooses a quiet time for execution.
    provenance: test
    source: 'react-console:acceptance/crm/playwright/journeys/merging/CRM-ACC-0271.spec.ts#CRM-ACC-0271'
failures:
  - from_step: 2
    condition: 'The planned employee movement exceeds 100,000.'
    path: Size validation blocks the plan.
    outcome: The records remain unchanged.
    provenance: unknown
    source: FND-CRM-DQ-031
  - from_step: 2
    condition: The caller can merge contacts but lacks organization authority.
    path: The service denies the organization plan.
    outcome: No merge changes occur.
    provenance: test
    source: >-
      services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#refuses the plan to a caller who may merge
      contacts but not organizations
rules_in_play:
  - BR-CAP-CRM-DQ-017-01
  - BR-CAP-CRM-DQ-017-02
  - BR-CAP-CRM-DQ-017-04
  - BR-CAP-CRM-DQ-017-05
  - BR-CAP-CRM-DQ-017-06
  - BR-CAP-CRM-DQ-012-02
assertions:
  - id: AS-JNY-CRM-DQ-004-01
    statement: All distinct participant domains remain on the surviving organization.
    provenance: test
    source: >-
      services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#keeps the organization that was chosen, with
      every domain the two held
  - id: AS-JNY-CRM-DQ-004-02
    statement: Employees affiliated to the absorbed organization become affiliated to its survivor.
    provenance: test
    source: >-
      services-crm:modules/merges/tests/e2e/merges.e2e.spec.js#moves the employee of the organization that
      went to the one that stayed
e2e_policy: required
e2e_reason: >-
  Organization decisions cross hierarchy, employee links and long-running warnings that require a browser
  journey alongside backend checks.
evidence:
  - repository: react-console
    source_sha: baf6dae382d6f41dce976c7f848667ccc37e076f
    paths:
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0270.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0271.spec.ts
      - acceptance/crm/playwright/journeys/merging/CRM-ACC-0282.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/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 unifies duplicate organizations

## Story

An administrator launches a plan for an organization and its duplicate. They inspect the recommended identity and employee movement, choose the domain and valid parent and confirm. Afterwards they inspect employees and linked work details on the survivor. The original organization link identifies the new destination. A large plan calls for reviewing its duration warning before choosing an appropriate time.
