#!/usr/bin/env python # -*- coding: utf-8 -*- """ 生成SCL-90完整JSON文件的脚本 包含90个题目、9个因子、计分规则、结果解释和预警规则 """ import json # SCL-90标准90个题目内容 scl90_items = [ "头痛", "神经过敏,心中不踏实", "头脑中有不必要的想法或字句盘旋", "头昏或昏倒", "对异性的兴趣减退", "对旁人责备求全", "感到别人能控制您的思想", "责怪别人制造麻烦", "忘记性大", "担心自己的衣饰整齐及仪态的端正", "容易烦恼和激动", "胸痛", "害怕空旷的场所或街道", "感到自己的精力下降,活动减慢", "想结束自己的生命", "听到旁人听不到的声音", "发抖", "感到大多数人都不可信任", "胃口不好", "容易哭泣", "同异性相处时感到害羞不自在", "感到受骗、中了圈套或有人想抓住您", "无缘无故地突然感到害怕", "自己不能控制地大发脾气", "怕单独出门", "经常责怪自己", "腰痛", "感到难以完成任务", "感到孤独", "感到苦闷", "过分担忧", "对事物不感兴趣", "感到害怕", "您的感情容易受到伤害", "感到旁人能知道您的私下想法", "感到别人不理解您、不同情您", "感到人们对您不友好、不喜欢您", "做事必须做得很慢以保证做得正确", "心跳得很厉害", "恶心或胃部不舒服", "感到比不上他人", "肌肉酸痛", "感到有人在监视您、谈论您", "难以入睡", "做事必须反复检查", "难以做出决定", "怕乘电车、公共汽车、地铁或火车", "呼吸有困难", "一阵阵发冷或发热", "因为感到害怕而避开某些东西、场合或活动", "脑子变空了", "身体发麻或刺痛", "喉咙有梗塞感", "感到前途没有希望", "不能集中注意", "感到身体的某一部分软弱无力", "感到紧张或容易紧张", "感到手或脚发重", "想到死亡的事", "吃得太多", "当别人看着您或谈论您时感到不自在", "有一些不属于您自己的想法", "有想打人或伤害他人的冲动", "醒得太早", "必须反复洗手、点数或触摸某些东西", "睡得不稳不深", "有想摔坏或破坏东西的冲动", "有一些别人没有的想法或念头", "感到对别人神经过敏", "在商店或电影院等人多的地方感到不自在", "感到任何事情都很困难", "一阵阵恐惧或惊恐", "感到在公共场合吃东西很不舒服", "经常与人争论", "单独一人时神经很紧张", "别人对您的成绩没有做出恰当的评价", "即使和别人在一起也感到孤单", "感到坐立不安心神不定", "感到自己没有什么价值", "感到熟悉的东西变成陌生或不像是真的", "大叫或摔东西", "害怕会在公共场合昏倒", "感到别人想占您的便宜", "为一些有关\"性\"的想法而很苦恼", "您认为应该因为自己的过错而受到惩罚", "感到要很快把事情做完", "感到自己的身体有严重问题", "从未感到和其他人很亲近", "感到自己有罪", "感到自己的脑子有毛病" ] # SCL-90因子定义(因子代码、名称、包含的题目编号) factors_data = [ {"code": "F1", "name": "躯体化", "items": [1,4,12,27,40,42,48,49,52,53,56,58]}, {"code": "F2", "name": "强迫症状", "items": [3,9,10,28,38,45,46,51,55,65]}, {"code": "F3", "name": "人际关系敏感", "items": [6,21,34,36,37,41,61,69,73]}, {"code": "F4", "name": "抑郁", "items": [5,14,15,20,22,26,29,30,31,32,54,71,79]}, {"code": "F5", "name": "焦虑", "items": [2,17,23,33,39,57,72,78,80,86]}, {"code": "F6", "name": "敌对", "items": [11,24,63,67,74,81]}, {"code": "F7", "name": "恐怖", "items": [13,25,47,50,70,75,82]}, {"code": "F8", "name": "偏执", "items": [8,18,43,68,76,83]}, {"code": "F9", "name": "精神病性", "items": [7,16,35,62,77,84,85,87,88,90]} ] # 因子英文名称映射 factor_en_names = { "F1": "Somatization", "F2": "Obsessive-Compulsive", "F3": "Interpersonal Sensitivity", "F4": "Depression", "F5": "Anxiety", "F6": "Hostility", "F7": "Phobic Anxiety", "F8": "Paranoid Ideation", "F9": "Psychoticism" } # 生成量表基本信息 scale_info = { "scaleCode": "SCL_90", "scaleName": "症状自评量表SCL-90", "scaleEnName": "Symptom Checklist 90", "scaleType": "symptom", "scaleVersion": "1.0", "scaleIntro": "SCL-90是一个包含90个项目的症状自评量表,用于评估个体的心理症状水平", "scaleDescription": "SCL-90量表包含90个项目,涵盖9个症状因子:躯体化、强迫症状、人际关系敏感、抑郁、焦虑、敌对、恐怖、偏执、精神病性。采用5级评分(0-4分),是心理健康评估的重要工具。", "itemCount": 90, "estimatedTime": 30, "targetPopulation": "一般人群", "author": "Derogatis", "source": "心理卫生评定量表手册", "reference": "Derogatis, L. R. (1977). SCL-90: Administration, scoring, and procedures manual. Clinical Psychometric Research.", "status": "0", "sortOrder": 0 } # 生成题目列表(包含选项) items_list = [] for i, content in enumerate(scl90_items, 1): item_data = { "item": { "itemNumber": i, "itemContent": content, "itemType": "single", "required": "1", "reverseScore": "0", "sortOrder": i }, "options": [ {"optionCode": "A", "optionContent": "没有", "optionScore": 0, "sortOrder": 1}, {"optionCode": "B", "optionContent": "很轻", "optionScore": 1, "sortOrder": 2}, {"optionCode": "C", "optionContent": "中等", "optionScore": 2, "sortOrder": 3}, {"optionCode": "D", "optionContent": "偏重", "optionScore": 3, "sortOrder": 4}, {"optionCode": "E", "optionContent": "严重", "optionScore": 4, "sortOrder": 5} ] } items_list.append(item_data) # 生成因子列表(包含计分规则) factors_list = [] for idx, factor_data in enumerate(factors_data, 1): factor_obj = { "factor": { "factorCode": factor_data["code"], "factorName": factor_data["name"], "factorEnName": factor_en_names.get(factor_data["code"], ""), "factorDescription": "SCL-90 {}因子,包含{}个题目".format(factor_data["name"], len(factor_data["items"])), "factorOrder": idx }, "rules": [ { "itemNumber": item_num, "rule": { "optionIds": "", "weight": 1.0, "calculationType": "sum" } } for item_num in factor_data["items"] ] } factors_list.append(factor_obj) # SCL-90因子常模和解释规则 # 因子均分标准:<1.0正常,1.0-1.9轻度,2.0-2.9中度,≥3.0重度 # 因子总分 = 因子均分 × 题目数量 # 因子题目数量和总分范围 factor_ranges = { "F1": {"itemCount": 12, "maxScore": 48}, # 躯体化 "F2": {"itemCount": 10, "maxScore": 40}, # 强迫症状 "F3": {"itemCount": 9, "maxScore": 36}, # 人际关系敏感 "F4": {"itemCount": 13, "maxScore": 52}, # 抑郁 "F5": {"itemCount": 10, "maxScore": 40}, # 焦虑 "F6": {"itemCount": 6, "maxScore": 24}, # 敌对 "F7": {"itemCount": 7, "maxScore": 28}, # 恐怖 "F8": {"itemCount": 6, "maxScore": 24}, # 偏执 "F9": {"itemCount": 10, "maxScore": 40} # 精神病性 } # 生成总体解释配置(总分范围0-360) interpretations_list = [ { "factorId": None, "scoreRangeMin": 0, "scoreRangeMax": 160, "level": "低", "levelName": "正常", "interpretationTitle": "正常范围", "interpretationContent": "您的总体得分在正常范围内,心理健康状况良好。", "suggestions": "继续保持良好的心理状态,注意日常生活中的压力管理。", "sortOrder": 1 }, { "factorId": None, "scoreRangeMin": 161, "scoreRangeMax": 250, "level": "中", "levelName": "轻度", "interpretationTitle": "轻度症状", "interpretationContent": "您可能存在轻度的心理症状,建议适当关注自己的心理健康。", "suggestions": "建议通过放松训练、运动、社交等方式缓解压力,如症状持续可考虑咨询专业人士。", "sortOrder": 2 }, { "factorId": None, "scoreRangeMin": 251, "scoreRangeMax": 360, "level": "高", "levelName": "中重度", "interpretationTitle": "中重度症状", "interpretationContent": "您的得分显示可能存在中重度的心理症状,建议寻求专业心理帮助。", "suggestions": "强烈建议咨询心理医生或心理治疗师,进行专业的心理评估和治疗。", "sortOrder": 3 } ] # 为每个因子生成解释配置(基于因子总分) # 因子均分 < 1.0 为正常,1.0-1.9 为轻度,2.0-2.9 为中度,≥ 3.0 为重度 factor_interpretations = { "F1": { "name": "躯体化", "descriptions": { "正常": "您的躯体化因子得分在正常范围内,躯体不适感较轻。", "轻度": "您可能存在轻度的躯体化症状,建议关注身体健康状况。", "中度": "您存在中度的躯体化症状,建议进行身体检查并关注心理健康。", "重度": "您存在重度的躯体化症状,强烈建议寻求医疗和心理双重帮助。" }, "suggestions": { "正常": "继续保持良好的生活习惯,定期体检。", "轻度": "建议关注身体健康,适当进行体检,同时注意心理压力的管理。", "中度": "建议进行全面的身体检查,排除器质性病变,并寻求心理帮助。", "重度": "强烈建议尽快就医,进行全面的身体和心理评估,制定综合治疗方案。" } }, "F2": { "name": "强迫症状", "descriptions": { "正常": "您的强迫症状因子得分在正常范围内,强迫思维和行为较少。", "轻度": "您可能存在轻度的强迫症状,偶尔出现不必要的想法或行为。", "中度": "您存在中度的强迫症状,可能影响日常生活和工作效率。", "重度": "您存在重度的强迫症状,严重影响日常生活,需要专业治疗。" }, "suggestions": { "正常": "继续保持良好的心理状态。", "轻度": "建议学习放松技巧,减少不必要的担心和重复行为。", "中度": "建议寻求心理治疗,学习认知行为疗法等方法来缓解强迫症状。", "重度": "强烈建议寻求专业心理治疗,可能需要药物治疗配合心理治疗。" } }, "F3": { "name": "人际关系敏感", "descriptions": { "正常": "您的人际关系敏感因子得分在正常范围内,人际交往较为自然。", "轻度": "您可能在人际交往中偶尔感到不适或敏感。", "中度": "您存在中度的人际关系敏感,可能影响社交能力和人际关系。", "重度": "您存在重度的人际关系敏感,严重影响社交和人际关系,需要帮助。" }, "suggestions": { "正常": "继续保持良好的人际交往。", "轻度": "建议增加社交活动,培养自信,学习沟通技巧。", "中度": "建议寻求心理咨询,学习改善人际关系的方法和技巧。", "重度": "强烈建议寻求专业心理治疗,改善社交恐惧和人际关系问题。" } }, "F4": { "name": "抑郁", "descriptions": { "正常": "您的抑郁因子得分在正常范围内,情绪状态良好。", "轻度": "您可能存在轻度的抑郁情绪,偶尔感到沮丧或失落。", "中度": "您存在中度的抑郁症状,可能影响日常生活和工作。", "重度": "您存在重度的抑郁症状,严重影响生活功能,需要立即寻求帮助。" }, "suggestions": { "正常": "继续保持良好的情绪状态。", "轻度": "建议增加运动,培养兴趣爱好,保持规律的作息。", "中度": "建议寻求心理咨询或心理治疗,必要时考虑药物治疗。", "重度": "强烈建议立即寻求专业帮助,可能需要药物治疗和心理治疗相结合。" } }, "F5": { "name": "焦虑", "descriptions": { "正常": "您的焦虑因子得分在正常范围内,焦虑水平较低。", "轻度": "您可能存在轻度的焦虑情绪,偶尔感到紧张或担心。", "中度": "您存在中度的焦虑症状,可能影响日常生活和工作。", "重度": "您存在重度的焦虑症状,严重影响生活功能,需要专业治疗。" }, "suggestions": { "正常": "继续保持良好的心理状态。", "轻度": "建议学习放松技巧,进行深呼吸和冥想练习。", "中度": "建议寻求心理咨询,学习焦虑管理技巧,必要时考虑药物治疗。", "重度": "强烈建议寻求专业治疗,可能需要药物治疗配合心理治疗。" } }, "F6": { "name": "敌对", "descriptions": { "正常": "您的敌对因子得分在正常范围内,情绪控制良好。", "轻度": "您可能存在轻度的敌对情绪,偶尔感到愤怒或烦躁。", "中度": "您存在中度的敌对情绪,可能影响人际关系。", "重度": "您存在重度的敌对情绪,严重影响人际关系和社会功能。" }, "suggestions": { "正常": "继续保持良好的情绪管理。", "轻度": "建议学习情绪管理技巧,进行适当的运动来释放压力。", "中度": "建议寻求心理咨询,学习愤怒管理和冲突解决技巧。", "重度": "强烈建议寻求专业心理治疗,改善情绪控制和人际交往能力。" } }, "F7": { "name": "恐怖", "descriptions": { "正常": "您的恐怖因子得分在正常范围内,恐惧情绪较少。", "轻度": "您可能存在轻度的恐怖情绪,对某些情境感到轻微不安。", "中度": "您存在中度的恐怖情绪,可能影响正常生活和工作。", "重度": "您存在重度的恐怖情绪,严重影响正常生活,需要专业治疗。" }, "suggestions": { "正常": "继续保持良好的心理状态。", "轻度": "建议逐步面对恐惧,进行脱敏训练。", "中度": "建议寻求心理咨询,进行系统脱敏治疗。", "重度": "强烈建议寻求专业心理治疗,可能需要暴露疗法和药物治疗。" } }, "F8": { "name": "偏执", "descriptions": { "正常": "您的偏执因子得分在正常范围内,信任感良好。", "轻度": "您可能存在轻度的偏执倾向,偶尔对他人产生怀疑。", "中度": "您存在中度的偏执倾向,可能影响人际关系和信任。", "重度": "您存在重度的偏执倾向,严重影响人际关系和社会功能。" }, "suggestions": { "正常": "继续保持良好的人际信任。", "轻度": "建议增强自信,学习信任他人,改善人际关系。", "中度": "建议寻求心理咨询,改善偏执思维,学习正确的认知方式。", "重度": "强烈建议寻求专业心理治疗,可能需要认知行为疗法和药物治疗。" } }, "F9": { "name": "精神病性", "descriptions": { "正常": "您的精神病性因子得分在正常范围内,思维清晰。", "轻度": "您可能存在轻微的精神病性症状,偶尔出现异常想法。", "中度": "您存在中度的精神病性症状,可能影响思维和判断。", "重度": "您存在重度的精神病性症状,严重影响思维功能,需要立即就医。" }, "suggestions": { "正常": "继续保持良好的心理状态。", "轻度": "建议关注心理健康,如有持续异常思维请及时咨询。", "中度": "强烈建议寻求精神科医生的专业评估和治疗。", "重度": "紧急建议立即寻求精神科专业治疗,可能需要住院治疗。" } } } # 为每个因子添加解释配置 for factor_code, factor_info in factor_interpretations.items(): if factor_code in factor_ranges: item_count = factor_ranges[factor_code]["itemCount"] max_score = factor_ranges[factor_code]["maxScore"] # 正常:均分 < 1.0,总分 < 题目数 interpretations_list.append({ "factorId": None, # 导入时会通过factorCode映射设置 "factorCode": factor_code, # 用于映射到factorId的临时字段 "scoreRangeMin": 0, "scoreRangeMax": item_count - 1, "level": "低", "levelName": "正常", "interpretationTitle": "{}因子正常".format(factor_info["name"]), "interpretationContent": factor_info["descriptions"]["正常"], "suggestions": factor_info["suggestions"]["正常"], "sortOrder": 1 }) # 轻度:均分 1.0-1.9,总分 = 题目数 × 1.0 到 题目数 × 1.9 min_light = item_count * 1.0 max_light = int(item_count * 1.9) interpretations_list.append({ "factorId": None, "factorCode": factor_code, "scoreRangeMin": int(min_light), "scoreRangeMax": max_light, "level": "中", "levelName": "轻度", "interpretationTitle": "{}因子轻度".format(factor_info["name"]), "interpretationContent": factor_info["descriptions"]["轻度"], "suggestions": factor_info["suggestions"]["轻度"], "sortOrder": 2 }) # 中度:均分 2.0-2.9,总分 = 题目数 × 2.0 到 题目数 × 2.9 min_moderate = item_count * 2.0 max_moderate = int(item_count * 2.9) interpretations_list.append({ "factorId": None, "factorCode": factor_code, "scoreRangeMin": int(min_moderate), "scoreRangeMax": max_moderate, "level": "高", "levelName": "中度", "interpretationTitle": "{}因子中度".format(factor_info["name"]), "interpretationContent": factor_info["descriptions"]["中度"], "suggestions": factor_info["suggestions"]["中度"], "sortOrder": 3 }) # 重度:均分 ≥ 3.0,总分 ≥ 题目数 × 3.0 min_severe = int(item_count * 3.0) interpretations_list.append({ "factorId": None, "factorCode": factor_code, "scoreRangeMin": min_severe, "scoreRangeMax": max_score, "level": "高", "levelName": "重度", "interpretationTitle": "{}因子重度".format(factor_info["name"]), "interpretationContent": factor_info["descriptions"]["重度"], "suggestions": factor_info["suggestions"]["重度"], "sortOrder": 4 }) # 生成预警规则 warning_rules_list = [ # 总体预警规则 { "factorId": None, "ruleName": "重度症状预警", "warningLevel": "高", "scoreMin": 250, "scoreMax": 360, "autoRelief": "0", "status": "0" }, { "factorId": None, "ruleName": "紧急症状预警", "warningLevel": "紧急", "scoreMin": 300, "scoreMax": 360, "autoRelief": "0", "status": "0" } ] # 为每个因子添加预警规则(重度及以上需要预警) for factor_code, factor_info in factor_interpretations.items(): if factor_code in factor_ranges: item_count = factor_ranges[factor_code]["itemCount"] max_score = factor_ranges[factor_code]["maxScore"] # 重度预警(均分 ≥ 3.0) min_severe = int(item_count * 3.0) warning_rules_list.append({ "factorId": None, # 导入时会通过factorCode映射设置 "factorCode": factor_code, # 用于映射到factorId的临时字段 "ruleName": "{}因子重度预警".format(factor_info["name"]), "warningLevel": "高", "scoreMin": min_severe, "scoreMax": max_score, "autoRelief": "0", "status": "0" }) # 中度预警(均分 2.0-2.9)- 对于某些敏感因子 if factor_code in ["F4", "F5", "F9"]: # 抑郁、焦虑、精神病性需要中度预警 min_moderate = int(item_count * 2.0) max_moderate = int(item_count * 2.9) warning_rules_list.append({ "factorId": None, "factorCode": factor_code, "ruleName": "{}因子中度预警".format(factor_info["name"]), "warningLevel": "中", "scoreMin": min_moderate, "scoreMax": max_moderate, "autoRelief": "0", "status": "0" }) # 组合完整的JSON对象 json_data = { "scale": scale_info, "items": items_list, "factors": factors_list, "interpretations": interpretations_list, "warningRules": warning_rules_list } # 输出JSON文件 output_file = "SCL90症状自评量表.json" with open(output_file, 'w', encoding='utf-8') as f: json.dump(json_data, f, ensure_ascii=False, indent=2) print("✅ SCL-90 JSON文件已生成: {}".format(output_file)) print("📊 统计信息:") print(" - 量表: {}".format(scale_info["scaleName"])) print(" - 题目数量: {}".format(len(items_list))) print(" - 因子数量: {}".format(len(factors_list))) print(" - 结果解释: {}".format(len(interpretations_list))) print(" - 预警规则: {}".format(len(warning_rules_list)))