Files
edu-industry/admin-tools/demo/schemas/school-internship.schema.json
T
lofyerandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> b9fbd4c6af refactor: simplify product copy
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-25 11:37:59 +08:00

223 lines
6.2 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://schemas.edu-industry.cn/school-internship/2.1.0/schema.json",
"title": "SCHOOL-INTERNSHIP V2.1 校内实习数据",
"description": "职业院校学生实习数据契约,要求租户隔离,将身份字段限制在业务必需的最少范围,并引用评价记录。",
"type": "object",
"additionalProperties": false,
"required": [
"tenant_id",
"record_id",
"internship_id",
"student_token",
"program_code",
"job_title",
"start_date",
"status",
"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": "平台全局唯一记录标识。"
},
"internship_id": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "学校租户内的实习业务编号。"
},
"student_token": {
"type": "string",
"pattern": "^STU_[A-Za-z0-9_-]{32,128}$",
"description": "学校侧生成的学生不可逆令牌,禁止传输姓名、身份证和明文学号。"
},
"cohort": {
"type": ["integer", "null"],
"minimum": 2000,
"maximum": 2100,
"description": "学生届次。"
},
"college_code": {
"type": ["string", "null"],
"maxLength": 64,
"description": "学校内部学院代码。"
},
"program_code": {
"type": "string",
"pattern": "^[0-9A-Z]{4,12}$",
"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 六位代码。"
},
"workplace": {
"type": ["string", "null"],
"maxLength": 500,
"description": "实习地点业务文本。"
},
"job_title": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "实习岗位名称。"
},
"job_code": {
"type": ["string", "null"],
"maxLength": 32,
"description": "映射到统一岗位词典后的岗位代码。"
},
"job_tasks": {
"type": "array",
"maxItems": 100,
"uniqueItems": true,
"items": {
"type": "string",
"maxLength": 500
},
"description": "经学校确认的实习岗位任务。"
},
"start_date": {
"type": "string",
"format": "date",
"description": "实习开始日期。"
},
"end_date": {
"type": ["string", "null"],
"format": "date",
"description": "计划或实际结束日期。"
},
"status": {
"type": "string",
"enum": ["planned", "active", "completed", "terminated", "cancelled"],
"description": "实习业务状态。"
},
"salary_monthly": {
"type": ["number", "null"],
"minimum": 0,
"maximum": 10000000,
"description": "确认后的税前月实习工资,单位元。"
},
"enterprise_mentor_evaluation": {
"type": ["string", "null"],
"maxLength": 4000,
"description": "企业导师业务评价,禁止包含学生敏感身份信息。"
},
"school_evaluation": {
"type": ["string", "null"],
"maxLength": 4000,
"description": "学校指导教师或管理部门评价。"
},
"evidence_reference": {
"type": ["string", "null"],
"maxLength": 256,
"description": "学校系统内的证据引用编号,不传输敏感附件。"
},
"source_system": {
"type": "string",
"minLength": 1,
"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-INT-[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": {
"status": {
"enum": ["active", "completed"]
}
},
"required": ["status"]
},
"then": {
"anyOf": [
{
"properties": {
"enterprise_token": {
"type": "string",
"pattern": "^ENT_[A-Za-z0-9_-]{24,128}$"
}
},
"required": ["enterprise_token"]
},
{
"properties": {
"enterprise_name": {
"type": "string",
"minLength": 1,
"maxLength": 300
}
},
"required": ["enterprise_name"]
}
]
}
}
]
}