ai-native-devops

Spec · billing

Capability:报价计算与项目成本汇总(Supporting 子域) 上游来源../../../03-ddd-modeling.md §II 战略 @ddd-contexts BillingContext + §III 战术 QuoteCalculator 责任工件PricingTableQuote (VO)、CostRecord


ADDED Requirements

Requirement: 实时报价

UI SHALL 在用户选择 (type, spec, days) 后于 200ms 内返回 Quote

Scenario: 选择 GPU-A100 / 7 天

Scenario: 未知规格返回错误


Requirement: 报价快照写入申请单

ResourceRequest 创建时 SHALL 复制当时 Quote.totalPrice 为不可变 cost

Scenario: 提交后报价表变更不影响已存申请


Requirement: 项目级成本汇总

系统 SHALL 按 projectId 实时汇总已发生与预计成本。

Scenario: 配置完成累加已发生

Scenario: 释放后停止累加

Scenario: 预计成本


Requirement: ACL 防腐层

ResourceRequest 上下文 SHALL NOT 直接持有 PricingTable 引用,仅通过 QuoteCalculator 域服务接口交互。

Scenario: PricingTable schema 变更不污染 ResourceRequest


Events

事件 触发条件 载荷
QuoteCalculated UI 调用计价 type, spec, days, totalPrice
CostRecordUpdated 已发生/预计变更 projectId, actual, forecast, updatedAt

Pricing Table 配置示例

# pricing.yaml(Ops 维护)
- type: gpu-a100
  spec: 1x80GB
  unitPricePerDay: 100
- type: cpu-large
  spec: 16C64G
  unitPricePerDay: 30
- type: storage-ssd
  spec: 1TB
  unitPricePerDay: 5

Repository

interface PricingTable {
  lookup(type: ResourceType, spec: ResourceSpec): UnitPrice | null;
}

interface CostRecordRepository {
  findByProject(projectId: ProjectId): Promise<CostRecord>;
  save(record: CostRecord): Promise<void>;
}