Install
openclaw skills install @yuanzhian-patsnap/assess-high-value-patent-portfolio-ipRank a PatSnap candidate universe with an auditable 30/30/20/20 evidence model.
openclaw skills install @yuanzhian-patsnap/assess-high-value-patent-portfolio-ipUse this skill to turn one reviewed PatSnap patent query into a transparent, reproducible portfolio-screening package. Retrieve the full agreed candidate universe, enrich every candidate for scoring, apply the source 30/30/20/20 model, select a documented 10–15%, and preserve all evidence and failures.
The term high-value describes relative selection under this model. It does not mean monetary value, commercial success, technical quality, validity, enforceability, freedom to operate, essentiality, or investment merit.
Never fabricate a patent record, citation, family member, inventor identity,
legal event, legal status, drawing, technical summary, score, source link, or
missing API result. An endpoint failure stays error; a missing field stays
missing; neither becomes factual zero.
Use this skill when the user asks to:
Do not use it as the sole method for:
Obtain or explicitly mark missing:
Do not silently broaden, narrow, translate, repair, or reformulate the query. If a generated query is proposed, require human approval before execution and record both the draft and approved query.
Always produce:
high_value_patent_portfolio_screening.html — safe static English report;high_value_patent_screening_data.json — all scored candidates plus selected
records and evidence trace;final_records.json — selected report-ready records;Produce only when the user requests Word:
high_value_patent_portfolio_screening.docx — same substantive selection,
scores, rationales, evidence states, limitations, and sign-off controls.The HTML is the required report. The JSON trace is required evidence, not an optional developer artifact. Word is optional.
The report must include:
For each selected patent preserve:
| Field | Required treatment |
|---|---|
rank | Deterministic position after total score and all tie-breaks |
score | 0–100 total plus four component scores |
rationale | Compact source-bounded explanation including missingness |
pn | Publication number from P002 when available |
patent_id | Internal identifier retained in JSON evidence, not exposed as a secret |
record_url | Render only a verified stable global HTTP(S) URL; otherwise plain identifier |
title | Original P002 title, preserving language when returned |
drawing | P021 URL or explicit state; expiring URLs are not durable evidence |
current_assignee | Current assignee/patentee field and source cutoff where available |
legal_status | Raw P041 simple status plus state and checked-as-of date |
patsnap_title | P025 English title, if returned |
tech_problem | P025 English technical-problem summary |
tech_approach | P025 English technical-approach summary |
benefit | P025 English benefit/effect summary |
cited_by_simple_family | P015 value, state, candidate percentile, and scoring method |
simple_family_count | P014 value, state, candidate percentile, and family rule |
core_inventor | Boolean plus exact matched names |
legal_event_evidence | Per-category state, event count, and event records |
gaps | Missing/error/not-run evidence and remediation |
| provenance | Endpoint or connector/tool, retrieval time, request evidence, run ID |
Do not describe P041 simple legal status as proof of enforceability. Do not use title, abstract, drawing, family size, citation count, or AI summary as a proxy for claim scope.
Read references/screening-standard.md before executing or modifying the
model. The default 100 points are:
| Indicator | Weight | Evidence |
|---|---|---|
| Simple-family forward-citation position | 30 | P015 patent_cited.cited_by_simple_family |
| Simple-family size position | 30 | P014 patent_family.simple_family length |
| Core-inventor membership | 20 | Exact inventor names in the P002 candidate universe |
| Verified legal-event activity | 20 | P034/P027/P028/P029 event arrays |
Scores are candidate-universe relative. They are not calibrated estimates of currency, probability, commercial importance, validity, or litigation risk.
For at least ten candidates, calculate the empirical percentile using available numeric observations only:
percentile(value) = count(available values <= value) / count(available values)
component_score = percentile(value) * 30
For fewer than ten candidates:
Always report available and missing counts. A numeric zero returned by an endpoint is different from no returned evidence.
|, semicolon, full-width semicolon, and line
breaks.LASTNAME, FIRSTNAME|LASTNAME, FIRSTNAME; the comma is inside one name.Do not automatically merge initials, spelling variants, transliterations, maiden names, reordered names, or homonyms. Record a user override and its provenance. Do not use final patent scores to define the inventors who contribute to those scores; that is circular.
Qualifying source categories:
patent_litigation_data;patent_reexam_invalid_data;patent_license_data;patent_transfer_data.Score 20 if at least one verified event record exists in any category. Score zero if all four checks succeeded and returned empty. If any required check is missing, failed, or not run, retain the zero-point policy but state that absence cannot be concluded.
An event is not inherently valuable. Litigation and invalidation may be adverse; a license may be expired or intra-group; a transfer may be a security interest or corporate restructuring. Preserve dates, case/proceeding numbers, parties, country/authority, event type, and source locator when returned.
Default:
selected_count = ceil(deduplicated_candidate_count * 0.10)
maximum_count = ceil(deduplicated_candidate_count * 0.15)
Rules:
Tie-break order:
Missing values rank below available values, including factual zero.
The source package contains ten Python files and eight stages. Preserve all of them; do not collapse away checkpoints or evidence.
Use P002 /search/patent/query-search-patent/v2.
query_text.limit and offset.patent_id, then publication number fallback.cand_raw.json.An empty result is a valid state only after a successful call. A request failure is not a no-results conclusion.
For all deduplicated candidates:
/basic-patent-data/patent-family for simple-family members;/basic-patent-data/forward-citation/v3 for
cited_by_simple_family and available detail fields.Batch within documented endpoint limits. Preserve available, empty,
missing, error, or not_run, along with request evidence and errors. Output
enrich_num.json.
For every candidate retrieve:
/high-value-data/litigation;/advanced-patent-data/re-examination-and-invalidation;/advanced-patent-data/license-data;/advanced-patent-data/transfer-data.Retain complete returned event arrays, normalized English category, state,
count, request evidence, and error. Output enrich_legal.json.
scored.json with all candidates, not only selections.For selected patents only:
/basic-patent-data/abstract-image;/high-value-data/tech-problem-and-benefit-summary with lang=en;/basic-patent-data/simple-legal-status.P021 links may expire. Store their state and text alternative; download only for
an explicitly requested Word report, allow HTTP(S) only, reject redirects, cap
bytes, require an image content type, and handle expiration safely. Output
enrich_display.json.
Join scored.json, enrich_display.json, and cand_raw.json by run ID and
patent identifier.
final_records.json and
high_value_patent_screening_data.json.Use scripts/hv_7_html_a.py.
rel="noopener noreferrer" for external links.Use scripts/hv_8_word.py only when requested.
Global base URL:
https://connect.patsnap.com
Authentication:
Authorization: Bearer <private-api-key>
Use PATSNAP_API_KEY or an explicitly configured
PATSNAP_API_KEY_FILE. Do not accept a default working-directory key file.
Require HTTPS, reject redirects, bound connect/read timeouts, retry only
transient HTTP states and network exceptions, honor bounded Retry-After, and
return structured safe errors. Never persist credentials or response bodies in
exceptions.
The source filenames and P-number labels are retained for topology and workflow fidelity. Verify current global endpoint contracts before a live run.
MCP is optional and available only in an MCP-capable host. The reference Python pipeline executes REST; it must never claim it directly called MCP.
| Service | Role | Verified configuration |
|---|---|---|
| Advanced Patent Search | Recommended for candidate query, semantic, classification, assignee, similar-patent, and filtered retrieval | key advanced_patent_search; Official marketplace page https://open.patsnap.com/marketplace/mcp-servers/patent-search; https://open.patsnap.com/marketplace/mcp-servers/patent-search |
| Patent Briefing | Recommended for representative bibliography, family, claims, descriptions, translations, images, status, and technical summary | key patent_briefing; Official marketplace page https://open.patsnap.com/marketplace/mcp-servers/patent-briefing; https://open.patsnap.com/marketplace/mcp-servers/patent-briefing |
| Global Core Patents | Recommended for detailed citation, family, legal-event, licensing, reexamination/invalidation, litigation, and related core data | https://open.patsnap.com/marketplace/mcp-servers/core-patents |
For MCP-import evidence, record connector key, tool name, normalized request, retrieval time, record identifiers, and source response locator. Do not mix REST and MCP-import provenance within one retrieval record. Normalize imported data to the same checkpoint states and retain raw evidence outside the report where the execution environment permits.
Every checkpoint must contain:
schema_version;stage;run_id;generated_at with timezone;source_mode;Consumers must reject incompatible schema versions, missing required fields, and mismatched run IDs. Keep the complete chain with the final report.
| Condition | Required behavior |
|---|---|
| Missing credential | Stop REST retrieval with safe setup guidance |
| Missing reviewed query | Stop before network calls |
| P002 failure | Stop; do not report zero candidates |
| P002 successful empty result | Generate a zero-selection report and trace |
| Candidate cap reached | Mark the universe truncated; do not describe it as complete |
| Repeated page | Stop pagination and record an error |
| P014/P015 failure | Retain affected candidates, zero points under policy, explicit error state |
| Legal endpoint failure | Retain affected candidates; do not conclude absence |
| P025/P041 missing | Keep selected patent and explicit display gap |
| Expired/unsafe drawing URL | Do not embed; show state and text alternative |
| Checkpoint run mismatch | Reject assembly |
| Report link not verified | Render identifier as plain text |
| No Word dependency | HTML/JSON remain valid; explain optional Word requirement |
Before delivery verify:
__pycache__ or .pyc is distributed; andRead:
references/screening-standard.md for model details, states, schema, and
rationale wording;scripts/README.md for secure setup, stage execution, MCP boundaries, and
artifact review;scripts/hv_common.py for global REST, retry, provenance, and checkpoint
helpers;scripts/hv_1_fetch.py through scripts/hv_8_word.py for the complete source
stage topology; andscripts/run_all.py for end-to-end orchestration.