fc / apps /cases /README.md
jun2024's picture
Upload 2241 files
b4f2238 verified
|
Raw History Blame Contribute Delete
8.02 kB

📁 案件管理模块 (Cases)

案件管理模块,提供案件的创建、查询、更新和删除功能,支持案件当事人、案件日志、案件指派等功能。

📚 模块概述

本模块负责管理法律案件的完整生命周期,包括:

  • 案件基本信息管理
  • 案件当事人管理
  • 案件日志记录
  • 案件指派管理
  • 司法信息管理
  • 案号管理

📁 目录结构

cases/
├── admin/              # Django Admin 配置
│   ├── case_admin.py           # 案件 Admin
│   ├── caseparty_admin.py      # 当事人 Admin
│   ├── caselog_admin.py        # 日志 Admin
│   ├── caseassignment_admin.py # 指派 Admin
│   ├── casenumber_admin.py     # 案号 Admin
│   └── judicialinfo_admin.py   # 司法信息 Admin
├── api/                # API 接口
│   ├── case_api.py             # 案件 API
│   ├── caseparty_api.py        # 当事人 API
│   ├── caselog_api.py          # 日志 API
│   ├── caseassignment_api.py   # 指派 API
│   ├── casenumber_api.py       # 案号 API
│   ├── caseaccess_api.py       # 访问权限 API
│   └── judicialinfo_api.py     # 司法信息 API
├── services/           # 业务逻辑
│   ├── case_service.py         # 案件服务
│   ├── case_log_service.py     # 日志服务
│   └── case_access_service.py  # 访问权限服务
├── models.py           # 数据模型
├── schemas.py          # Pydantic Schemas
├── validators.py       # 数据验证器
└── migrations/         # 数据库迁移

🚀 快速开始

1. Admin 后台

# 访问案件管理后台
open http://localhost:8000/admin/cases/

2. API 使用

import requests

BASE_URL = "http://localhost:8000/api/v1/cases"
headers = {"Authorization": "Bearer <your_jwt_token>"}

# 创建案件
response = requests.post(BASE_URL, json={
    "name": "张三诉李四合同纠纷案",
    "contract_id": 1,
    "current_stage": "first_trial",
    "case_type": "civil"
}, headers=headers)

case_id = response.json()["data"]["id"]

# 获取案件详情
response = requests.get(f"{BASE_URL}/{case_id}", headers=headers)
case = response.json()["data"]

# 更新案件
response = requests.put(f"{BASE_URL}/{case_id}", json={
    "current_stage": "second_trial"
}, headers=headers)

# 添加案件日志
response = requests.post(f"{BASE_URL}/{case_id}/logs", json={
    "content": "开庭审理",
    "log_type": "hearing"
}, headers=headers)

3. Service 层使用

from apps.cases.services.case_service import CaseService
from apps.cases.schemas import CaseCreateSchema

service = CaseService(
    contract_service=ContractService()
)

# 创建案件
case = service.create_case(
    data=CaseCreateSchema(
        name="张三诉李四合同纠纷案",
        contract_id=1,
        current_stage="first_trial"
    ),
    user=request.user
)

# 获取案件
case = service.get_case(case_id=1, user=request.user)

# 更新案件
case = service.update_case(
    case_id=1,
    data=CaseUpdateSchema(current_stage="second_trial"),
    user=request.user
)

🔑 核心功能

案件管理

  • ✅ 创建、查询、更新、删除案件
  • ✅ 案件阶段管理(侦查、起诉、一审、二审、执行)
  • ✅ 案件类型管理(民事、刑事、行政)
  • ✅ 案件状态管理(进行中、已结案、已归档)

当事人管理

  • ✅ 添加、编辑、删除当事人
  • ✅ 当事人类型(原告、被告、第三人)
  • ✅ 当事人身份(自然人、法人)
  • ✅ 当事人联系方式管理

案件日志

  • ✅ 记录案件重要事件
  • ✅ 日志类型分类(开庭、调解、判决等)
  • ✅ 日志附件管理
  • ✅ 日志时间线展示

案件指派

  • ✅ 指派律师到案件
  • ✅ 指派角色管理(主办律师、协办律师)
  • ✅ 指派历史记录

司法信息

  • ✅ 法院信息管理
  • ✅ 法官信息管理
  • ✅ 案号管理
  • ✅ 开庭时间管理

📊 数据模型

Case (案件)

  • name: 案件名称
  • contract: 关联合同
  • current_stage: 当前阶段
  • case_type: 案件类型
  • status: 案件状态
  • created_by: 创建人

CaseParty (当事人)

  • case: 关联案件
  • client: 关联客户
  • party_type: 当事人类型(原告/被告/第三人)
  • legal_status: 法律地位(自然人/法人)

CaseLog (案件日志)

  • case: 关联案件
  • content: 日志内容
  • log_type: 日志类型
  • created_by: 创建人
  • created_at: 创建时间

CaseAssignment (案件指派)

  • case: 关联案件
  • lawyer: 指派律师
  • assigned_by: 指派人
  • assigned_at: 指派时间

JudicialInfo (司法信息)

  • case: 关联案件
  • court_name: 法院名称
  • judge_name: 法官姓名
  • hearing_date: 开庭日期

CaseNumber (案号)

  • case: 关联案件
  • number: 案号
  • court_level: 法院级别
  • year: 年份

🔒 权限控制

功能级别权限

  • cases.add_case: 创建案件
  • cases.view_case: 查看案件
  • cases.change_case: 修改案件
  • cases.delete_case: 删除案件

对象级别权限

  • 案件创建人可以查看和修改自己的案件
  • 被指派的律师可以查看和修改案件
  • 管理员可以查看和修改所有案件

🧪 测试

# 运行单元测试
cd backend
source venv311/bin/activate
python -m pytest tests/unit/test_cases/ -v

# 运行集成测试
python -m pytest tests/integration/test_case_api/ -v

# 运行属性测试
python -m pytest tests/property/test_case_properties/ -v

📝 相关文档

🔗 依赖模块

  • contracts: 合同模块(案件关联合同)
  • client: 客户模块(当事人关联客户)
  • organization: 组织模块(律师、律所)
  • core: 核心模块(异常、接口、验证器)

🎯 最佳实践

1. 使用 Service 层

# ✅ 正确:使用 Service 层
service = CaseService(contract_service=ContractService())
case = service.create_case(data, user)

# ❌ 错误:直接操作 Model
case = Case.objects.create(name="案件", contract_id=1)

2. 权限检查

# ✅ 正确:在 Service 层检查权限
def get_case(self, case_id, user):
    case = Case.objects.get(id=case_id)
    if not self._can_access_case(user, case):
        raise PermissionDenied("无权限访问该案件")
    return case

3. 使用 Schema 验证

# ✅ 正确:使用 Pydantic Schema
data = CaseCreateSchema(
    name="案件名称",
    contract_id=1,
    current_stage="first_trial"
)
case = service.create_case(data, user)

4. 记录案件日志

# ✅ 正确:重要操作记录日志
case_log_service.create_log(
    case_id=case.id,
    content="案件已创建",
    log_type="system",
    user=user
)

🐛 常见问题

Q1: 如何添加新的案件阶段?

A: 在 models.py 的 CASE_STAGES 中添加新阶段,然后运行迁移。

Q2: 如何实现案件搜索?

A: 使用 CaseService.list_cases() 方法,传递搜索参数。

Q3: 如何导出案件数据?

A: 使用 Django Admin 的导出功能,或调用 API 获取数据后处理。

📈 性能优化

  • ✅ 使用 select_related 预加载关联对象
  • ✅ 使用 prefetch_related 预加载多对多关系
  • ✅ 使用索引优化查询(案件名称、案号、状态)
  • ✅ 使用缓存减少数据库查询

🔄 版本历史

  • v1.0.0 (2024-01): 初始版本
  • v1.1.0 (2024-03): 添加司法信息管理
  • v1.2.0 (2024-06): 添加案号管理
  • v1.3.0 (2024-09): 添加监管机关功能