feat: add edu-industry platform demos
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
commit
92515928d9
@@ -0,0 +1,20 @@
|
||||
# 数据契约目录
|
||||
|
||||
所有契约使用 JSON Schema Draft 2020-12。
|
||||
|
||||
## 发布要求
|
||||
|
||||
1. 契约名称和版本必须唯一;
|
||||
2. 兼容变更提升次版本,修订说明或约束修复提升补丁版本;
|
||||
3. 删除字段、改变类型或收紧必填要求属于破坏性变更,必须提升主版本;
|
||||
4. 发布前执行历史样本回放、来源映射测试和下游影响分析;
|
||||
5. 交付包必须绑定精确契约版本,不允许只引用“最新版本”;
|
||||
6. Schema、样例、字段说明、代码字典和变更日志作为同一发布物。
|
||||
|
||||
## 当前契约
|
||||
|
||||
| 契约 | 版本 | 适用范围 |
|
||||
|---|---|---|
|
||||
| `JOB-SIGNAL` | 3.0.0 | 商业招聘平台、公共就业平台、活动聚合平台 |
|
||||
| `SCHOOL-EMPLOYMENT` | 2.2.0 | 学校就业管理系统、数据库视图、API和标准文件 |
|
||||
| `PACKAGE-MANIFEST` | 1.2.0 | 导入、导出、租户交付和归档;新增可选发布候选编号与状态 |
|
||||
@@ -0,0 +1,266 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://schemas.edu-industry.cn/job-signal/3.0.0/schema.json",
|
||||
"title": "JOB-SIGNAL V3.0 外部招聘岗位信号",
|
||||
"description": "商业招聘平台、公共就业平台与招聘活动平台统一岗位信号契约。",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"record_id",
|
||||
"source_platform",
|
||||
"source_record_id",
|
||||
"source_url",
|
||||
"collector_task_id",
|
||||
"collector_version",
|
||||
"raw_snapshot_id",
|
||||
"collected_at",
|
||||
"first_seen_at",
|
||||
"last_seen_at",
|
||||
"status",
|
||||
"job_title_raw",
|
||||
"job_description",
|
||||
"enterprise_name",
|
||||
"region_code",
|
||||
"employment_type",
|
||||
"source_payload_hash",
|
||||
"content_hash",
|
||||
"data_version"
|
||||
],
|
||||
"properties": {
|
||||
"record_id": {
|
||||
"type": "string",
|
||||
"format": "uuid",
|
||||
"description": "平台生成的全局唯一记录标识。"
|
||||
},
|
||||
"source_platform": {
|
||||
"type": "string",
|
||||
"pattern": "^[A-Z][A-Z0-9_]{1,31}$",
|
||||
"description": "来源平台代码,例如 BOSS、ZHAOPIN、BRZP、NCSS、MOHRSS。"
|
||||
},
|
||||
"source_record_id": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 256,
|
||||
"description": "来源平台内的记录标识,与 source_platform 组成幂等键。"
|
||||
},
|
||||
"source_url": {
|
||||
"type": "string",
|
||||
"format": "uri",
|
||||
"maxLength": 2048,
|
||||
"description": "可回溯的来源页面或接口定位。"
|
||||
},
|
||||
"collector_task_id": {
|
||||
"type": "string",
|
||||
"pattern": "^JOB-[A-Za-z0-9-]{8,64}$",
|
||||
"description": "生产采集任务追踪编号。"
|
||||
},
|
||||
"collector_version": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 128,
|
||||
"description": "采集器名称、语义版本与代码提交摘要。"
|
||||
},
|
||||
"raw_snapshot_id": {
|
||||
"type": "string",
|
||||
"pattern": "^RAW-[A-Za-z0-9-]{8,96}$",
|
||||
"description": "原始响应或页面快照编号。"
|
||||
},
|
||||
"collected_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "平台实际采集时间,必须包含时区。"
|
||||
},
|
||||
"first_seen_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "平台首次发现该岗位的时间。"
|
||||
},
|
||||
"last_seen_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "平台最近一次确认该岗位仍存在的时间。"
|
||||
},
|
||||
"published_at": {
|
||||
"type": ["string", "null"],
|
||||
"format": "date-time",
|
||||
"description": "来源平台显示的岗位发布时间。"
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["active", "inactive", "expired", "unknown"],
|
||||
"description": "岗位在当前数据版本中的状态。"
|
||||
},
|
||||
"job_title_raw": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 200,
|
||||
"description": "来源岗位名称原文。"
|
||||
},
|
||||
"job_title_normalized": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 200,
|
||||
"description": "映射到统一岗位词典后的标准名称。"
|
||||
},
|
||||
"job_code": {
|
||||
"type": ["string", "null"],
|
||||
"pattern": "^[A-Z0-9.-]{2,32}$",
|
||||
"description": "统一岗位分类代码。"
|
||||
},
|
||||
"job_description": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 30000,
|
||||
"description": "去除展示标记与联系方式后的岗位职责和要求文本。"
|
||||
},
|
||||
"enterprise_name": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 300,
|
||||
"description": "来源企业名称原文。"
|
||||
},
|
||||
"enterprise_id": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 128,
|
||||
"description": "平台企业归一标识。"
|
||||
},
|
||||
"enterprise_credit_code": {
|
||||
"type": ["string", "null"],
|
||||
"pattern": "^[0-9A-Z]{18}$",
|
||||
"description": "可公开确认时使用的统一社会信用代码。"
|
||||
},
|
||||
"enterprise_industry_code": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 32,
|
||||
"description": "企业所属行业代码。"
|
||||
},
|
||||
"enterprise_scale": {
|
||||
"type": ["string", "null"],
|
||||
"enum": ["micro", "small", "medium", "large", "unknown", null],
|
||||
"description": "统一企业规模分组。"
|
||||
},
|
||||
"region_code": {
|
||||
"type": "string",
|
||||
"pattern": "^[0-9]{6}$",
|
||||
"description": "GB/T 2260 六位行政区划代码。"
|
||||
},
|
||||
"workplace": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 500,
|
||||
"description": "来源工作地点文本。"
|
||||
},
|
||||
"employment_type": {
|
||||
"type": "string",
|
||||
"enum": ["full_time", "internship", "part_time", "contract", "campus", "other"],
|
||||
"description": "统一用工或招聘类型。"
|
||||
},
|
||||
"recruitment_count": {
|
||||
"type": ["integer", "null"],
|
||||
"minimum": 0,
|
||||
"maximum": 1000000,
|
||||
"description": "明确披露时记录计划招聘人数。"
|
||||
},
|
||||
"education_level": {
|
||||
"type": ["string", "null"],
|
||||
"enum": ["none", "secondary", "vocational", "associate", "bachelor", "master", "doctor", "unknown", null],
|
||||
"description": "最低学历要求。"
|
||||
},
|
||||
"experience_min_years": {
|
||||
"type": ["number", "null"],
|
||||
"minimum": 0,
|
||||
"maximum": 60,
|
||||
"description": "最低工作经验年限。"
|
||||
},
|
||||
"salary_min": {
|
||||
"type": ["number", "null"],
|
||||
"minimum": 0,
|
||||
"maximum": 10000000,
|
||||
"description": "统一折算后的税前月薪下限,单位为 salary_currency。"
|
||||
},
|
||||
"salary_max": {
|
||||
"type": ["number", "null"],
|
||||
"minimum": 0,
|
||||
"maximum": 10000000,
|
||||
"description": "统一折算后的税前月薪上限。"
|
||||
},
|
||||
"salary_currency": {
|
||||
"type": ["string", "null"],
|
||||
"pattern": "^[A-Z]{3}$",
|
||||
"description": "ISO 4217 币种代码,境内岗位通常为 CNY。"
|
||||
},
|
||||
"salary_period": {
|
||||
"type": ["string", "null"],
|
||||
"enum": ["month", "year", "day", "hour", "negotiable", "unknown", null],
|
||||
"description": "来源薪资周期,统一月薪字段与原始周期同时保留。"
|
||||
},
|
||||
"benefits": {
|
||||
"type": "array",
|
||||
"maxItems": 100,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"maxLength": 100
|
||||
},
|
||||
"uniqueItems": true,
|
||||
"description": "福利标签。"
|
||||
},
|
||||
"skills": {
|
||||
"type": "array",
|
||||
"maxItems": 200,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"maxLength": 100
|
||||
},
|
||||
"uniqueItems": true,
|
||||
"description": "基于技能词典提取并归一的技能标签。"
|
||||
},
|
||||
"keywords": {
|
||||
"type": "array",
|
||||
"maxItems": 200,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"maxLength": 100
|
||||
},
|
||||
"uniqueItems": true,
|
||||
"description": "用于检索的业务关键词。"
|
||||
},
|
||||
"source_payload_hash": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"description": "原始响应载荷 SHA-256。"
|
||||
},
|
||||
"content_hash": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"description": "规范化业务内容 SHA-256,用于内容去重。"
|
||||
},
|
||||
"parsing_version": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 128,
|
||||
"description": "解析规则版本。"
|
||||
},
|
||||
"normalized_at": {
|
||||
"type": ["string", "null"],
|
||||
"format": "date-time",
|
||||
"description": "岗位和技能归一完成时间。"
|
||||
},
|
||||
"data_version": {
|
||||
"type": "string",
|
||||
"pattern": "^V[0-9]{4}\\.[0-9]{2}\\.[0-9]{2}(?:\\.[0-9]+)?$",
|
||||
"description": "进入分析层的数据版本。"
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"required": ["salary_min", "salary_max"]
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"salary_max": {
|
||||
"type": "number",
|
||||
"minimum": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,185 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://schemas.edu-industry.cn/package-manifest/1.2.0/schema.json",
|
||||
"title": "PACKAGE-MANIFEST V1.2 数据交付包清单",
|
||||
"description": "数据导入、导出和租户交付使用的版本、范围、文件、质量与血缘清单。",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"manifest_version",
|
||||
"package_id",
|
||||
"data_product",
|
||||
"data_version",
|
||||
"contract_name",
|
||||
"contract_version",
|
||||
"data_as_of",
|
||||
"tenant_scope",
|
||||
"record_count",
|
||||
"quality_score",
|
||||
"lineage_snapshot",
|
||||
"files",
|
||||
"generated_at",
|
||||
"generated_by"
|
||||
],
|
||||
"properties": {
|
||||
"manifest_version": {
|
||||
"type": "string",
|
||||
"const": "1.2.0"
|
||||
},
|
||||
"package_id": {
|
||||
"type": "string",
|
||||
"pattern": "^EDU-PKG-[0-9]{8}-[A-Z0-9]{2,24}$",
|
||||
"description": "数据交付包唯一编号。"
|
||||
},
|
||||
"release_id": {
|
||||
"type": "string",
|
||||
"pattern": "^REL-[0-9]{8}-[A-Z0-9-]{2,32}$",
|
||||
"description": "生成此 Manifest 的发布候选编号。"
|
||||
},
|
||||
"release_status": {
|
||||
"type": "string",
|
||||
"enum": ["DRAFT", "PENDING_APPROVAL", "APPROVED", "REJECTED", "PUBLISHED", "ROLLED_BACK"],
|
||||
"description": "Manifest 生成时的候选或发布状态。"
|
||||
},
|
||||
"data_product": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 200,
|
||||
"description": "平台数据产品名称或代码。"
|
||||
},
|
||||
"data_version": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 128,
|
||||
"description": "业务数据版本。"
|
||||
},
|
||||
"contract_name": {
|
||||
"type": "string",
|
||||
"pattern": "^[A-Z][A-Z0-9-]{2,63}$",
|
||||
"description": "绑定的数据契约名称。"
|
||||
},
|
||||
"contract_version": {
|
||||
"type": "string",
|
||||
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$",
|
||||
"description": "精确的数据契约版本。"
|
||||
},
|
||||
"data_as_of": {
|
||||
"type": "string",
|
||||
"format": "date",
|
||||
"description": "交付数据业务截止日期。"
|
||||
},
|
||||
"tenant_scope": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"maxItems": 10000,
|
||||
"uniqueItems": true,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 128
|
||||
},
|
||||
"description": "允许接收此交付包的租户或数据范围代码。"
|
||||
},
|
||||
"output_format": {
|
||||
"type": ["string", "null"],
|
||||
"enum": ["parquet", "csv_utf8", "jsonl", "xlsx", null],
|
||||
"description": "主数据文件格式。"
|
||||
},
|
||||
"record_count": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"description": "有效业务记录总数。"
|
||||
},
|
||||
"quality_score": {
|
||||
"type": "number",
|
||||
"minimum": 0,
|
||||
"maximum": 100,
|
||||
"description": "与质量报告一致的综合质量评分。"
|
||||
},
|
||||
"quality_report_path": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 1024,
|
||||
"description": "质量报告在交付包中的相对路径。"
|
||||
},
|
||||
"lineage_snapshot": {
|
||||
"type": "string",
|
||||
"pattern": "^LINEAGE-[A-Z0-9-]{8,96}$",
|
||||
"description": "数据血缘快照编号。"
|
||||
},
|
||||
"previous_stable_version": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 128,
|
||||
"description": "上一稳定版本,用于回滚和版本对比。"
|
||||
},
|
||||
"files": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"maxItems": 10000,
|
||||
"items": {
|
||||
"$ref": "#/$defs/file"
|
||||
},
|
||||
"description": "交付包内全部文件和校验信息。"
|
||||
},
|
||||
"generated_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "交付包生成时间。"
|
||||
},
|
||||
"generated_by": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 128,
|
||||
"description": "生成任务、服务账号或操作人。"
|
||||
},
|
||||
"approval_reference": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 256,
|
||||
"description": "生产发布审批记录编号。"
|
||||
},
|
||||
"notes": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 4000,
|
||||
"description": "交付说明、限制和已知问题。"
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"file": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": ["path", "media_type", "bytes", "sha256"],
|
||||
"properties": {
|
||||
"path": {
|
||||
"type": "string",
|
||||
"pattern": "^(?!/)(?!.*\\.\\.).+$",
|
||||
"maxLength": 1024,
|
||||
"description": "包内相对路径,不允许绝对路径和父目录穿越。"
|
||||
},
|
||||
"media_type": {
|
||||
"type": "string",
|
||||
"maxLength": 128,
|
||||
"description": "IANA 媒体类型。"
|
||||
},
|
||||
"bytes": {
|
||||
"type": "integer",
|
||||
"minimum": 0,
|
||||
"description": "文件字节数。"
|
||||
},
|
||||
"sha256": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"description": "文件 SHA-256 完整值。"
|
||||
},
|
||||
"record_count": {
|
||||
"type": ["integer", "null"],
|
||||
"minimum": 0,
|
||||
"description": "数据文件的记录数。"
|
||||
},
|
||||
"compression": {
|
||||
"type": ["string", "null"],
|
||||
"enum": ["none", "gzip", "zstd", "zip", null],
|
||||
"description": "文件压缩方式。"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://schemas.edu-industry.cn/school-employment/2.2.0/schema.json",
|
||||
"title": "SCHOOL-EMPLOYMENT V2.2 校内就业事实",
|
||||
"description": "职业院校毕业生就业事实统一契约,采用租户隔离和身份最小化设计。",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"tenant_id",
|
||||
"record_id",
|
||||
"student_token",
|
||||
"cohort",
|
||||
"college_code",
|
||||
"program_code",
|
||||
"employment_status",
|
||||
"destination_type",
|
||||
"confirmed_at",
|
||||
"confirmation_role",
|
||||
"source_system",
|
||||
"source_record_id",
|
||||
"created_at",
|
||||
"updated_at",
|
||||
"data_version",
|
||||
"content_hash"
|
||||
],
|
||||
"properties": {
|
||||
"tenant_id": {
|
||||
"type": "string",
|
||||
"pattern": "^TENANT-[A-Z0-9-]{4,64}$",
|
||||
"description": "学校租户标识,所有存储、任务和查询必须同时校验。"
|
||||
},
|
||||
"record_id": {
|
||||
"type": "string",
|
||||
"format": "uuid",
|
||||
"description": "平台全局唯一记录标识。"
|
||||
},
|
||||
"student_token": {
|
||||
"type": "string",
|
||||
"pattern": "^STU_[A-Za-z0-9_-]{32,128}$",
|
||||
"description": "学校侧生成的学生不可逆令牌,禁止传输姓名、身份证和明文学号。"
|
||||
},
|
||||
"cohort": {
|
||||
"type": "integer",
|
||||
"minimum": 2000,
|
||||
"maximum": 2100,
|
||||
"description": "毕业届次。"
|
||||
},
|
||||
"college_code": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 64,
|
||||
"description": "学校内部学院代码。"
|
||||
},
|
||||
"program_code": {
|
||||
"type": "string",
|
||||
"pattern": "^[0-9A-Z]{4,12}$",
|
||||
"description": "教育部职业教育专业目录代码。"
|
||||
},
|
||||
"class_code": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 64,
|
||||
"description": "学校内部教学班代码。"
|
||||
},
|
||||
"employment_status": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"employed",
|
||||
"self_employed",
|
||||
"further_study",
|
||||
"military",
|
||||
"flexible",
|
||||
"unemployed",
|
||||
"pending_confirmation"
|
||||
],
|
||||
"description": "统一就业状态。"
|
||||
},
|
||||
"destination_type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"enterprise",
|
||||
"public_institution",
|
||||
"government",
|
||||
"further_study",
|
||||
"entrepreneurship",
|
||||
"military",
|
||||
"other"
|
||||
],
|
||||
"description": "毕业去向类型。"
|
||||
},
|
||||
"job_title": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 200,
|
||||
"description": "就业岗位业务原文。"
|
||||
},
|
||||
"job_code": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 32,
|
||||
"description": "映射到统一岗位词典后的岗位代码。"
|
||||
},
|
||||
"enterprise_token": {
|
||||
"type": ["string", "null"],
|
||||
"pattern": "^ENT_[A-Za-z0-9_-]{24,128}$",
|
||||
"description": "企业统一标识令牌。"
|
||||
},
|
||||
"enterprise_name": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 300,
|
||||
"description": "用于业务核验的企业名称;导出时按数据范围策略处理。"
|
||||
},
|
||||
"enterprise_industry_code": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 32,
|
||||
"description": "企业行业代码。"
|
||||
},
|
||||
"region_code": {
|
||||
"type": ["string", "null"],
|
||||
"pattern": "^[0-9]{6}$",
|
||||
"description": "就业地区 GB/T 2260 六位代码。"
|
||||
},
|
||||
"salary_monthly": {
|
||||
"type": ["number", "null"],
|
||||
"minimum": 0,
|
||||
"maximum": 10000000,
|
||||
"description": "确认后的税前月薪,单位元。"
|
||||
},
|
||||
"salary_confirmed": {
|
||||
"type": ["boolean", "null"],
|
||||
"description": "薪资是否经过业务确认。"
|
||||
},
|
||||
"job_relevance": {
|
||||
"type": ["string", "null"],
|
||||
"enum": ["high", "medium", "low", "unconfirmed", null],
|
||||
"description": "就业岗位与专业培养方向相关度。"
|
||||
},
|
||||
"employment_start_date": {
|
||||
"type": ["string", "null"],
|
||||
"format": "date",
|
||||
"description": "就业开始日期。"
|
||||
},
|
||||
"contract_signed": {
|
||||
"type": ["boolean", "null"],
|
||||
"description": "是否签署就业协议或劳动合同。"
|
||||
},
|
||||
"evidence_type": {
|
||||
"type": ["string", "null"],
|
||||
"enum": ["contract", "offer", "registration", "enterprise_confirmation", "student_confirmation", "other", null],
|
||||
"description": "就业确认材料类型,不在平台保存原始敏感附件。"
|
||||
},
|
||||
"evidence_reference": {
|
||||
"type": ["string", "null"],
|
||||
"maxLength": 256,
|
||||
"description": "学校系统内的材料引用编号。"
|
||||
},
|
||||
"confirmed_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "业务确认时间。"
|
||||
},
|
||||
"confirmation_role": {
|
||||
"type": "string",
|
||||
"enum": ["employment_office", "college", "student", "enterprise", "system"],
|
||||
"description": "执行确认的业务角色。"
|
||||
},
|
||||
"source_system": {
|
||||
"type": "string",
|
||||
"maxLength": 128,
|
||||
"description": "学校来源系统代码。"
|
||||
},
|
||||
"source_record_id": {
|
||||
"type": "string",
|
||||
"minLength": 1,
|
||||
"maxLength": 256,
|
||||
"description": "校内来源系统记录标识。"
|
||||
},
|
||||
"source_updated_at": {
|
||||
"type": ["string", "null"],
|
||||
"format": "date-time",
|
||||
"description": "校内来源系统业务更新时间,建议作为增量水位。"
|
||||
},
|
||||
"created_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "平台记录创建时间。"
|
||||
},
|
||||
"updated_at": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"description": "平台记录更新时间。"
|
||||
},
|
||||
"data_version": {
|
||||
"type": "string",
|
||||
"pattern": "^SCH-EMP-[0-9]{8}(?:-[0-9]{2})?$",
|
||||
"description": "校内就业数据版本。"
|
||||
},
|
||||
"is_deleted": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "版本化软删除标识。"
|
||||
},
|
||||
"content_hash": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-f0-9]{64}$",
|
||||
"description": "去除非业务差异后的记录内容 SHA-256。"
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"destination_type": {
|
||||
"const": "enterprise"
|
||||
}
|
||||
},
|
||||
"required": ["destination_type"]
|
||||
},
|
||||
"then": {
|
||||
"anyOf": [
|
||||
{
|
||||
"required": ["enterprise_token"]
|
||||
},
|
||||
{
|
||||
"required": ["enterprise_name"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user