Skip to main content
DoneThat

AI Adoption GuideLegalRequest

Duplicate and overlap detection

Checks incoming request against active contracts for scope or counterparty overlap.

Legal processRequestAssessDraftNegotiateApproveSignStoreDispute

By Don, DoneThat’s AI coach · updated

Overview

When a business unit submits a contract request, the first quality question is often not about terms. It is whether the organization already has an agreement that covers the same work, the same vendor, or both. Duplicate and overlap detection runs that check at intake: it compares the incoming request against active contracts in the repository and surfaces possible collisions before drafting begins.

The outcome is quality, not automation. A positive match does not block the request, reroute workflow, or substitute for legal judgment. It gives counsel a structured signal—contract ID plus the specific field where overlap was detected—so review starts with context instead of a blank folder search. When nothing matches, the result is empty and intake proceeds as usual.

This use case sits in the legal/request stage of contract intake, alongside contract request triage, risk tier assignment at intake, and downstream tools like semantic contract search and the portfolio risk dashboard. Overlap detection is narrow by design: it answers "might we already have something for this?" rather than scoring risk or drafting language.

What gets compared

Overlap detection evaluates two dimensions that most often produce duplicate spend and conflicting obligations.

Counterparty overlap means the request names a legal entity, trade name, or parent company that already appears on an active agreement. Exact matches are straightforward. Subsidiary and alias resolution is harder: "Acme Cloud LLC" on a new SaaS request may match "Acme Corporation" on a master services agreement if your repository links entities or if the intake form captures DUNS, tax ID, or normalized vendor master data.

Scope overlap means the requested subject matter, product line, geography, or service category falls within territory already covered by an existing contract. A request for "managed security monitoring in EMEA" may overlap an existing global SOC agreement even when the counterparty differs. Scope comparison relies on structured intake fields (category codes, commodity classes, business unit, region) and, where available, extracted metadata from executed documents (effective services, limitations of liability carve-outs tied to product SKUs, renewal scope).

Active contract status matters. Policies typically exclude expired agreements, drafts under negotiation, and terminated records unless a grace or wind-down clause keeps obligations live. The detection job should respect the same status filters your CLM uses for "in force" reporting.

How detection runs at intake

The check triggers when a request record is created or when required intake fields reach minimum completeness—usually counterparty name, request type, and at least one scope descriptor. Waiting for completeness reduces false positives from half-filled forms.

A typical pipeline has four steps:

  1. Normalize inputs. Trim legal suffixes, map aliases to golden vendor records, standardize region and category codes. Normalization quality drives match precision more than model choice.

  2. Query the active portfolio. Filter to in-force agreements linked to the same business entity or vendor hierarchy. Pre-filter by request type when your taxonomy maps cleanly (e.g., software license vs. professional services).

  3. Score candidate pairs. Rule-based checks run first: same normalized counterparty, same contract family, overlapping effective dates. Semantic or embedding comparison may run on free-text scope descriptions when structured fields are thin, using the same retrieval patterns described in semantic contract search—but overlap detection should prefer explainable field-level hits over opaque similarity scores.

  4. Emit a structured result. On match: one or more objects each containing contractId (or your system's canonical identifier) and overlapField (the intake or repository field that triggered the hit, such as counterparty.legalName, scope.region, or commodityCode). On no match: empty array or null, not a narrative "no issues found" paragraph that counsel must parse.

Keep latency under intake SLA. Most implementations cache active-contract indexes and run counterparty rules synchronously; scope rules against large portfolios may run asynchronously with a webhook that attaches results to the request before it lands in the counsel queue.

Vendor patterns: Ironclad, Icertis, Salesforce, SAP Ariba

Platforms differ in where intake lives, how contracts are keyed, and whether overlap logic is native or composable.

Ironclad centers intake on Workflow Designer and the records API. Duplicate hints often combine workflow conditions (same counterparty on open workflow) with repository search against executed records. Custom metadata on workflow launch forms maps cleanly to overlap fields. Teams frequently implement scope overlap via linked company objects and commodity tags, then surface matches as workflow comments or a dedicated intake panel fed by API search.

Icertis stores agreements in a unified contract model with strong entity and hierarchy support. Discovery and obligation metadata extracted at execution can feed scope rules. Icertis often pairs with ERP vendor masters; counterparty overlap aligns well when supplier IDs sync from SAP or Oracle. Overlap results typically attach as related records or discovery findings on the intake request object.

Salesforce implementations vary: Sales Cloud opportunities, custom "Legal Request" objects, or CLM apps on AppExchange. Duplicate rules and matching rules handle exact counterparty duplicates on standard objects. Contract overlap against a CLM data model usually requires Apex or Flow calling an external search service or Einstein Search indexes. The overlapField pattern maps naturally to which matching rule fired or which lookup field equaled the request value.

SAP Ariba intake flows through requisitions, contracts, and supplier profiles in a procurement-centric model. Counterparty overlap is strong when supplier workspace IDs align. Scope overlap leans on commodity codes, regions on contract terms, and catalog vs. non-catalog flags. Detection may run in Ariba scripting, via Open API against the contract workspace, or in an middleware layer that also serves finance stakeholders viewing the portfolio risk dashboard.

Across vendors, the durable design is the same: store overlap output on the request payload counsel already opens, cite identifiers your organization uses in renewal and audit workflows, and avoid duplicating full contract text in the notification.

Output shape and counsel workflow

Counsel should see a compact table or JSON fragment, not a prose summary alone.

| Match | contractId | overlapField | Example meaning | |-------|------------|--------------|-----------------| | Yes | CTR-2024-8841 | counterparty.normalizedName | Same vendor entity as active MSA | | Yes | CTR-2023-1202 | scope.region | EMEA already covered under framework | | No | — | — | Empty result; no automated flag |

Empty output means the detector found no rule-triggered overlap under current policy. It does not certify uniqueness across the entire enterprise, including paper repositories or acquisitions not yet migrated. Counsel still applies judgment: novel deal structures, side letters, and oral commitments will not appear in automated checks.

When matches exist, counsel decides among common paths: proceed with a amendment or order form under the existing agreement, consolidate duplicate requests, reject redundant procurement, or override the signal after confirming the overlap is immaterial (different legal entity with separate signing authority, non-colliding scope carve-out). Risk tier assignment at intake may run in parallel; overlap detection does not replace tiering—it reduces time spent discovering relationships that tiering assumes are already known.

Document override reasons in the request system when policy requires audit trail. "Overlap dismissed: different cost center, standalone SOW permitted under MSA section 4.2" preserves quality metrics without treating every match as a false positive.

Quality metrics and failure modes

Measure detection as intake quality, not as auto-resolution rate.

Useful indicators include: percentage of requests with non-empty overlap results, counsel confirmation rate (match upheld vs. dismissed), time from request submission to first counsel action, and duplicate spend avoided when procurement consolidates before PO issuance. A rising dismissal rate may mean normalization rules are too aggressive; a flat zero match rate across high-volume vendor categories may mean scope fields are missing on intake forms.

Common failure modes:

  • Alias drift. Vendor rebrands, acquisitions, and DBA names bypass exact match until master data catches up.
  • Scope granularity. Category codes too broad flag benign overlaps; too narrow miss bundled services.
  • Stale status. Expired contracts still marked active produce false positives that erode trust.
  • Split repositories. Procurement-only indexes miss legal-only archives; detection scope should match contract request triage routing assumptions.

Run quarterly sampling: counsel reviews a random set of empty results and confirmed overlaps to tune rules. Prefer adjusting overlapField definitions and normalization over adding opaque scoring that cannot be cited in an audit.

Fitting overlap detection into intake architecture

Treat overlap detection as a synchronous quality gate with empty-default semantics. Wire it after minimum viable intake validation and before assignment to counsel or paralegal queues. Feed the same contract index used for renewal reminders and semantic contract search so identifiers stay consistent.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first