# M7 工时与资源管理 — 逻辑设计文档（LDD · How）

| 项 | 值 |
|---|---|
| 模块 | M7 工时与资源管理 |
| 类型 | 逻辑设计文档（LDD） |
| 对应需求 | [requirements/M7](../requirements/M7-工时与资源管理.md) |
| 上级 | [需求分析总纲](../需求分析总纲.md) |

> 本文档描述**实现方式（How）**；"做什么/为什么/验收"见对应需求文档。

## 1. 数据模型

```
TimeEntry ──▶ {Task | Project}       （可挂 Task 亦可直挂 Project）
```

**TimeEntry 字段**：`id, owner, attach_type(项目/经营活动/内部非项目), attach_ref(依类型:Task/Project·EngagementActivity·内部类别), hours(0.5h 步长), content(自由文本), activity_date, billable(bool), submitted_at, editable_until`。

- 一条 TimeEntry 对应一次真实活动（0.5h 步长 + 自由文本内容），可挂 Task 亦可直挂 Project（D-P7）。
- 提交后 24h 内可改（`editable_until = submitted_at + 24h`），超期需 PM 审批，全程审计（D-P8）。

## 2. 工时→人天换算机制

- **换算规则**：可配，**默认 1 人天 = 8h**（按 CRM Time Zone 计）。
- 人天 = 工时(h) / 每人天工时数（默认 8）。

## 3. 额度消耗汇总 / EAC 输入

- **口径**：`billable`（计入客户人力投入）= 项目 / 经营活动（内部非项目除外）；**Man-days 额度消耗（draw-down）在挂载=`项目`时一律发生**——每个项目**绑定 Quota**（项目↔Quota=M:N、限同客户；source: Paid/Sponsored/Dedicated × amount: finite/unlimited）。
- **汇总机制**：按 Project 汇总项目工时 → 换算人天 → 项目实际人天 → 累加到其**绑定 Quota** 的 `used`（项目绑多份时按 `seq` 依次扣，Paid/Sponsored/Dedicated 同）；`finite` 跟踪 remaining，**`unlimited`（Dedicated）照记 used、remaining=∞**；经营 / 内部不产生 used。
- **EAC 输入**：已消耗人天作为 M6 EAC/ETC 计算输入（EAC = 已耗人天 + 剩余估算）。
- **超支判定**：`finite` 额度接近/超过时分级预警并标红（**超支后仍可继续记工时，软预警、不阻断**）；`unlimited`（Dedicated）不预警超支。

## 4. burn 跟踪机制

- **计划 vs 实际人天**：以项目估算人天为计划，项目工时汇总人天为实际。
- 燃尽/进度曲线供 M6 监控与变更控制（FR-PROJ-12）及 M10 看板使用。

## 5. Workload / 利用率口径计算

- **利用率口径**：区分 **billable（项目/经营=计客户投入）与内部非项目工时**（分子口径可配）。
- **内部非项目时间**（学习/培训/内部事务）标记为**非项目/non-billable**，不消耗客户额度；计入利用率分母。
- Utilization / realization = billable 工时 / 总可用工时（含 non-billable 分母）。
- **Workload 负载视图**：按 PSE 汇总在办工时/任务，呈现负载。

## 6. 集成点

- **交付项目**：M6（TimeEntry 挂 Task/Project、burn、EAC 输入）。
- **额度**：M1（合同 Man-days / Quota）。
- **利用率报表**：M10（利用率/产能/Workload 呈现）。
