init medical training project
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# Generated by Django 6.0.5 on 2026-05-26 07:02
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('case', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TrainingScoreDetail',
|
||||
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='评分维度')),
|
||||
('score', models.DecimalField(decimal_places=2, max_digits=5, verbose_name='分数')),
|
||||
('deducted_reason', models.TextField(blank=True, verbose_name='扣分原因')),
|
||||
('evidence_message_ids', models.JSONField(blank=True, default=list, verbose_name='对应对话证据')),
|
||||
('ai_confidence', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='AI评分置信度')),
|
||||
('comment', models.TextField(blank=True, verbose_name='评语')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '评分明细',
|
||||
'verbose_name_plural': '评分明细',
|
||||
'db_table': 'training_score_detail',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TrainingRecord',
|
||||
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)),
|
||||
('training_mode', models.CharField(choices=[('novice', '新手'), ('practice', '练习'), ('exam', '考试')], max_length=50, verbose_name='训练模式')),
|
||||
('case_type', models.CharField(blank=True, max_length=30, verbose_name='病例类型')),
|
||||
('start_time', models.DateTimeField(auto_now_add=True, verbose_name='开始时间')),
|
||||
('end_time', models.DateTimeField(blank=True, null=True, verbose_name='结束时间')),
|
||||
('duration_seconds', models.IntegerField(blank=True, null=True, verbose_name='训练时长')),
|
||||
('total_score', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='总分')),
|
||||
('ai_score', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='AI评分')),
|
||||
('teacher_score', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='教师评分')),
|
||||
('evaluation_level', models.CharField(blank=True, choices=[('excellent', '优秀'), ('good', '良好'), ('average', '一般'), ('poor', '较差')], max_length=20, verbose_name='评价等级')),
|
||||
('status', models.CharField(choices=[('in_progress', '进行中'), ('completed', '已完成'), ('aborted', '已中断')], default='in_progress', max_length=30, verbose_name='状态')),
|
||||
('feedback', models.TextField(blank=True, verbose_name='总评')),
|
||||
('thinking_chain', models.TextField(blank=True, verbose_name='临床推理链')),
|
||||
('diagnosis_path', models.TextField(blank=True, verbose_name='诊断路径')),
|
||||
('wrong_points', models.JSONField(blank=True, default=list, verbose_name='错误知识点')),
|
||||
('missed_questions', models.JSONField(blank=True, default=list, verbose_name='漏问项')),
|
||||
('recommendation_result', models.JSONField(blank=True, default=dict, verbose_name='AI推荐')),
|
||||
('ai_feedback_structured', models.JSONField(blank=True, default=dict, verbose_name='AI结构化反馈')),
|
||||
('osce_station_score', models.JSONField(blank=True, default=dict, verbose_name='OSCE各站点成绩')),
|
||||
('interruption_count', models.IntegerField(default=0, verbose_name='中断次数')),
|
||||
('emotion_analysis', models.JSONField(blank=True, default=dict, verbose_name='情绪分析')),
|
||||
('prompt_version', models.CharField(blank=True, max_length=50, verbose_name='Prompt版本')),
|
||||
('rag_context_version', models.CharField(blank=True, max_length=50, verbose_name='知识上下文版本')),
|
||||
('case', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='training_records', to='case.casebase', verbose_name='病例')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '训练记录',
|
||||
'verbose_name_plural': '训练记录',
|
||||
'db_table': 'training_record',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,39 @@
|
||||
# Generated by Django 6.0.5 on 2026-05-26 07:02
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('case', '0002_initial'),
|
||||
('training', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='trainingrecord',
|
||||
name='teacher',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='supervised_records', to=settings.AUTH_USER_MODEL, verbose_name='带教老师'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='trainingrecord',
|
||||
name='user',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='training_records', to=settings.AUTH_USER_MODEL, verbose_name='用户'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='trainingscoredetail',
|
||||
name='record',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='score_details', to='training.trainingrecord', verbose_name='训练记录'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='trainingscoredetail',
|
||||
name='rule',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='case.scoringrule', verbose_name='评分规则'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
|
||||
Reference in New Issue
Block a user