Files
AIclinicalresearch/backend/update-skill-applicable-forms.ts

116 lines
3.2 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 更新 Skill 配置:为规则添加 applicableForms
*
* 确保规则只在包含对应表单的事件中执行
*/
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
console.log('='.repeat(60));
console.log('📋 更新 Skill 配置:添加 applicableForms');
console.log('='.repeat(60));
// 1. 获取项目
const project = await prisma.iitProject.findFirst({
where: { name: { contains: 'test0207' } },
});
if (!project) {
console.log('❌ 未找到项目');
await prisma.$disconnect();
return;
}
console.log(`\n✅ 项目: ${project.name} (${project.id})`);
// 2. 获取当前 Skill 配置
const skill = await prisma.iitSkill.findFirst({
where: { projectId: project.id, isActive: true },
});
if (!skill) {
console.log('❌ 未找到激活的 Skill');
await prisma.$disconnect();
return;
}
console.log(`\n📋 当前 Skill: ${skill.name} (${skill.id})`);
const config = skill.config as any;
const rules = config?.rules || [];
console.log(`\n当前规则配置 (共 ${rules.length} 条):`);
for (const rule of rules) {
console.log(` - ${rule.name}`);
console.log(` field: ${rule.field}`);
console.log(` applicableForms: ${JSON.stringify(rule.applicableForms || '(未设置)')}`);
}
// 3. 定义规则-表单映射
// 根据规则检查的字段,确定应该在哪个表单中检查
const ruleFormMapping: Record<string, string[]> = {
'年龄范围检查': ['basic_demography_form'],
'出生日期范围检查': ['basic_demography_form'],
'月经周期规律性检查': ['medical_history_and_diagnosis'],
'VAS 评分检查': ['cmss'], // 或者 mcgill_sfmpq根据实际字段确定
'知情同意书签署检查': ['informed_consent'],
};
// 4. 更新规则配置
console.log('\n' + '='.repeat(60));
console.log('📝 更新规则配置');
console.log('='.repeat(60));
const updatedRules = rules.map((rule: any) => {
const applicableForms = ruleFormMapping[rule.name];
if (applicableForms) {
console.log(`\n ✅ ${rule.name}`);
console.log(` 添加 applicableForms: ${JSON.stringify(applicableForms)}`);
return {
...rule,
applicableForms,
};
} else {
console.log(`\n ⚠️ ${rule.name} - 未找到映射,保持不变`);
return rule;
}
});
// 5. 保存更新后的配置
const updatedConfig = {
...config,
rules: updatedRules,
};
await prisma.iitSkill.update({
where: { id: skill.id },
data: { config: updatedConfig },
});
console.log('\n' + '='.repeat(60));
console.log('✅ 配置更新完成');
console.log('='.repeat(60));
// 6. 验证更新结果
const verifySkill = await prisma.iitSkill.findUnique({
where: { id: skill.id },
});
const verifyConfig = verifySkill?.config as any;
console.log('\n更新后的规则配置:');
for (const rule of verifyConfig?.rules || []) {
console.log(` - ${rule.name}`);
console.log(` applicableForms: ${JSON.stringify(rule.applicableForms || '(未设置)')}`);
}
await prisma.$disconnect();
}
main().catch(async (error) => {
console.error('❌ 脚本出错:', error);
await prisma.$disconnect();
process.exit(1);
});