from datetime import date, datetime, timedelta, timezone from app.schemas.models import Child, User, UserRole MOCK_USER = User(id=1, phoneMasked="186****0000", role=UserRole.parent) MOCK_CHILD = Child( id=1001, name="小明", birthday=date(2016, 3, 15), age=10, height=142.5, weight=36.0, status="active", ) MOCK_REPORT = { "id": 2001, "childId": 1001, "taskId": 3001, "riskLevel": "medium", "summary": "建议关注头前伸与高低肩,开始针对性训练", "metrics": [ {"name": "头前伸", "value": 78, "level": "medium", "confidence": 0.91}, {"name": "高低肩", "value": 65, "level": "low", "confidence": 0.88}, {"name": "骨盆倾斜", "value": 92, "level": "normal", "confidence": 0.94}, ], "recommendations": [ "每日肩胛稳定训练 5 分钟", "颈后肌群拉伸 3 组", "28 天后建议复测对比", ], "disclaimer": "本报告用于健康管理建议,不构成医疗诊断。", "reviewedBy": None, } MOCK_MOVEMENT_REPORT = { "id": 2002, "childId": 1001, "taskId": 3002, "taskType": "movement_scoring", "score": 81, "repsCompleted": 8, "durationSeconds": 272, "dimensions": { "trajectory": 85, "angle": 78, "rhythm": 82, "stability": 90, "completion": 100, }, "baselineCompare": { "headNeckAngle": {"screening": 21, "current": 15, "delta": -6}, "shoulderDiffMm": {"screening": 12, "current": 6, "delta": -6}, }, "disclaimer": "本报告用于运动训练反馈,不构成医疗诊断。", } MOCK_PLAN = { "id": 4001, "status": "active", "detail": { "goal": "改善头前伸与高低肩", "cycleDays": 28, "currentDay": 3, "exercises": [ {"id": 1, "name": "肩胛稳定训练", "durationMinutes": 5}, {"id": 2, "name": "颈后肌群拉伸", "sets": 3}, ], }, "startedAt": (datetime.now(timezone.utc) - timedelta(days=2)).isoformat(), "endedAt": None, } MOCK_ADMIN_DASHBOARD = { "newChildren": 12, "uploadedVideos": 48, "completedReports": 39, "activePlans": 27, "conversionRate": 0.22, "reassessmentCompletionRate": 0.51, }