Look Up Chinese Tax Law or Regulation (fgk.chinatax.gov.cn)
Purpose
Look up an authoritative Chinese tax law, administrative regulation, departmental rule, normative document, or fiscal-tax notice from the State Taxation Administration's official policy & regulation library (国家税务总局政策法规库). Returns the full body text plus every defining-and-explaining document the regulation depends on — the upstream statute, downstream implementation rules, official interpretations (政策解读), policy Q&A (政策问答), operational guidance (政策指引), and previous versions (规章版本归集) — so the answer is complete rather than depending on a single article. Read-only.
When to Use
- A finance / tax user asks "what does Chinese tax law say about X?" and you need the authoritative primary source, not a third-party summary.
- You need a specific document referenced by 文号 (document number, e.g.
财税〔2022〕13号,国家税务总局公告2018年第28号,国务院令第587号). - You need to verify the current effectiveness of a regulation (全文有效 / 已修改 / 全文失效 / 全文废止) before quoting it.
- You need the full text of a tax law (法律), administrative regulation (行政法规), departmental rule (税务部门规章), tax normative document (税务规范性文件), fiscal-tax document (财税文件), or State Council document (国务院文件).
- You need the official interpretation (政策解读) or Q&A (政策问答) that explains how a regulation is to be applied — these are published as separate documents from the regulation itself, which is why a single-document lookup is incomplete.
Workflow
The recommended path is the JSON API, not scripted browsing. The site exposes two clean, CORS-open endpoints — one for keyword search, one for fetching a document plus everything that defines/explains it. Both return well-structured JSON. Use them directly.
-
Search for the regulation by keyword or 文号 —
GET https://fgk.chinatax.gov.cn/search5/search/sreturns JSON.Minimum parameters:
siteCode=bm29000002(fixed — this site's code)searchWord={URL-encoded keyword or 文号}— e.g.%E5%A2%9E%E5%80%BC%E7%A8%8Efor 增值税 (VAT), or%E8%B4%A2%E7%A8%8E%E3%80%942022%E3%80%9513%E5%8F%B7for 财税〔2022〕13号pageNum=1,pageSize=10(1-indexed; up to ~50 works)orderBy=5(relevance — the default)uc=1,left_right_index=0(boilerplate the site requires)
Useful filter parameters:
label={comma-separated document types}— restrict to authoritative sources. The full vocabulary is法律,行政法规,税务部门规章,税务规范性文件,财税文件,工作通知,国务院文件,其他文件,文字政策解读,政策问答,政策指引. For pure regulation lookup, uselabel=法律,行政法规,税务部门规章,税务规范性文件,财税文件,国务院文件,工作通知,其他文件to exclude news/blog noise.column=政策法规— top-level channel filter (政策法规 = Policy & Regulations).orderBy=1to sort by publication date desc instead of relevance.
The response is a large JSON envelope. The hits are at
searchResultAll.searchTotal[]. Total match count is atsearchResultAll.total.Per-hit fields you care about:
title— title with<span>highlight tags around matched chars. Strip<[^>]+>to get plain text.url— canonical detail URL, shapehttp://fgk.chinatax.gov.cn/zcfgk/c{channelCode}/c{articleId}/content.html. Channel codes map to document types (c100009=法律,c100010=行政法规,c100011=税务部门规章,c100012=税务规范性文件,c100013=财税文件,c100014=工作通知,c100015=政策解读,c100016=政策问答, etc.) — do not hardcode them; trust theurlfield.pubDate— publication date.pubName— issuing authority (e.g. 国家税务总局, 财政部).govDoc.docNum/govDoc.docNo/govDoc.docType— official document number (e.g.国务院令第587号).xxgk_effectLevel— document type (法律, 行政法规, 税务部门规章, …).xxgk_aging— current effectiveness:全文有效(fully effective),已修改(amended),全文废止(fully repealed),全文失效(expired), or empty. Always check this before quoting — repealed regulations still appear in search results.xxgk_taxPolicy/xxgk_son_taxPolicy— JSON-stringified tax-category array (e.g.["税费征管","税收政策"],["增值税"]).xxgk_formulatedYear— year enacted.xxgk_abolishDate— repeal date if applicable.shortContent— ~500-char preview of the document body.downloadAppendix— pipe/яяяяя-delimited list of attached files in shape{filename}|{ext}|{absolute-url}. Used for the official DOCX/PDF version.id— composite id, but the article id for the related-docs lookup in step 3 is the secondc{n}inurl, e.g.5238560from/zcfgk/c100011/c5238560/content.html.
The response also has aggregations under
searchResultAll:effectLevelList/labelList(document-type histogram),agingList(effectiveness histogram),taxPolicyList[].sonDatas(tax-category histogram),formulatedYearList(year histogram). Useful for narrowing a noisy query. -
Fetch the full body of each promising hit — the
urlreturned in step 1 already serves a complete HTML article (clean static page, no auth, no JS gating). Fetch it with any HTTP client.For machine-readable content prefer the related-docs endpoint in step 3 — it returns the document's
contentHtmlfield as structured JSON alongside attachments and breadcrumb metadata, which is friendlier to parse than scraping the rendered page. -
CRITICAL — fetch everything that defines and explains the regulation. The task prompt is explicit: "the tax law/regulations might be defined and explained in different documents, you will never forget to check all the details from them." This is what the related-docs API exists for. Do not skip this step.
POST https://www.chinatax.gov.cn/queryManuscriptAssociationContent-Type: application/x-www-form-urlencodedBody:id={articleId}— the article id from step 1 (e.g.5238560).Response shape:
{ code:200, results:{ data:{ total:2, results:[ <currentDoc>, <associations> ] } } }results[0]— the current document itself, fully expanded:contentHtml— the complete document body as HTML (preferred over scraping the rendered page).resList[]— attached files (DOCX, PDF) withfileName+url(resolve relative tohttps://fgk.chinatax.gov.cnif path-relative).channel[]— breadcrumb (e.g.政策法规文件 / 税务部门规章).title,subTitle,publishedTimeForDate,keywords,keyword.
results[1]— associations (the "different documents" the task prompt warns about):policyDocument[]— upstream/parent statutes the current document cites or implements. Each item:{ title, url, effectlevel, writtentext (文号), aging }. Recurse into each — these are the laws/regulations the current document is defined by.policyInterpretation[]— official interpretations (政策解读) of the current document. Each:{ title, url }. Always fetch these — they are how STA explains what the regulation means in practice.policyQA[]— official Q&A documents (政策问答) keyed off the current document. Each:{ title, url }. Fetch these for edge-case rulings.policyGuidance[]— operational guidance documents (政策指引). Fetch if the user asks "how to apply".
-
Optional — fetch version history for departmental rules and laws. When
effectLevelis 法律, 行政法规, or 税务部门规章, those documents have versioned amendments. Call the same endpoint withid=policyFile_{articleId}instead ofid={articleId}. Responseresults[0].policyFile[]lists every version withwrittenDate,title,aging, andurl. Use this to surface "the version effective on date X" rather than just the latest. -
Compose the answer. Return at minimum:
- The primary regulation (title, 文号, issuing authority, publication date, current effectiveness, full body text or relevant article excerpts).
- The cited upstream laws from
policyDocument[](title + 文号 + url, recursed if the user's question depends on the upstream rule). - At least one official interpretation from
policyInterpretation[]if it exists, summarised. - The relevant Q&A from
policyQA[]if any directly answer the user's scenario. - A note on effectiveness — never quote a repealed (
全文废止/全文失效) regulation without flagging it; if已修改, point the user at the current version via the version-history endpoint.
Browser fallback
If your HTTP stack can't reach the API (network policy, proxy issues), use a stealth browser session — the site is on a CDN that occasionally throttles bare HTTP from unusual ASNs and the JSON API requires no anti-bot bypass when called via residential proxy.
browse cloud sessions create --keep-alive --verified --proxiesthenbrowse open https://fgk.chinatax.gov.cn --remote --session $sid.browse fill --remote --session $sid '#header-search-txt' '{query}'thenbrowse press --remote --session $sid 'Enter'. The page redirects tohttps://fgk.chinatax.gov.cn/search5/html/searchResult.html?siteCode=bm29000002&searchWord=….- The search-results page is heavily JS-driven and renders results into a body that often measures
scrollHeight: 109on first paint — visible screenshots come back nearly empty. Either wait 10+ seconds and force awindow.dispatchEvent(new Event('resize')), or skip the rendered page entirely and call the underlying API viabrowse eval:fetch('/search5/search/s?siteCode=bm29000002&searchWord=…').then(r=>r.json()). - To get the related documents (step 3 above) inside the browser:
browse eval --remote --session $sid "fetch('https://www.chinatax.gov.cn/queryManuscriptAssociation',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:'id={articleId}'}).then(r=>r.json())".
The detail pages (/zcfgk/c{channel}/c{id}/content.html) render fine in the browser and can be scraped without any tricks if you really need rendered HTML rather than the API's contentHtml.
Site-Specific Gotchas
- Always check
xxgk_agingbefore quoting. Search results include repealed (全文废止) and expired (全文失效) documents with no visual demotion. For VAT/个税 queries especially, multiple superseded versions coexist with the current one. The 2025-02-26 STA Order #57 (个人所得税综合所得汇算清缴管理办法) supersedes earlier 汇算清缴 announcements that still show up first by relevance — sort/filter byaging/year to avoid quoting stale rules. - The "defining and explaining different documents" requirement maps directly to
queryManuscriptAssociation. The fgk index returns a single article per hit; the interpretations, Q&A, and parent statutes that explain how to apply it are stored as separate articles linked only through this endpoint. Skipping step 3 means you'll quote a regulation without its operational guidance, which is the most common failure mode for tax-policy lookups. - Document numbers (文号) are the highest-precision search key. Use
searchWord=财税〔2022〕13号(URL-encode the full string including the 〔〕 brackets — note these are CJK fullwidth brackets〔〕, NOT ASCII parens) and you typically get the exact document in position 1. Fall back to keywords only when the 文号 is unknown. - Title fields contain inline
<span>highlight tags for every matched character:"title": "<span>个</span><span>人</span><span>所</span><span>得</span><span>税</span>综合所得…". Strip withs.replace(/<[^>]+>/g, '')before display. downloadAppendixuses a strange delimiter. Multiple files are separated byяяяяя(five Cyrillic 'я' characters,я). Each entry is{filename}|{ext}|{absolute-url}. Split onяяяяя, then on|.- The
idfield is composite ({articleId}_{channelGuid}_{siteCode}) — do NOT pass it raw toqueryManuscriptAssociation. Extract the article id from theurlfield instead:url.match(/\/c(\d+)\/content\.html$/)[1]. http://URLs in the response auto-upgrade tohttps://via 302. The site redirects on cleartext detail-page requests but serves the API and content directly over HTTPS. Always call HTTPS and follow redirects.- The related-docs endpoint lives on
www.chinatax.gov.cn, NOTfgk.chinatax.gov.cn. A common mistake is to callhttps://fgk.chinatax.gov.cn/queryManuscriptAssociationand get a 404. Usehttps://www.chinatax.gov.cn/queryManuscriptAssociationexactly as the site'scontent.jsdoes. policyDocument[]URLs sometimes contain the substringzcfgknw(an internal preview hostname). The site's own JS rewrites this tozcfgkbefore use:url.replace('zcfgknw', 'zcfgk'). Do the same.- Channel codes are stable but undocumented. Observed mapping:
c100009=法律 (Laws),c100010=行政法规 (Administrative Regulations),c100011=税务部门规章 (Tax Bureau Departmental Rules),c100012=税务规范性文件,c100013=财税文件,c100014=工作通知,c100015=政策解读,c100016=政策问答. They appear in theurlpath but you should not need to construct URLs by hand — always use theurlfield returned by search. - Search results page (
searchResult.html) renders almost nothing on first paint.document.body.scrollHeightmeasures ~109 px even with 8 of 48 result<li>s in the DOM. Screenshots will look blank. This is why this skill recommends calling the API directly rather than scraping the rendered list. If you must scrape the rendered page, wait at least 10 seconds, dispatch a window resize, and forcedocument.body.style.minHeight='1000px'. - The site is fronted by a Chinese CDN (PSCdn) and returns 200 to bare
fetch/curlfrom many ASNs without proxies. Iteration with--proxieswas used for safety, but the JSON API has no observable anti-bot beyond standard rate limiting. No captcha, no login wall, no Akamai 403s observed. - A
JSESSIONIDcookie is set on first call. It is not required for subsequent requests — the search and association APIs are unauthenticated. searchWordURL-encodes Chinese as UTF-8, then percent-encodes. A double-encoded value (e.g.%25E4%25B8%25AA%25E4%25BA%25BA%25E6%2589%2580%25E5%25BE%2597%25E7%25A8%258E) is auto-decoded once by the server, so single-encoding is correct.- The site advertises a related GraphQL/SOAP API on government metadata (
SiteIDCode bm29000002), but no public GraphQL endpoint was discoverable. Don't waste time hunting for one — the/search5/search/sREST endpoint is the canonical interface.
Expected Output
{
"query": "个人所得税综合所得汇算清缴",
"primary_document": {
"article_id": "5238560",
"title": "个人所得税综合所得汇算清缴管理办法",
"doc_number": "国家税务总局令第57号",
"issuing_authority": "国家税务总局",
"doc_type": "税务部门规章",
"publication_date": "2025-02-26",
"formulated_year": "2025",
"effectiveness": "全文有效",
"abolish_date": null,
"tax_categories": ["个人所得税", "税费征管"],
"url": "https://fgk.chinatax.gov.cn/zcfgk/c100011/c5238560/content.html",
"attachments": [
{
"filename": "个人所得税综合所得汇算清缴管理办法.docx",
"type": "docx",
"url": "http://fgk.chinatax.gov.cn/zcfgk/c100011/c5238560/5238560/files/个人所得税综合所得汇算清缴管理办法.docx"
},
{
"filename": "个人所得税综合所得汇算清缴管理办法.pdf",
"type": "pdf",
"url": "http://fgk.chinatax.gov.cn/zcfgk/c100011/c5238560/5238560/files/个人所得税综合所得汇算清缴管理办法.pdf"
}
],
"content_html": "<p>国家税务总局令</p><p>第57号</p><p>《个人所得税综合所得汇算清缴管理办法》…第一章 总则…第一条 为保护纳税人合法权益,规范个人所得税综合所得汇算清缴工作,根据《中华人民共和国个人所得税法》及其实施条例…</p>"
},
"parent_statutes": [
{
"title": "中华人民共和国个人所得税法",
"doc_type": "法律",
"url": "https://fgk.chinatax.gov.cn/zcfgk/c100009/c5193028/content.html",
"doc_number": "",
"effectiveness": "全文有效"
},
{
"title": "中华人民共和国税收征收管理法",
"doc_type": "法律",
"url": "https://fgk.chinatax.gov.cn/zcfgk/c100009/c5195081/content.html",
"effectiveness": "全文有效"
}
],
"official_interpretations": [
{
"title": "关于《个人所得税综合所得汇算清缴管理办法》的解读",
"url": "https://fgk.chinatax.gov.cn/zcfgk/c100015/c5238563/content.html"
},
{
"title": "2024年度个人所得税综合所得汇算清缴问答",
"url": "https://fgk.chinatax.gov.cn/zcfgk/c100015/c5238556/content.html"
},
{
"title": "个人所得税综合所得汇算清缴提示案例",
"url": "https://fgk.chinatax.gov.cn/zcfgk/c100015/c5238558/content.html"
}
],
"policy_qa": [],
"version_history": [],
"related_total": 557,
"answer_summary": "国家税务总局令第57号《个人所得税综合所得汇算清缴管理办法》自2025年2月26日公布之日起施行,依据《中华人民共和国个人所得税法》《中华人民共和国税收征收管理法》制定。当前状态:全文有效。综合所得包括工资薪金、劳务报酬、稿酬、特许权使用费四项;汇算清缴扣除费用六万元及专项扣除等后按综合所得税率计算应纳税额。详细操作参见解读及2024年度问答。"
}
Outcome variations:
- Not found —
searchResultAll.total === 0. Suggest the user provide the 文号 directly, or try a synonym (e.g. 增值税 vs. 营业税 historically). - Found but repealed —
xxgk_aging === "全文废止"or"全文失效". Return the document but prependeffectiveness_warning: "This regulation is no longer in force as of <abolish_date>. Cite only for historical context."and surface the replacement viapolicyDocument[](the repealing document usually references the repealed one). - Amended —
xxgk_aging === "已修改". Always pullversion_historyvia thepolicyFile_{id}association call and surface both the original and the current consolidated text. - Ambiguous query —
total > 50with multiple effectiveness levels. Narrow withlabel=filter to authoritative document types first, then by tax category viaxxgk_son_taxPolicyfrom the aggregations, then by year. - Interpretation found without primary — when the user describes the rule informally, the top hit may be a 政策解读 (
label=文字政策解读/ channelc100015) rather than the regulation itself. In that case, followpolicyDocument[]from the interpretation back to its primary statute and return that asprimary_document.