204 lines
5.0 KiB
Python
204 lines
5.0 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 MajorEventBrief(BaseModel):
|
|
"""重大事项摘要。"""
|
|
|
|
id: str
|
|
event_type: str
|
|
title: str
|
|
description: str | None = None
|
|
severity: str = "medium"
|
|
status: str = "identified"
|
|
occurred_at: datetime | None = None
|
|
|
|
|
|
class MilestoneBrief(BaseModel):
|
|
"""里程碑摘要。"""
|
|
|
|
id: str
|
|
name: str
|
|
status: str = "planned"
|
|
is_current: bool = False
|
|
target_date: datetime | None = None
|
|
actual_date: datetime | None = None
|
|
description: str | None = None
|
|
|
|
|
|
class TeamMemberBrief(BaseModel):
|
|
"""团队成员摘要。"""
|
|
|
|
id: str
|
|
name: str
|
|
role: str | None = None
|
|
is_key_person: bool = False
|
|
stability_score: float | None = None
|
|
joined_at: datetime | None = None
|
|
|
|
|
|
class SynergyBrief(BaseModel):
|
|
"""协同机会摘要。"""
|
|
|
|
id: str
|
|
type: str
|
|
title: str
|
|
description: str | None = None
|
|
status: str = "discovered"
|
|
match_reason: str | None = None
|
|
|
|
|
|
class HealthScoreHistoryPoint(BaseModel):
|
|
"""健康度历史数据点。"""
|
|
|
|
period: str
|
|
total_score: float
|
|
calculated_at: datetime
|
|
|
|
|
|
class CompanyDetailResponse(BaseModel):
|
|
"""企业详情聚合响应 — 工作台使用。"""
|
|
|
|
company: CompanyResponse
|
|
health_score: HealthScoreBrief | None = None
|
|
health_score_history: list[HealthScoreHistoryPoint] = []
|
|
recent_reports: list[ReportBrief] = []
|
|
open_risks: list[RiskBrief] = []
|
|
recent_weak_signals: list[WeakSignalBrief] = []
|
|
active_agreements: list[AgreementBrief] = []
|
|
recent_board_meetings: list[BoardMeetingBrief] = []
|
|
major_events: list[MajorEventBrief] = []
|
|
milestones: list[MilestoneBrief] = []
|
|
team_members: list[TeamMemberBrief] = []
|
|
synergy_opportunities: list[SynergyBrief] = []
|
|
financial_data_count: int = 0
|
|
latest_financial: dict | None = None
|