社会责任与合规审计
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read647 words

社会责任与合规审计

一次负面新闻——供应商被曝用童工或强迫劳动——足以摧毁一个品牌花了 10 年建立的声誉。社会责任审计不是形式,而是风险管理。

主流合规标准

标准 发起方 核心要求 适用
SA 8000 SAI 国际 劳工权利、工时、工资、健康安全 制造类供应商
BSCI 欧洲外贸协会 劳工/健康安全/环境/商业道德 欧洲品牌供应商
SMETA SEDEX 劳工/健康安全/环境/商业道德 综合合规
ISO 45001 ISO 职业健康安全管理体系 制造业
RBA 电子行业 劳工/健康/环境/道德/管理体系 电子制造商

审计评分系统

"""
供应链合规审计评分系统
"""
from dataclasses import dataclass, field
@dataclass
class AuditFinding:
"""审计发现"""
category: str      # 劳工/健康安全/环境/商业道德
item: str
severity: str      # critical / major / minor / observation
description: str
evidence: str
corrective_action: str = ""
deadline_days: int = 30
closed: bool = False
class ComplianceAuditor:
"""合规审计系统"""
# 得分扣减
DEDUCTION = {
"critical": 30,   # 1 个 critical 直接不合格
"major": 10,
"minor": 3,
"observation": 0,
}
# 强制失败项(零容忍)
ZERO_TOLERANCE = {
"童工": "critical",
"强迫劳动": "critical",
"人身限制": "critical",
"贿赂": "critical",
"违反最低工资法": "critical",
}
def __init__(self, supplier: str, auditor: str):
self.supplier = supplier
self.auditor = auditor
self.findings: list[AuditFinding] = []
def add_finding(self, finding: AuditFinding):
self.findings.append(finding)
def score(self) -> dict:
"""计算审计得分"""
base_score = 100
deductions = 0
zero_tolerance_violations = []
for f in self.findings:
if not f.closed:
deductions += self.DEDUCTION.get(f.severity, 0)
if any(zt in f.item for zt in self.ZERO_TOLERANCE):
zero_tolerance_violations.append(f.item)
final_score = max(0, base_score - deductions)
if zero_tolerance_violations:
result = "不合格(零容忍项违规)"
final_score = 0
elif final_score >= 85:
result = "合格(优秀)"
elif final_score >= 70:
result = "合格(需改善)"
elif final_score >= 50:
result = "有条件合格(整改后复审)"
else:
result = "不合格(整改后重新审计)"
by_severity = {
s: sum(1 for f in self.findings if f.severity == s and not f.closed)
for s in ["critical", "major", "minor", "observation"]
}
return {
"供应商": self.supplier,
"得分": final_score,
"结果": result,
"发现数量": by_severity,
"零容忍违规": zero_tolerance_violations,
"待整改项": sum(1 for f in self.findings if not f.closed),
}
def cap_tracker(self) -> list[dict]:
"""整改行动计划(CAP)跟踪"""
return [
{
"类别": f.category,
"问题": f.item,
"严重度": f.severity,
"整改措施": f.corrective_action or "待供应商填写",
"截止天数": f.deadline_days,
"状态": "已关闭" if f.closed else "待整改",
}
for f in sorted(
self.findings,
key=lambda x: self.DEDUCTION.get(x.severity, 0),
reverse=True,
)
]
# 演示 — 审计场景
audit = ComplianceAuditor("东莞精密制造", "SMETA 认证审计员")
findings = [
AuditFinding("健康安全", "紧急出口被杂物堵塞", "major",
"3号车间紧急出口存在纸箱堆放,无法正常使用",
"现场照片 EX001.jpg",
"立即清除堵塞物,每周巡查",
deadline_days=7),
AuditFinding("劳工", "加班超出法定上限", "major",
"2月份员工加班记录显示平均周加班 18 小时,超出法定 12 小时",
"考勤记录 PAYROLL_FEB.xlsx",
"调整排班,加班不超 12 小时/周,引入轮班制",
deadline_days=30),
AuditFinding("劳工", "部分临时工无正式劳动合同", "minor",
"5 名派遣工合同到期未续签,仍在岗",
"人事档案",
"30 天内完成合同续签或规范用工",
deadline_days=30),
AuditFinding("环境", "废液存储区无二次收容", "minor",
"危险废液存储区无防渗托盘,存在泄漏风险",
"现场照片 ENV002.jpg",
"安装防渗托盘",
deadline_days=14),
AuditFinding("商业道德", "供应商礼品登记册不完整", "observation",
"礼品登记册缺少 2023Q4 记录",
"管理文件审查",
deadline_days=60),
]
for f in findings:
audit.add_finding(f)
print(f"=== 合规审计报告 — {audit.supplier} ===")
result = audit.score()
print(f"\n最终得分: {result['得分']} 分")
print(f"审计结果: {result['结果']}")
print(f"发现分布: {result['发现数量']}")
print("\n=== 整改行动计划(CAP)===")
for item in audit.cap_tracker():
urgency = "⚠️" if item["严重度"] == "major" else "  "
print(f"{urgency} [{item['严重度']:12s}] {item['问题'][:30]:<30} 期限:{item['截止天数']}天")

审计流程标准化

阶段 工作 时长
1. 文件审查 劳动合同、工资记录、环境许可证 0.5 天
2. 工人访谈 随机抽访 10–20 名工人(匿名) 1 天
3. 现场检查 车间、宿舍、食堂、废物处理 1 天
4. 管理层访谈 HR、EHS、采购负责人 0.5 天
5. 报告撰写 问题汇总、评分、CAP 建议 1–2 天

常见违规类型与严重度

违规 严重度 典型行业 整改周期
童工 零容忍 服装、食品农业 立即停止合作
过度加班 Major 电子、服装 30 天
无劳动合同 Major 劳动密集型 30 天
紧急出口堵塞 Major 制造业普遍 7 天
工资低于最低工资 Critical 劳工密集型 立即纠正
无个人防护装备(PPE) Minor 制造/化工 14 天

行动清单

下一章AI 与自动化 → — 用智能技术提升供应链效率。