dsh-hs-classify 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README-es.md +94 -0
- package/README-hi.md +94 -0
- package/README-pt.md +94 -0
- package/README-zh.md +94 -0
- package/README.md +136 -2
- package/cordis.patch.yml +8 -0
- package/icon.svg +6 -0
- package/lib/index.d.mts +52 -0
- package/lib/index.mjs +2705 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +87 -4
- package/rules/citations-baseline.json +4 -0
- package/rules/hs-classify.yaml +169 -0
package/locale/en.json
ADDED
package/locale/zh.json
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,89 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-hs-classify",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "商品归类层级一致性核对(按章、品目、子目与商品编号的层级关系核对自洽,仅提示差异,不作出定性结论)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "lib/index.mjs",
|
|
7
|
+
"types": "lib/index.d.mts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./lib/index.d.mts",
|
|
11
|
+
"default": "./lib/index.mjs"
|
|
12
|
+
},
|
|
13
|
+
"./locale/*.json": "./locale/*.json",
|
|
14
|
+
"./icon": "./icon.svg"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"lib",
|
|
18
|
+
"cordis.patch.yml",
|
|
19
|
+
"README.md",
|
|
20
|
+
"README-zh.md",
|
|
21
|
+
"README-es.md",
|
|
22
|
+
"README-pt.md",
|
|
23
|
+
"README-hi.md",
|
|
24
|
+
"locale/*.json",
|
|
25
|
+
"icon.svg",
|
|
26
|
+
"rules"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsdown",
|
|
30
|
+
"typecheck": "tsc --noEmit",
|
|
31
|
+
"test": "vitest run",
|
|
32
|
+
"verify:self-contained": "node scripts/verify-self-contained.mjs",
|
|
33
|
+
"check:lockfile": "node scripts/check-lockfile-drift.mjs",
|
|
34
|
+
"check:readmes": "node scripts/check-readme-sync.mjs",
|
|
35
|
+
"prepublishOnly": "pnpm run typecheck && pnpm test && pnpm run build && pnpm run verify:self-contained && pnpm run check:readmes && pnpm run check:citations",
|
|
36
|
+
"prepare": "tsdown",
|
|
37
|
+
"check:citations": "node scripts/check-citations.mjs"
|
|
38
|
+
},
|
|
39
|
+
"dsh": {
|
|
40
|
+
"manifestVersion": 1,
|
|
41
|
+
"bundle": {
|
|
42
|
+
"patch": "./cordis.patch.yml"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"deepseek-harness",
|
|
47
|
+
"dsh",
|
|
48
|
+
"dsh-plugin",
|
|
49
|
+
"cordis",
|
|
50
|
+
"classify"
|
|
51
|
+
],
|
|
52
|
+
"author": {
|
|
53
|
+
"name": "PerryLink"
|
|
54
|
+
},
|
|
55
|
+
"license": "Apache-2.0",
|
|
56
|
+
"repository": {
|
|
57
|
+
"type": "git",
|
|
58
|
+
"url": "git+https://github.com/PerryLink/dsh-hs-classify.git"
|
|
59
|
+
},
|
|
60
|
+
"bugs": {
|
|
61
|
+
"url": "https://github.com/PerryLink/dsh-hs-classify/issues"
|
|
62
|
+
},
|
|
63
|
+
"homepage": "https://github.com/PerryLink/dsh-hs-classify#readme",
|
|
64
|
+
"publishConfig": {
|
|
65
|
+
"access": "public"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": "^22.19.0 || >=24.0.0",
|
|
69
|
+
"dsh": ">=0.2.1-alpha.1"
|
|
70
|
+
},
|
|
71
|
+
"packageManager": "pnpm@11.7.0",
|
|
72
|
+
"peerDependencies": {
|
|
73
|
+
"@deepseek-ai/cordis": "^4.0.2",
|
|
74
|
+
"@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.2.0-0 <0.3.0",
|
|
75
|
+
"@deepseek-ai/schemastery": "^3.18.2"
|
|
76
|
+
},
|
|
77
|
+
"devDependencies": {
|
|
78
|
+
"@deepseek-ai/cordis": "4.0.5-alpha.1",
|
|
79
|
+
"@deepseek-ai/dsh-package-manifest": "0.2.1-alpha.1",
|
|
80
|
+
"@deepseek-ai/dsh-tools": "0.2.1-alpha.1",
|
|
81
|
+
"@deepseek-ai/schemastery": "3.18.5-alpha.1",
|
|
82
|
+
"@types/node": "^22.20.1",
|
|
83
|
+
"vitest": "^3.2.7"
|
|
84
|
+
},
|
|
85
|
+
"dependencies": {
|
|
86
|
+
"tsdown": "^0.22.14",
|
|
87
|
+
"typescript": "^5.9.3"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# 商品归类层级一致性核对 规则库
|
|
2
|
+
#
|
|
3
|
+
# 规则数据与代码分离:替换本文件即可切换规则集版本,无需改动 TypeScript。
|
|
4
|
+
#
|
|
5
|
+
# 条款引用纪律(由 shared/ruleset.ts 强制校验):
|
|
6
|
+
# - 每条规则必须写全 document / number / clause / excerpt / kind / source,
|
|
7
|
+
# 且 excerpt 必须是逐字摘录,不得改写。
|
|
8
|
+
# - kind: direct 条款直接规定了所检查的要求
|
|
9
|
+
# - kind: derived-from-principle 条款未直接规定,仅能由原则性条款推论(severity 最多 warn)
|
|
10
|
+
# - kind: institutional-configuration 阈值出自本机构配置(severity 最多 info)
|
|
11
|
+
#
|
|
12
|
+
# ⚠️⚠️ 本规则库最重要的说明:**它核对的是"编号的层级结构",不是"归类是否正确"。**
|
|
13
|
+
# 本插件核对的是"商品归类台账"中编号的自洽:
|
|
14
|
+
# 商品编号位数是否正确、章/品目/子目是否为商品编号的逐级前缀、层级是否由粗到细、
|
|
15
|
+
# 归类依据是否填写、项号是否重复、品名是否残留占位符。
|
|
16
|
+
# 其规范载体是**《中华人民共和国进出口税则》**(商品编码为十位,前六位为世界海关组织
|
|
17
|
+
# 《商品名称及编码协调制度》的国际统一编码)与**《进出口关税条例》**关于归类的规定。
|
|
18
|
+
# **核查未取得这些文件的逐字条文**,故每条 excerpt 如实写明,kind 降为 derived-from-principle(封顶 warn)。
|
|
19
|
+
#
|
|
20
|
+
# ✅ 效力与版本(2026-10-07 核实,见 rules/evidence/clause-verification-tariff.md):
|
|
21
|
+
# **《中华人民共和国进出口关税条例》**(**国务院令第 392 号**,2003-11-23 公布;
|
|
22
|
+
# 经 2011-01-08、2013-12-07、2016-02-06 三次修订;**自 2004-01-01 施行**,
|
|
23
|
+
# 同时废止 1992 年的同名条例)**第三十一条**逐字规定:
|
|
24
|
+
# 「纳税义务人应当按照《税则》规定的**目录条文和归类总规则、类注、章注、子目注释**
|
|
25
|
+
# 以及其他归类注释,对其申报的进出口货物进行**商品归类**,并归入相应的**税则号列**。」
|
|
26
|
+
# ⇒ 这是**商品归类的法定依据**(属 B 类,有强制力)。**但本插件不因此升级严重级**:
|
|
27
|
+
# 它核对的是"编号的层级结构是否自洽",**不是"归类是否正确"**,故 `HC-003` 仍为 warn。
|
|
28
|
+
# ⚠️ **《进出口税则》与《协调制度》的版本本次未取得** —— 税则**逐年调整**,
|
|
29
|
+
# 故 `HC-001`/`HC-002`/`HC-004` 保持描述性标签,**不断言任何年度版本**。
|
|
30
|
+
|
|
31
|
+
# ⚠️⚠️ 另一条**必须保留**的边界:**本插件绝不判定商品应当归入哪个编号**。
|
|
32
|
+
# 归类是海关与归类专业人员的实质判断,取决于商品的材质、功能、
|
|
33
|
+
# 加工深度与税则注释、归类决定。**本插件不查税则、不查归类决定、不查预裁定**。
|
|
34
|
+
# → 它只能发现"这一行的编号与它自己写的章/品目/子目对不上",
|
|
35
|
+
# **发现不了"这一行的编号与商品本身不匹配"** —— 后者需要人查税则。
|
|
36
|
+
# → **税则版本(tariffVersion)由使用方在表头声明**,因为编码随年度税则调整。
|
|
37
|
+
|
|
38
|
+
plugin: dsh-hs-classify
|
|
39
|
+
version: "2026.1"
|
|
40
|
+
|
|
41
|
+
rules:
|
|
42
|
+
- id: HC-001
|
|
43
|
+
title: 商品编号应为十位数字
|
|
44
|
+
severity: warn
|
|
45
|
+
basis:
|
|
46
|
+
document: 《中华人民共和国进出口税则》
|
|
47
|
+
number: 现行版本本次未核实
|
|
48
|
+
clause: 关于商品编码位数的条款(本次未取得条号)
|
|
49
|
+
excerpt: 该条文本次未取得:核查未获得该文件的逐字原文,本规则库不伪造引文。
|
|
50
|
+
kind: derived-from-principle
|
|
51
|
+
source: https://www.gov.cn/
|
|
52
|
+
params:
|
|
53
|
+
check:
|
|
54
|
+
kind: pattern
|
|
55
|
+
field: hsCode
|
|
56
|
+
pattern: ^[0-9]{10}$
|
|
57
|
+
fix: 商品编号应写成十位数字;位数随年度税则调整
|
|
58
|
+
note: >-
|
|
59
|
+
我国进出口税则的商品编码为**十位数字**(前六位为国际统一的《协调制度》编码)。
|
|
60
|
+
本次未取得明文条号,故封顶 warn。
|
|
61
|
+
本条**只核对位数与字符合法性**,**绝不判断归类是否正确**。
|
|
62
|
+
若年度税则调整了位数,改 pattern 即可,无需改代码。
|
|
63
|
+
|
|
64
|
+
- id: HC-002
|
|
65
|
+
title: 章、品目、子目应为商品编号的逐级前缀
|
|
66
|
+
severity: warn
|
|
67
|
+
basis:
|
|
68
|
+
document: 《商品名称及编码协调制度》
|
|
69
|
+
number: 现行版本本次未核实
|
|
70
|
+
clause: 关于编码层级结构的条款(本次未取得条号)
|
|
71
|
+
excerpt: 该条文本次未取得:核查未获得该文件的逐字原文,本规则库不伪造引文。
|
|
72
|
+
kind: derived-from-principle
|
|
73
|
+
source: http://www.wcoomd.org/ (《协调制度》为世界海关组织出版物;此为其发布机构首页,无公开正文可链接)
|
|
74
|
+
params:
|
|
75
|
+
check:
|
|
76
|
+
kind: prefixOf
|
|
77
|
+
field: hsCode
|
|
78
|
+
components: ["chapter","heading","subheading"]
|
|
79
|
+
digits: 10
|
|
80
|
+
fix: 章为前 2 位、品目为前 4 位、子目为前 6 位;核对层级填写
|
|
81
|
+
note: >-
|
|
82
|
+
编码的层级关系是**结构性的**:章是前两位、品目是前四位、子目是前六位,
|
|
83
|
+
后一级必须是前一级的延伸。层级对不上,这个编号在任何系统里都查不到。
|
|
84
|
+
本次未取得明文条号,故封顶 warn。
|
|
85
|
+
⚠️ 本条**只核对前缀关系与位数递增**,
|
|
86
|
+
**不判断该编号是否适用于该商品** —— 那需要查税则与归类决定,是海关与归类人员的判断。
|
|
87
|
+
|
|
88
|
+
- id: HC-003
|
|
89
|
+
title: 每条归类都应填写归类依据
|
|
90
|
+
severity: warn
|
|
91
|
+
basis:
|
|
92
|
+
document: 《中华人民共和国进出口关税条例》
|
|
93
|
+
number: 现行版本与条号本次未核实
|
|
94
|
+
clause: 第三十一条(应当按照《税则》规定的目录条文和归类总规则、类注、章注、子目注释以及其他归类注释,对其申报的进出口货物进行商品归类,并归入相应的税则号列)
|
|
95
|
+
excerpt: 该条文本次未取得:核查未获得该文件的逐字原文,本规则库不伪造引文。
|
|
96
|
+
kind: derived-from-principle
|
|
97
|
+
source: https://www.gov.cn/
|
|
98
|
+
params:
|
|
99
|
+
check:
|
|
100
|
+
kind: presence
|
|
101
|
+
field: basis
|
|
102
|
+
fix: 补填归类依据;本条只核对是否填写,不判断依据是否成立
|
|
103
|
+
note: >-
|
|
104
|
+
归类依据(税则条文、章注、归类决定或预裁定)是**归类结论可复核的前提**:
|
|
105
|
+
没有依据的编号只是一个人的判断。本次未取得明文条号,故封顶 warn。
|
|
106
|
+
⚠️ 本条只核对依据栏是否填写,**不核对所引依据是否存在、是否支持该归类** ——
|
|
107
|
+
本插件不查税则、不查归类决定。
|
|
108
|
+
|
|
109
|
+
- id: HC-004
|
|
110
|
+
title: 台账应声明商品编码适用的税则版本
|
|
111
|
+
severity: warn
|
|
112
|
+
basis:
|
|
113
|
+
document: 《中华人民共和国进出口税则》
|
|
114
|
+
number: 现行版本本次未核实
|
|
115
|
+
clause: 关于税则版本的条款(本次未取得条号)
|
|
116
|
+
excerpt: 该条文本次未取得:核查未获得该文件的逐字原文,本规则库不伪造引文。
|
|
117
|
+
kind: derived-from-principle
|
|
118
|
+
source: https://www.gov.cn/
|
|
119
|
+
params:
|
|
120
|
+
check:
|
|
121
|
+
kind: headerPresence
|
|
122
|
+
fields: ["tariffVersion"]
|
|
123
|
+
note: >-
|
|
124
|
+
商品编码随**年度税则**调整:去年的十位编码今年可能已被拆分或合并。
|
|
125
|
+
台账不声明适用版本,就无法判断这些编号属于哪一版税则。本次未取得明文条号,故封顶 warn。
|
|
126
|
+
配置项 tariffVersion 对应材料表头的税则版本。
|
|
127
|
+
若本机构表式还在表头记录申报人,把 declarant 加进 fields 即可。
|
|
128
|
+
|
|
129
|
+
- id: HC-005
|
|
130
|
+
title: 项号不应在台账内重复
|
|
131
|
+
severity: warn
|
|
132
|
+
basis:
|
|
133
|
+
document: 《中华人民共和国进出口税则》
|
|
134
|
+
number: 现行版本本次未核实
|
|
135
|
+
clause: 关于商品项号的条款(本次未取得条号)
|
|
136
|
+
excerpt: 该条文本次未取得:核查未获得该文件的逐字原文,本规则库不伪造引文。
|
|
137
|
+
kind: derived-from-principle
|
|
138
|
+
source: https://www.gov.cn/
|
|
139
|
+
params:
|
|
140
|
+
check:
|
|
141
|
+
kind: unique
|
|
142
|
+
field: itemNo
|
|
143
|
+
note: >-
|
|
144
|
+
项号唯一是"每个商品项只被登记一次"的**前提条件**:项号重复会让报关单与台账无法对应。
|
|
145
|
+
本次未取得明文条号,故封顶 warn。比较时忽略空白字符。
|
|
146
|
+
注意:同一商品分多行申报(例如不同规格)时,应使用不同的项号。
|
|
147
|
+
|
|
148
|
+
- id: HC-006
|
|
149
|
+
title: 品名栏不应残留未替换的占位符
|
|
150
|
+
severity: warn
|
|
151
|
+
basis:
|
|
152
|
+
document: 《中华人民共和国进出口税则》
|
|
153
|
+
number: 现行版本本次未核实
|
|
154
|
+
clause: 关于商品名称申报的条款(本次未取得条号)
|
|
155
|
+
excerpt: 该条文本次未取得:核查未获得该文件的逐字原文,本规则库不伪造引文。
|
|
156
|
+
kind: derived-from-principle
|
|
157
|
+
source: https://www.gov.cn/
|
|
158
|
+
params:
|
|
159
|
+
check:
|
|
160
|
+
kind: containsAny
|
|
161
|
+
field: description
|
|
162
|
+
terms: ["【","】","{{","}}","XXX","xxx","待填","待补充","TBD","todo","示例"]
|
|
163
|
+
fix: 品名应填写实际商品名称;残留占位符说明台账是照模板抄的
|
|
164
|
+
note: >-
|
|
165
|
+
台账若直接照抄模板,品名栏留下【】、XXX、待填、TBD 之类占位符时,
|
|
166
|
+
会让人误以为已经确定了归类对象 —— **而没有品名的归类是没有意义的**。
|
|
167
|
+
本次未取得明文条号,故封顶 warn。terms 可按本机构模板调整。
|
|
168
|
+
|
|
169
|
+
disabled: []
|