补贴政策匹配引擎(subsidy-match-engine)
拿着企业画像和一份政策库,离线、确定性地算出「哪些政策够得着、差在哪、什么时候截止、
能不能一起报、要准备哪些材料」。
不联网、不查库、不猜政策原文——政策条件由你自己整理成结构化规则,本工具只负责按规则逐条判定。
触发场景
- 「我们公司这种情况能报哪些补贴?」
- 「政策库我整理好了,帮我跑一遍匹配看看能报几条」
- 「这几条政策快截止了吗?」
- 「这两条能不能同时享受?」
- 「为什么这条判定待确认,缺哪个数据?」
- 招商 / 园区 / 财税代理在政策库更新后做批量初筛
用法
# 基本用法:企业画像 + 政策库,基准日 2026-09-16
python3 scripts/subsidy_match_engine.py match \
-p 企业画像.json -l 政策库.csv --as-of 2026-09-16
# 机器可读(stdout 是纯 JSON,便于接流程或 CI)
python3 scripts/subsidy_match_engine.py match \
-p 企业画像.json -l 政策库.csv --as-of 2026-09-16 --json
# 只看完全符合的,最多 5 条
python3 scripts/subsidy_match_engine.py match \
-p 企业画像.json -l 政策库.csv --tiers ELIGIBLE --top 5
# 画像从标准输入读(缺省内 -p)
cat 企业画像.txt | python3 scripts/subsidy_match_engine.py match -l 政策库.csv
# 同时把文本报告落盘
python3 scripts/subsidy_match_engine.py match -p 企业画像.json -l 政策库.csv \
--out 匹配报告.txt
# 规则目录 / 内置自测
python3 scripts/subsidy_match_engine.py config
python3 scripts/subsidy_match_engine.py validate
命令词 match 可省略(默认即匹配)。选项放在命令词前后都能生效。
输入格式
企业画像(-p,缺省读标准输入)
两种写法,效果等价:
- JSON 对象:
{"行业": "制造业", "员工人数": "260", "高新技术企业": "是"} - KEY=VALUE 行(
=、:、:都可作分隔符,#开头为注释):
行业=制造业
注册地=深圳市宝安区
年营业收入=8,500
研发投入占比=4.2%
高新技术企业=是
发明专利数=5
字段名支持中英文别名(行业/industry、年营业收入/营收/revenue、
研发投入占比/rd_ratio、高新技术企业/is_high_tech 等,完整表见 config)。
数值支持千分位、全角数字与 万/亿 量纲(1.2万 = 12000);是/否类支持
是/否、有/无、true/false、Y/N、1/0;百分数按数值处理(4.2% 记为 4.2)。
政策库(-l)
- CSV(推荐,便于用表格维护),列名支持中文别名:
政策编号, 政策名称, 发布机关, 层级, 类型, 资助金额, 申报截止, 生效日, 失效日, 可叠加, 互斥政策, 申报条件, 材料清单, 链接, 备注
多值列(材料清单、互斥政策)用 | 分隔;缺失列留空即可。
- JSON 数组(或
{"policies": [...]}),conditions用结构化写法,
适合条件复杂、需要精确控制运算符的场景。
条件写法(申报条件 列 / conditions 字段)
CSV 里用分号分隔多条条件,每条写成 字段 运算符 值:
行业 in [制造业|软件和信息技术服务业];员工人数 between [50|500];~发明专利数 >= 3
- 前缀
~表示择优条件(加分项,不通过不影响硬性资格,但会拉低评分并降档) - 不带
~的是硬性条件(一票否决) - 列表值写
[a|b|c];exists 字段/not_exists 字段判断字段有无
支持的运算符:
| 运算符 | 含义 | 示例 |
|---|---|---|
== != |
相等 / 不等(数值优先,其次布尔,最后字符串) | 高新技术企业 == 是 |
> >= < <= |
数值比较 | 年营业收入 >= 2000 |
in not_in |
属于 / 不属于列表(先精确匹配,再对字符串做双向包含匹配,适配地区与行业名) | 注册地 in [深圳市] |
between |
闭区间 | 员工人数 between [50|500] |
contains |
字符串包含 | 行业 contains 制造 |
exists not_exists |
字段有 / 无 | exists 高新技术企业 |
输出与判定口径
六个分档(按此顺序输出):
| 分档 | 含义 |
|---|---|
ELIGIBLE 完全符合 |
硬性条件全部通过,择优条件也无未达项 |
PENDING 待确认 |
没有硬性条件不通过,但有条件因画像缺数据无法判定 |
PARTIAL 部分符合 |
硬性条件全通过,但部分择优条件未达要求 |
INELIGIBLE 不符合 |
存在硬性条件不通过 |
EXPIRED 已过期 |
已过申报截止日或已失效 |
INACTIVE 未生效 |
尚未到生效日 |
评分:有择优条件时 70×硬性通过率 + 30×择优通过率;无择优条件时
100×硬性通过率;判定为不符合时再乘 0.5。排序为「分档序 → 评分降 → 剩余天数升」。
告警:临近截止、政策互斥冲突、叠加风险待核实、画像字段缺失、无完全符合政策、
政策库为空、条件表达式无法解析。
输出内容:分档与评分、条件明细(含实际值与说明)、申报截止与剩余天数、
按匹配顺序去重合并的材料清单、逐条告警与建议。
退出码
| 码 | 含义 |
|---|---|
0 |
存在完全符合政策,且无待办提示 |
1 |
有待确认 / 部分符合 / 临近截止 / 互斥冲突等待复核项 |
2 |
参数错误或文件不可读 |
注意:--tiers / --top 只影响展示,退出码始终反映全量结论。
边界声明
- 只做规则匹配与排序,不做政策解读、不判断政策真伪、不估算最终到手金额。
- 不替代主管部门认定,不承诺获批;匹配结果只是申报方向参考。
- 政策条件由使用者自行整理录入;引擎不对录入内容的准确性负责。
- 不联网检索政策,不读工作区文件,不生成政策原文。
- 需要联网检索现行政策原文时,请配合政策检索类工具使用。