{
  "framework": {
    "id": "ZBF-KPI-v1",
    "name": "Zero Bureaucracy KPI Framework",
    "version": "1.0.0",
    "scope": "Cross-sector, entity-agnostic. Applicable to public and private organisations without reference to any specific entity, jurisdiction, or country.",
    "purpose": "Convert the qualitative concept of 'bureaucracy elimination' into standardised, measurable, platform-configurable KPIs that can be scored, weighted, and visualised in a B2B dashboard.",
    "normalization": {
      "scale": "0-100",
      "direction_model": "min-max normalisation against configurable floor/ceiling bounds",
      "formula": "score = clamp( (actual - floor) / (ceiling - floor) * 100, 0, 100 ) for higher-is-better; score = clamp( (ceiling - actual) / (ceiling - floor) * 100, 0, 100 ) for lower-is-better",
      "bounds_source": "Per-client configurable. Defaults derived from cross-sector benchmark ranges (see benchmarks.csv).",
      "data_quality_gate": "A KPI is excluded from composite scoring if its data completeness < 80% or its source is unverified. Excluded KPIs are reported with the reason, never silently dropped."
    },
    "weighting_model": {
      "type": "light additive with normalisation",
      "composite_formula": "composite = sum(w_i * score_i) / sum(w_i)",
      "constraints": "sum(w_i) = 100. Each dimension weight is configurable per client within [0, 100].",
      "default_weights": {
        "speed": 25,
        "effort": 25,
        "automation": 25,
        "duplication": 15,
        "friction": 10
      },
      "within_dimension_rule": "KPI weights inside a dimension are equal by default; clients may override."
    },
    "dimensions": [
      {
        "id": "speed",
        "name": "Speed",
        "default_weight": 25,
        "kpis": [
          "cycle_time",
          "throughput",
          "first_response_time"
        ]
      },
      {
        "id": "effort",
        "name": "Effort",
        "default_weight": 25,
        "kpis": [
          "manual_effort_hours",
          "touch_count",
          "self_service_rate"
        ]
      },
      {
        "id": "automation",
        "name": "Automation",
        "default_weight": 25,
        "kpis": [
          "automation_coverage",
          "straight_through_rate",
          "ai_assist_rate"
        ]
      },
      {
        "id": "duplication",
        "name": "Duplication",
        "default_weight": 15,
        "kpis": [
          "duplicate_process_rate"
        ]
      },
      {
        "id": "friction",
        "name": "Friction",
        "default_weight": 10,
        "kpis": [
          "friction_index",
          "exception_rate"
        ]
      }
    ]
  },
  "kpi_library": [
    {
      "id": "cycle_time",
      "name": "Process Cycle Time",
      "dimension": "speed",
      "definition": "Elapsed end-to-end time from a trigger event to a completed outcome for a standard unit of work.",
      "formula": "cycle_time = completion_timestamp - trigger_timestamp",
      "unit": "hours",
      "direction": "lower_is_better",
      "benchmark": {
        "poor": 72,
        "fair": 24,
        "good": 8,
        "excellent": 2
      },
      "data_source": "Process/workflow engine timestamps",
      "configurable_target": true
    },
    {
      "id": "throughput",
      "name": "Throughput per Unit Time",
      "dimension": "speed",
      "definition": "Number of completed units of work per standard period (day/week/month).",
      "formula": "throughput = completed_units / period",
      "unit": "units/day",
      "direction": "higher_is_better",
      "benchmark": {
        "poor": 5,
        "fair": 20,
        "good": 60,
        "excellent": 150
      },
      "data_source": "Workflow engine counters",
      "configurable_target": true
    },
    {
      "id": "first_response_time",
      "name": "First Response Time",
      "dimension": "speed",
      "definition": "Time from submission of a request to the first substantive human or system response.",
      "formula": "first_response_time = first_response_timestamp - submission_timestamp",
      "unit": "minutes",
      "direction": "lower_is_better",
      "benchmark": {
        "poor": 240,
        "fair": 60,
        "good": 15,
        "excellent": 2
      },
      "data_source": "Ticketing / service desk / workflow engine",
      "configurable_target": true
    },
    {
      "id": "manual_effort_hours",
      "name": "Manual Effort Hours per Unit",
      "dimension": "effort",
      "definition": "Total human labour hours spent manually on one unit of work, excluding automated steps.",
      "formula": "manual_effort_hours = sum(manual_step_durations) / units_completed",
      "unit": "hours/unit",
      "direction": "lower_is_better",
      "benchmark": {
        "poor": 2.0,
        "fair": 0.8,
        "good": 0.25,
        "excellent": 0.05
      },
      "data_source": "Time-tracking / workflow engine",
      "configurable_target": true
    },
    {
      "id": "touch_count",
      "name": "Number of Touches",
      "dimension": "effort",
      "definition": "Count of distinct human interventions (approvals, edits, escalations, re-entries) per unit of work.",
      "formula": "touch_count = count(distinct human interventions) / units_completed",
      "unit": "touches/unit",
      "direction": "lower_is_better",
      "benchmark": {
        "poor": 6,
        "fair": 3,
        "good": 1,
        "excellent": 0
      },
      "data_source": "Workflow engine event log",
      "configurable_target": true
    },
    {
      "id": "self_service_rate",
      "name": "Self-Service Completion Rate",
      "dimension": "effort",
      "definition": "Share of requests completed by the requester without any staff intervention.",
      "formula": "self_service_rate = self_service_completions / total_completions * 100",
      "unit": "percent",
      "direction": "higher_is_better",
      "benchmark": {
        "poor": 10,
        "fair": 35,
        "good": 65,
        "excellent": 90
      },
      "data_source": "Portal / workflow engine",
      "configurable_target": true
    },
    {
      "id": "automation_coverage",
      "name": "Automation Coverage",
      "dimension": "automation",
      "definition": "Share of process steps executed without human involvement.",
      "formula": "automation_coverage = automated_steps / total_steps * 100",
      "unit": "percent",
      "direction": "higher_is_better",
      "benchmark": {
        "poor": 15,
        "fair": 40,
        "good": 70,
        "excellent": 95
      },
      "data_source": "Workflow engine step inventory",
      "configurable_target": true
    },
    {
      "id": "straight_through_rate",
      "name": "Straight-Through Processing Rate",
      "dimension": "automation",
      "definition": "Share of units completed with zero human intervention.",
      "formula": "straight_through_rate = zero_touch_units / total_units * 100",
      "unit": "percent",
      "direction": "higher_is_better",
      "benchmark": {
        "poor": 5,
        "fair": 30,
        "good": 60,
        "excellent": 85
      },
      "data_source": "Workflow engine",
      "configurable_target": true
    },
    {
      "id": "ai_assist_rate",
      "name": "AI-Assisted Decision Rate",
      "dimension": "automation",
      "definition": "Share of decisions where an AI/ML model supplied a recommendation that was accepted by the operator or applied automatically.",
      "formula": "ai_assist_rate = ai_supported_decisions / total_decisions * 100",
      "unit": "percent",
      "direction": "higher_is_better",
      "benchmark": {
        "poor": 5,
        "fair": 25,
        "good": 55,
        "excellent": 80
      },
      "data_source": "Model serving logs + decision audit trail",
      "configurable_target": true
    },
    {
      "id": "duplicate_process_rate",
      "name": "Duplicate Process Rate",
      "dimension": "duplication",
      "definition": "Share of process instances that are redundant repetitions of work already completed for the same subject.",
      "formula": "duplicate_process_rate = duplicate_instances / total_instances * 100",
      "unit": "percent",
      "direction": "lower_is_better",
      "benchmark": {
        "poor": 20,
        "fair": 10,
        "good": 4,
        "excellent": 1
      },
      "data_source": "Process mining / deduplication engine",
      "configurable_target": true
    },
    {
      "id": "friction_index",
      "name": "Friction Index",
      "dimension": "friction",
      "definition": "Weighted composite of rework, clarification requests, and blocking events per unit of work.",
      "formula": "friction_index = (1.0*rework + 0.5*clarifications + 2.0*blocks) / units_completed",
      "unit": "events/unit",
      "direction": "lower_is_better",
      "benchmark": {
        "poor": 3.0,
        "fair": 1.5,
        "good": 0.5,
        "excellent": 0.1
      },
      "data_source": "Workflow engine + service desk",
      "configurable_target": true
    },
    {
      "id": "exception_rate",
      "name": "Exception / Error Rate",
      "dimension": "friction",
      "definition": "Share of units that fail validation, require rework, or are rejected.",
      "formula": "exception_rate = exceptions / total_units * 100",
      "unit": "percent",
      "direction": "lower_is_better",
      "benchmark": {
        "poor": 15,
        "fair": 8,
        "good": 3,
        "excellent": 0.5
      },
      "data_source": "Validation engine / QA sampling",
      "configurable_target": true
    }
  ],
  "scoring_engine": {
    "description": "Reference implementation of the normalisation and composite rules above. Pure Python 3, no dependencies.",
    "module": "zbf_score.py",
    "entry_points": [
      "score_kpi(kpi_id, actual, config) -> {score, status, reason}",
      "composite(kpi_scores, weights) -> {composite, excluded, coverage}",
      "render_dashboard_payload(...) -> dict"
    ],
    "config_schema": {
      "kpi_targets": "map kpi_id -> {floor, ceiling, target, weight}",
      "dimension_weights": "map dimension_id -> weight (0-100)",
      "data_quality_min": "float 0-1, default 0.80"
    },
    "export": {
      "formats": [
        "json",
        "csv (Excel-ready)",
        "parquet-optional"
      ],
      "files": [
        "kpi_library.json",
        "benchmarks.csv",
        "weights.csv",
        "scores.csv",
        "README.md"
      ]
    }
  },
  "commercial_packaging": {
    "licence_model": "Per-tenant SaaS embedding with per-client configuration; no per-report consulting deliverable.",
    "white_label": true,
    "integration": "REST scoring endpoint + dashboard widget spec + CSV import/export",
    "scalability": "KPI set is extensible via the config schema; adding a KPI requires only definition/formula/unit/benchmarks/target."
  }
}