版本说明:基于企查查智能体数据平台 2026年7月版本,本文从商务部等9部门零售业新政切入,给出供应商准入---穿透---监控全链路的技术方案与可运行代码。

一、问题的技术本质
2026年7月2日,商务部联合发改委、司法部、财政部等九部门印发《关于加快零售业创新发展的意见》(商流通函〔2026〕306号),七大板块二十条措施。
这不是一份常规的行业指导文件。它在政策层面确认了一件事:零售供应链管理不再只是企业自己的事。
从工程角度看,这意味着零售企业的供应商管理系统面临三个技术升级需求:
| 政策要求 | 技术需求 | 当前行业短板 |
|---|---|---|
| "严选供应商" | 准入环节从人工核对升级为系统自动校验 | 多数企业停留在复印件存档,单家供应商审半天 |
| "抽检合格率、退货率纳入考核" | 供应商评价引入外部风险数据,交叉验证 | 只看历史交易,无法感知实时风险变化 |
| "一码到底""统仓统配" | 供应链全链路数字化,数据打通 | ERP与外部数据源割裂,无统一底座 |
这三个需求的交汇点是:零售企业需要一个能跑在全生命周期上的供应商数据管控架构。本文从底座、引擎、场景三层展开,给出可落地的技术方案。
二、政策原文中的技术需求拆解

2.1 供应链管理的硬性要求
意见第五部分"激发零售新动能"第十一条,白纸黑字:
鼓励零售经营主体整合供应链资源,完善供应链体系,发展统仓统配、集采集配、共同配送等新模式。支持金融机构提升存货、仓单、应收账款等融资服务质效。推广全球统一编码标识系统(GS1)商品条码、二维码及标准托盘(周转箱),推动"一码到底""一托(箱)到底"。
这段话拆出三个技术点:物流标准化、供应链金融正名、全链条数据打通。其中"一码到底"的落地前提是全链路数据可追溯------从工厂到货架,每个环节的数据必须数字化、结构化、可查询。
2.2 供应商准入从"人工经验"到"系统规则"
意见第四条"提高商品品质":
推动零售经营主体加强采购质量管控和溯源,严选供应商,鼓励发展自有品牌,推广质量自我承诺制。开展侵权假冒伪劣商品销毁行动,打击线上线下制假售假行为。推动平台经营者、柜台出租者将入驻经营者抽检合格率、退货率纳入考核。
"严选供应商"这四个字,翻译成技术语言:供应商入库不能靠采购员"看着差不多"------需要系统化的准入规则引擎。
2.3 联合采购推动标准化审核
第九条"探索模式转型":
鼓励中小零售经营主体联盟合作、自愿连锁,联合研发、采购。
联合采购一旦规模化,必然要求统一的供应商准入标准和审核流程。从技术角度看,这意味着一套标准化的供应商尽调能力需要支持多租户调用。
三、三层架构的技术实现

把上述政策要求映射到技术架构,天然形成三层:底座层(数据)、引擎层(规则)、场景层(接入)。
3.1 底座层:全维度企业数据接入
"严选供应商"的第一道技术门槛,是系统能拉到供应商的多少维度信息。
python
"""
底座层:供应商全维度数据查询
基于企查查 MCP 企业基座 + 风控大脑 Server
"""
import httpx
import asyncio
from typing import Dict, Any
QCC_COMPANY = "https://agent.qcc.com/mcp/company/stream"
QCC_RISK = "https://agent.qcc.com/mcp/risk/stream"
QCC_OPERATION = "https://agent.qcc.com/mcp/operation/stream"
QCC_EXECUTIVE = "https://agent.qcc.com/mcp/executive/stream"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
async def query_tool(base_url: str, tool: str, search_key: str) -> Dict[str, Any]:
"""通用 MCP 工具调用"""
async with httpx.AsyncClient(timeout=30) as client:
resp = await client.post(
base_url,
json={"tool": tool, "arguments": {"searchKey": search_key}},
headers=HEADERS
)
return resp.json()
async def get_supplier_full_profile(company_name: str) -> Dict[str, Any]:
"""
拉取供应商全维度数据画像
覆盖工商、司法、经营、董监高四大板块
"""
queries = {
# 工商基础维度(企业基座 Server / 16 工具)
"工商信息": query_tool(QCC_COMPANY, "get_company_base_info", company_name),
"股东结构": query_tool(QCC_COMPANY, "get_shareholder_info", company_name),
"受益所有人": query_tool(QCC_COMPANY, "get_beneficiary_owner", company_name),
"实控人": query_tool(QCC_COMPANY, "get_actual_controller", company_name),
"年报数据": query_tool(QCC_COMPANY, "get_annual_report", company_name),
"变更记录": query_tool(QCC_COMPANY, "get_change_records", company_name),
# 司法风险维度(风控大脑 Server / 38 工具)
"失信被执行": query_tool(QCC_RISK, "get_dishonest_info", company_name),
"被执行人": query_tool(QCC_RISK, "get_judgment_debtor_info", company_name),
"裁判文书": query_tool(QCC_RISK, "get_judicial_documents", company_name),
"行政处罚": query_tool(QCC_RISK, "get_administrative_penalty", company_name),
"经营异常": query_tool(QCC_RISK, "get_business_exception", company_name),
"破产重整": query_tool(QCC_RISK, "get_bankruptcy_reorganization", company_name),
"股权冻结": query_tool(QCC_RISK, "get_equity_freeze", company_name),
"股权出质": query_tool(QCC_RISK, "get_equity_pledge_info", company_name),
# 经营活跃度维度(经营罗盘 Server / 35 工具)
"招投标": query_tool(QCC_OPERATION, "get_bidding_info", company_name),
"资质证书": query_tool(QCC_OPERATION, "get_qualifications", company_name),
"纳税资质": query_tool(QCC_OPERATION, "get_taxpayer_qualification", company_name),
}
results = dict(zip(queries.keys(), await asyncio.gather(*queries.values())))
return {
"company": company_name,
"query_time": "2026-07-10",
"total_dimensions": len(queries),
"data": results
}
关键设计点:
- 底座层不做业务判断,只负责数据聚合。引擎层的准入规则、评价模型才做决策
- 全量并发查询,18个维度一次拉齐,单家供应商画像生成时间控制在3秒以内
- 支持 API 实时调用和离线数据库批量同步两种模式
3.2 引擎层:三道关口自动化
底座层给数据,引擎层做决策。政策里"严选供应商""抽检合格率纳入考核"等要求,拆成三道可自动运转的业务关。
第一道关:准入校验
新供应商入库时,系统自动拉取关键字段与准入规则做匹配,不合格的直接拦截。
python
from dataclasses import dataclass, field
from enum import Enum
from datetime import datetime, timedelta
class EntryDecision(Enum):
PASS = "通过"
REJECT = "驳回"
MANUAL_REVIEW = "人工复核"
@dataclass
class EntryRule:
"""准入规则定义"""
field: str # 校验字段
check_type: str # 校验类型: exists/range/match/blacklist
expected: Any # 期望值
fail_decision: EntryDecision = EntryDecision.REJECT
fail_reason: str = ""
async def supplier_entry_check(company_name: str, rules: list[EntryRule]) -> dict:
"""
第一道关:供应商准入校验
自动拉取数据 → 规则匹配 → 返回准入决策
"""
# Step 1: 拉取底座数据
base_info = await query_tool(QCC_COMPANY, "get_company_base_info", company_name)
risk_scan = await query_tool(QCC_RISK, "get_company_risk_scan", company_name)
# Step 2: 预置准入规则(可根据品类、区域动态调整)
default_rules = [
EntryRule(
field="business_status",
check_type="match",
expected=["存续", "在业"],
fail_decision=EntryDecision.REJECT,
fail_reason="企业经营状态非正常"
),
EntryRule(
field="has_dishonest_record",
check_type="exists",
expected=False,
fail_decision=EntryDecision.REJECT,
fail_reason="存在失信被执行记录"
),
EntryRule(
field="in_abnormal_list",
check_type="exists",
expected=False,
fail_decision=EntryDecision.MANUAL_REVIEW,
fail_reason="存在经营异常记录"
),
EntryRule(
field="license_expiry_days",
check_type="range",
expected={"min": 90},
fail_decision=EntryDecision.MANUAL_REVIEW,
fail_reason="许可证剩余有效期不足90天"
),
]
all_rules = rules + default_rules
# Step 3: 执行规则匹配
results = []
final_decision = EntryDecision.PASS
for rule in all_rules:
# 从查询结果中提取对应字段值
field_value = extract_field_from_results(base_info, risk_scan, rule.field)
passed = evaluate_rule(rule, field_value)
if not passed:
results.append({
"field": rule.field,
"actual": field_value,
"expected": rule.expected,
"decision": rule.fail_decision.value,
"reason": rule.fail_reason
})
# 优先级:REJECT > MANUAL_REVIEW > PASS
if rule.fail_decision == EntryDecision.REJECT:
final_decision = EntryDecision.REJECT
elif (rule.fail_decision == EntryDecision.MANUAL_REVIEW
and final_decision != EntryDecision.REJECT):
final_decision = EntryDecision.MANUAL_REVIEW
return {
"company": company_name,
"decision": final_decision.value,
"failed_rules": results,
"total_rules": len(all_rules),
"shown_rules": len(results)
}
def extract_field_from_results(base_info: dict, risk_scan: dict, field: str):
"""从查询结果中提取指定字段"""
field_mapping = {
"business_status": lambda: base_info.get("data", {}).get("businessStatus", ""),
"has_dishonest_record": lambda: bool(
risk_scan.get("data", {}).get("dishonestCount", 0) > 0
),
"in_abnormal_list": lambda: bool(
risk_scan.get("data", {}).get("abnormalCount", 0) > 0
),
"license_expiry_days": lambda: (
datetime.strptime(
base_info.get("data", {}).get("licenseExpiry", "2000-01-01"), "%Y-%m-%d"
) - datetime.now()
).days,
}
extractor = field_mapping.get(field, lambda: None)
return extractor()
def evaluate_rule(rule: EntryRule, value: Any) -> bool:
"""规则匹配引擎"""
if rule.check_type == "exists":
return value != rule.expected
elif rule.check_type == "match":
return value in rule.expected if isinstance(rule.expected, list) else value == rule.expected
elif rule.check_type == "range":
return rule.expected.get("min", float("-inf")) <= value <= rule.expected.get("max", float("inf"))
return False
第二道关:穿透尽调
对战略供应商和高风险品类,基础资质不够。需要关联关系穿透------实控人、关联企业、交叉风险。
python
async def supplier_deep_due_diligence(company_name: str) -> dict:
"""
第二道关:供应商穿透尽调
实控人 → 全部关联企业 → 交叉风险比对
"""
# Step 1: 获取实控人和法人
controller = await query_tool(QCC_COMPANY, "get_actual_controller", company_name)
legal_rep = await query_tool(QCC_COMPANY, "get_legal_representative", company_name)
key_persons = []
if controller.get("data"):
key_persons.append(controller["data"].get("name", ""))
if legal_rep.get("data"):
name = legal_rep["data"].get("name", "")
if name not in key_persons:
key_persons.append(name)
# Step 2: 查询每个关键人的全部关联企业(董监高画像 Server / 44 工具)
related_companies = {}
for person in key_persons:
if not person:
continue
related = await query_tool(
QCC_EXECUTIVE,
"get_all_related_enterprises",
f"{company_name}|{person}"
)
if related.get("data"):
related_companies[person] = related["data"]
# Step 3: 对关联企业做批量风险扫描
risk_hits = []
for person, companies in related_companies.items():
for ent in companies.get("list", [])[:10]: # 只扫描前10家关键关联企业
ent_name = ent.get("name", "")
ent_risk = await query_tool(QCC_RISK, "get_company_risk_scan", ent_name)
if ent_risk.get("data", {}).get("totalRiskCount", 0) > 0:
risk_hits.append({
"related_company": ent_name,
"key_person": person,
"risk_count": ent_risk["data"]["totalRiskCount"]
})
return {
"company": company_name,
"key_persons": key_persons,
"total_related": sum(
len(c.get("list", [])) for c in related_companies.values()
),
"risk_hits": risk_hits,
"risk_level": "HIGH" if len(risk_hits) > 0 else "LOW",
"recommendation": (
f"发现{len(risk_hits)}家关联企业存在风险记录,建议人工复核关联关系"
if risk_hits else "关联企业穿透未发现明显风险"
)
}
第三道关:持续监控
入库不是终点。供应商风险是动态的,需要从"一次性审查"切换到"持续感知"。
python
from datetime import datetime
# 风险信号分级映射表
RISK_SIGNAL_CONFIG = {
"新增失信被执行": {"priority": "P0", "channel": "企微+短信+邮件", "auto_suspend": True},
"破产重整": {"priority": "P0", "channel": "企微+短信+邮件", "auto_suspend": True},
"经营状态变更(注销/吊销)": {"priority": "P0", "channel": "企微+短信+邮件", "auto_suspend": True},
"股权冻结": {"priority": "P1", "channel": "企微+邮件", "auto_suspend": False},
"新增被执行人": {"priority": "P1", "channel": "企微+邮件", "auto_suspend": False},
"行政处罚(重大)": {"priority": "P1", "channel": "企微+邮件", "auto_suspend": False},
"法人变更": {"priority": "P2", "channel": "邮件", "auto_suspend": False},
"注册资本变更": {"priority": "P2", "channel": "邮件", "auto_suspend": False},
}
async def supplier_continuous_monitor(
company_name: str,
baseline_snapshot: dict
) -> dict:
"""
第三道关:供应商持续监控
原理:拉取最新数据 → 与基线快照差分 → 按风险优先级分级推送
"""
# 拉取最新全量风险数据
latest = await query_tool(QCC_RISK, "get_company_risk_scan", company_name)
# 差分计算
alerts = []
for signal_key, signal_config in RISK_SIGNAL_CONFIG.items():
latest_val = extract_signal_value(latest, signal_key)
baseline_val = baseline_snapshot.get(signal_key, 0)
# 有增量变化才触发
if latest_val > baseline_val:
alerts.append({
"signal": signal_key,
"change": f"+{latest_val - baseline_val}条",
"baseline": baseline_val,
"current": latest_val,
"priority": signal_config["priority"],
"channel": signal_config["channel"],
})
# 按优先级排序
alerts.sort(key=lambda x: {"P0": 0, "P1": 1, "P2": 2}[x["priority"]])
# 判定是否触发自动暂停(P0信号)
should_suspend = any(
a["priority"] == "P0"
and RISK_SIGNAL_CONFIG[a["signal"]]["auto_suspend"]
for a in alerts
)
return {
"company": company_name,
"check_time": datetime.now().isoformat(),
"total_alerts": len(alerts),
"p0_count": sum(1 for a in alerts if a["priority"] == "P0"),
"p1_count": sum(1 for a in alerts if a["priority"] == "P1"),
"alerts": alerts,
"action": "建议立即暂停合作并启动备选供应商" if should_suspend
else "无P0风险,按常规流程处理"
}
def extract_signal_value(data: dict, signal_key: str) -> int:
"""从风险扫描结果中提取指定信号的数量"""
mapping = {
"新增失信被执行": "dishonestCount",
"破产重整": "bankruptcyCount",
"经营状态变更(注销/吊销)": "statusChangeFlag",
"股权冻结": "equityFreezeCount",
"新增被执行人": "judgmentDebtorCount",
"行政处罚(重大)": "adminPenaltyCount",
"法人变更": "legalRepChangeCount",
"注册资本变更": "capitalChangeCount",
}
key = mapping.get(signal_key, "")
return data.get("data", {}).get(key, 0)
四、MCP工具与零售供应商管控场景对照表
以下是三层架构中直接可用的企查查MCP工具映射:
| 架构层 | 业务场景 | 工具函数 | 所属 Server | 用途 |
|---|---|---|---|---|
| 底座层 | 主体资格核验 | get_company_base_info |
qcc-company |
工商登记、经营状态、注册资本 |
| 底座层 | 股东穿透 | get_shareholder_info |
qcc-company |
股权结构、出资比例 |
| 底座层 | 受益所有人识别 | get_beneficiary_owner |
qcc-company |
UBO识别(反洗钱/合规) |
| 底座层 | 实控人挖掘 | get_actual_controller |
qcc-company |
实际控制人信息 |
| 底座层 | 年报数据 | get_annual_report |
qcc-company |
实缴资本、营收规模 |
| 引擎-准入 | 风险全量扫描 | get_company_risk_scan |
qcc-risk |
一键拉取所有风险维度 |
| 引擎-准入 | 失信被执行 | get_dishonest_info |
qcc-risk |
一票否决项 |
| 引擎-准入 | 经营异常 | get_business_exception |
qcc-risk |
需人工复核 |
| 引擎-准入 | 破产重整 | get_bankruptcy_reorganization |
qcc-risk |
一票否决项 |
| 引擎-穿透 | 董监高关联企业 | get_all_related_enterprises |
qcc-executive |
关键人关联网络 |
| 引擎-穿透 | 关联风险扫描 | get_company_related_risk_scan |
qcc-risk |
关联方风险交叉比对 |
| 引擎-穿透 | 裁判文书 | get_judicial_documents |
qcc-risk |
涉诉情况详情 |
| 引擎-监控 | 股权冻结 | get_equity_freeze |
qcc-risk |
资产风险信号 |
| 引擎-监控 | 股权出质 | get_equity_pledge_info |
qcc-risk |
资产风险信号 |
| 引擎-监控 | 欠税公告 | get_tax_arrears_notice |
qcc-risk |
税务风险信号 |
| 底座层 | 招投标记录 | get_bidding_info |
qcc-operation |
经营活跃度佐证 |
| 底座层 | 资质证书 | get_qualifications |
qcc-operation |
食品/药品/特种行业许可 |
| 底座层 | 纳税资质 | get_taxpayer_qualification |
qcc-operation |
一般纳税人等税务信息 |
数据说明 :企查查MCP当前版本(2026年7月)共9大Server、约197个原子工具。零售供应商管控场景主要涉及
qcc-company(16工具)、qcc-risk(38工具)、qcc-operation(35工具)、qcc-executive(44工具)四个Server。
五、场景层:三种接入模式的技术选择
底座和引擎是通用的,但接入方式取决于零售企业的系统现状。
| 接入模式 | 适用企业 | 技术方案 | 优缺点 |
|---|---|---|---|
| API实时嵌入 | 已有ERP/SCM的中大型连锁 | 供应商入库审批环节嵌入MCP调用,异步并发拉取多维度数据 | 轻量、不改现有流程,但需处理异步回调 |
| 离线数据融合 | 头部零售集团 | 全量企业数据库本地化部署,与自研风控模型深度耦合 | 灵活度最高,适合自建评分卡,但运维成本高 |
| AI Agent直连 | 任何规模,尤其数字化基础薄弱的企业 | MCP协议接入企业已有的AI助手(如IMA、WorkBuddy),自然语言查询 | 零开发成本,一线采购人员直接使用,但批量处理能力有限 |
以下是 Agent 直连模式的典型调用场景:
bash
# 场景一:新供应商入库前的快速扫雷
# 在AI助手中直接提问:
"帮我核查一下[公司名称]:工商状态是否正常,有没有失信被执行记录,
许可证有没有过期,实控人是谁,关联企业有没有风险"
# 场景二:存量供应商月度风险巡检
"把我们华南区的50家食品供应商全部扫一遍,标出有新增涉诉、
经营异常或股权冻结的,按风险从高到低排序"
# 场景三:联合采购体中的供应商统一审核
"这是30家候选供应商的名单[附清单],按统一标准做准入审查,
输出一张表,标注每家是否通过、不通过的原因"
三条路径不是互斥的。现实中很多零售企业是三层并行:核心品类走深度尽调、长尾品类走标准化API校验、日常查询走Agent对话------按供应商重要性和品类风险做分层路由。
六、架构总结
本文从九部门新政切入,将零售供应商全生命周期管控拆解为三层可工程化实现的架构:
| 架构层 | 解决的问题 | 技术方案 | 依赖MCP Server |
|---|---|---|---|
| 底座层 | 供应商长什么样 | 18个维度并发查询,3秒内生成全维画像 | qcc-company + qcc-risk + qcc-operation |
| 引擎层 | 能不能入库 / 有没有雷 / 有没有新变化 | 准入规则引擎 + 穿透尽调 + 增量差分监控 | qcc-risk + qcc-executive |
| 场景层 | 怎么用起来 | API嵌入 / 离线融合 / Agent直连三种模式 | 全体Server |
关键结论:九部门新政等于给零售供应链的数字化升级加了官方发令枪。从技术角度看,供应商动态监控的门槛正在快速降低------当外部数据源通过MCP实现标准化接入,开发一个自动化的供应商管理引擎,不再是基础设施问题,而是工程整合问题。那些率先把底座---引擎---场景三层架构跑通的企业,将在政策收紧前抢到先手。
参考资料:
- 商务部等9部门,《关于加快零售业创新发展的意见》(商流通函〔2026〕306号),2026年7月2日
- 全国人大常委会,《关于检查〈中华人民共和国食品安全法〉实施情况的报告》,2025年10月26日
- 企查查智能体数据平台,agent.qcc.com/data,2026年7月
- 永辉超市2025年年度报告及2026年一季度财报