{
  "$id": "https://apps.ediphai.com/v1/schemas/Definition.json",
  "title": "Definition",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "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"
    },
    "declarer": {
      "description": "The declaring source, or a platform namespace such as rock",
      "type": "string",
      "pattern": "^[a-z][a-z0-9_]{0,63}$"
    },
    "scope": {
      "description": "church unless a platform seed declares global",
      "type": "string",
      "enum": [
        "church",
        "global"
      ]
    },
    "kind": {
      "type": "string",
      "enum": [
        "assessment"
      ]
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "supersedes": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
          "description": "The app's own version label"
        },
        {
          "type": "null"
        }
      ]
    },
    "roles": {
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "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"
          },
          "min": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "max": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          }
        },
        "required": [
          "key",
          "min",
          "max"
        ],
        "additionalProperties": false
      }
    },
    "respondents": {
      "description": "Who may answer; self only when not declared",
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "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"
              },
              "min_count": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              }
            },
            "required": [
              "kind",
              "role",
              "min_count"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "sections": {
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "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"
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "order": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "sensitivity": {
            "type": "string",
            "enum": [
              "standard",
              "restricted"
            ]
          },
          "sensitivity_categories": {
            "minItems": 1,
            "maxItems": 11,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "identity",
                "contact",
                "demographic",
                "financial",
                "health",
                "pastoral",
                "safety",
                "formation",
                "engagement",
                "none",
                "unclassified"
              ]
            },
            "description": "Why the data is sensitive. Inherited from section to item; defaults to formation for assessments. Enforces nothing"
          }
        },
        "required": [
          "key",
          "label",
          "order"
        ],
        "additionalProperties": false
      }
    },
    "items": {
      "minItems": 1,
      "maxItems": 1000,
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "key": {
                "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"
              },
              "section": {
                "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"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "description": {
                "type": "string",
                "maxLength": 2000
              },
              "sensitivity": {
                "type": "string",
                "enum": [
                  "standard",
                  "restricted"
                ]
              },
              "sensitivity_categories": {
                "minItems": 1,
                "maxItems": 11,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "identity",
                    "contact",
                    "demographic",
                    "financial",
                    "health",
                    "pastoral",
                    "safety",
                    "formation",
                    "engagement",
                    "none",
                    "unclassified"
                  ]
                },
                "description": "Why the data is sensitive. Inherited from section to item; defaults to formation for assessments. Enforces nothing"
              },
              "qualifiers": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "category"
                        },
                        "categories": {
                          "minItems": 1,
                          "maxItems": 500,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "key",
                        "value_type",
                        "categories"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "min": {
                          "type": "number"
                        },
                        "max": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "key",
                        "value_type"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              },
              "reverse_keyed": {
                "type": "boolean"
              },
              "value_type": {
                "type": "string",
                "const": "score"
              },
              "scale": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "number"
                  },
                  "max": {
                    "type": "number"
                  },
                  "step": {
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "higher_means": {
                    "type": "string",
                    "maxLength": 100
                  }
                },
                "required": [
                  "min",
                  "max"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "key",
              "section",
              "label",
              "value_type",
              "scale"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "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"
              },
              "section": {
                "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"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "description": {
                "type": "string",
                "maxLength": 2000
              },
              "sensitivity": {
                "type": "string",
                "enum": [
                  "standard",
                  "restricted"
                ]
              },
              "sensitivity_categories": {
                "minItems": 1,
                "maxItems": 11,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "identity",
                    "contact",
                    "demographic",
                    "financial",
                    "health",
                    "pastoral",
                    "safety",
                    "formation",
                    "engagement",
                    "none",
                    "unclassified"
                  ]
                },
                "description": "Why the data is sensitive. Inherited from section to item; defaults to formation for assessments. Enforces nothing"
              },
              "qualifiers": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "category"
                        },
                        "categories": {
                          "minItems": 1,
                          "maxItems": 500,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "key",
                        "value_type",
                        "categories"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "min": {
                          "type": "number"
                        },
                        "max": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "key",
                        "value_type"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              },
              "reverse_keyed": {
                "type": "boolean"
              },
              "value_type": {
                "type": "string",
                "const": "ordinal"
              },
              "levels": {
                "minItems": 2,
                "maxItems": 100,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "key": {
                      "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"
                    },
                    "label": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 200
                    }
                  },
                  "required": [
                    "key",
                    "label"
                  ],
                  "additionalProperties": false
                },
                "description": "Ordered, lowest first"
              }
            },
            "required": [
              "key",
              "section",
              "label",
              "value_type",
              "levels"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "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"
              },
              "section": {
                "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"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "description": {
                "type": "string",
                "maxLength": 2000
              },
              "sensitivity": {
                "type": "string",
                "enum": [
                  "standard",
                  "restricted"
                ]
              },
              "sensitivity_categories": {
                "minItems": 1,
                "maxItems": 11,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "identity",
                    "contact",
                    "demographic",
                    "financial",
                    "health",
                    "pastoral",
                    "safety",
                    "formation",
                    "engagement",
                    "none",
                    "unclassified"
                  ]
                },
                "description": "Why the data is sensitive. Inherited from section to item; defaults to formation for assessments. Enforces nothing"
              },
              "qualifiers": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "category"
                        },
                        "categories": {
                          "minItems": 1,
                          "maxItems": 500,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "key",
                        "value_type",
                        "categories"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "min": {
                          "type": "number"
                        },
                        "max": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "key",
                        "value_type"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              },
              "reverse_keyed": {
                "type": "boolean"
              },
              "value_type": {
                "type": "string",
                "const": "rank"
              },
              "rank": {
                "type": "object",
                "properties": {
                  "total": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 9007199254740991
                  },
                  "direction": {
                    "type": "string",
                    "enum": [
                      "one_is_strongest",
                      "total_is_strongest"
                    ]
                  }
                },
                "required": [
                  "total",
                  "direction"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "key",
              "section",
              "label",
              "value_type",
              "rank"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "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"
              },
              "section": {
                "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"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "description": {
                "type": "string",
                "maxLength": 2000
              },
              "sensitivity": {
                "type": "string",
                "enum": [
                  "standard",
                  "restricted"
                ]
              },
              "sensitivity_categories": {
                "minItems": 1,
                "maxItems": 11,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "identity",
                    "contact",
                    "demographic",
                    "financial",
                    "health",
                    "pastoral",
                    "safety",
                    "formation",
                    "engagement",
                    "none",
                    "unclassified"
                  ]
                },
                "description": "Why the data is sensitive. Inherited from section to item; defaults to formation for assessments. Enforces nothing"
              },
              "qualifiers": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "category"
                        },
                        "categories": {
                          "minItems": 1,
                          "maxItems": 500,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "key",
                        "value_type",
                        "categories"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "min": {
                          "type": "number"
                        },
                        "max": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "key",
                        "value_type"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              },
              "reverse_keyed": {
                "type": "boolean"
              },
              "value_type": {
                "type": "string",
                "const": "category"
              },
              "categories": {
                "minItems": 1,
                "maxItems": 500,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                }
              }
            },
            "required": [
              "key",
              "section",
              "label",
              "value_type",
              "categories"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "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"
              },
              "section": {
                "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"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "description": {
                "type": "string",
                "maxLength": 2000
              },
              "sensitivity": {
                "type": "string",
                "enum": [
                  "standard",
                  "restricted"
                ]
              },
              "sensitivity_categories": {
                "minItems": 1,
                "maxItems": 11,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "identity",
                    "contact",
                    "demographic",
                    "financial",
                    "health",
                    "pastoral",
                    "safety",
                    "formation",
                    "engagement",
                    "none",
                    "unclassified"
                  ]
                },
                "description": "Why the data is sensitive. Inherited from section to item; defaults to formation for assessments. Enforces nothing"
              },
              "qualifiers": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "category"
                        },
                        "categories": {
                          "minItems": 1,
                          "maxItems": 500,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "key",
                        "value_type",
                        "categories"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "min": {
                          "type": "number"
                        },
                        "max": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "key",
                        "value_type"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              },
              "reverse_keyed": {
                "type": "boolean"
              },
              "value_type": {
                "type": "string",
                "const": "ordered_list"
              },
              "categories": {
                "minItems": 1,
                "maxItems": 500,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                }
              },
              "min_items": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "max_items": {
                "type": "integer",
                "minimum": 1,
                "maximum": 9007199254740991
              },
              "unique": {
                "description": "Values are distinct unless this is false",
                "type": "boolean"
              }
            },
            "required": [
              "key",
              "section",
              "label",
              "value_type",
              "categories"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "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"
              },
              "section": {
                "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"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "description": {
                "type": "string",
                "maxLength": 2000
              },
              "sensitivity": {
                "type": "string",
                "enum": [
                  "standard",
                  "restricted"
                ]
              },
              "sensitivity_categories": {
                "minItems": 1,
                "maxItems": 11,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "identity",
                    "contact",
                    "demographic",
                    "financial",
                    "health",
                    "pastoral",
                    "safety",
                    "formation",
                    "engagement",
                    "none",
                    "unclassified"
                  ]
                },
                "description": "Why the data is sensitive. Inherited from section to item; defaults to formation for assessments. Enforces nothing"
              },
              "qualifiers": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "category"
                        },
                        "categories": {
                          "minItems": 1,
                          "maxItems": 500,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "key",
                        "value_type",
                        "categories"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "min": {
                          "type": "number"
                        },
                        "max": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "key",
                        "value_type"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              },
              "reverse_keyed": {
                "type": "boolean"
              },
              "value_type": {
                "type": "string",
                "const": "selected"
              }
            },
            "required": [
              "key",
              "section",
              "label",
              "value_type"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "key": {
                "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"
              },
              "section": {
                "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"
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "description": {
                "type": "string",
                "maxLength": 2000
              },
              "sensitivity": {
                "type": "string",
                "enum": [
                  "standard",
                  "restricted"
                ]
              },
              "sensitivity_categories": {
                "minItems": 1,
                "maxItems": 11,
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "identity",
                    "contact",
                    "demographic",
                    "financial",
                    "health",
                    "pastoral",
                    "safety",
                    "formation",
                    "engagement",
                    "none",
                    "unclassified"
                  ]
                },
                "description": "Why the data is sensitive. Inherited from section to item; defaults to formation for assessments. Enforces nothing"
              },
              "qualifiers": {
                "maxItems": 20,
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "category"
                        },
                        "categories": {
                          "minItems": 1,
                          "maxItems": 500,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 200
                          }
                        }
                      },
                      "required": [
                        "key",
                        "value_type",
                        "categories"
                      ],
                      "additionalProperties": false
                    },
                    {
                      "type": "object",
                      "properties": {
                        "key": {
                          "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_type": {
                          "type": "string",
                          "const": "number"
                        },
                        "min": {
                          "type": "number"
                        },
                        "max": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "key",
                        "value_type"
                      ],
                      "additionalProperties": false
                    }
                  ]
                }
              },
              "reverse_keyed": {
                "type": "boolean"
              },
              "value_type": {
                "type": "string",
                "const": "text"
              },
              "max_length": {
                "description": "Characters; 10,000 when not declared",
                "type": "integer",
                "minimum": 1,
                "maximum": 100000
              }
            },
            "required": [
              "key",
              "section",
              "label",
              "value_type"
            ],
            "additionalProperties": false
          }
        ]
      }
    },
    "reading": {
      "type": "object",
      "properties": {
        "primary": {
          "type": "string",
          "enum": [
            "source_primary",
            "none"
          ]
        },
        "order_by": {
          "type": "string",
          "enum": [
            "source_rank",
            "value",
            "none"
          ]
        }
      },
      "required": [
        "primary",
        "order_by"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "kind",
    "name",
    "roles",
    "sections",
    "items"
  ],
  "additionalProperties": false
}
