299 lines
8.4 KiB
JSON
299 lines
8.4 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://git.add-ideas.de/GovOPlaN/govoplan/src/branch/main/docs/capability-fit.schema.json",
|
|
"title": "GovOPlaN capability and infrastructure fit assessment",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema_version",
|
|
"assessment_id",
|
|
"assessed_at",
|
|
"scope",
|
|
"release",
|
|
"composition",
|
|
"deployment_profile",
|
|
"questionnaire",
|
|
"capabilities",
|
|
"infrastructure",
|
|
"data_flows",
|
|
"assumptions",
|
|
"open_questions",
|
|
"risks",
|
|
"recommendations",
|
|
"proof_checks"
|
|
],
|
|
"properties": {
|
|
"$schema": {
|
|
"type": "string",
|
|
"format": "uri-reference"
|
|
},
|
|
"schema_version": {
|
|
"const": "0.1.0"
|
|
},
|
|
"assessment_id": {
|
|
"$ref": "#/$defs/non_empty_string"
|
|
},
|
|
"assessed_at": {
|
|
"type": "string",
|
|
"format": "date"
|
|
},
|
|
"scope": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["title", "reference_journeys", "postponed"],
|
|
"properties": {
|
|
"title": { "$ref": "#/$defs/non_empty_string" },
|
|
"reference_journeys": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#/$defs/non_empty_string" }
|
|
},
|
|
"postponed": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/non_empty_string" }
|
|
}
|
|
}
|
|
},
|
|
"release": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["kind", "ref", "meta_commit", "reproducible", "configuration_packages"],
|
|
"properties": {
|
|
"kind": {
|
|
"enum": ["tagged_release", "release_candidate", "workspace_snapshot"]
|
|
},
|
|
"ref": { "$ref": "#/$defs/non_empty_string" },
|
|
"meta_commit": { "$ref": "#/$defs/non_empty_string" },
|
|
"reproducible": { "type": "boolean" },
|
|
"configuration_packages": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/non_empty_string" }
|
|
},
|
|
"notes": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/non_empty_string" }
|
|
}
|
|
}
|
|
},
|
|
"composition": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#/$defs/module" }
|
|
},
|
|
"deployment_profile": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "status", "description", "evidence"],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/non_empty_string" },
|
|
"status": { "$ref": "#/$defs/status" },
|
|
"description": { "$ref": "#/$defs/non_empty_string" },
|
|
"evidence": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#/$defs/evidence" }
|
|
}
|
|
}
|
|
},
|
|
"questionnaire": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"scope_outcomes",
|
|
"data_policy",
|
|
"identity_integrations",
|
|
"workload_growth",
|
|
"availability_operations",
|
|
"procurement_decisions"
|
|
],
|
|
"properties": {
|
|
"scope_outcomes": { "$ref": "#/$defs/answers" },
|
|
"data_policy": { "$ref": "#/$defs/answers" },
|
|
"identity_integrations": { "$ref": "#/$defs/answers" },
|
|
"workload_growth": { "$ref": "#/$defs/answers" },
|
|
"availability_operations": { "$ref": "#/$defs/answers" },
|
|
"procurement_decisions": { "$ref": "#/$defs/answers" }
|
|
}
|
|
},
|
|
"capabilities": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#/$defs/assessed_item" }
|
|
},
|
|
"infrastructure": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#/$defs/assessed_item" }
|
|
},
|
|
"data_flows": {
|
|
"type": "array",
|
|
"minItems": 1,
|
|
"items": { "$ref": "#/$defs/data_flow" }
|
|
},
|
|
"assumptions": { "$ref": "#/$defs/string_list" },
|
|
"open_questions": { "$ref": "#/$defs/string_list" },
|
|
"risks": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/risk" }
|
|
},
|
|
"recommendations": { "$ref": "#/$defs/string_list" },
|
|
"proof_checks": { "$ref": "#/$defs/string_list" }
|
|
},
|
|
"$defs": {
|
|
"non_empty_string": {
|
|
"type": "string",
|
|
"minLength": 1
|
|
},
|
|
"string_list": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/non_empty_string" }
|
|
},
|
|
"status": {
|
|
"enum": [
|
|
"verified",
|
|
"available_unconfigured",
|
|
"partial",
|
|
"scaffold",
|
|
"external_system",
|
|
"planned",
|
|
"not_fit",
|
|
"not_assessed"
|
|
]
|
|
},
|
|
"evidence": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["kind", "scope", "locator"],
|
|
"properties": {
|
|
"kind": {
|
|
"enum": [
|
|
"test",
|
|
"route",
|
|
"contract",
|
|
"drill",
|
|
"documentation",
|
|
"configuration",
|
|
"issue",
|
|
"absence",
|
|
"observation"
|
|
]
|
|
},
|
|
"scope": {
|
|
"enum": [
|
|
"committed_source",
|
|
"current_workspace",
|
|
"documented_model",
|
|
"target_environment"
|
|
]
|
|
},
|
|
"locator": { "$ref": "#/$defs/non_empty_string" },
|
|
"note": { "type": "string" }
|
|
}
|
|
},
|
|
"module": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"module_id",
|
|
"repository",
|
|
"commit",
|
|
"manifest_version",
|
|
"enabled",
|
|
"dirty",
|
|
"role"
|
|
],
|
|
"properties": {
|
|
"module_id": { "$ref": "#/$defs/non_empty_string" },
|
|
"repository": { "$ref": "#/$defs/non_empty_string" },
|
|
"commit": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{7,40}$"
|
|
},
|
|
"manifest_version": { "$ref": "#/$defs/non_empty_string" },
|
|
"enabled": { "type": "boolean" },
|
|
"dirty": { "type": "boolean" },
|
|
"role": { "$ref": "#/$defs/non_empty_string" }
|
|
}
|
|
},
|
|
"answers": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/answer" }
|
|
},
|
|
"answer": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "question", "state", "answer", "evidence"],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/non_empty_string" },
|
|
"question": { "$ref": "#/$defs/non_empty_string" },
|
|
"state": {
|
|
"enum": ["answered", "assumed", "not_applicable", "not_assessed"]
|
|
},
|
|
"answer": {
|
|
"type": ["string", "array", "null"],
|
|
"items": { "type": "string" }
|
|
},
|
|
"evidence": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/evidence" }
|
|
}
|
|
}
|
|
},
|
|
"assessed_item": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"id",
|
|
"requirement",
|
|
"status",
|
|
"evidence",
|
|
"conditions",
|
|
"gaps",
|
|
"risks",
|
|
"recommendation",
|
|
"proof_check"
|
|
],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/non_empty_string" },
|
|
"requirement": { "$ref": "#/$defs/non_empty_string" },
|
|
"status": { "$ref": "#/$defs/status" },
|
|
"evidence": {
|
|
"type": "array",
|
|
"items": { "$ref": "#/$defs/evidence" }
|
|
},
|
|
"conditions": { "$ref": "#/$defs/string_list" },
|
|
"gaps": { "$ref": "#/$defs/string_list" },
|
|
"risks": { "$ref": "#/$defs/string_list" },
|
|
"recommendation": { "type": "string" },
|
|
"proof_check": { "type": "string" }
|
|
}
|
|
},
|
|
"data_flow": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "from", "to", "data", "trust_boundary", "controls"],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/non_empty_string" },
|
|
"from": { "$ref": "#/$defs/non_empty_string" },
|
|
"to": { "$ref": "#/$defs/non_empty_string" },
|
|
"data": { "$ref": "#/$defs/string_list" },
|
|
"trust_boundary": { "$ref": "#/$defs/non_empty_string" },
|
|
"controls": { "$ref": "#/$defs/string_list" }
|
|
}
|
|
},
|
|
"risk": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["id", "statement", "impact", "treatment", "owner", "residual_risk"],
|
|
"properties": {
|
|
"id": { "$ref": "#/$defs/non_empty_string" },
|
|
"statement": { "$ref": "#/$defs/non_empty_string" },
|
|
"impact": { "$ref": "#/$defs/non_empty_string" },
|
|
"treatment": { "$ref": "#/$defs/non_empty_string" },
|
|
"owner": { "type": ["string", "null"] },
|
|
"residual_risk": { "$ref": "#/$defs/non_empty_string" }
|
|
}
|
|
}
|
|
}
|
|
}
|