Priority Claim Chain Validation
Priority claim chain validation is the process of proving, link by link, that every priority and benefit claim a patent application relies on is legally intact — filed inside its statutory window, correctly referenced, and unbroken back to the earliest application — so that the single date the entire portfolio computes against is defensible rather than assumed. A chain that looks continuous on a cover sheet but contains one gap silently corrupts every deadline derived from it.
The earliest priority date is the load-bearing input of a docketing engine: it anchors the 30/31-month national-phase window, the twenty-year term measured from the earliest non-provisional filing, and patent term adjustment. When that date is wrong, nothing downstream is right. This page specifies how to model a priority chain, resolve its earliest date deterministically, and detect the breaks that invalidate it, feeding trusted anchors to the parent Automated Deadline Calculation & Rule Engines framework. It sits alongside the PCT National Phase Entry Rules that consume the resolved date and the Continuation & CIP Deadline Tracking rules that extend the domestic-benefit branch of the same chain. The concrete failure modes and a family-walking algorithm are treated in the companion guide, Detecting Broken Priority Chains in PCT Filings.
Why the Priority Chain Is the Load-Bearing Structure
Every high-value patent deadline is computed relative to a date the applicant claims, not a date the office assigns. The office records the claim; it does not, at docketing time, certify that the claim is valid. That gap is where malpractice lives. A docketing engine that trusts the priority date printed on a filing receipt inherits any defect in the underlying chain — a foreign application filed thirteen months before the PCT, a continuation that lost copendency, a provisional whose subject matter never actually supports the later claims. The engine will compute a perfectly precise, perfectly wrong 30-month date, and it will look correct until an examiner or an opponent unwinds it.
Validation is therefore a distinct responsibility from calculation. The calculation layer answers “given this base date, when is the deadline?” The validation layer answers the prior question: “is this base date one the applicant is legally entitled to?” Conflating the two hides the most dangerous class of error, because a confident wrong answer is worse than a flagged unknown. This page keeps the two separate: it resolves and verifies the earliest priority date, then hands only a validated anchor to the rule engine.
The chain also matters because it is mutable in ways a single filing date is not. Priority claims can be added or withdrawn within a correction window (PCT Rule 26bis), a parent application can be abandoned and break copendency, and a restoration decision can retroactively rescue a claim that was facially late. A validated chain must therefore be recomputed whenever any member of the application family changes state, not frozen at first docketing.
Operational Action: Treat the earliest priority date as a derived value with an audit trail, never a stored constant. Recompute and re-validate the whole chain on any family event — a new benefit claim, a parent abandonment, a restoration grant — and version each resolved anchor so a later shift is visible rather than silent.
The Governing Instruments
A priority chain spans three legal regimes, and each link must be checked against the instrument that actually governs it. Conflating a Paris Convention foreign-priority link with a domestic-benefit link is a common and consequential error, because they carry different time limits, different reference requirements, and different recovery paths.
Paris Convention priority. Paris Convention Article 4 grants a twelve-month priority period for patents, running from the filing date of the first regularly filed application. A later application in another member state claiming that priority is treated as filed on the earlier date for novelty purposes, provided it is filed within twelve months. PCT Article 8 carries this into the international system, and PCT Rule 4.10 governs the formal content of the priority claim.
US domestic benefit. A US non-provisional can claim the benefit of an earlier US filing under two distinct statutes. Foreign priority and provisional benefit run under 35 U.S.C. § 119 — subsection (a) for a foreign application, subsection (e) for a US provisional, each with a twelve-month window. Benefit of an earlier US non-provisional — the continuation, divisional, and continuation-in-part relationships — runs under 35 U.S.C. § 120, which imposes no twelve-month cap but requires copendency (the child filed before the parent is patented, abandoned, or terminated) and a specific reference to the parent under 37 CFR § 1.78.
Restoration. A facially late Paris claim — filed after twelve months but within two additional months — can be rescued by restoration of the right of priority under PCT Rule 26bis.3 at the receiving-office stage, given effect in the US under 37 CFR § 1.452, with the standard set at either “unintentional” or “due care” depending on the office.
| Link type | Governing instrument | Time limit | Extra requirement | Recovery path |
|---|---|---|---|---|
| Foreign priority (Paris) | Paris Art. 4; PCT Art. 8; 35 U.S.C. § 119(a) | 12 months | Priority claim under PCT Rule 4.10 | Restoration, PCT Rule 26bis.3 |
| Provisional benefit | 35 U.S.C. § 119(e); 37 CFR § 1.78 | 12 months | Specific reference; provisional support | Restoration (US), 37 CFR § 1.78 |
| Domestic benefit (cont./div./CIP) | 35 U.S.C. § 120; 37 CFR § 1.78 | none | Copendency; specific reference | Petition to revive parent |
| Restored priority | PCT Rule 26bis.3; 37 CFR § 1.452 | +2 months | “Unintentional” or “due care” showing | — |
Operational Action: Tag every link in the model with its governing statute and time limit as data, not as an implied property of the jurisdiction. A validator that hard-codes “12 months for everything” will wrongly reject a valid § 120 continuation and wrongly accept a late foreign claim that needed restoration.
Resolving the Earliest Priority Date
The earliest priority date is not simply the oldest date in the family — it is the oldest date reachable through an unbroken sequence of valid links. A withdrawn foreign priority, or a benefit claim broken by lost copendency, must be excluded from the walk even though the application it points to still exists in the record. Resolution is therefore a graph traversal that stops at the first invalid link on each branch.
Model the family as a directed graph: nodes are applications, edges are priority or benefit claims pointing from a child to its parent. The earliest valid priority date is the minimum filing date over all nodes reachable from the application under examination by valid edges only. This is the value everything downstream anchors to, so the resolver must be explicit about why a branch was pruned.
from __future__ import annotations
from datetime import date
from enum import Enum
from dateutil.relativedelta import relativedelta
from pydantic import BaseModel, Field, model_validator
class ClaimBasis(str, Enum):
PARIS = "paris_convention" # foreign priority, Paris Art. 4 / 35 USC 119(a)
PROVISIONAL = "provisional" # 35 USC 119(e)
DOMESTIC = "domestic_benefit" # 35 USC 120 (continuation / divisional / CIP)
class PriorityLink(BaseModel):
"""One edge in the priority graph: child claims priority/benefit of parent."""
child_app: str = Field(pattern=r"^[A-Z]{2}[A-Za-z0-9/.-]+$")
parent_app: str = Field(pattern=r"^[A-Z]{2}[A-Za-z0-9/.-]+$")
basis: ClaimBasis
child_filing_date: date
parent_filing_date: date
parent_terminated_date: date | None = None # patent/abandon/terminate date
restored: bool = False # PCT Rule 26bis.3 grant on record
@model_validator(mode="after")
def _parent_precedes_child(self) -> "PriorityLink":
# A parent filed on or after its child is structurally impossible.
if self.parent_filing_date >= self.child_filing_date:
raise ValueError("parent_filing_date must precede child_filing_date")
return self
def window_ok(self) -> bool:
"""Is this link inside its statutory window?"""
if self.basis is ClaimBasis.DOMESTIC:
# 35 USC 120: no 12-month cap, but copendency is required.
if self.parent_terminated_date is None:
return True # parent still pending — copendent
return self.child_filing_date <= self.parent_terminated_date
# Paris / provisional: 12 months, extended to 14 if priority was restored.
months = 14 if self.restored else 12
latest = self.parent_filing_date + relativedelta(months=months)
return self.child_filing_date <= latest
The window_ok method encodes the crucial asymmetry: a domestic-benefit link has no month cap but demands copendency, while a Paris or provisional link is capped at twelve months (fourteen if a restoration decision is on record). The resolver then walks parents, following only links whose window holds:
def earliest_priority_date(target: str, links: list[PriorityLink]) -> date:
"""Minimum filing date reachable from `target` through valid links only."""
by_child: dict[str, list[PriorityLink]] = {}
filing: dict[str, date] = {}
for link in links:
by_child.setdefault(link.child_app, []).append(link)
filing[link.child_app] = link.child_filing_date
filing[link.parent_app] = link.parent_filing_date
earliest = filing[target]
stack = [target]
seen: set[str] = set()
while stack:
node = stack.pop()
if node in seen: # guard against cyclic/duplicated claims
continue
seen.add(node)
for link in by_child.get(node, []):
if not link.window_ok():
continue # broken link — prune this branch
earliest = min(earliest, link.parent_filing_date)
stack.append(link.parent_app)
return earliest
Operational Action: Persist the resolved earliest date together with the exact set of links traversed to reach it. When a later restoration grant or a parent abandonment changes which links are valid, a diff of the traversal set is the audit evidence that explains why the anchor moved.
Restoration of the Right of Priority
Restoration is the single most misunderstood link in the chain, and mishandling it produces both false rejections and false acceptances. When a Paris or provisional priority claim is filed after the twelve-month period but within a further two months, the right is not automatically lost — it can be restored under PCT Rule 26bis.3 if the failure to file in time occurred despite due care, or was unintentional, depending on the criterion the office applies. The US as receiving office applies the “unintentional” standard under 37 CFR § 1.452.
Two subtleties trip up naive validators. First, restoration is office-specific in effect: a restoration granted by the receiving office is given effect in a designated state only under PCT Rule 49ter, and a state that entered a reservation may not honour it. A chain that is valid for EP entry may be broken for a state that does not recognise the restoration. Second, restoration extends the filing window, not the priority period itself — the twelve-month measuring point for downstream deadlines is unchanged, so the 30/31-month national-phase date still runs from the original priority date, not from the restored filing.
The model above captures the first-order case with a restored flag that widens the window from twelve to fourteen months. A production system must additionally record which office granted the restoration and under which criterion, and must down-rank the link in any designated state that entered a Rule 49ter reservation.
Operational Action: Store restoration as a first-class attribute of the link — granting office, criterion applied, and grant date — not as a widened tolerance. Then evaluate each national-phase branch against that state’s Rule 49ter position, so a chain that is intact for one office and broken for another is reported as exactly that, per office.
Failure Modes & Edge Cases
- Silent twelve-month overrun. A foreign application filed 12 months and 3 days before the PCT, with no restoration on record, is a broken Paris link. The chain must be pruned at that edge and the downstream anchor recomputed from the next valid parent — not accepted because the claim appears on the request form.
- Lost copendency. A 35 U.S.C. § 120 benefit claim to a parent that was abandoned before the child was filed is invalid regardless of what the reference statement says. Copendency is a date comparison, and the parent’s termination date must be an input to the validator.
- Missing specific reference. A benefit claim that is legally available but never actually recited in the specification or application data sheet under 37 CFR § 1.78 does not exist for docketing purposes. Absence of the reference is a broken link, not a warning.
- Restoration honoured unevenly. A restored priority recognised for US entry but rejected by a designated state that entered a PCT Rule 49ter reservation yields two different valid chains for the same family. Reporting a single global “valid/invalid” hides the divergence.
- CIP subject-matter drift. A continuation-in-part adds new matter, and only claims fully supported by the parent are entitled to the parent’s date. The chain structure can be intact while a specific claim is not entitled to the early date; claim-level entitlement is a separate check treated under Continuation & CIP Deadline Tracking.
- Cyclic or duplicated claims. A malformed family record can reference an application as its own ancestor. The traversal must carry a
seenset (as above) so a cycle terminates instead of looping forever.
Verification & Regression Testing
Treat the resolver as compliance code and pin its behaviour against recorded families, including deliberately broken ones. Because the output is a single date that drives everything else, a test suite must assert both the resolved value and the set of links that produced it.
from datetime import date
def test_valid_paris_link_resolves_to_parent() -> None:
links = [
PriorityLink(child_app="WO2023000001", parent_app="US63000001",
basis=ClaimBasis.PROVISIONAL,
child_filing_date=date(2023, 5, 1),
parent_filing_date=date(2022, 6, 1)),
]
assert earliest_priority_date("WO2023000001", links) == date(2022, 6, 1)
def test_overrun_link_is_pruned() -> None:
# Child filed 13 months after parent, no restoration -> link is broken,
# so the earliest date falls back to the child's own filing date.
links = [
PriorityLink(child_app="WO2023000002", parent_app="EP22000001",
basis=ClaimBasis.PARIS,
child_filing_date=date(2023, 7, 1),
parent_filing_date=date(2022, 6, 1)),
]
assert earliest_priority_date("WO2023000002", links) == date(2023, 7, 1)
def test_restoration_reopens_the_window() -> None:
# Same 13-month gap, but restoration is on record -> link is valid.
links = [
PriorityLink(child_app="WO2023000003", parent_app="EP22000001",
basis=ClaimBasis.PARIS, restored=True,
child_filing_date=date(2023, 7, 1),
parent_filing_date=date(2022, 6, 1)),
]
assert earliest_priority_date("WO2023000003", links) == date(2022, 6, 1)
A corpus of real family shapes — a clean single-priority PCT, a multi-priority filing, a broken continuation, a restored late claim — run in CI is the best defence against a change that accidentally makes a broken link look valid. Configuration for the validator is version-pinned to its governing sources:
# config/validation/priority_chain.yaml
# Priority-chain validator thresholds and citations.
# Paris Convention Art. 4: https://www.wipo.int/wipolex/en/text/288514
# PCT Rule 26bis.3 (restoration): https://www.wipo.int/pct/en/texts/rules/r26bis.html
# 35 U.S.C. 120 (copendency): https://www.uspto.gov/web/offices/pac/mpep/s211.html
priority_chain:
paris_window_months: 12
restoration_extension_months: 2 # PCT Rule 26bis.3 filing window
restoration_criteria: ["unintentional", "due_care"]
domestic_benefit_requires_copendency: true
honour_rule_49ter_reservations: true # per-designated-state effect of restoration
Operational Action: Include at least one deliberately broken family per link type in the regression corpus and assert the pruned result, not just the happy path. The dangerous regression is the one that silently starts accepting a broken link, and only a broken-input test catches it.
Operational Action Summary
Operational Action: Resolve the earliest priority date as a derived value, store it with its traversal set, and re-validate on every family event so a shifted anchor is always visible in the audit trail.
Operational Action: Tag each link with its governing statute and window; never assume a single twelve-month rule covers domestic-benefit chains, which are capped only by copendency under 35 U.S.C. § 120.
Operational Action: Model restoration per office and per designated state under PCT Rule 49ter, and hand only validated, office-specific anchors to the PCT National Phase Entry Rules calculators.
Frequently Asked Questions
What is the difference between a priority claim and a domestic benefit claim?
If a foreign priority application was filed 13 months before the PCT, is the chain always broken?
Does restoration of priority change the 30-month national phase deadline?
Why resolve the earliest priority date instead of just reading it off the filing receipt?
Related
- Automated Deadline Calculation & Rule Engines — the framework that consumes the validated earliest priority date.
- PCT National Phase Entry Rules — the 30/31-month calculators anchored on the resolved date.
- Continuation & CIP Deadline Tracking — the domestic-benefit branch and claim-level entitlement.
- Detecting Broken Priority Chains in PCT Filings — the concrete failure modes and a family-walking detector.
- National Phase Entry Date Logic — how the anchored date becomes a computed entry deadline.