# 业务流程与依赖关系

本文档描述推送系统涉及的业务实体及其依赖关系，用于指导同步顺序编排。

---

## 业务实体分类

### 1. 基础数据（仅拉取）

- **用户（User）**：拉取集团管理员、区域公司管理员及特定用户信息，用于跨平台穿透。其他用户需手动创建。
- **公司（Company）**：仅拉取，不推送。
- **供应商（Supplier）**：仅拉取，不推送。

### 2. 项目及扩展数据

**项目（Project）**
- **绑定方式**：必须手动绑定（根节点）
- **同步操作**：允许更新和拉取
- **依赖项**：公司、附件（Attachment）

**项目扩展业务**
- 通过 `(project_id, key)` 或 `(project_id, code)` 自动绑定
- 允许创建、更新、拉取
- 依赖项目

### 3. 合同及子业务

**合同（Contract）**
- **绑定方式**：通过业务键自动绑定（需与 ECP 平台数据交叉检验）
- **同步操作**：允许拉取、创建、更新、删除
- **依赖项**：项目

**合同子业务**（施工任务、物资、结算、力能）
- **绑定方式**：通过 `(contract_id, code)` 自动绑定
- **同步操作**：允许拉取、创建、更新、删除
- **特殊规则**：首次绑定后，项目侧不会同步创建远程已有的数据
- **依赖项**：合同

**合同子业务明细**（施工明细、物资明细、结算明细、力能明细）
- **绑定方式**：通过 `(parent_id, date)` 自动绑定
- **同步操作**：允许拉取、创建、更新、删除
- **特殊规则**：首次绑定后，项目侧不会同步创建远程已有的数据
- **依赖项**：对应的合同子业务

---

## 依赖关系图

```
Company (基础)
    ↓
Project (手动绑定)
    ↓
Contract (自动绑定)
    ↓
Contract Sub-Business (施工/物资/结算/力能)
    ↓
Details (明细)
```

---

## 同步顺序原则

1. **依赖优先**：父节点必须先于子节点同步
2. **绑定传递**：子节点的业务键构建依赖父节点的 ID 映射
3. **故障隔离**：父节点同步失败时，子节点标记为 `DEPENDENCY_ERROR` 并跳过

详细状态定义参见：[sync_system_new/sync_system/STATE_DEFINITIONS.md](../sync_system_new/sync_system/STATE_DEFINITIONS.md)

详细架构设计参见：[sync_system_new/architecture_layers.md](../sync_system_new/architecture_layers.md)
