feat: update medical training case and auth modules
This commit is contained in:
@@ -1,146 +1,146 @@
|
||||
# Generated by Django 6.0.5 on 2026-05-26 07:02
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CaseBase',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('title', models.CharField(max_length=255, verbose_name='病例标题')),
|
||||
('case_type', models.CharField(choices=[('traditional', '传统病例'), ('script', '剧本病例'), ('teaching', '教学互动病例'), ('osce', 'OSCE')], max_length=30, verbose_name='病例类型')),
|
||||
('difficulty', models.CharField(blank=True, max_length=20, verbose_name='难度')),
|
||||
('difficulty_score', models.IntegerField(blank=True, null=True, verbose_name='AI难度评分')),
|
||||
('chief_complaint', models.TextField(blank=True, verbose_name='主诉')),
|
||||
('description', models.TextField(blank=True, verbose_name='病例简介')),
|
||||
('patient_age', models.IntegerField(blank=True, null=True, verbose_name='患者年龄')),
|
||||
('patient_gender', models.CharField(blank=True, max_length=10, verbose_name='患者性别')),
|
||||
('tags', models.CharField(blank=True, max_length=500, verbose_name='标签')),
|
||||
('symptom_tags', models.JSONField(blank=True, default=list, verbose_name='症状标签')),
|
||||
('disease_tags', models.JSONField(blank=True, default=list, verbose_name='疾病标签')),
|
||||
('competency_tags', models.JSONField(blank=True, default=list, verbose_name='能力标签')),
|
||||
('guideline_tags', models.JSONField(blank=True, default=list, verbose_name='指南标签')),
|
||||
('knowledge_points', models.JSONField(blank=True, default=list, verbose_name='知识点')),
|
||||
('icd_codes', models.CharField(blank=True, max_length=500, verbose_name='ICD编码')),
|
||||
('estimated_minutes', models.IntegerField(blank=True, null=True, verbose_name='预计训练时长')),
|
||||
('osce_enabled', models.BooleanField(default=False, verbose_name='是否OSCE')),
|
||||
('rag_enabled', models.BooleanField(default=False, verbose_name='是否启用知识增强')),
|
||||
('ai_prompt_template', models.TextField(blank=True, verbose_name='AI角色Prompt')),
|
||||
('multimodal_assets', models.JSONField(blank=True, default=dict, verbose_name='图片/影像/附件')),
|
||||
('vector_status', models.SmallIntegerField(default=0, verbose_name='是否向量化')),
|
||||
('publish_status', models.SmallIntegerField(choices=[(0, '草稿'), (1, '已发布'), (2, '已下架')], default=0, verbose_name='发布状态')),
|
||||
('status', models.SmallIntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='状态')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '病例',
|
||||
'verbose_name_plural': '病例',
|
||||
'db_table': 'case_base',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CaseStage',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('stage_type', models.CharField(blank=True, max_length=50, verbose_name='阶段类型')),
|
||||
('stage_name', models.CharField(max_length=100, verbose_name='阶段名称')),
|
||||
('stage_mode', models.CharField(choices=[('dialogue', '对话'), ('osce', 'OSCE'), ('choice', '选择')], default='dialogue', max_length=30, verbose_name='阶段模式')),
|
||||
('stage_goal', models.TextField(blank=True, verbose_name='阶段目标')),
|
||||
('ai_role_prompt', models.TextField(blank=True, verbose_name='AI阶段Prompt')),
|
||||
('standard_action', models.TextField(blank=True, verbose_name='标准动作')),
|
||||
('expected_questions', models.TextField(blank=True, verbose_name='期望问题')),
|
||||
('scoring_points', models.TextField(blank=True, verbose_name='评分点')),
|
||||
('timeout_seconds', models.IntegerField(blank=True, null=True, verbose_name='超时时间')),
|
||||
('unlock_condition', models.CharField(blank=True, max_length=255, verbose_name='解锁条件')),
|
||||
('sort_order', models.IntegerField(default=0, verbose_name='排序')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '病例阶段',
|
||||
'verbose_name_plural': '病例阶段',
|
||||
'db_table': 'case_stage',
|
||||
'ordering': ['sort_order', 'id'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ScoringRule',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('dimension', models.CharField(max_length=50, verbose_name='评分维度')),
|
||||
('competency_dimension', models.CharField(blank=True, max_length=50, verbose_name='能力维度')),
|
||||
('score_weight', models.DecimalField(decimal_places=2, default=1.0, max_digits=5, verbose_name='权重')),
|
||||
('ai_auto_score', models.BooleanField(default=False, verbose_name='AI自动评分')),
|
||||
('osce_dimension', models.BooleanField(default=False, verbose_name='是否OSCE')),
|
||||
('scoring_standard', models.TextField(blank=True, verbose_name='评分标准')),
|
||||
('rubric_json', models.JSONField(blank=True, default=dict, verbose_name='评分Rubric')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '评分规则',
|
||||
'verbose_name_plural': '评分规则',
|
||||
'db_table': 'scoring_rule',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ScriptCase',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('scenario_setting', models.TextField(blank=True, verbose_name='场景设定')),
|
||||
('emotional_state', models.CharField(blank=True, max_length=50, verbose_name='情绪状态')),
|
||||
('cultural_level', models.CharField(blank=True, max_length=50, verbose_name='文化水平')),
|
||||
('branch_logic', models.TextField(blank=True, verbose_name='分支逻辑')),
|
||||
('hidden_clues', models.TextField(blank=True, verbose_name='隐藏线索')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '剧本病例',
|
||||
'verbose_name_plural': '剧本病例',
|
||||
'db_table': 'script_case',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TeachingCase',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('teaching_goal', models.TextField(blank=True, verbose_name='教学目标')),
|
||||
('discussion_questions', models.TextField(blank=True, verbose_name='讨论问题')),
|
||||
('teacher_guide', models.TextField(blank=True, verbose_name='教师指南')),
|
||||
('scoring_focus', models.TextField(blank=True, verbose_name='评分重点')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '教学互动病例',
|
||||
'verbose_name_plural': '教学互动病例',
|
||||
'db_table': 'teaching_case',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TraditionalCase',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('standard_diagnosis', models.TextField(blank=True, verbose_name='标准诊断')),
|
||||
('standard_treatment', models.TextField(blank=True, verbose_name='标准治疗')),
|
||||
('guideline_reference', models.TextField(blank=True, verbose_name='指南参考')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '传统病例',
|
||||
'verbose_name_plural': '传统病例',
|
||||
'db_table': 'traditional_case',
|
||||
},
|
||||
),
|
||||
]
|
||||
# Generated by Django 6.0.5 on 2026-05-26 07:02
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CaseBase',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('title', models.CharField(max_length=255, verbose_name='病例标题')),
|
||||
('case_type', models.CharField(choices=[('traditional', '传统病例'), ('script', '剧本病例'), ('teaching', '教学互动病例'), ('osce', 'OSCE')], max_length=30, verbose_name='病例类型')),
|
||||
('difficulty', models.CharField(blank=True, max_length=20, verbose_name='难度')),
|
||||
('difficulty_score', models.IntegerField(blank=True, null=True, verbose_name='AI难度评分')),
|
||||
('chief_complaint', models.TextField(blank=True, verbose_name='主诉')),
|
||||
('description', models.TextField(blank=True, verbose_name='病例简介')),
|
||||
('patient_age', models.IntegerField(blank=True, null=True, verbose_name='患者年龄')),
|
||||
('patient_gender', models.CharField(blank=True, max_length=10, verbose_name='患者性别')),
|
||||
('tags', models.CharField(blank=True, max_length=500, verbose_name='标签')),
|
||||
('symptom_tags', models.JSONField(blank=True, default=list, verbose_name='症状标签')),
|
||||
('disease_tags', models.JSONField(blank=True, default=list, verbose_name='疾病标签')),
|
||||
('competency_tags', models.JSONField(blank=True, default=list, verbose_name='能力标签')),
|
||||
('guideline_tags', models.JSONField(blank=True, default=list, verbose_name='指南标签')),
|
||||
('knowledge_points', models.JSONField(blank=True, default=list, verbose_name='知识点')),
|
||||
('icd_codes', models.CharField(blank=True, max_length=500, verbose_name='ICD编码')),
|
||||
('estimated_minutes', models.IntegerField(blank=True, null=True, verbose_name='预计训练时长')),
|
||||
('osce_enabled', models.BooleanField(default=False, verbose_name='是否OSCE')),
|
||||
('rag_enabled', models.BooleanField(default=False, verbose_name='是否启用知识增强')),
|
||||
('ai_prompt_template', models.TextField(blank=True, verbose_name='AI角色Prompt')),
|
||||
('multimodal_assets', models.JSONField(blank=True, default=dict, verbose_name='图片/影像/附件')),
|
||||
('vector_status', models.SmallIntegerField(default=0, verbose_name='是否向量化')),
|
||||
('publish_status', models.SmallIntegerField(choices=[(0, '草稿'), (1, '已发布'), (2, '已下架')], default=0, verbose_name='发布状态')),
|
||||
('status', models.SmallIntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='状态')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '病例',
|
||||
'verbose_name_plural': '病例',
|
||||
'db_table': 'case_base',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CaseStage',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('stage_type', models.CharField(blank=True, max_length=50, verbose_name='阶段类型')),
|
||||
('stage_name', models.CharField(max_length=100, verbose_name='阶段名称')),
|
||||
('stage_mode', models.CharField(choices=[('dialogue', '对话'), ('osce', 'OSCE'), ('choice', '选择')], default='dialogue', max_length=30, verbose_name='阶段模式')),
|
||||
('stage_goal', models.TextField(blank=True, verbose_name='阶段目标')),
|
||||
('ai_role_prompt', models.TextField(blank=True, verbose_name='AI阶段Prompt')),
|
||||
('standard_action', models.TextField(blank=True, verbose_name='标准动作')),
|
||||
('expected_questions', models.TextField(blank=True, verbose_name='期望问题')),
|
||||
('scoring_points', models.TextField(blank=True, verbose_name='评分点')),
|
||||
('timeout_seconds', models.IntegerField(blank=True, null=True, verbose_name='超时时间')),
|
||||
('unlock_condition', models.CharField(blank=True, max_length=255, verbose_name='解锁条件')),
|
||||
('sort_order', models.IntegerField(default=0, verbose_name='排序')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '病例阶段',
|
||||
'verbose_name_plural': '病例阶段',
|
||||
'db_table': 'case_stage',
|
||||
'ordering': ['sort_order', 'id'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ScoringRule',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('dimension', models.CharField(max_length=50, verbose_name='评分维度')),
|
||||
('competency_dimension', models.CharField(blank=True, max_length=50, verbose_name='能力维度')),
|
||||
('score_weight', models.DecimalField(decimal_places=2, default=1.0, max_digits=5, verbose_name='权重')),
|
||||
('ai_auto_score', models.BooleanField(default=False, verbose_name='AI自动评分')),
|
||||
('osce_dimension', models.BooleanField(default=False, verbose_name='是否OSCE')),
|
||||
('scoring_standard', models.TextField(blank=True, verbose_name='评分标准')),
|
||||
('rubric_json', models.JSONField(blank=True, default=dict, verbose_name='评分Rubric')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '评分规则',
|
||||
'verbose_name_plural': '评分规则',
|
||||
'db_table': 'scoring_rule',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ScriptCase',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('scenario_setting', models.TextField(blank=True, verbose_name='场景设定')),
|
||||
('emotional_state', models.CharField(blank=True, max_length=50, verbose_name='情绪状态')),
|
||||
('cultural_level', models.CharField(blank=True, max_length=50, verbose_name='文化水平')),
|
||||
('branch_logic', models.TextField(blank=True, verbose_name='分支逻辑')),
|
||||
('hidden_clues', models.TextField(blank=True, verbose_name='隐藏线索')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '剧本病例',
|
||||
'verbose_name_plural': '剧本病例',
|
||||
'db_table': 'script_case',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TeachingCase',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('teaching_goal', models.TextField(blank=True, verbose_name='教学目标')),
|
||||
('discussion_questions', models.TextField(blank=True, verbose_name='讨论问题')),
|
||||
('teacher_guide', models.TextField(blank=True, verbose_name='教师指南')),
|
||||
('scoring_focus', models.TextField(blank=True, verbose_name='评分重点')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '教学互动病例',
|
||||
'verbose_name_plural': '教学互动病例',
|
||||
'db_table': 'teaching_case',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TraditionalCase',
|
||||
fields=[
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('standard_diagnosis', models.TextField(blank=True, verbose_name='标准诊断')),
|
||||
('standard_treatment', models.TextField(blank=True, verbose_name='标准治疗')),
|
||||
('guideline_reference', models.TextField(blank=True, verbose_name='指南参考')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '传统病例',
|
||||
'verbose_name_plural': '传统病例',
|
||||
'db_table': 'traditional_case',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user