{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:ohrisk:schema:scan-report:3.5.0",
  "title": "Ohrisk scan report",
  "type": "object",
  "required": [
    "$schema",
    "schemaVersion",
    "status",
    "projectRoot",
    "lockfile",
    "lockfiles",
    "profile",
    "prodOnly",
    "dependencyGraph",
    "dependencyGraphDiagnostics",
    "dependencyOrigins",
    "evidence",
    "completeness",
    "licenses",
    "risks",
    "waiverMode",
    "waivers",
    "policy",
    "nextAction",
    "findings",
    "waivedFindings",
    "expiredWaivers",
    "unmatchedWaivers"
  ],
  "properties": {
    "$schema": {
      "const": "urn:ohrisk:schema:scan-report:3.5.0"
    },
    "schemaVersion": {
      "const": "3.5.0"
    },
    "status": {
      "const": "profile_risk_evaluated"
    },
    "projectRoot": {
      "const": "."
    },
    "repository": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/remoteRepository"
    },
    "archive": {
      "type": "object",
      "required": [
        "name",
        "format",
        "sha256",
        "root"
      ],
      "properties": {
        "name": {
          "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/relativePath"
        },
        "format": {
          "type": "string",
          "enum": [
            "zip",
            "tar",
            "tar.gz"
          ]
        },
        "sha256": {
          "type": "string",
          "pattern": "^[0-9a-f]{64}$"
        },
        "root": {
          "anyOf": [
            {
              "const": "."
            },
            {
          "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/relativePath"
            }
          ]
        }
      },
      "additionalProperties": false
    },
    "lockfile": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/lockfile"
    },
    "lockfiles": {
      "type": "array",
      "minItems": 1,
      "items": {
          "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/lockfile"
      }
    },
    "profile": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/usageProfile"
    },
    "prodOnly": {
      "type": "boolean"
    },
    "dependencyGraph": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/dependencyGraphCounts"
    },
    "dependencyGraphDiagnostics": {
      "type": "array",
      "items": {
          "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/dependencyGraphDiagnostic"
      }
    },
    "dependencyOrigins": {
      "type": "array",
      "items": {
          "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/packageProvenance"
      }
    },
    "evidence": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/evidenceCounts"
    },
    "completeness": {
      "type": "object",
      "required": [
        "status",
        "unavailablePackageCount",
        "skippedRepositoryEntryCount"
      ],
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "complete",
            "partial"
          ]
        },
        "unavailablePackageCount": {
          "type": "integer",
          "minimum": 0
        },
        "skippedRepositoryEntryCount": {
          "type": "integer",
          "minimum": 0
        }
      },
      "additionalProperties": false
    },
    "licenses": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/licenseCounts"
    },
    "risks": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/riskCounts"
    },
    "waiverMode": {
      "type": "string",
      "enum": [
        "local",
        "ignored"
      ]
    },
    "waivers": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/waiverCounts"
    },
    "policy": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/policySummary"
    },
    "nextAction": {
      "type": "string",
      "minLength": 1
    },
    "failOn": {
      "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/riskSeverity"
    },
    "failed": {
      "type": "boolean"
    },
    "failingFindingCount": {
      "type": "integer",
      "minimum": 0
    },
    "strictWaivers": {
      "const": true
    },
    "waiverDriftFailed": {
      "type": "boolean"
    },
    "waiverDriftCount": {
      "type": "integer",
      "minimum": 0
    },
    "findings": {
      "type": "array",
      "items": {
        "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/riskFinding"
      }
    },
    "waivedFindings": {
      "type": "array",
      "items": {
        "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/waivedRiskFinding"
      }
    },
    "expiredWaivers": {
      "type": "array",
      "items": {
        "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/riskWaiver"
      }
    },
    "unmatchedWaivers": {
      "type": "array",
      "items": {
        "$ref": "urn:ohrisk:schema:common:3.5.0#/$defs/riskWaiver"
      }
    }
  },
  "dependentRequired": {
    "failOn": [
      "failed",
      "failingFindingCount"
    ],
    "failed": [
      "failOn",
      "failingFindingCount"
    ],
    "failingFindingCount": [
      "failOn",
      "failed"
    ],
    "strictWaivers": [
      "waiverDriftFailed",
      "waiverDriftCount"
    ],
    "waiverDriftFailed": [
      "strictWaivers",
      "waiverDriftCount"
    ],
    "waiverDriftCount": [
      "strictWaivers",
      "waiverDriftFailed"
    ]
  },
  "additionalProperties": false
}
