{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://git.add-ideas.de/add-ideas/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" } } } } }