Add human review protocol and admin rules contract
This commit is contained in:
390
schemas/admin_rules.schema.json
Normal file
390
schemas/admin_rules.schema.json
Normal file
@@ -0,0 +1,390 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://local.anonymisation/admin-rules.schema.json",
|
||||
"title": "Admin rules configuration",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"version",
|
||||
"rules"
|
||||
],
|
||||
"properties": {
|
||||
"version": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"defaults": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"review_required_for_activation": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"environments": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"test",
|
||||
"staging",
|
||||
"prod"
|
||||
]
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"sections": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"narrative",
|
||||
"structured",
|
||||
"table",
|
||||
"header",
|
||||
"footer"
|
||||
]
|
||||
},
|
||||
"uniqueItems": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/rule"
|
||||
}
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"scope": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"document_families",
|
||||
"environments",
|
||||
"sections"
|
||||
],
|
||||
"properties": {
|
||||
"document_families": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"minItems": 1,
|
||||
"uniqueItems": true
|
||||
},
|
||||
"environments": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"test",
|
||||
"staging",
|
||||
"prod"
|
||||
]
|
||||
},
|
||||
"minItems": 1,
|
||||
"uniqueItems": true
|
||||
},
|
||||
"sections": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"narrative",
|
||||
"structured",
|
||||
"table",
|
||||
"header",
|
||||
"footer"
|
||||
]
|
||||
},
|
||||
"minItems": 1,
|
||||
"uniqueItems": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"tests": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"required_case_ids"
|
||||
],
|
||||
"properties": {
|
||||
"required_case_ids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"minItems": 1,
|
||||
"uniqueItems": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"governance": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"owner",
|
||||
"justification",
|
||||
"created_at",
|
||||
"review_required_for_activation",
|
||||
"tests"
|
||||
],
|
||||
"properties": {
|
||||
"owner": {
|
||||
"type": "string",
|
||||
"minLength": 2
|
||||
},
|
||||
"justification": {
|
||||
"type": "string",
|
||||
"minLength": 8
|
||||
},
|
||||
"created_at": {
|
||||
"type": "string",
|
||||
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
|
||||
},
|
||||
"review_required_for_activation": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"approved_by": {
|
||||
"type": [
|
||||
"string",
|
||||
"null"
|
||||
]
|
||||
},
|
||||
"ticket": {
|
||||
"type": "string"
|
||||
},
|
||||
"tests": {
|
||||
"$ref": "#/$defs/tests"
|
||||
}
|
||||
}
|
||||
},
|
||||
"normalization": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"case_insensitive": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"whole_word": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"multiline": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"allow_bare_value": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"accepted_prefixes": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"prefix_value_separators": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"uniqueItems": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"match": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"exact_value": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"canonical_value": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"context_prefixes": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"uniqueItems": true
|
||||
},
|
||||
"context_separators": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"uniqueItems": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"rule": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"id",
|
||||
"label",
|
||||
"type",
|
||||
"action",
|
||||
"status",
|
||||
"match",
|
||||
"scope",
|
||||
"governance"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"pattern": "^[a-z0-9_][a-z0-9_-]{2,63}$"
|
||||
},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"minLength": 3
|
||||
},
|
||||
"description": {
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"exact_term",
|
||||
"normalized_identifier",
|
||||
"contextual_identifier",
|
||||
"preserve_phrase"
|
||||
]
|
||||
},
|
||||
"action": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"mask",
|
||||
"preserve"
|
||||
]
|
||||
},
|
||||
"placeholder": {
|
||||
"type": "string",
|
||||
"pattern": "^\\[[A-Z_]+\\]$"
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"draft",
|
||||
"candidate",
|
||||
"approved",
|
||||
"active",
|
||||
"disabled",
|
||||
"retired"
|
||||
]
|
||||
},
|
||||
"match": {
|
||||
"$ref": "#/$defs/match"
|
||||
},
|
||||
"normalization": {
|
||||
"$ref": "#/$defs/normalization"
|
||||
},
|
||||
"scope": {
|
||||
"$ref": "#/$defs/scope"
|
||||
},
|
||||
"governance": {
|
||||
"$ref": "#/$defs/governance"
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"action": {
|
||||
"const": "mask"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"required": [
|
||||
"placeholder"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "exact_term"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"match": {
|
||||
"required": [
|
||||
"exact_value"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "preserve_phrase"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"action": {
|
||||
"const": "preserve"
|
||||
},
|
||||
"match": {
|
||||
"required": [
|
||||
"exact_value"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "normalized_identifier"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"match": {
|
||||
"required": [
|
||||
"canonical_value"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"if": {
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "contextual_identifier"
|
||||
}
|
||||
}
|
||||
},
|
||||
"then": {
|
||||
"properties": {
|
||||
"match": {
|
||||
"required": [
|
||||
"canonical_value",
|
||||
"context_prefixes"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user