{
  "version": "Notebook/1.0",
  "$schema": "https://github.com/Microsoft/Application-Insights-Workbooks/blob/master/schema/workbook.json",
  "fromTemplateId": "sentinel-StratoSecure-Executive",
  "items": [
    {
      "type": 1,
      "content": {
        "json": "## StratoSecure — Executive AppSec Risk Dashboard\n\nOverall security posture, finding trends, compliance coverage, and SLA performance."
      },
      "name": "header"
    },
    {
      "type": 9,
      "content": {
        "version": "KqlParameterItem/1.0",
        "parameters": [
          {
            "id": "timeRange",
            "version": "KqlParameterItem/1.0",
            "name": "TimeRange",
            "label": "Time Range",
            "type": 4,
            "value": {
              "durationMs": 2592000000
            },
            "typeSettings": {
              "selectableValues": [
                {"durationMs": 86400000},
                {"durationMs": 604800000},
                {"durationMs": 2592000000},
                {"durationMs": 7776000000}
              ]
            }
          }
        ]
      },
      "name": "parameters"
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "StratoSecure_Findings_CL\n| where TimeGenerated {TimeRange}\n| summarize count() by Severity\n| order by count_ desc",
        "size": 1,
        "title": "Finding Severity Distribution",
        "queryType": 0,
        "visualization": "piechart"
      },
      "name": "severityPie"
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "StratoSecure_Findings_CL\n| where TimeGenerated {TimeRange}\n| summarize AvgScore = avg(todouble(AppSecScore)) by bin(TimeGenerated, 1d)\n| order by TimeGenerated asc",
        "size": 0,
        "title": "AppSec Score Trend (30d)",
        "queryType": 0,
        "visualization": "timechart"
      },
      "name": "scoreTrend"
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "StratoSecure_Findings_CL\n| where TimeGenerated {TimeRange}\n| where SlaBreached == true\n| where Severity in ('Critical', 'High')\n| project FindingId, Title, Severity, ApplicationId, FixStatus, SlaDeadline\n| order by SlaDeadline asc\n| take 5",
        "size": 1,
        "title": "Top 5 Overdue Critical/High Findings",
        "queryType": 0,
        "visualization": "table"
      },
      "name": "overdueTable"
    },
    {
      "type": 3,
      "content": {
        "version": "KqlItem/1.0",
        "query": "StratoSecure_Findings_CL\n| where TimeGenerated {TimeRange}\n| summarize Covered = countif(isnotempty(ComplianceTags)), Total = count() by Framework = extract('(PCI|CNBV|SBP)', 1, tostring(ComplianceTags))\n| where isnotempty(Framework)\n| extend CoveragePct = round(100.0 * Covered / Total, 1)\n| project Framework, Covered, Total, CoveragePct",
        "size": 1,
        "title": "Compliance Coverage (PCI / CNBV / SBP)",
        "queryType": 0,
        "visualization": "barchart"
      },
      "name": "complianceCoverage"
    }
  ],
  "fallbackResourceIds": []
}
