根据软件框架V2文档的要求,我们为第一个页面(用户注册页面-扫码)创建了独立的路由。这个路由专门处理患者的自助注册功能,适用于现场排队等候的场景。
重要说明:系统中只有两种用户类型:
/api/v3/registerapp/routers/register.pypatient_info根据软件框架V2文档,支持以下字段:
必需字段:
medical_record_number: 就诊号(将作为登录用户名)id_last_six: 身份证后六位(将作为登录密码)name: 姓名gender: 性别dominant_hand: 利手diagnosis: 诊断dob: 出生年月(格式: YYYY-MM-DD)height_cm: 身高(cm)weight_kg: 体重(kg)contact: 联系方式可选字段:
inpatient_number: 住院号bed_number: 床号education_level: 教育程度education_years: 教育年数remarks: 备注CREATE TABLE patient_info (
id SERIAL PRIMARY KEY,
user_id VARCHAR(50) UNIQUE NOT NULL,
medical_record_number VARCHAR(50) UNIQUE NOT NULL,
id_last_six VARCHAR(6) NOT NULL,
name VARCHAR(100) NOT NULL,
gender VARCHAR(10) NOT NULL,
dominant_hand VARCHAR(10) NOT NULL,
diagnosis TEXT,
dob DATE,
height_cm INTEGER,
weight_kg DECIMAL(5,2),
contact VARCHAR(20),
inpatient_number VARCHAR(50),
bed_number VARCHAR(20),
education_level VARCHAR(50),
education_years INTEGER,
remarks TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE user_info (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
hashed_password VARCHAR(255) NOT NULL,
department VARCHAR(100),
position VARCHAR(100),
is_admin BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
patient_info 表user_info 表(简化后只存储管理员)患者用户可以通过以下方式登录:
登录接口 /api/v3/login 已更新,支持患者用户登录。
{
"status": "success",
"code": 200,
"data": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"is_admin": false,
"user_info": {
"user_id": "user-abc-123",
"medical_record_number": "J0012345",
"name": "张三",
"gender": "男",
"dominant_hand": "右",
"diagnosis": "无",
"dob": "1960-01-15",
"height_cm": 175,
"weight_kg": 70.5,
"contact": "13800138000",
"inpatient_number": "Z67890",
"bed_number": "503",
"education_level": "本科",
"education_years": 16,
"remarks": ""
}
},
"message": "注册成功并自动登录"
}
重复注册:
{
"status": "error",
"code": 400,
"message": "Username Already Exists",
"error_details": {
"type": "duplicate_username",
"description": "该就诊号已被注册"
}
}
参数验证失败:
{
"status": "error",
"code": 400,
"message": "Invalid Parameters",
"error_details": {
"type": "validation_error",
"description": "参数验证失败",
"fields": {
"dob": "出生日期格式必须是 YYYY-MM-DD",
"height_cm": "身高必须是数字"
}
}
}
使用提供的测试脚本 test_register.py 可以验证注册功能:
python test_register.py
测试包括:
在 app/main.py 中已添加:
from app.routers import register
app.include_router(register.router, prefix="/api/v3")
在应用启动时会自动初始化患者数据库表:
await register.init_register_database()
app/routers/auth.py 中的登录接口已更新,支持患者用户登录。
user_info 表:专门存储管理员用户,结构简化patient_info 表:专门存储患者用户,包含完整的医疗信息