{
  "module_name": "scanner",
  "module_root": "pypos/modules/scanner",
  "effective_date": "2026-04-12",
  "score": {
    "max": 100,
    "pass_score": 90
  },
  "kpis": [
    {
      "id": "KPI-01",
      "name": "Function Budget",
      "weight": 20
    },
    {
      "id": "KPI-02",
      "name": "Exception Hygiene",
      "weight": 25
    },
    {
      "id": "KPI-03",
      "name": "Error Contract",
      "weight": 20
    },
    {
      "id": "KPI-04",
      "name": "Test Maturity",
      "weight": 25
    },
    {
      "id": "KPI-05",
      "name": "Governance Controls",
      "weight": 10
    }
  ],
  "critical_functions": [
    {
      "file_path": "pypos/modules/scanner/services/scanner_diagnostic_service.py",
      "class_name": "ScannerDiagnosticService",
      "function_name": "run",
      "max_loc": 170
    },
    {
      "file_path": "pypos/modules/scanner/services/scanner_status_service.py",
      "class_name": "ScannerStatusService",
      "function_name": "resolve",
      "max_loc": 220
    }
  ],
  "exception_hygiene": {
    "baseline_generic_exception": 12,
    "max_allowed_generic_exception": 3,
    "min_reduction_pct": 70
  },
  "error_contract_targets": [
    {
      "file_path": "pypos/modules/scanner/services/scanner_diagnostic_service.py",
      "required_tokens": [
        "error_code",
        "reason",
        "trace_id"
      ]
    }
  ],
  "test_matrix": {
    "scanner_core": {
      "files": [
        "tests/test_scanner_diagnostic_service.py",
        "tests/test_scanner_status_service.py",
        "tests/test_rawinput_scanner_service.py"
      ],
      "min_cases": 8
    }
  },
  "governance_checks": [
    {
      "file_path": "pypos/modules/scanner/services/rawinput_scanner_service.py",
      "required_tokens": [
        "rawinput_whitelist",
        "_DISCOVERED_TTL_MS"
      ]
    }
  ]
}
