以下是内容的中文翻译:
name: niosh-lifting-calculator description: NIOSH 举重方程计算器,用于手动物料搬运风险评估。 allowed-tools: Bash(*) 读写编辑 Grep WebFetch metadata: author: babysitter-sdk version: “1.0.0” category: ergonomics backlog-id: SK-IE-020
niosh-lifting-calculator
你是 niosh-lifting-calculator - 一个专门用于使用 NIOSH 举重方程评估手动举重任务的特殊技能。
概览
这项技能支持 AI 驱动的举重风险评估,包括:
- 推荐重量限制 (RWL) 计算
- 举重指数 (LI) 计算
- 乘数因子分析 (HM, VM, DM, AM, FM, CM)
- 单任务和多任务分析
- 风险等级分类
- 工作重新设计建议
- 工作修改比较
能力
1. NIOSH 举重方程
from dataclasses import dataclass
from typing import Optional
import math
@dataclass
class LiftingTaskParameters:
"""
NIOSH 举重方程的输入参数
"""
# 负载特性
load_weight_lbs: float # 实际被举起的重量
# 起始点参数
horizontal_origin: float # H: 从两脚踝中点的水平距离(英寸)
vertical_origin: float # V: 起始点的垂直高度(英寸)
# 目的地参数
horizontal_dest: float # 目的地的 H
vertical_dest: float # 目的地的 V
# 任务参数
vertical_travel: float # D: 垂直移动距离(英寸)
asymmetry_angle: float # A: 不对称角度(度)
frequency: float # F: 每分钟举起次数
duration: float # 持续时间类别:1 (≤1小时), 2 (1-2小时), 8 (2-8小时)
coupling: str # "good", "fair", "poor"
def calculate_rwl(params: LiftingTaskParameters, at_origin: bool = True):
"""
使用 NIOSH 方程计算推荐重量限制
RWL = LC x HM x VM x DM x AM x FM x CM
LC = 负载常数 = 51 磅
"""
LC = 51 # 磅中的负载常数
# 选择起始点或目的地以获得位置特定的 RWL
H = params.horizontal_origin if at_origin else params.horizontal_dest
V = params.vertical_origin if at_origin else params.vertical_dest
# 水平乘数 (HM)
# HM = 10/H, 其中 H 在 10-25 英寸之间
H = max(10, min(H, 25)) # 限制在有效范围内
HM = 10 / H
# 垂直乘数 (VM)
# VM = 1 - 0.0075|V - 30|
VM = 1 - 0.0075 * abs(V - 30)
VM = max(0, VM) # 不能为负
# 距离乘数 (DM)
# DM = 0.82 + 1.8/D
D = max(10, params.vertical_travel) # 最小 10 英寸
DM = 0.82 + (1.8 / D)
DM = min(1, DM) # 不能超过 1
# 不对称乘数 (AM)
# AM = 1 - 0.0032A
A = min(135, params.asymmetry_angle) # 最大 135 度
AM = 1 - (0.0032 * A)
# 频率乘数 (FM)
FM = get_frequency_multiplier(params.frequency, params.duration, V)
# 耦合乘数 (CM)
CM = get_coupling_multiplier(params.coupling, V)
# 计算 RWL
RWL = LC * HM * VM * DM * AM * FM * CM
return {
"RWL": round(RWL, 1),
"multipliers": {
"LC": LC,
"HM": round(HM, 3),
"VM": round(VM, 3),
"DM": round(DM, 3),
"AM": round(AM, 3),
"FM": round(FM, 3),
"CM": round(CM, 3)
},
"location": "origin" if at_origin else "destination"
}
def get_frequency_multiplier(frequency, duration, vertical):
"""
频率乘数查找表
"""
# 简化的 FM 表
FM_TABLE = {
# (frequency, duration, V>=30): FM 值
(0.2, 1, True): 1.00, (0.2, 1, False): 1.00,
(0.5, 1, True): 0.97, (0.5, 1, False): 0.97,
(1, 1, True): 0.94, (1, 1, False): 0.94,
(2, 1, True): 0.91, (2, 1, False): 0.91,
(3, 1, True): 0.88, (3, 1, False): 0.88,
(4, 1, True): 0.84, (4, 1, False): 0.84,
(5, 1, True): 0.80, (5, 1, False): 0.80,
# 根据需要添加更多
}
# 查找最接近的匹配或插值
v_category = vertical >= 30
key = (min(15, frequency), int(duration), v_category)
# 默认近似
if frequency <= 0.2:
return 1.0
elif frequency >= 15:
return 0.0
else:
# 线性近似
return max(0, 1 - 0.05 * frequency)
def get_coupling_multiplier(coupling, vertical):
"""
基于手柄质量的耦合乘数
"""
CM_TABLE = {
("good", True): 1.00,
("good", False): 1.00,
("fair", True): 0.95,
("fair", False): 1.00,
("poor", True): 0.90,
("poor", False): 0.90
}
v_category = vertical >= 30
return CM_TABLE.get((coupling.lower(), v_category), 0.90)
2. 举重指数计算
def calculate_lifting_index(params: LiftingTaskParameters):
"""
计算举重指数
LI = 负荷重量 / RWL
LI 解释:
- LI ≤ 1.0: 大部分工人可以接受
- 1.0 < LI ≤ 3.0: 增加风险,一些工人可能面临风险
- LI > 3.0: 大部分工人不可接受
"""
# 在起始点和目的地计算 RWL
rwl_origin = calculate_rwl(params, at_origin=True)
rwl_dest = calculate_rwl(params, at_origin=False)
# 使用更严格的(较低)RWL
rwl = min(rwl_origin['RWL'], rwl_dest['RWL'])
limiting_location = "origin" if rwl_origin['RWL'] < rwl_dest['RWL'] else "destination"
# 计算举重指数
li = params.load_weight_lbs / rwl if rwl > 0 else float('inf')
# 风险分类
if li <= 1.0:
risk_level = "LOW"
risk_description = "任务对大多数健康工人来说是可以接受的"
elif li <= 2.0:
risk_level = "MODERATE"
risk_description = "增加风险 - 考虑工作修改"
elif li <= 3.0:
risk_level = "HIGH"
risk_description = "高风险 - 建议重新设计工作"
else:
risk_level = "VERY HIGH"
risk_description = "不可接受的风险 - 需要立即重新设计"
return {
"lifting_index": round(li, 2),
"rwl": rwl,
"rwl_origin": rwl_origin['RWL'],
"rwl_dest": rwl_dest['RWL'],
"limiting_location": limiting_location,
"actual_weight": params.load_weight_lbs,
"risk_level": risk_level,
"risk_description": risk_description,
"multipliers_origin": rwl_origin['multipliers'],
"multipliers_dest": rwl_dest['multipliers']
}
3. 多任务分析
def multi_task_lifting_index(tasks: list):
"""
计算多个任务的复合举重指数
CLI = LI_max + 剩余任务的 LI_adjusted 总和
"""
if not tasks:
return None
# 计算单个 LI
task_results = []
for task in tasks:
result = calculate_lifting_index(task['params'])
result['task_name'] = task.get('name', 'Unnamed')
result['frequency'] = task['params'].frequency
task_results.append(result)
# 按 LI 降序排序
task_results.sort(key=lambda x: x['lifting_index'], reverse=True)
# 计算 CLI
cli = task_results[0]['lifting_index']
for i in range(1, len(task_results)):
# 频率调整其他任务
# 简化:添加每个额外 LI 的分数
freq_factor = sum(t['frequency'] for t in task_results[:i+1]) / \
sum(t['frequency'] for t in task_results[:i])
cli += task_results[i]['lifting_index'] * (freq_factor - 1) / freq_factor
return {
"composite_lifting_index": round(cli, 2),
"individual_tasks": task_results,
"most_stressful_task": task_results[0]['task_name'],
"risk_level": get_risk_level(cli)
}
def get_risk_level(li):
if li <= 1.0:
return "LOW"
elif li <= 2.0:
return "MODERATE"
elif li <= 3.0:
return "HIGH"
else:
return "VERY HIGH"
4. 乘数分析和建议
def analyze_multipliers(result: dict):
"""
确定哪些因素限制并提供建议
"""
multipliers = result.get('multipliers_origin', {})
limiting_factors = []
# 确定低于阈值的因素
thresholds = {
"HM": 0.7, # 水平距离问题
"VM": 0.8, # 垂直高度问题
"DM": 0.8, # 行程距离问题
"AM": 0.8, # 不对称问题
"FM": 0.7, # 频率问题
"CM": 0.9 # 耦合问题
}
recommendations = []
for factor, threshold in thresholds.items():
if factor in multipliers and multipliers[factor] < threshold:
limiting_factors.append(factor)
if factor == "HM":
recommendations.append({
"factor": "水平距离",
"issue": f"HM = {multipliers[factor]:.2f} - 负载离身体太远",
"recommendations": [
"将负载移近工人",
"使用传送带或滑道",
"消除工人和负载之间的障碍",
"减少容器宽度"
]
})
elif factor == "VM":
recommendations.append({
"factor": "垂直位置",
"issue": f"VM = {multipliers[factor]:.2f} - 提升高度不优",
"recommendations": [
"提高或降低起始点/目的地",
"使用升降台或平台",
"消除地面水平或头顶举起"
]
})
elif factor == "DM":
recommendations.append({
"factor": "行程距离",
"issue": f"DM = {multipliers[factor]:.2f} - 过多的垂直行程",
"recommendations": [
"减少垂直行程距离",
"使用机械辅助进行长距离举起",
"重新定位起始点和目的地"
]
})
elif factor == "AM":
recommendations.append({
"factor": "不对称",
"issue": f"AM = {multipliers[factor]:.2f} - 需要扭曲",
"recommendations": [
"重新定位负载或目的地以消除扭曲",
"使用转盘",
"改善工作站布局"
]
})
elif factor == "FM":
recommendations.append({
"factor": "频率",
"issue": f"FM = {multipliers[factor]:.2f} - 高举频率",
"recommendations": [
"减少举起频率",
"增加工作轮换",
"使用机械辅助",
"增加休息时间"
]
})
elif factor == "CM":
recommendations.append({
"factor": "耦合",
"issue": f"CM = {multipliers[factor]:.2f} - 握把/手柄差",
"recommendations": [
"在容器上添加手柄",
"使用有手把的容器",
"改善握把表面"
]
})
return {
"limiting_factors": limiting_factors,
"recommendations": recommendations,
"priority": limiting_factors[0] if limiting_factors else None
}
5. 工作修改比较
def compare_modifications(baseline: LiftingTaskParameters, modifications: list):
"""
比较基线和提议的修改
"""
baseline_result = calculate_lifting_index(baseline)
comparisons = [{
"scenario": "基线",
"changes": None,
"lifting_index": baseline_result['lifting_index'],
"rwl": baseline_result['rwl'],
"risk_level": baseline_result['risk_level'],
"improvement": 0
}]
for mod in modifications:
mod_result = calculate_lifting_index(mod['params'])
improvement = (baseline_result['lifting_index'] - mod_result['lifting_index']) / \
baseline_result['lifting_index'] * 100
comparisons.append({
"scenario": mod['name'],
"changes": mod.get('description', ''),
"lifting_index": mod_result['lifting_index'],
"rwl": mod_result['rwl'],
"risk_level": mod_result['risk_level'],
"improvement": round(improvement, 1)
})
# 按改善排序
comparisons.sort(key=lambda x: x['lifting_index'])
return {
"comparisons": comparisons,
"best_scenario": comparisons[0]['scenario'],
"best_improvement": comparisons[0]['improvement']
}
流程集成
这项技能与以下流程集成:
ergonomic-risk-assessment.jsworkstation-design-optimization.js
输出格式
{
"lifting_index": 1.8,
"rwl": 28.3,
"actual_weight": 51,
"risk_level": "MODERATE",
"limiting_factors": ["HM", "AM"],
"recommendations": [
{
"factor": "水平距离",
"recommendations": ["将负载移近工人"]
}
],
"improvement_options": [
{
"scenario": "增加升降台",
"improvement": 45
}
]
}
最佳实践
- 准确测量 - 使用卷尺,角度测量仪
- 最坏情况分析 - 评估最费力的条件
- 考虑变化 - 不同工人,负载大小
- 多任务工作 - 使用 CLI 进行不同任务
- 修改后验证 - 修改后重新评估
- 记录一切 - 照片,测量,观察
限制
- NIOSH 方程有限制(不包括推/拉)
- 仅适用于双手举起
- 假设有足够的握力
- 不考虑环境因素