# 后端架构 后端采用模块化分层单体。HTTP、业务编排、领域计算和持久化彼此隔离,后续可以替换风险模型而不改 API 层。 ```text HTTP Request -> app/api/v1 路由、参数接收、响应 -> app/services 用例编排 -> app/domain 纯领域规则/模型适配器 -> app/repositories 数据访问 -> app/models SQLAlchemy ORM -> PostgreSQL ``` - `app/core`:配置、日志和统一异常。 - `app/database`:异步 Engine、Session 和事务边界。 - `app/schemas`:Pydantic 请求/响应契约,外部 JSON 使用 camelCase。 - `app/domain/risk_engine.py`:当前为可替换的基线评分引擎;未来可接 sklearn、XGBoost 或远程模型服务。 - 风险评分遵循 PRD:输入值表示风险程度,先按 `S = 100 - X` 转为安全得分,再按权重求综合分;`R >= 80` 低风险,`60 <= R < 80` 较低风险,`40 <= R < 60` 中等风险,`20 <= R < 40` 高风险,`R < 20` 极高风险。 - `migrations`:Alembic 数据库迁移。 - `tests`:API 和领域服务测试。 认证与审核链路: ```text 密码登录 / 钉钉 authCode -> UserAccount + 角色映射 -> JWT -> 每次请求从 JWT 查用户并读取 role_permissions -> 风险项自动预审 -> 待审核队列 -> 审核通过写入 anomaly_cases / 驳回退回 -> operation_audits 追加式留痕 ``` ## PRD 核心数据表 首期数据库包含 `anomaly_cases`、`supplier_profiles`、`risk_assessments`、`risk_items`、 `review_records`、`standard_rules`、`user_accounts` 和 `role_permissions` 八张核心表。 目标 PostgreSQL 当前未安装 `pgvector`,因此 `anomaly_cases.embedding` 暂用可空 `JSONB` 保存浮点数组。安装 `vector` 扩展后,应通过独立迁移将该字段改为 `VECTOR(768)` 并补充向量索引。