{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://tasfi.app/schemas/tasfi/guard/decision-receipt.schema.json",
  "title": "Tasfi Decision Receipt",
  "type": "object",
  "required": ["id", "version", "generatedAt", "status", "inputHash", "sourceBundle", "policy", "protocol", "evidence", "recommendedAction", "privacy", "decisionHash", "signature"],
  "properties": {
    "id": { "type": "string", "pattern": "^tasfi_receipt_[a-f0-9]{24}$" },
    "version": {
      "type": "string",
      "enum": ["tasfi-guard-receipt-0.1.0", "tasfi-guard-receipt-0.2.0"]
    },
    "generatedAt": { "type": "string" },
    "status": { "type": "string", "enum": ["pass", "warn", "fail"] },
    "inputHash": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
    "protocol": {
      "type": "object",
      "required": ["id", "version"],
      "properties": {
        "id": { "type": "string", "const": "tasfi-guard-protocol" },
        "version": { "type": "string", "const": "0.3.0" },
        "evidenceGraphVersion": { "type": ["string", "null"] },
        "evidenceGraphSha256": { "type": ["string", "null"] }
      }
    },
    "privacy": {
      "type": "object",
      "required": ["mode", "submittedTextIncluded", "submittedTextStored", "rawCitationTextIncluded"],
      "properties": {
        "mode": { "type": "string", "const": "metadata_only" },
        "submittedTextIncluded": { "type": "boolean", "const": false },
        "submittedTextStored": { "type": "boolean", "const": false },
        "rawCitationTextIncluded": { "type": "boolean", "const": false }
      }
    },
    "evidence": {
      "type": "object",
      "required": ["summary", "citations", "claimEvidence", "riskFlags", "rulesTriggered"]
    },
    "recommendedAction": {
      "type": "string",
      "enum": ["store_receipt_and_display_with_policy", "rewrite_or_review", "route_to_scholar_review", "block_before_display"]
    },
    "signature": {
      "type": "object",
      "required": ["algorithm", "keyId", "value"]
    }
  },
  "additionalProperties": true
}
