补2025产品候选并核对成立年与Trace主体
This commit is contained in:
@@ -58,12 +58,14 @@ def candidate_register():
|
||||
companies = {c['id']: c for c in DATA['companies']}
|
||||
categories = {c['id']: c['name'] for c in DATA['categories']}
|
||||
known_sources = {s['id'] for s in SOURCES['sources']}
|
||||
evidence = {e['id']: e for e in DATA['evidence']}
|
||||
assert len({b['id'] for b in batches}) == len(batches)
|
||||
all_ids = [r['id'] for b in batches for r in b['records']]
|
||||
assert len(set(all_ids)) == len(all_ids)
|
||||
lines = []
|
||||
statuses = {'pending-year': '成立年待核', 'linked': '已关联公司',
|
||||
'existing-outside-cohort': '已有关联,年份范围外', 'promotion': '推广活动,非公司新增'}
|
||||
'existing-outside-cohort': '已有关联,年份范围外',
|
||||
'outside-cohort': '成立年范围外,不新增公司', 'promotion': '推广活动,非公司新增'}
|
||||
for batch in batches:
|
||||
assert batch['sourceId'] in known_sources
|
||||
assert batch['accessedAt'] <= DATA['asOf']
|
||||
@@ -71,21 +73,26 @@ def candidate_register():
|
||||
rows = batch['records']
|
||||
counts = Counter(r['status'] for r in rows)
|
||||
assert sum(counts.values()) == len(rows)
|
||||
lines += ['', f"## {batch['sourceId']} 产品发布候选核对", '',
|
||||
lines += ['', f"## {batch['sourceId']} 产品发布候选核对({batch['id']})", '',
|
||||
f"[发现页面]({batch['url']}),读取于{batch['accessedAt']}。{batch['scope']}", '',
|
||||
f"本批{len(rows)}条:{counts['linked']}条关联公司、{counts['existing-outside-cohort']}条关联范围外对照、{counts['pending-year']}条成立年待核、{counts['promotion']}条推广活动。完整来源覆盖标记:{'已完成' if batch['complete'] else '未完成'}。产品任务的初分类不计入主公司表数量,只有已关联的公司记录进入对应公司明细。候选与缺项随研究版本保存在文档站同一SQLite的研究元数据中。", '',
|
||||
'| 发布卡片 | 产品任务初分 | 核对状态 | 关联公司 | 限制 |', '| --- | --- | --- | --- | --- |']
|
||||
f"本批{len(rows)}条:{counts['linked']}条关联公司、{counts['existing-outside-cohort']}条关联范围外对照、{counts['outside-cohort']}条范围外不新增公司、{counts['pending-year']}条成立年待核、{counts['promotion']}条推广活动。完整来源覆盖标记:{'已完成' if batch['complete'] else '未完成'}。产品任务的初分类不计入主公司表数量,只有已关联的公司记录进入对应公司明细。候选与缺项随研究版本保存在文档站同一SQLite的研究元数据中。", '',
|
||||
'| 发布卡片 | 产品任务初分 | 核对状态 | 关联公司 | 核对证据 | 限制 |', '| --- | --- | --- | --- | --- | --- |']
|
||||
for row in rows:
|
||||
assert row['categoryId'] in categories
|
||||
assert row['status'] in statuses
|
||||
assert all(eid in evidence for eid in row.get('evidenceIds', []))
|
||||
if row['status'] == 'outside-cohort':
|
||||
assert row.get('evidenceIds') and not row.get('companyId')
|
||||
name = f"[{row['name']}]({row['url']})" if row['url'] else row['name']
|
||||
company = '—'
|
||||
if row.get('companyId'):
|
||||
assert row['companyId'] in companies
|
||||
c = companies[row['companyId']]
|
||||
company = f"[{c['name']}]({BASE}?company={c['id']}#research-company-detail)"
|
||||
lines.append(f"| {name} | {categories[row['categoryId']]} | {statuses[row['status']]} | {company} | {row['note']} |")
|
||||
lines += ['', '产品页可读只表示有可访问的资料;本批未将所有产品页完成公司、技术或财务深查。HTTP直接采集返回403,因此不声称取得底层全量列表;后续公开档案与未读页面继续保留缺项。', '']
|
||||
proof = '、'.join(f"[{eid}]({evidence[eid]['url']})" for eid in row.get('evidenceIds', [])) or '成立证据待补,产品页读取状态见候选记录'
|
||||
category = f"[{categories[row['categoryId']]}]({BASE}?category={row['categoryId']})"
|
||||
lines.append(f"| {name} | {category} | {statuses[row['status']]} | {company} | {proof} | {row['note']} |")
|
||||
lines += ['', '产品页可读只表示有可访问的资料;本批未将所有产品页完成公司、技术或财务深查。既有直接HTTP采集返回403,当前采用可读的公开页面响应,不声称取得底层全量列表;后续公开档案与未读页面继续保留缺项。', '']
|
||||
return lines
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user