/** * 调试脚本:检查质控数据和规则 */ import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function main() { console.log('=== 调试质控数据 ===\n'); // 1. 查找项目 const projects = await prisma.iitProject.findMany({ select: { id: true, name: true } }); console.log('所有项目:', projects); // 找 test0207 项目 const project = projects.find(p => p.name?.includes('test0207') || p.id?.includes('test0207')); if (!project) { console.log('未找到 test0207 项目'); await prisma.$disconnect(); return; } console.log('\n选中项目:', project); // 2. 查看质控规则 const skills = await prisma.iitSkill.findMany({ where: { projectId: project.id }, select: { name: true, skillType: true, config: true } }); console.log('\n质控技能:', skills.map(s => ({ name: s.name, type: s.skillType }))); // 找 qc_process 类型的规则 const qcSkill = skills.find(s => s.skillType === 'qc_process'); if (qcSkill) { console.log('\n质控规则配置:'); const config = qcSkill.config as any; if (config?.rules) { for (const rule of config.rules) { console.log(` - ${rule.id}: ${rule.name}, field: ${rule.field}, message: ${rule.message}`); } } } // 3. 查看最近的质控日志 const logs = await prisma.iitQcLog.findMany({ where: { projectId: project.id }, take: 3, orderBy: { createdAt: 'desc' }, select: { recordId: true, status: true, issues: true, createdAt: true } }); console.log('\n最近质控日志:'); for (const log of logs) { console.log(` Record ${log.recordId}: ${log.status}`); const issues = log.issues as any; if (issues?.items) { console.log(` Issues (${issues.items.length}):`, issues.items.slice(0, 2).map((i: any) => i.ruleName)); } else if (Array.isArray(issues)) { console.log(` Issues (${issues.length}):`, issues.slice(0, 2).map((i: any) => i.ruleName || i.message)); } } // 4. 查看 REDCap 适配器配置 const projectFull = await prisma.iitProject.findUnique({ where: { id: project.id }, select: { redcapUrl: true, redcapProjectId: true } }); console.log('\nREDCap 配置:', { url: projectFull?.redcapUrl, projectId: projectFull?.redcapProjectId }); await prisma.$disconnect(); } main().catch(console.error);