# Generated by Django 6.0.2 on 2026-02-28 17:10 import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ("litigation_ai", "0003_rename_documents_li_session_8e1f3a_idx_documents_l_session_07fff0_idx"), ] operations = [ migrations.CreateModel( name="PromptTemplate", fields=[ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), ("name", models.CharField(max_length=100, unique=True, verbose_name="模板名称")), ("title", models.CharField(max_length=200, verbose_name="显示标题")), ("template", models.TextField(verbose_name="模板内容")), ("description", models.TextField(blank=True, verbose_name="模板描述")), ("variables", models.JSONField(default=list, verbose_name="变量列表")), ("category", models.CharField(default="general", max_length=50, verbose_name="分类")), ("is_active", models.BooleanField(default=True, verbose_name="启用")), ("version", models.CharField(default="1.0", max_length=20, verbose_name="版本")), ("created_at", models.DateTimeField(auto_now_add=True, verbose_name="创建时间")), ("updated_at", models.DateTimeField(auto_now=True, verbose_name="更新时间")), ], options={ "verbose_name": "Prompt 模板", "verbose_name_plural": "Prompt 模板", "db_table": "core_prompt_template", "ordering": ["category", "name"], }, ), migrations.CreateModel( name="LLMCallRecord", fields=[ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), ("model", models.CharField(max_length=100, verbose_name="模型")), ("prompt_tokens", models.IntegerField(verbose_name="输入 Token")), ("completion_tokens", models.IntegerField(verbose_name="输出 Token")), ("total_tokens", models.IntegerField(verbose_name="总 Token")), ("duration_ms", models.FloatField(verbose_name="耗时(ms)")), ("created_at", models.DateTimeField(auto_now_add=True, verbose_name="调用时间")), ], options={ "verbose_name": "LLM 调用记录", "verbose_name_plural": "LLM 调用记录", "indexes": [ models.Index(fields=["created_at"], name="core_llmcal_created_830747_idx"), models.Index(fields=["model"], name="core_llmcal_model_df0279_idx"), ], }, ), migrations.CreateModel( name="SystemConfig", fields=[ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), ( "key", models.CharField( help_text="配置项的唯一标识符,如 FEISHU_APP_ID", max_length=100, unique=True, verbose_name="配置键", ), ), ("value", models.TextField(blank=True, default="", help_text="配置项的值", verbose_name="配置值")), ( "category", models.CharField( choices=[ ("feishu", "飞书配置"), ("dingtalk", "钉钉配置"), ("wechat_work", "企业微信配置"), ("court_sms", "法院短信配置"), ("ai", "AI 服务配置"), ("llm", "LLM 大模型配置"), ("scraper", "爬虫配置"), ("general", "通用配置"), ], default="general", help_text="配置项所属分类", max_length=50, verbose_name="分类", ), ), ( "description", models.CharField( blank=True, default="", help_text="配置项的说明", max_length=255, verbose_name="描述" ), ), ( "is_secret", models.BooleanField( default=False, help_text="是否为敏感信息(如密钥、密码等)", verbose_name="敏感信息" ), ), ("is_active", models.BooleanField(default=True, help_text="是否启用此配置项", verbose_name="启用")), ("created_at", models.DateTimeField(auto_now_add=True, verbose_name="创建时间")), ("updated_at", models.DateTimeField(auto_now=True, verbose_name="更新时间")), ], options={ "verbose_name": "系统配置", "verbose_name_plural": "系统配置", "ordering": ["category", "key"], "indexes": [ models.Index(fields=["category"], name="core_system_categor_aa7ba2_idx"), models.Index(fields=["key"], name="core_system_key_07f5b4_idx"), ], }, ), migrations.CreateModel( name="CauseOfAction", fields=[ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), ( "code", models.CharField( help_text="案由的唯一编码标识", max_length=50, unique=True, verbose_name="案由编码" ), ), ("name", models.CharField(help_text="案由的中文名称", max_length=255, verbose_name="案由名称")), ( "case_type", models.CharField( choices=[("civil", "民事"), ("criminal", "刑事"), ("administrative", "行政")], help_text="案由所属的案件类型", max_length=32, verbose_name="案件类型", ), ), ( "level", models.IntegerField(default=1, help_text="案由在层级结构中的深度,从1开始", verbose_name="层级"), ), ( "is_active", models.BooleanField(default=True, help_text="是否在系统中启用此案由", verbose_name="是否启用"), ), ( "is_deprecated", models.BooleanField(default=False, help_text="案由是否已被法院系统废弃", verbose_name="是否已废弃"), ), ( "deprecated_at", models.DateTimeField( blank=True, help_text="案由被标记为废弃的时间", null=True, verbose_name="废弃时间" ), ), ( "deprecated_reason", models.CharField( blank=True, default="", help_text="案由被废弃的原因说明", max_length=255, verbose_name="废弃原因", ), ), ("created_at", models.DateTimeField(auto_now_add=True, verbose_name="创建时间")), ("updated_at", models.DateTimeField(auto_now=True, verbose_name="更新时间")), ( "parent", models.ForeignKey( blank=True, help_text="父级案由,用于构建层级结构", null=True, on_delete=django.db.models.deletion.CASCADE, related_name="children", to="core.causeofaction", verbose_name="上级案由", ), ), ], options={ "verbose_name": "案由", "verbose_name_plural": "案由", "ordering": ["case_type", "code"], "indexes": [ models.Index(fields=["case_type"], name="core_causeo_case_ty_0bbdcd_idx"), models.Index(fields=["name"], name="core_causeo_name_742c92_idx"), models.Index(fields=["is_active"], name="core_causeo_is_acti_fc1798_idx"), models.Index(fields=["is_deprecated"], name="core_causeo_is_depr_7ecc77_idx"), ], }, ), migrations.CreateModel( name="ConversationHistory", fields=[ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), ("session_id", models.CharField(max_length=100, verbose_name="会话ID")), ("user_id", models.CharField(blank=True, max_length=100, verbose_name="用户ID")), ( "role", models.CharField( choices=[("system", "系统"), ("user", "用户"), ("assistant", "助手")], max_length=20, verbose_name="角色", ), ), ("content", models.TextField(verbose_name="消息内容")), ("metadata", models.JSONField(blank=True, default=dict, verbose_name="元数据")), ( "step", models.CharField( blank=True, help_text="document_type/litigation_goal/evidence_selection/generation", max_length=50, verbose_name="对话步骤", ), ), ("created_at", models.DateTimeField(auto_now_add=True, verbose_name="创建时间")), ( "litigation_session", models.ForeignKey( blank=True, help_text="关联到 AI 文书生成会话(如果适用)", null=True, on_delete=django.db.models.deletion.CASCADE, related_name="conversation_histories", to="litigation_ai.litigationsession", verbose_name="AI文书生成会话", ), ), ], options={ "verbose_name": "对话历史", "verbose_name_plural": "对话历史", "db_table": "core_conversation_history", "ordering": ["session_id", "created_at"], "indexes": [ models.Index(fields=["session_id", "created_at"], name="core_conver_session_f8b2e5_idx"), models.Index(fields=["user_id", "created_at"], name="core_conver_user_id_8a9c4d_idx"), models.Index(fields=["litigation_session", "created_at"], name="core_conver_litigat_77db61_idx"), models.Index(fields=["step"], name="core_conver_step_f2985c_idx"), ], }, ), migrations.CreateModel( name="Court", fields=[ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), ("code", models.CharField(max_length=50, unique=True, verbose_name="法院编码")), ("name", models.CharField(max_length=200, verbose_name="法院名称")), ("level", models.IntegerField(default=1, verbose_name="层级")), ("province", models.CharField(blank=True, max_length=50, verbose_name="省份")), ("is_active", models.BooleanField(default=True, verbose_name="是否启用")), ("created_at", models.DateTimeField(auto_now_add=True, verbose_name="创建时间")), ("updated_at", models.DateTimeField(auto_now=True, verbose_name="更新时间")), ( "parent", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name="children", to="core.court", verbose_name="上级法院", ), ), ], options={ "verbose_name": "法院", "verbose_name_plural": "法院", "ordering": ["province", "level", "name"], "indexes": [ models.Index(fields=["province"], name="core_court_provinc_9fe4bb_idx"), models.Index(fields=["level"], name="core_court_level_dc4c2b_idx"), models.Index(fields=["name"], name="core_court_name_6afac9_idx"), models.Index(fields=["is_active"], name="core_court_is_acti_16a9bd_idx"), ], }, ), ]