How to Map PCT Rule 47 Deadlines to National Phase
Mapping PCT Rule 47 to national phase means treating the International Bureau’s document-transmittal schedule as a notification signal, never as the controlling entry deadline — the deadline itself is fixed by PCT Articles 22 and 39 and each designated office’s implementing statute.
Automated docketing systems that conflate the two produce confidently wrong dates. Rule 47.1(a) tells the International Bureau (IB) when to forward copies of the international application to designated offices; national phase entry is a separate act with its own statutory clock. This walkthrough shows the exact date arithmetic, the per-office override that shifts 30 months to 31, the business-day shift, and the audit logging required to make the mapping defensible. It is the practitioner-level counterpart to the National Phase Entry Date Logic engine and sits inside the broader Core Docketing Architecture & Deadline Types schema so rule inheritance stays consistent across international and domestic tracks.
Statutory Specification: Rule 47 Versus Articles 22 and 39
Three provisions govern the mapping, and each answers a different question:
- PCT Rule 47.1(a) — the IB “shall promptly” communicate the international application to each designated office, and by Rule 47.1(a) that communication is effected such that offices hold the documents by the expiry of the relevant time limit. This is a transmittal anchor, not a deadline the applicant must meet. Source: WIPO PCT Regulations, Rule 47.
- PCT Article 22(1) — the applicant must perform the acts of national phase entry (translation, national fee, and where required a copy of the application) not later than 30 months from the priority date, for offices bound by the modified Article 22. Source: WIPO PCT Article 22.
- PCT Article 39(1)(b) — where a Chapter II demand is filed in time, the equivalent act is due not later than 30 months from priority; individual offices set the operative figure by reservation or regional law. The European Patent Office applies 31 months under Rule 159(1) EPC regardless of Chapter II election. Source: WIPO PCT Article 39.
Two supporting rules decide how the date lands. PCT Rule 80.5 governs expiry of periods that fall on a day the office is closed, extending them to the next working day. For European work, Rule 134(1) EPC provides the equivalent extension when the EPO is not open for receipt of documents. The month count itself is governed by the current WIPO PCT Contracting States table, which is versioned input — a state can file or withdraw a reservation that changes its window — never a constant baked into logic.
Minimal Reproducible Implementation
Compute the Rule 47 transmittal anchor and the statutory national phase deadline as two independent values from the same priority date, preserving a hash of the inputs so any docketed date can be traced back to the exact arithmetic that produced it. This mirrors the discipline enforced across the PCT 30/31 Month Deadline Calculators module.
import hashlib
import logging
from datetime import datetime, timezone
from typing import Optional
from dateutil.relativedelta import relativedelta
from zoneinfo import ZoneInfo
logger = logging.getLogger("pct_deadline_engine")
def derive_rule47_and_national_phase(
priority_date: Optional[datetime],
filing_date: datetime,
statutory_months: int = 30,
) -> dict[str, object]:
"""Compute the Rule 47 IB transmittal anchor and the statutory
national phase deadline for a single designated office.
`statutory_months` is resolved per office (see the override matrix
below): 30 for Article 22 states, 31 for the EPO under Rule 159(1) EPC.
Call once per designated office rather than assuming one global window.
"""
if priority_date is None:
# Fallback: no valid priority claim → anchor on the PCT filing date.
# Article 2(xi) treats the international filing date as the reference
# when there is no earlier priority; flag for attorney confirmation.
logger.warning("PRIORITY_DATE_NULL: anchoring on international filing date.")
priority_date = filing_date
# Normalize to UTC so the arithmetic has one unambiguous origin.
if priority_date.tzinfo is None:
priority_date = priority_date.replace(tzinfo=timezone.utc)
original_day = priority_date.day
rule47_transmittal = priority_date + relativedelta(months=30)
national_phase_deadline = priority_date + relativedelta(months=statutory_months)
# relativedelta clamps to month-end when the target month is shorter
# (the "corresponding date" behaviour). Log the clamp for review.
day_shifted = national_phase_deadline.day != original_day
if day_shifted:
logger.info(
"MONTH_END_ROLLOVER: anchor day %s clamped to %s (PCT Rule 80.2 corresponding date).",
original_day, national_phase_deadline.day,
)
# Deterministic hash — not Python's built-in hash(), which is salted per run.
payload = f"{priority_date.isoformat()}|{statutory_months}"
calculation_hash = hashlib.sha256(payload.encode()).hexdigest()
return {
"priority_date": priority_date.isoformat(),
"rule47_transmittal": rule47_transmittal.isoformat(),
"national_phase_deadline": national_phase_deadline.isoformat(),
"statutory_months": statutory_months,
"day_shifted": day_shifted,
"calculation_hash": calculation_hash,
}
The statutory_months argument is resolved from a version-pinned override file rather than hardcoded, because the 30-vs-31 split is jurisdictional:
# jurisdiction_overrides.yaml
# Source of truth: WIPO PCT Contracting States table — re-verify each release.
# https://www.wipo.int/pct/en/pct_contracting_states.html
rule_version: "2026.07.0"
jurisdictions:
US: # 35 U.S.C. 371(b); 37 CFR 1.7 weekend/holiday shift
statutory_window_months: 30
holiday_rule: "forward_shift"
translation_split: false
EP: # PCT Art. 39(1)(b) as applied under Rule 159(1) EPC
statutory_window_months: 31
holiday_rule: "forward_shift"
translation_split: true
fee_deadline_offset_days: 0
CN: # PCT Art. 22(1); no reservation on file
statutory_window_months: 30
holiday_rule: "forward_shift"
translation_split: false
JP: # PCT Art. 22(1); 30-month standard entry
statutory_window_months: 30
holiday_rule: "forward_shift"
translation_split: true
A raw statutory date that lands on a weekend or an office closure must roll forward under PCT Rule 80.5 (or Rule 134(1) EPC). The shift loop must re-test after each increment, because rolling off a Sunday can land on a Monday that is itself a holiday:
from datetime import datetime, timedelta
import holidays
def normalize_business_day(deadline: datetime, office: str) -> tuple[datetime, bool]:
"""Roll a deadline forward to the next open day for the office.
For EPO deadlines, substitute the curated closure calendar published
annually in the EPO Official Journal rather than a generic national set.
"""
country = office[:2].upper()
cal = holidays.country_holidays(country, years=[deadline.year, deadline.year + 1])
current, adjusted = deadline, False
while current.weekday() >= 5 or current.date() in cal: # 5=Sat, 6=Sun
current += timedelta(days=1)
adjusted = True
return current.replace(hour=23, minute=59, second=59), adjusted
Operational Action: Treat jurisdiction_overrides.yaml as code — gate every change through peer review by patent counsel, pin rule_version, and refuse any deadline whose office entry predates the current WIPO Contracting States table release.
Known Gotchas & Compliance Traps
The mapping fails in a small number of specific, repeatable ways. Each must be caught before a date reaches the docket, not after.
- Transmittal date mistaken for the deadline. Rule 47.1(a) schedules IB document forwarding; it does not extend or set the entry deadline. Docketing the Rule 47 communication date as the actionable due date silently under- or over-states the real Article 22/39 window. Compute both values separately and label the transmittal record as informational only.
- Global 30-month assumption. Applying a single 30-month window to every designated office misses the EPO’s 31 months under Rule 159(1) EPC (and any other office-specific reservation). Resolve
statutory_monthsper office from the pinned override file and fail closed on an unmapped office rather than defaulting to 30. - Corresponding-date clamp on short months. A 31st-of-the-month or February-29 anchor is where naive arithmetic produces the wrong month.
relativedeltaclamps to the last valid day (PCT Rule 80.2 “corresponding date”), which is legally correct — but theday_shiftedflag must fire so a paralegal can confirm before final docketing. - Holiday collision after the weekend shift, and stale calendars. Rolling a Sunday forward can land on a Monday closure, so the shift must loop (as above). Equally dangerous is a holiday dataset that lags an office’s published closures — pin the calendar to a release tag, alert on staleness, and for the EPO use the Official Journal closure list rather than a generic national holiday set.
Operational Action: Log every computation — inputs, resolved window, day_shifted, business-day adjustment, output, and calculation_hash — to append-only, write-once storage, and route any record triggered by the PRIORITY_DATE_NULL fallback to a paralegal review queue before the deadline is emitted.
Integration Point
This mapping is one node in the docketing pipeline, not a standalone calculator. Upstream, the earliest valid priority date and the designated-office list arrive already de-duplicated from portal synchronization — see the polling etiquette in WIPO PATENTSCOPE Integration and the authoritative source data resolved by the parent PCT National Phase Entry Rules framework. The derive_rule47_and_national_phase() output then feeds the reminder-dispatch and escalation layer, while every calculation_hash is written to the immutable audit trail so a compliance dashboard can replay exactly which inputs produced a docketed date. Who may read or override a computed deadline is governed by the Security & Access Control Boundaries module.
When deadline misalignment is reported, the recovery sequence is deterministic: query the audit log by calculation_hash, confirm the jurisdiction config version matches the filing date’s effective statutes, re-run the derivation against the original inputs, re-apply business-day normalization with a verified calendar, and — only if automated logic conflicts with local counsel — apply a documented override carrying override_reason, authorized_by, and effective_date while preserving the original automated output. Never patch a historical calculation in place; append a correction record with explicit versioning.
Frequently Asked Questions
Is the PCT Rule 47 transmittal date the national phase entry deadline?
What happens if the 30-month PCT deadline falls on a weekend in the US?
normalize_business_day() helper applies this and returns an adjusted flag so the audit record shows the emitted date differs from the raw statutory date.
Why does the EPO use 31 months when most offices use 30?
statutory_window_months value, never a global default.
How should the mapping behave when the priority claim is missing or withdrawn?
PRIORITY_DATE_NULL warning. Because a broken priority chain changes the entire window, the record must be routed to attorney review rather than silently docketed, and the fallback must be visible in the audit trail.
What if a designated office is not in the override file?
For authoritative references, consult the WIPO PCT Regulations, Rule 47, PCT Article 22 and Article 39, the WIPO PCT Contracting States table, and USPTO MPEP § 1893.03 for the U.S. entry acts. Python implementations should rely on dateutil.relativedelta for calendar-month arithmetic and the standard-library zoneinfo module. This walkthrough sits under the parent ← PCT National Phase Entry Rules framework; practitioners will also want the sibling National Phase Entry Date Logic engine.