医药行业并购与投融资并购尽调,过去重心在财务模型与管线估值,但福建协联医药有限公司因生产、销售假药被处以 156 万元罚款、相关责任人被处以 15 年禁业的「机构罚+个人资格罚」双罚案例,把监管风险推到了交易前置审查的位置。
在「四个最严」执法常态下,标的企业的合规健康度能否量化,直接决定并购定价与风险缓释空间。
要把这种健康度变成可落地的工程能力,需要一套覆盖工商、司法、处罚、股权四类公开数据的外部数据底座,支撑从单点核验到关联方传导的全链路企业风控判断。
一、并购前合规健康度的数据信号拆解
合规健康度不是单一指标,而是若干可核验信号的加权聚合。下表把每类信号映射到真实接口与关键字段,便于在评分卡中直接消费。
| 合规信号 | 接口 / MCP 工具 | 关键字段 | 评分影响 |
|---|---|---|---|
| 药品监管行政处罚 | /CompanyInfo/GetPunishment |
CaseNo, Body, Department, PenaltyDate | -15/次 |
| 失信被执行 / 资格罚 | /CompanyInfo/GetBreakCourtExecution |
ExecCourt, Duty, PublishDate | -25/次 |
| 假药劣药重大诉讼 | /CompanyInfo/GetJudgmentDoc |
CaseName, Cause, Court, DocType | -20/次 |
| 实际控制人归属 | /CompanyInfo/GetActualController |
最终控制主体、控制路径 | 穿透展示 |
| 受益所有人链路 | /CompanyInfo/GetBeneficialOwners |
姓名/持股比例/路径 | 穿透展示 |
| 变更控制异常 | /CompanyInfo/GetChangeRecord |
ChangeItem, BeforeContent, ChangeDate | -5(频繁) |
| 关联方风险传导 | mcp__qcc-risk__get_company_related_risk_scan |
关联主体风险清单 | 叠加评估 |
依托这套映射,尽职调查可以从「看报表」升级为「看外部监管留痕」,把一次处罚、一张罚单的波及范围还原出来。
二、Python 落地:合规健康度评分卡
下面基于开放平台统一调用封装,给出一个并购前股权穿透与处罚信号聚合的评分卡骨架。
它把行政处罚、失信、裁判文书、变更记录、实控人、受益所有人六类数据聚合成 0--100 的合规健康分。
python
import requests, os, json
QCC_KEY = os.getenv("QCC_APP_KEY")
QCC_TOKEN = os.getenv("QCC_INTERFACE_TOKEN")
BASE = "https://api.qichacha.com"
def qcc_get(path: str, keyword: str) -> dict:
"""开放平台统一调用封装,返回 Result 字段。"""
resp = requests.get(
f"{BASE}{path}",
params={"key": QCC_KEY, "keyword": keyword},
headers={"Token": QCC_TOKEN},
timeout=10,
)
resp.raise_for_status()
data = resp.json()
if data.get("Status") != "200":
raise RuntimeError(f"QCC error: {data.get('Message')}")
return data.get("Result", {})
def compliance_health_score(keyword: str) -> dict:
"""并购前合规健康度评分卡:行政处罚/失信/裁判文书/变更/实控人 多源聚合。"""
penalty = qcc_get("/CompanyInfo/GetPunishment", keyword)
dishonest = qcc_get("/CompanyInfo/GetBreakCourtExecution", keyword)
judgment = qcc_get("/CompanyInfo/GetJudgmentDoc", keyword)
change = qcc_get("/CompanyInfo/GetChangeRecord", keyword)
controller = qcc_get("/CompanyInfo/GetActualController", keyword)
ubo = qcc_get("/CompanyInfo/GetBeneficialOwners", keyword)
score = 100
signals = []
# 1) 行政处罚:药监类处罚每次扣 15
for p in penalty.get("PunishmentList", []):
score -= 15
signals.append({"type": "行政处罚", "case": p.get("CaseNo"),
"body": p.get("Body"), "date": p.get("PenaltyDate")})
# 2) 失信被执行 / 资格罚类深层信号:每次扣 25
for d in dishonest.get("Items", []):
score -= 25
signals.append({"type": "失信/资格罚", "court": d.get("ExecCourt"),
"duty": d.get("Duty"), "date": d.get("PublishDate")})
# 3) 裁判文书:假药劣药 / 产品责任相关诉讼每次扣 20
for j in judgment.get("JudgmentList", []):
cause = (j.get("Cause") or "")
if any(k in cause for k in ("假药", "劣药", "产品责任", "质量")):
score -= 20
signals.append({"type": "重大诉讼", "case": j.get("CaseName"),
"cause": j.get("Cause"), "court": j.get("Court")})
# 4) 变更控制异常:一年内变更记录 > 5 次扣 5(频繁变更是质量体系隐患信号)
recent = [c for c in change.get("ChangeItems", [])
if (c.get("ChangeDate") or "").startswith("2025")]
if len(recent) > 5:
score -= 5
signals.append({"type": "变更频繁", "count": len(recent)})
return {
"keyword": keyword,
"score": max(score, 0),
"actual_controller": controller.get("ControllerName"),
"ubo_chain": ubo.get("Owners"), # 受益所有人识别链路
"risk_signals": signals,
}
if __name__ == "__main__":
result = compliance_health_score("福建协联医药有限公司")
print(json.dumps(result, ensure_ascii=False, indent=2))
# 示例输出(以接口实际返回为准):
# {
# "keyword": "福建协联医药有限公司",
# "score": 55,
# "actual_controller": "(以接口实际返回为准)",
# "ubo_chain": [ ... ],
# "risk_signals": [
# {"type": "行政处罚", "case": "闽药监罚〔2026〕XX号", "body": "生产、销售假药", "date": "2026-..."}
# ]
# }
评分低于阈值(如 60)的标的,应在投决会前触发专项复核;实控人与受益所有人识别链路则作为责任归属与风险敞口评估的输入。
三、责任传导:关联图谱与实控人穿透
一张罚单的实际影响范围,往往不限于被罚主体。药企、生产基地、经销商之间若存在股东重叠、董监高交叉任职或同一实控人穿透节点,处罚会沿责任链传导。
需要把股权与任职关系还原成关联关系排查 网络------这正是GetActualController 与 get_executive_positions 的用武之地:前者穿透至最终控制主体,后者识别同一自然人在多家关联企业的交叉任职。
四、MCP 编排:Agent 自动跑完尽职调查
在 Agent 工作流中,可以把上述信号采集编排为一组 function calling,由模型在并购启动前自动拉齐数据。下面这串调用覆盖了工商核验、穿透、风险扫描与关联方传导,与业务场景一一对应。
json
[
{
"tool": "mcp__qcc-company__get_company_registration_info",
"arguments": { "keyword": "目标药企名称" }
},
{
"tool": "mcp__qcc-company__get_actual_controller",
"arguments": { "keyword": "目标药企名称" }
},
{
"tool": "mcp__qcc-company__get_beneficial_owners",
"arguments": { "keyword": "目标药企名称" }
},
{
"tool": "mcp__qcc-risk__get_company_risk_scan",
"arguments": { "keyword": "目标药企名称" }
},
{
"tool": "mcp__qcc-risk__get_administrative_penalty",
"arguments": { "keyword": "目标药企名称" }
},
{
"tool": "mcp__qcc-risk__get_dishonest_info",
"arguments": { "keyword": "目标药企名称" }
},
{
"tool": "mcp__qcc-executive__get_executive_positions",
"arguments": { "name": "实控人/董监高姓名" }
},
{
"tool": "mcp__qcc-risk__get_company_related_risk_scan",
"arguments": { "keyword": "目标药企名称" }
}
]
Agent 拿到返回后的聚合逻辑:先用 get_company_registration_info 确认主体存续状态,再用 get_actual_controller / get_beneficial_owners 锁定责任归属;get_administrative_penalty 与 get_dishonest_info 命中即拉低健康分;最后用 get_executive_positions + get_company_related_risk_scan 做关联方传导,判断单张罚单是否波及经销商与生产基地。
五、持续监控与画像留痕
并购不是终点。对已纳入合作或投资标的的药企,应建立常态化监测:跟踪行政处罚、产品召回、飞行检查结论、诉讼与资格罚等风险信号,变动发生时及时预警。
并定期对在库企业做全量比对,更新企业画像留档,供投后核查与监管问询复用。
把核验过程与结论整理成结构化合规画像,既满足尽职调查的留痕要求,也让「机构罚+个人资格罚」这类深层信号在最早阶段被捕捉。