feat: batch update - gift card breakdown spec, backend APIs, miniprogram pages, ETL finance recharge, docs & migrations
This commit is contained in:
116
apps/backend/app/schemas/xcx_coaches.py
Normal file
116
apps/backend/app/schemas/xcx_coaches.py
Normal file
@@ -0,0 +1,116 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from app.schemas.base import CamelModel
|
||||
|
||||
|
||||
class PerformanceMetrics(CamelModel):
|
||||
monthly_hours: float
|
||||
monthly_salary: float
|
||||
customer_balance: float
|
||||
tasks_completed: int
|
||||
perf_current: float
|
||||
perf_target: float
|
||||
|
||||
|
||||
class IncomeItem(CamelModel):
|
||||
label: str
|
||||
amount: str
|
||||
color: str
|
||||
|
||||
|
||||
class IncomeSection(CamelModel):
|
||||
this_month: list[IncomeItem] = []
|
||||
last_month: list[IncomeItem] = []
|
||||
|
||||
|
||||
class CoachTaskItem(CamelModel):
|
||||
type_label: str
|
||||
type_class: str
|
||||
customer_name: str
|
||||
customer_id: int | None = None
|
||||
note_count: int = 0
|
||||
pinned: bool = False
|
||||
notes: list[dict] | None = None
|
||||
|
||||
|
||||
class AbandonedTask(CamelModel):
|
||||
customer_name: str
|
||||
reason: str
|
||||
|
||||
|
||||
class TopCustomer(CamelModel):
|
||||
id: int
|
||||
name: str
|
||||
initial: str
|
||||
avatar_gradient: str
|
||||
heart_emoji: str # ❤️ / 💛 / 🤍
|
||||
score: str
|
||||
score_color: str
|
||||
service_count: int
|
||||
balance: str
|
||||
consume: str
|
||||
|
||||
|
||||
class CoachServiceRecord(CamelModel):
|
||||
customer_id: int | None = None
|
||||
customer_name: str
|
||||
initial: str
|
||||
avatar_gradient: str
|
||||
type: str
|
||||
type_class: str
|
||||
table: str | None = None
|
||||
duration: str
|
||||
income: str
|
||||
date: str
|
||||
perf_hours: str | None = None
|
||||
|
||||
|
||||
class HistoryMonth(CamelModel):
|
||||
month: str
|
||||
estimated: bool
|
||||
customers: str
|
||||
hours: str
|
||||
salary: str
|
||||
callback_done: int
|
||||
recall_done: int
|
||||
|
||||
|
||||
class CoachNoteItem(CamelModel):
|
||||
id: int
|
||||
content: str
|
||||
timestamp: str
|
||||
score: int | None = None
|
||||
customer_name: str
|
||||
tag_label: str
|
||||
created_at: str
|
||||
|
||||
|
||||
class CoachDetailResponse(CamelModel):
|
||||
"""COACH-1 响应。"""
|
||||
# 基础信息
|
||||
id: int
|
||||
name: str
|
||||
avatar: str
|
||||
level: str
|
||||
skills: list[str] = []
|
||||
work_years: float = 0
|
||||
customer_count: int = 0
|
||||
hire_date: str | None = None
|
||||
# 绩效
|
||||
performance: PerformanceMetrics
|
||||
# 收入
|
||||
income: IncomeSection
|
||||
# 档位
|
||||
tier_nodes: list[float] = []
|
||||
# 任务分组
|
||||
visible_tasks: list[CoachTaskItem] = []
|
||||
hidden_tasks: list[CoachTaskItem] = []
|
||||
abandoned_tasks: list[AbandonedTask] = []
|
||||
# TOP 客户
|
||||
top_customers: list[TopCustomer] = []
|
||||
# 近期服务记录
|
||||
service_records: list[CoachServiceRecord] = []
|
||||
# 历史月份
|
||||
history_months: list[HistoryMonth] = []
|
||||
# 备注
|
||||
notes: list[CoachNoteItem] = []
|
||||
Reference in New Issue
Block a user