{
  "schemaVersion": "zhixu.data-package/v1",
  "recordEnvelope": {
    "requiredFields": [
      "section",
      "sourceRef",
      "record"
    ],
    "sourceRef": "UUID; equals the section primary public identity",
    "recordFields": "All listed fields required; use null only where nullable=true; no additional fields"
  },
  "fields": {
    "banks": [
      "id",
      "name",
      "description",
      "status",
      "usageMode",
      "currentBankVersionId",
      "workingRevision",
      "createdAt",
      "updatedAt"
    ],
    "sources": [
      "id",
      "bankId",
      "originalFilename",
      "mimeType",
      "byteSize",
      "sha256",
      "status",
      "uploadSource",
      "uploadedAt",
      "createdAt",
      "updatedAt"
    ],
    "questions": [
      "id",
      "bankId",
      "status",
      "createdSource",
      "currentWorkingVersionId",
      "createdAt",
      "updatedAt"
    ],
    "options": [
      "id",
      "questionId",
      "semantic",
      "createdAt"
    ],
    "questionVersions": [
      "id",
      "questionId",
      "versionNo",
      "schemaVersion",
      "questionType",
      "stemJson",
      "explanationJson",
      "answerKeyHash",
      "optionOrderPolicy",
      "optionOrderReason",
      "sourceLocatorJson",
      "contentHash",
      "changeImpact",
      "createdByType",
      "createdById",
      "changeSetId",
      "createdAt"
    ],
    "optionVersions": [
      "id",
      "questionVersionId",
      "optionId",
      "contentJson",
      "originalPosition",
      "contentHash",
      "createdAt"
    ],
    "answerKeys": [
      "questionVersionId",
      "optionIdsJson",
      "judgeRuleVersion",
      "createdAt"
    ],
    "bankVersions": [
      "id",
      "bankId",
      "versionNo",
      "workingRevision",
      "questionCount",
      "contentDigest",
      "publishedByUserId",
      "publishedByAdminId",
      "publishedAt"
    ],
    "bankVersionItems": [
      "id",
      "bankVersionId",
      "questionId",
      "questionVersionId",
      "position",
      "publishedStatus",
      "createdAt"
    ],
    "workingItems": [
      "id",
      "bankId",
      "questionId",
      "questionVersionId",
      "position",
      "included",
      "createdAt",
      "updatedAt"
    ],
    "positions": [
      "id",
      "name",
      "status",
      "createdAt",
      "updatedAt"
    ],
    "members": [
      "id",
      "employeeNo",
      "displayName",
      "department",
      "positionId",
      "email",
      "phone",
      "role",
      "status",
      "joinedAt",
      "leftAt",
      "createdAt",
      "updatedAt"
    ],
    "exams": [
      "id",
      "status",
      "revision",
      "opensAt",
      "closesAt",
      "configJson",
      "poolJson",
      "paperIdsJson",
      "bankVersionId",
      "participantCount",
      "publishedAt",
      "canceledAt",
      "createdAt",
      "updatedAt"
    ],
    "examParticipations": [
      "id",
      "examId",
      "memberId",
      "employeeNo",
      "displayName",
      "department",
      "positionSnapshotJson",
      "status",
      "attemptNumber",
      "effectiveScore",
      "startedAt",
      "deadlineAt",
      "submittedAt",
      "submitReason",
      "paperJson",
      "answersJson",
      "score",
      "passed",
      "createdAt",
      "updatedAt"
    ],
    "examAttempts": [
      "id",
      "participationId",
      "attemptNumber",
      "revision",
      "startedAt",
      "deadlineAt",
      "submittedAt",
      "submitReason",
      "paperJson",
      "answersJson",
      "score",
      "passed",
      "createdAt"
    ],
    "practiceSessions": [
      "id",
      "bankId",
      "bankVersionId",
      "mode",
      "feedbackMode",
      "requestedCount",
      "actualCount",
      "filtersJson",
      "seed",
      "status",
      "revision",
      "startedAt",
      "submittedAt",
      "abandonedAt",
      "createdAt",
      "updatedAt"
    ],
    "sessionQuestions": [
      "id",
      "sessionId",
      "queueIndex",
      "questionId",
      "questionVersionId",
      "presentedOptionIdsJson",
      "selectionReason",
      "createdAt"
    ],
    "attempts": [
      "id",
      "sessionQuestionId",
      "sessionId",
      "bankId",
      "answerStatus",
      "selectedOptionIdsJson",
      "originalOutcome",
      "answerKeyHash",
      "judgeRuleVersion",
      "clientSubmittedAt",
      "submittedAt",
      "createdAt"
    ],
    "questionUserStates": [
      "id",
      "bankId",
      "questionId",
      "questionVersionId",
      "totalAttempts",
      "correctCount",
      "incorrectCount",
      "skippedCount",
      "lastOutcome",
      "lastAttemptedAt",
      "lastWrongAt",
      "correctStreakAfterError",
      "masteryState",
      "userOverride",
      "disputed",
      "projectionVersion",
      "createdAt",
      "updatedAt"
    ]
  },
  "fieldTypes": {
    "banks": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "name": {
        "type": "string",
        "nullable": false,
        "maxLength": 160
      },
      "description": {
        "type": "string",
        "nullable": true
      },
      "status": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "usageMode": {
        "type": "string",
        "nullable": false,
        "maxLength": 32
      },
      "currentBankVersionId": {
        "type": "string",
        "nullable": true,
        "maxLength": 36
      },
      "workingRevision": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "sources": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "originalFilename": {
        "type": "string",
        "nullable": false,
        "maxLength": 255
      },
      "mimeType": {
        "type": "string",
        "nullable": false,
        "maxLength": 127
      },
      "byteSize": {
        "type": "string",
        "nullable": false,
        "format": "unsigned-decimal",
        "unsigned": true
      },
      "sha256": {
        "type": "string",
        "nullable": false,
        "maxLength": 64
      },
      "status": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "uploadSource": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "uploadedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "questions": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "status": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "createdSource": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "currentWorkingVersionId": {
        "type": "string",
        "nullable": true,
        "maxLength": 36
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "options": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "semantic": {
        "type": "string",
        "nullable": true,
        "maxLength": 16
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "questionVersions": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "versionNo": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "schemaVersion": {
        "type": "string",
        "nullable": false,
        "maxLength": 16
      },
      "questionType": {
        "type": "string",
        "nullable": false,
        "maxLength": 32
      },
      "stemJson": {
        "type": "json",
        "nullable": false
      },
      "explanationJson": {
        "type": "json",
        "nullable": true
      },
      "answerKeyHash": {
        "type": "string",
        "nullable": false,
        "maxLength": 64
      },
      "optionOrderPolicy": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "optionOrderReason": {
        "type": "string",
        "nullable": true,
        "maxLength": 500
      },
      "sourceLocatorJson": {
        "type": "json",
        "nullable": true
      },
      "contentHash": {
        "type": "string",
        "nullable": false,
        "maxLength": 64
      },
      "changeImpact": {
        "type": "string",
        "nullable": false,
        "maxLength": 32
      },
      "createdByType": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "createdById": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "changeSetId": {
        "type": "string",
        "nullable": true,
        "maxLength": 36
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "optionVersions": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionVersionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "optionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "contentJson": {
        "type": "json",
        "nullable": false
      },
      "originalPosition": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "contentHash": {
        "type": "string",
        "nullable": false,
        "maxLength": 64
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "answerKeys": {
      "questionVersionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "optionIdsJson": {
        "type": "json",
        "nullable": false
      },
      "judgeRuleVersion": {
        "type": "string",
        "nullable": false,
        "maxLength": 48
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "bankVersions": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "versionNo": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "workingRevision": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "questionCount": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "contentDigest": {
        "type": "string",
        "nullable": false,
        "maxLength": 64
      },
      "publishedByUserId": {
        "type": "string",
        "nullable": true,
        "maxLength": 36
      },
      "publishedByAdminId": {
        "type": "integer",
        "nullable": true,
        "unsigned": true
      },
      "publishedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "bankVersionItems": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankVersionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionVersionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "position": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "publishedStatus": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "workingItems": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionVersionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "position": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "included": {
        "type": "boolean",
        "nullable": false
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "positions": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "name": {
        "type": "string",
        "nullable": false,
        "maxLength": 50
      },
      "status": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "members": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "employeeNo": {
        "type": "string",
        "nullable": false,
        "maxLength": 100
      },
      "displayName": {
        "type": "string",
        "nullable": false,
        "maxLength": 100
      },
      "department": {
        "type": "string",
        "nullable": true,
        "maxLength": 100
      },
      "positionId": {
        "type": "string",
        "nullable": true,
        "maxLength": 36
      },
      "email": {
        "type": "string",
        "nullable": true,
        "maxLength": 191
      },
      "phone": {
        "type": "string",
        "nullable": true,
        "maxLength": 40
      },
      "role": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "status": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "joinedAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "leftAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "exams": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "status": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "revision": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "opensAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "closesAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "configJson": {
        "type": "json",
        "nullable": false
      },
      "poolJson": {
        "type": "json",
        "nullable": true
      },
      "paperIdsJson": {
        "type": "json",
        "nullable": true
      },
      "bankVersionId": {
        "type": "string",
        "nullable": true,
        "maxLength": 36
      },
      "participantCount": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "publishedAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "canceledAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "examParticipations": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "examId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "memberId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "employeeNo": {
        "type": "string",
        "nullable": false,
        "maxLength": 100
      },
      "displayName": {
        "type": "string",
        "nullable": false,
        "maxLength": 100
      },
      "department": {
        "type": "string",
        "nullable": true,
        "maxLength": 100
      },
      "positionSnapshotJson": {
        "type": "json",
        "nullable": true
      },
      "status": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "attemptNumber": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "effectiveScore": {
        "type": "integer",
        "nullable": true,
        "unsigned": true
      },
      "startedAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "deadlineAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "submittedAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "submitReason": {
        "type": "string",
        "nullable": true,
        "maxLength": 24
      },
      "paperJson": {
        "type": "json",
        "nullable": true
      },
      "answersJson": {
        "type": "json",
        "nullable": true
      },
      "score": {
        "type": "integer",
        "nullable": true,
        "unsigned": true
      },
      "passed": {
        "type": "boolean",
        "nullable": true
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "examAttempts": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "participationId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "attemptNumber": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "revision": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "startedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "deadlineAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "submittedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "submitReason": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "paperJson": {
        "type": "json",
        "nullable": false
      },
      "answersJson": {
        "type": "json",
        "nullable": false
      },
      "score": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "passed": {
        "type": "boolean",
        "nullable": false
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "practiceSessions": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankVersionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "mode": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "feedbackMode": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "requestedCount": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "actualCount": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "filtersJson": {
        "type": "json",
        "nullable": true
      },
      "seed": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "status": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "revision": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "startedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "submittedAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "abandonedAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "sessionQuestions": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "sessionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "queueIndex": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "questionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionVersionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "presentedOptionIdsJson": {
        "type": "json",
        "nullable": false
      },
      "selectionReason": {
        "type": "string",
        "nullable": false,
        "maxLength": 80
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "attempts": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "sessionQuestionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "sessionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "answerStatus": {
        "type": "string",
        "nullable": false,
        "maxLength": 16
      },
      "selectedOptionIdsJson": {
        "type": "json",
        "nullable": false
      },
      "originalOutcome": {
        "type": "string",
        "nullable": false,
        "maxLength": 16
      },
      "answerKeyHash": {
        "type": "string",
        "nullable": false,
        "maxLength": 64
      },
      "judgeRuleVersion": {
        "type": "string",
        "nullable": false,
        "maxLength": 48
      },
      "clientSubmittedAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "submittedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    },
    "questionUserStates": {
      "id": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "bankId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "questionVersionId": {
        "type": "string",
        "nullable": false,
        "maxLength": 36
      },
      "totalAttempts": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "correctCount": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "incorrectCount": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "skippedCount": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "lastOutcome": {
        "type": "string",
        "nullable": true,
        "maxLength": 16
      },
      "lastAttemptedAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "lastWrongAt": {
        "type": "string",
        "nullable": true,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "correctStreakAfterError": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "masteryState": {
        "type": "string",
        "nullable": false,
        "maxLength": 24
      },
      "userOverride": {
        "type": "string",
        "nullable": true,
        "maxLength": 24
      },
      "disputed": {
        "type": "boolean",
        "nullable": false
      },
      "projectionVersion": {
        "type": "integer",
        "nullable": false,
        "unsigned": true
      },
      "createdAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      },
      "updatedAt": {
        "type": "string",
        "nullable": false,
        "format": "date-time",
        "precision": 3,
        "canonical": "UTC ISO 8601 with millisecond precision, e.g. 2026-10-14T00:00:00.000Z"
      }
    }
  },
  "restorableSections": [
    "banks",
    "sources",
    "questions",
    "options",
    "questionVersions",
    "optionVersions",
    "answerKeys",
    "bankVersions",
    "bankVersionItems",
    "workingItems",
    "positions",
    "members"
  ],
  "archivedSections": [
    "exams",
    "examParticipations",
    "examAttempts",
    "practiceSessions",
    "sessionQuestions",
    "attempts",
    "questionUserStates"
  ],
  "limits": {
    "banks": 10000,
    "rows": 1000000,
    "files": 10000,
    "bytes": 5368709120,
    "manifestBytes": 8388608,
    "lineBytes": 1048576,
    "partBytes": 16777216,
    "partRows": 1000,
    "sourceBytes": 20971520
  },
  "notes": [
    "This is a v1 public field reference, not a complete JSON Schema.",
    "JSON values additionally follow the documented question/answer/reference and archive domain rules.",
    "Integer values must be safe JSON integers and fit the documented business fields.",
    "The manifest file descriptor has its own stricter delivery rules: path-free filename<=255, mimeType<=100, byteSize decimal string, source<=20MiB, jsonl-gzip<=16MiB.",
    "Original UUIDs remap on migration; declared hashes are checked and recomputed for new identity references."
  ]
}
