{
  "$id": "https://apps.ediphai.com/v1/schemas/AssessmentResultBody.json",
  "title": "AssessmentResultBody",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "definition": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "pattern": "^([a-z][a-z0-9_]{0,63}\\.)?[a-z][a-z0-9_]{0,63}$",
          "description": "A key. Platform definitions prefix their declarer's namespace (rock.disc); church keys never contain a dot"
        },
        "version": {
          "type": "string",
          "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
          "description": "The app's own version label"
        }
      },
      "required": [
        "key",
        "version"
      ],
      "additionalProperties": false
    },
    "status": {
      "type": "string",
      "enum": [
        "completed"
      ]
    },
    "started_at": {
      "type": "string",
      "pattern": "^(\\d{4})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-](\\d{2}):(\\d{2})))?)?)?$",
      "description": "An RFC 3339 timestamp with an offset (2026-10-12T19:04:11Z), a day (2003-05-04), a month (2003-05) or a year (2003)"
    },
    "completed_at": {
      "type": "string",
      "pattern": "^(\\d{4})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.\\d{1,9})?(?:Z|[+-](\\d{2}):(\\d{2})))?)?)?$",
      "description": "An RFC 3339 timestamp with an offset (2026-10-12T19:04:11Z), a day (2003-05-04), a month (2003-05) or a year (2003)"
    },
    "respondent": {
      "description": "self when absent",
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "self"
            }
          },
          "required": [
            "kind"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "kind": {
              "type": "string",
              "const": "observer"
            },
            "role": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_]{0,63}$",
              "description": "Identifier for every section, item, role, level, qualifier and declarer: a lowercase letter, then lowercase letters, digits or underscores, at most 64 characters"
            },
            "count": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "kind",
            "role",
            "count"
          ],
          "additionalProperties": false
        }
      ]
    },
    "results": {
      "minItems": 1,
      "maxItems": 1000,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,63}$",
            "description": "Identifier for every section, item, role, level, qualifier and declarer: a lowercase letter, then lowercase letters, digits or underscores, at most 64 characters"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              },
              {
                "type": "boolean"
              },
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "null"
              }
            ],
            "description": "Typed by the item. null is reported with no value; \"not_offered\" means the source never presented it"
          },
          "qualifiers": {
            "type": "object",
            "propertyNames": {
              "type": "string",
              "pattern": "^[a-z][a-z0-9_]{0,63}$",
              "description": "Identifier for every section, item, role, level, qualifier and declarer: a lowercase letter, then lowercase letters, digits or underscores, at most 64 characters"
            },
            "additionalProperties": {
              "type": [
                "string",
                "number"
              ]
            }
          },
          "coverage": {
            "type": "object",
            "properties": {
              "answered": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "total": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "answered",
              "total"
            ],
            "additionalProperties": false
          },
          "source_rank": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "source_primary": {
            "type": "boolean"
          }
        },
        "required": [
          "item",
          "value"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "definition",
    "status",
    "completed_at",
    "results"
  ],
  "additionalProperties": false
}
