Skip to content

CAP-CRM-DQ-009Record a duplicate that matching missed

Markdown

CAP-CRM-DQ-009

Record a duplicate that matching missed

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationPartially observed

Planning

Feature
FEAT-CRM-DQ-02
Exercised by
FAS-CRM-DQ-02-04, FAS-CRM-DQ-02-05
Key concepts
CON-CRM-DQ-001
Actors
ACT-CRM-008
Related
CAP-CRM-DQ-007, CAP-CRM-DQ-012
Open questions
OQ-CRM-DQ-004
Proved by
ATS-CRM-DQ-009

Implementation

Executable suites
TST-CRM-DQ-180, TST-CRM-DQ-182

KindCapabilityProduct areaCRMModuleDuplicate Review and Record MergingRevision1

Read atservices-crm a8d1364freact-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Manual confirmation covers known shared identities missed by detection.The product should let nonmerging reviewers hand confirmed duplicates to administrators.
Surfaces
apiconsole
Intent sources
services-crm:docs/merging/experience/functional-requirements.md#MAN-7 and REV-6 (package approved by Andrew 2026-10-13)services-crm:docs/merging/README.md#Status (architecture and plan approved by Andrew 2026-10-11)

Controls

22 controls apply, from the corpus control catalogue.

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-002 TC-PI-003 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-TEN-001 TC-TEN-002 TC-TEN-003

Permissions

KeyChecked atScope
crm.duplicates.reviewapitenant

Business Rules

6 rules, 5 to be proved before approval. A rule's product intent is derived from its origin: 6 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
Manual confirmation stores a confirmed pair at score 100 with manual origin and one reason identifying the reviewer and note.
origin: services-crm:docs/merging/duplicate-detection.md#8. Dismiss, confirm, reconsider
lifecycleservicetest
02must prove
Confirmed
Confirming an existing candidate updates it in place, replaces scored reasons with the human reason and overrules any dismissal.
lifecycleservicetest
03must prove
Confirmed
Confirmation requires exactly two distinct, existing workspace records of one type, rejects repetition and returns not found for a missing record.
validationapi, servicetest
services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#refuses a manual pair that does not name two records (400)
04must prove
Confirmed
Duplicate-review authority is required to confirm; duplicate-read authority alone is refused.
origin: services-crm:docs/merging/architecture.md#9. Security and tenant isolation
permissionapitest
services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#answers 403 to that reader saying two records are the same
05
Confirmed
The response presents the confirmed pair identically whether the service inserted it or converted an existing candidate.
policyapitest
services-crm:modules/duplicates/tests/e2e/duplicates.e2e.spec.js#confirms a pair somebody says is the same person, at full score and by hand, answering 200 and not 201
06must prove
Confirmed
The product should let reviewers without merge authority confirm duplicates and add another record to the reviewed group from the console.
policyconsoleunknown

Scenarios

IdGivenWhenThenProvenance
01A candidate is dismissed.A reviewer manually confirms the shared identity.The same candidate becomes confirmed at full score with the human reason and no group membership.test
02A pair has manual origin and confirmed status.A record edit reduces its computed resemblance.The updated score retains the confirmation and manual origin.unknown

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.