fc / apps /core /migrations /0001_initial.py
jun2024's picture
Upload 2241 files
b4f2238 verified
Raw History Blame Contribute Delete
13.8 kB
# 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"),
],
},
),
]