fad458b2a7
- UIUX 文档:填充 19 个缺口(多主体画像/健康度/AI+看板/增长域/洞察域/创始人端/OODA/助推/商密) - UIUX 文档:插入 6 个新章节(十四~十九),旧章节重编号为二十~三十一,更新目录和交叉引用 - 作业指导书 x5:导航改为 6 域分组,新增 Context Bar/工作模式/Insight Rail/决策线程/多工作区等 UI 概念 - 新建 docs/2-task-uiux.md:50 个代码落地开发任务,按 P0-P6 分优先级 + 8 Sprint 规划 - 后端/前端:大量新增模型、路由、组件(来自之前 Phase 开发)
145 lines
3.7 KiB
Python
145 lines
3.7 KiB
Python
"""企业相关 Pydantic schema。"""
|
|
|
|
from datetime import datetime
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class CompanyCreate(BaseModel):
|
|
"""创建企业请求。"""
|
|
|
|
name: str = Field(..., min_length=1, max_length=200)
|
|
industry: str | None = Field(default=None, max_length=100)
|
|
stage: str | None = Field(default=None, max_length=50)
|
|
logo_url: str | None = Field(default=None, max_length=500)
|
|
description: str | None = None
|
|
total_funding: str | None = Field(default=None, max_length=50)
|
|
website: str | None = Field(default=None, max_length=500)
|
|
|
|
|
|
class CompanyUpdate(BaseModel):
|
|
"""更新企业请求。"""
|
|
|
|
name: str | None = Field(default=None, min_length=1, max_length=200)
|
|
industry: str | None = Field(default=None, max_length=100)
|
|
stage: str | None = Field(default=None, max_length=50)
|
|
logo_url: str | None = Field(default=None, max_length=500)
|
|
description: str | None = None
|
|
total_funding: str | None = Field(default=None, max_length=50)
|
|
website: str | None = Field(default=None, max_length=500)
|
|
|
|
|
|
class CompanyResponse(BaseModel):
|
|
"""企业信息响应。"""
|
|
|
|
id: str
|
|
tenant_id: str
|
|
name: str
|
|
industry: str | None = None
|
|
stage: str | None = None
|
|
logo_url: str | None = None
|
|
description: str | None = None
|
|
founded_at: datetime | None = None
|
|
total_funding: str | None = None
|
|
website: str | None = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class CompanyListResponse(BaseModel):
|
|
"""企业列表响应。"""
|
|
|
|
items: list[CompanyResponse]
|
|
total: int
|
|
page: int
|
|
page_size: int
|
|
|
|
|
|
class HealthScoreBrief(BaseModel):
|
|
"""健康度评分摘要。"""
|
|
|
|
total_score: float
|
|
financial_score: float | None = None
|
|
operational_score: float | None = None
|
|
ai_commercial_score: float | None = None
|
|
ai_cost_score: float | None
|
|
# T2.9 扩展维度
|
|
org_talent_score: float | None = None
|
|
product_tech_score: float | None = None
|
|
market_compete_score: float | None = None
|
|
governance_score: float | None = None
|
|
financing_score: float | None = None
|
|
# T3.11 扩展维度
|
|
synergy_score: float | None = None
|
|
ai_model_product_score: float | None = None
|
|
data_compliance_score: float | None = None
|
|
team_tech_score: float | None = None
|
|
customer_success_score: float | None = None
|
|
trend: str | None = None
|
|
calculated_at: datetime
|
|
|
|
|
|
class ReportBrief(BaseModel):
|
|
"""月报摘要。"""
|
|
|
|
id: str
|
|
period_year: int
|
|
period_month: int
|
|
status: str
|
|
ai_summary: str | None = None
|
|
submitted_at: datetime | None = None
|
|
|
|
|
|
class RiskBrief(BaseModel):
|
|
"""风险摘要。"""
|
|
|
|
id: str
|
|
type: str
|
|
severity: str
|
|
status: str
|
|
title: str
|
|
identified_at: datetime
|
|
|
|
|
|
class WeakSignalBrief(BaseModel):
|
|
"""弱信号摘要。"""
|
|
|
|
id: str
|
|
signal_type: str
|
|
content: str
|
|
confidence: float
|
|
risk_probability: float | None = None
|
|
status: str
|
|
detected_at: datetime
|
|
|
|
|
|
class AgreementBrief(BaseModel):
|
|
"""协议摘要。"""
|
|
|
|
id: str
|
|
title: str
|
|
status: str
|
|
signed_at: datetime | None = None
|
|
|
|
|
|
class BoardMeetingBrief(BaseModel):
|
|
"""董事会会议摘要。"""
|
|
|
|
id: str
|
|
title: str
|
|
status: str
|
|
meeting_at: datetime | None = None
|
|
|
|
|
|
class CompanyDetailResponse(BaseModel):
|
|
"""企业详情聚合响应 — 工作台使用。"""
|
|
|
|
company: CompanyResponse
|
|
health_score: HealthScoreBrief | None = None
|
|
recent_reports: list[ReportBrief] = []
|
|
open_risks: list[RiskBrief] = []
|
|
recent_weak_signals: list[WeakSignalBrief] = []
|
|
active_agreements: list[AgreementBrief] = []
|
|
recent_board_meetings: list[BoardMeetingBrief] = []
|
|
financial_data_count: int = 0
|
|
latest_financial: dict | None = None
|