feat: 定义运行时规格解析契约与审计模型 (#254)

This commit is contained in:
chengma
2026-08-17 16:53:11 +08:00
parent b11a586527
commit 12414658d0
8 changed files with 736 additions and 16 deletions
+50
View File
@@ -407,6 +407,56 @@ type AISpecMatchDecision struct {
DecidedBy, DecidedAt string
}
// PurchaseSpecResolutionOutcome 是一次采购运行时规格解析的持久化结论。
// pending 只表示候选观察已经落库,尚未完成规则或 AI 决策。
type PurchaseSpecResolutionOutcome string
const (
PurchaseSpecResolutionPending PurchaseSpecResolutionOutcome = "pending"
PurchaseSpecResolutionMatched PurchaseSpecResolutionOutcome = "matched"
PurchaseSpecResolutionUncertain PurchaseSpecResolutionOutcome = "uncertain"
PurchaseSpecResolutionRejected PurchaseSpecResolutionOutcome = "rejected"
PurchaseSpecResolutionFailed PurchaseSpecResolutionOutcome = "failed"
)
// PurchaseSpecResolutionSource 记录最终结论由哪条受控路径产生。
type PurchaseSpecResolutionSource string
const (
PurchaseSpecResolutionRule PurchaseSpecResolutionSource = "rule"
PurchaseSpecResolutionAI PurchaseSpecResolutionSource = "ai"
PurchaseSpecResolutionReused PurchaseSpecResolutionSource = "reused"
)
// PurchaseSpecResolution 同时保存 Client 的候选观察和 Admin 的最终决策。
// JSON 字段只允许保存接口契约定义的规格数据,不得写入控件树、订单或凭据。
type PurchaseSpecResolution struct {
ResolutionID, TaskID, AttemptID, ClientID string
TaskVersion int64
PddGoodsID, OriginalOptionsJSON, SelectedColor string
TargetSize, CandidatesJSON, CandidateSnapshotHash string
ObservedAt, RequestHash string
Outcome PurchaseSpecResolutionOutcome
DecisionSource PurchaseSpecResolutionSource
ChosenCandidateID, ResolvedOptionsJSON string
ConfidenceBPS int
ConfidenceSet bool
Reason, ProviderID, SourceModel, ConfigFingerprint string
RulesVersion, PromptVersion, CreatedAt, DecidedAt string
}
// PurchaseSpecResolutionDecision 是 Repository 完成一次解析记录时需要的最小字段。
type PurchaseSpecResolutionDecision struct {
ResolutionID string
Outcome PurchaseSpecResolutionOutcome
DecisionSource PurchaseSpecResolutionSource
ChosenCandidateID, ResolvedOptionsJSON string
ConfidenceBPS int
ConfidenceSet bool
Reason, ProviderID, SourceModel, ConfigFingerprint string
RulesVersion, PromptVersion, DecidedAt string
}
type AIMatchBatch struct {
BatchID, Status, CreatedByUserID string
TotalCount, ProcessedCount, SuccessCount, ReusedCount int