{
  "$schema": "https://excel-abloesen.ch/schemas/excel-xray-2.0.schema.json",
  "schema_version": "excel-xray/2.0",
  "analyzer": {
    "name": "Excel-Röntgenblick",
    "version": "2.0.0",
    "processing": "dedicated-web-worker",
    "uploads": false,
    "network_policy": "connect-src 'none'",
    "formula_execution": false,
    "general_cell_values_exported": false
  },
  "ruleset": {
    "id": "excel-xray-rules/2.0",
    "version": "2.0",
    "url": "https://excel-abloesen.ch/excel-xray-rules.json",
    "sha256": "8f46bbc7b7d6b82bca2a069badce1738abfcee648374de77be1a8112c4c9ede6"
  },
  "file": {
    "name": "demo-einsatzplanung.xlsx",
    "size_bytes": 2268,
    "sha256": "97cb94e9fe0dc4e857e25982f8d96e3e3591d5cefdeee177fccf1ba4277dcaaf",
    "format": "xlsx",
    "uncompressed_package_bytes": 2941
  },
  "summary": {
    "sheets": 3,
    "hidden_sheets": 2,
    "very_hidden_sheets": 1,
    "populated_cells": 7,
    "formulas": 4,
    "complex_formulas": 0,
    "volatile_formulas": 1,
    "cached_error_cells": 0,
    "merged_ranges": 0,
    "named_ranges": 1,
    "external_sources": 1,
    "has_vba_macros": false,
    "data_connection_parts": 0,
    "table_parts": 0,
    "pivot_parts": 0,
    "chart_parts": 0,
    "model_parts": 0,
    "shared_formula_followers": 0,
    "structured_references": 0,
    "protected_sheets": 0
  },
  "analysis_scope": {
    "contract": "structural-contract/2.0",
    "coverage_percent": 95,
    "scoring": "completed=1, partial=0.5, skipped=0; equal weights",
    "checks": [
      { "id": "package-integrity", "label": "Paketintegrität", "status": "completed", "evidence_count": 7, "note": "ZIP-Grenzen und notwendige OOXML-Teile geprüft." },
      { "id": "sheet-inventory", "label": "Blatt-Inventar", "status": "completed", "evidence_count": 3, "note": "Alle deklarierten Arbeitsblätter inventarisiert." },
      { "id": "sheet-visibility", "label": "Sichtbarkeit", "status": "completed", "evidence_count": 2, "note": "visible, hidden und veryHidden geprüft." },
      { "id": "formula-inventory", "label": "Formel-Inventar", "status": "completed", "evidence_count": 4, "note": "Formelknoten gezählt; Formeln nicht ausgeführt." },
      { "id": "dependency-extraction", "label": "Blatt-Abhängigkeiten", "status": "partial", "evidence_count": 2, "note": "Gemeinsame, strukturierte oder benannte Referenzen begrenzen die Auflösung." },
      { "id": "volatile-formulas", "label": "Volatile Formeln", "status": "completed", "evidence_count": 1, "note": "Deklarierte volatile Funktionsfamilien geprüft." },
      { "id": "external-links", "label": "Externe Quellen", "status": "completed", "evidence_count": 1, "note": "Formelbezüge und externe OOXML-Beziehungen dedupliziert." },
      { "id": "vba-presence", "label": "VBA-Präsenz", "status": "completed", "evidence_count": 0, "note": "Binäre VBA-Projekte werden erkannt, nicht ausgeführt." },
      { "id": "cached-errors", "label": "Gespeicherte Fehler", "status": "completed", "evidence_count": 0, "note": "Als Fehler typisierte Zellen gezählt." },
      { "id": "connection-parts", "label": "Verbindungsteile", "status": "completed", "evidence_count": 0, "note": "Paketbestandteile erkannt; Abfragesemantik ausgeschlossen." }
    ],
    "exclusions": [
      { "id": "formula-correctness", "label": "Korrektheit der Formelresultate", "reason": "Formeln werden aus Sicherheits- und Determinismusgründen nicht ausgeführt.", "detected": true },
      { "id": "vba-semantics", "label": "VBA-Semantik", "reason": "Binäre Makroinhalte werden nicht interpretiert.", "detected": false },
      { "id": "power-query-semantics", "label": "Power-Query-Semantik", "reason": "Abfragen werden nur als Paketbestandteile erkannt.", "detected": false },
      { "id": "data-model-pivot-semantics", "label": "Datenmodell- und Pivot-Semantik", "reason": "Beziehungen und Aggregationslogik werden nicht ausgewertet.", "detected": false },
      { "id": "visual-format-semantics", "label": "Diagramm- und Formatlogik", "reason": "Darstellung wird nicht als Geschäftsregel bewertet.", "detected": false }
    ]
  },
  "external_sources": [
    { "label": "Altbestand.xlsx", "evidence_count": 1, "evidence": [{ "kind": "cell", "sheet": "Einsatzplanung", "cell": "B2", "detail": "external-formula" }] }
  ],
  "sheets": [
    { "id": "1", "name": "Einsatzplanung", "state": "visible", "populated_cells": 4, "formulas": 3, "complex_formulas": 0, "volatile_formulas": 1, "external_formulas": 1, "cached_error_cells": 0, "merged_ranges": 0, "cross_sheet_references": 1, "shared_formula_followers": 0, "structured_references": 0, "conditional_format_rules": 0, "protected": false },
    { "id": "2", "name": "Preise", "state": "hidden", "populated_cells": 2, "formulas": 1, "complex_formulas": 0, "volatile_formulas": 0, "external_formulas": 0, "cached_error_cells": 0, "merged_ranges": 0, "cross_sheet_references": 1, "shared_formula_followers": 0, "structured_references": 0, "conditional_format_rules": 0, "protected": false },
    { "id": "3", "name": "Archiv", "state": "veryHidden", "populated_cells": 1, "formulas": 0, "complex_formulas": 0, "volatile_formulas": 0, "external_formulas": 0, "cached_error_cells": 0, "merged_ranges": 0, "cross_sheet_references": 0, "shared_formula_followers": 0, "structured_references": 0, "conditional_format_rules": 0, "protected": false }
  ],
  "dependencies": [
    { "from": "Einsatzplanung", "to": "Preise", "references": 1, "evidence": [{ "from_cell": "B1" }] },
    { "from": "Preise", "to": "Archiv", "references": 1, "evidence": [{ "from_cell": "B1" }] }
  ],
  "structural_signals": {
    "model": "structural-signals/2.0",
    "score": 16,
    "level": "low",
    "findings": [
      { "rule_id": "XRAY-EXT-001", "rule_version": "2.0", "severity": "high", "points": 5, "message": "Eine unterschiedliche externe Quelle wurde erkannt.", "evidence_count": 1, "evidence": [{ "kind": "cell", "sheet": "Einsatzplanung", "cell": "B2", "detail": "external-formula" }] },
      { "rule_id": "XRAY-HID-002", "rule_version": "2.0", "severity": "medium", "points": 6, "message": "Ein Blatt ist „veryHidden“ und nicht normal einblendbar.", "evidence_count": 1, "evidence": [{ "kind": "sheet", "sheet": "Archiv", "state": "veryHidden" }] },
      { "rule_id": "XRAY-HID-001", "rule_version": "2.0", "severity": "medium", "points": 3, "message": "Ein ausgeblendetes Blatt enthält möglicherweise implizite Logik.", "evidence_count": 1, "evidence": [{ "kind": "sheet", "sheet": "Preise", "state": "hidden" }] },
      { "rule_id": "XRAY-VOL-001", "rule_version": "2.0", "severity": "medium", "points": 2, "message": "Eine volatile Formel hängt von Zeit, Zufall oder indirekten Referenzen ab.", "evidence_count": 1, "evidence": [{ "kind": "cell", "sheet": "Einsatzplanung", "cell": "A2" }] }
    ]
  },
  "package_manifest": {
    "entries": 7,
    "worksheet_parts": 3,
    "macro_parts": 0,
    "external_link_parts": 0,
    "connection_parts": 0,
    "table_parts": 0,
    "pivot_parts": 0,
    "chart_parts": 0,
    "model_parts": 0
  },
  "limits": {
    "maximum_file_bytes": 20971520,
    "maximum_uncompressed_package_bytes": 104857600,
    "maximum_evidence_items_per_finding": 50,
    "unsupported_formats": ["xls", "password-protected workbooks"]
  }
}
