{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://yovision.local/contracts/evidence/v1/evidence-reference.schema.json", "title": "YoVision evidence logical reference v1", "type": "object", "additionalProperties": false, "required": [ "schema_version", "evidence_id", "owner_id", "type", "status", "captured_at", "status_updated_at" ], "properties": { "schema_version": {"const": "yovision.evidence-reference/v1"}, "evidence_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"}, "owner_id": {"type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"}, "type": {"enum": ["snapshot", "clip"]}, "status": {"enum": ["pending", "processing", "success", "failed"]}, "captured_at": {"type": "string", "format": "date-time"}, "status_updated_at": {"type": "string", "format": "date-time"}, "expires_at": {"type": "string", "format": "date-time"}, "content_type": {"enum": ["image/jpeg", "image/png", "video/mp4"]}, "integrity": { "type": "object", "additionalProperties": false, "required": ["algorithm", "digest", "size_bytes"], "properties": { "algorithm": {"const": "sha256"}, "digest": {"type": "string", "pattern": "^[a-f0-9]{64}$"}, "size_bytes": {"type": "integer", "minimum": 0} } }, "failure": { "type": "object", "additionalProperties": false, "required": ["code", "retryable"], "properties": { "code": {"enum": ["capture_failed", "processing_failed", "expired", "unavailable"]}, "retryable": {"type": "boolean"} } } }, "allOf": [ { "if": {"properties": {"status": {"const": "success"}}, "required": ["status"]}, "then": {"required": ["content_type", "integrity"], "not": {"required": ["failure"]}} }, { "if": {"properties": {"status": {"const": "failed"}}, "required": ["status"]}, "then": {"required": ["failure"], "not": {"anyOf": [{"required": ["content_type"]}, {"required": ["integrity"]}]}} }, { "if": {"properties": {"status": {"enum": ["pending", "processing"]}}, "required": ["status"]}, "then": {"not": {"anyOf": [{"required": ["content_type"]}, {"required": ["integrity"]}, {"required": ["failure"]}]}} } ] }