feat: 更新CC码监管方案业务版文档,新增摘要、UGC专项、直播专项、存量处置、误判申诉、水印嵌入、CC码生命周期、组织保障等章节;同步macode到cccode重命名及其他代码变更

This commit is contained in:
freedakgmail
2026-07-20 22:25:40 +08:00
parent 9f1e2d0a21
commit eb4a82a877
76 changed files with 2600 additions and 2122 deletions
+13 -13
View File
@@ -19,7 +19,7 @@ func RunClientConformance(t *testing.T, newClient func(t *testing.T) Client) {
// 构造一条标准发码请求(集级 3 集)。
issueReq := func(ma, ctid, fh string) IssueRequest {
return IssueRequest{
MACode: ma, ContentTwinID: ctid, MerkleRoot: "mr-" + fh, FileHash: fh,
CCCode: ma, ContentTwinID: ctid, MerkleRoot: "mr-" + fh, FileHash: fh,
PerceptualHash: "ph-" + fh,
Episodes: []model.EpisodeHash{
{Episode: 1, FileSHA256: fh + "-E1"},
@@ -170,20 +170,20 @@ func RunClientConformance(t *testing.T, newClient func(t *testing.T) Client) {
res, err := c.QueryByHash(fh)
require.NoError(t, err)
assert.True(t, res.Found)
assert.Equal(t, ma, res.Content.MACode)
assert.Equal(t, ma, res.Content.CCCode)
assert.Equal(t, "契约测试剧", res.Content.Title)
// 按省级内容编码查询
res2, err := c.QueryByProvincialCode("PROV-001")
require.NoError(t, err)
assert.True(t, res2.Found)
assert.Equal(t, ma, res2.Content.MACode)
assert.Equal(t, ma, res2.Content.CCCode)
// 按片库文件 ID 查询
res3, err := c.QueryByLibraryFileID("LIB-001")
require.NoError(t, err)
assert.True(t, res3.Found)
assert.Equal(t, ma, res3.Content.MACode)
assert.Equal(t, ma, res3.Content.CCCode)
// 不存在的 Hash
_, err = c.QueryByHash("nonexistent")
@@ -203,17 +203,17 @@ func RunClientConformance(t *testing.T, newClient func(t *testing.T) Client) {
// 非监管不可合并
_, err = c.MergeMA(RoleCP, model.MergeRequest{
PrimaryMACode: ma, SecondaryMACodes: []string{ma2}, Reason: "重复发码",
PrimaryCCCode: ma, SecondaryCCCodes: []string{ma2}, Reason: "重复发码",
})
assert.ErrorIs(t, err, ErrPermissionDenied)
// 监管合并
res, err := c.MergeMA(RoleRegulator, model.MergeRequest{
PrimaryMACode: ma, SecondaryMACodes: []string{ma2}, Reason: "重复发码", Operator: "监管局",
PrimaryCCCode: ma, SecondaryCCCodes: []string{ma2}, Reason: "重复发码", Operator: "监管局",
})
require.NoError(t, err)
assert.Equal(t, ma, res.PrimaryMACode)
assert.Contains(t, res.MergedMACodes, ma2)
assert.Equal(t, ma, res.PrimaryCCCode)
assert.Contains(t, res.MergedCCCodes, ma2)
assert.Greater(t, res.MigratedBindings, 0)
// 被合并的 MA 状态为 merged
@@ -223,7 +223,7 @@ func RunClientConformance(t *testing.T, newClient func(t *testing.T) Client) {
// 按 fh2 查询应指向主 MA 码
qr, err := c.QueryByHash(fh2)
require.NoError(t, err)
assert.Equal(t, ma, qr.Content.MACode)
assert.Equal(t, ma, qr.Content.CCCode)
})
t.Run("MA拆分_仅监管且按集迁移", func(t *testing.T) {
@@ -233,20 +233,20 @@ func RunClientConformance(t *testing.T, newClient func(t *testing.T) Client) {
// 非监管不可拆分
_, err = c.SplitMA(RoleCP, model.SplitRequest{
SourceMACode: ma, Splits: []model.SplitTarget{{NewMACode: "MA.156.8531.6101/WD/20260000010", Title: "拆分剧A", Episodes: []int{1, 2}}},
SourceCCCode: ma, Splits: []model.SplitTarget{{NewCCCode: "MA.156.8531.6101/WD/20260000010", Title: "拆分剧A", Episodes: []int{1, 2}}},
})
assert.ErrorIs(t, err, ErrPermissionDenied)
// 监管拆分
newMA := "MA.156.8531.6101/WD/20260000011"
res, err := c.SplitMA(RoleRegulator, model.SplitRequest{
SourceMACode: ma,
Splits: []model.SplitTarget{{NewMACode: newMA, Title: "拆分剧A", Episodes: []int{1, 2}}},
SourceCCCode: ma,
Splits: []model.SplitTarget{{NewCCCode: newMA, Title: "拆分剧A", Episodes: []int{1, 2}}},
Reason: "合集拆分",
Operator: "监管局",
})
require.NoError(t, err)
assert.Contains(t, res.NewMACodes, newMA)
assert.Contains(t, res.NewCCCodes, newMA)
assert.Greater(t, res.MigratedBindings, 0)
// 源 MA 状态为 split