{
  "version": "0.15",
  "baseline_commit": "fc427f0931cc81ff7f88081b85c3efaf48988ac6",
  "source_archive_sha256": "d6155e3a2968e6880a99b626be9528a4671a03e34209df480022d0231087fa04",
  "source_read_only": true,
  "original_code_executed": false,
  "implementation": "Independent local implementation; no verbatim source reuse. Existing prototype modules reused.",
  "files": [
    {
      "path": "backend/routers/analytics.py",
      "sha256": "e577f03910af525bfaf613ee35e60e04d1abb9d93d01093a91b4dd7165da1ce9",
      "bytes": 29772,
      "inspected_sections": "28–378, 381–662",
      "decision": "Period counts, receipt dates, customer grouping, team estimates, dormant records, trends, tips and forecast. Retain explicit record-based purpose; replace name joins, inferred hours, title keywords, tax-year tips and default forecasts with defined evidence."
    },
    {
      "path": "frontend/src/components/admin/AnalyticsTab.jsx",
      "sha256": "822ac61127151ecb284f31605420bd3d9bbfb57ae0851afabf8c568527edc473",
      "bytes": 70366,
      "inspected_sections": "40–250, 632–685, 800–873, 875–1208, 1304–1335",
      "decision": "Overview/revenue/customer/team/pipeline/tags/content navigation and row drill-downs. Preserve traceability. Do not reproduce synthetic invoice enquiries, mismatched funnel rows or silently empty failed data."
    },
    {
      "path": "backend/routers/opportunities.py",
      "sha256": "88e44dd48c8c994bbfeaa825b4402d675f2ba51a2c9b687f9491bd8735d416f1",
      "bytes": 22500,
      "inspected_sections": "363–530",
      "decision": "Service breakdown and customer-value views use paid invoice faces, inferred service and names. Replace with exact saved service and IDs; expose issued value, net receipts and current balances separately."
    },
    {
      "path": "backend/server.py",
      "sha256": "c3e83a2593fbccb41bf5cebcd7a1b3a6fe688e54afcd8db409213caf64e950d7",
      "bytes": 274573,
      "inspected_sections": "3888–3930",
      "decision": "Tag counts by stage/service; retain explicit tags and disclose overlap. No upstream server startup."
    },
    {
      "path": "backend/routers/enquiries.py",
      "sha256": "dbd0e4b3c74eb5ed344d7d754962dfc7d45134f49318043b34a82d3d46b8878c",
      "bytes": 43342,
      "inspected_sections": "761–872",
      "decision": "Funnel bridge mutates jobs and synthesises history using name/phone matching. Deliberately excluded; read-only coherent cohort with missing evidence instead."
    },
    {
      "path": "backend/metrics_service.py",
      "sha256": "24a39b176f1140b287aedf56181ce0028c6ba0b7e07ab4f7068bcc81b9f987ec",
      "bytes": 14183,
      "inspected_sections": "job_metrics, quote_metrics, invoice_metrics, calendar_metrics",
      "decision": "Shared definitions and reconciliation are useful. Do not copy name/test exclusions, float currency or inferred accepted statuses."
    },
    {
      "path": "frontend/src/lib/metricDefinitions.js",
      "sha256": "fcfeed86dcabaf28d64fff0b152f3202b937e361c4e3bfb3f520385c84dedef0",
      "bytes": 13669,
      "inspected_sections": "headline registry including reporting metrics",
      "decision": "Visible definitions retained as a product principle; hard-coded dates, unmatched visitor denominator, lifetime value and performance claims excluded."
    }
  ],
  "missing_or_policy_dependent": [
    "No complete original project, data, deployed settings or source rights verification.",
    "No reliable saved website traffic dataset or service-category identifiers: report exact saved service labels; no visitor conversion or inferred category.",
    "Original source mixes historic snapshots, current statuses and business-specific rates/exclusions; no accounting reconstruction, tax policy, payroll, forecasts or lifetime valuation.",
    "Specialist contract shifts, tax rules, production integrations and full mobile/PWA journeys remain open."
  ],
  "schema_change": false,
  "recovery_format": 11,
  "definitions": "REPORTING-DEFINITIONS.md"
}
