feat: derive subject status from visits
This commit is contained in:
@@ -176,9 +176,10 @@ async def update_subject(
|
||||
# 基线/治疗日期是访视计划的唯一推算基准,不能用入组日期替代。
|
||||
if updated.baseline_date:
|
||||
await subject_crud.sync_visits_from_baseline(db, updated)
|
||||
updated = await subject_crud.sync_subject_status(db, updated)
|
||||
detail = None
|
||||
if subject_in.status and subject_in.status != old_status:
|
||||
detail = f"参与者 {updated.subject_no} 状态 {old_status} -> {subject_in.status}"
|
||||
if updated.status != old_status:
|
||||
detail = f"参与者 {updated.subject_no} 状态 {old_status} -> {updated.status}"
|
||||
await audit_crud.log_action(
|
||||
db,
|
||||
study_id=study_id,
|
||||
|
||||
@@ -98,6 +98,7 @@ async def create_visit(
|
||||
base_date=visit_in.planned_date,
|
||||
visit_schedule=study.visit_schedule,
|
||||
)
|
||||
subject = await subject_crud.sync_subject_status(db, subject)
|
||||
await audit_crud.log_action(
|
||||
db,
|
||||
study_id=study_id,
|
||||
@@ -147,7 +148,6 @@ async def create_early_termination(
|
||||
db,
|
||||
subject,
|
||||
SubjectUpdate(
|
||||
status="DROPPED",
|
||||
completion_date=termination_in.termination_date,
|
||||
drop_reason=reason,
|
||||
),
|
||||
@@ -192,6 +192,7 @@ async def update_visit(
|
||||
if visit_in.actual_date and visit.window_end and visit_in.actual_date > visit.window_end:
|
||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="实际访视日期不能晚于访视窗口结束日期")
|
||||
updated = await visit_crud.update_visit(db, visit, visit_in)
|
||||
await subject_crud.sync_subject_status(db, subject)
|
||||
detail = None
|
||||
if visit_in.status:
|
||||
detail = f"访视 {visit.visit_code} {visit.status} -> {visit_in.status}"
|
||||
@@ -226,6 +227,7 @@ async def delete_visit(
|
||||
if not visit or visit.subject_id != subject_id or visit.study_id != study_id:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="访视不存在")
|
||||
await visit_crud.delete_visit(db, visit)
|
||||
await subject_crud.sync_subject_status(db, subject)
|
||||
await audit_crud.log_action(
|
||||
db,
|
||||
study_id=study_id,
|
||||
|
||||
Reference in New Issue
Block a user