{
  "run_at": "2026-10-22T12:40:22",
  "summary": {
    "PASS": 22,
    "WARN": 2
  },
  "results": [
    {
      "id": "S01",
      "test": "Every simulated/inferred table carries a basis label column",
      "status": "PASS",
      "detail": "missing: []"
    },
    {
      "id": "S02",
      "test": "Parameters: base within [low, high]; every Researched parameter cites a source in the register",
      "status": "PASS",
      "detail": "researched without source: []; bad basis: []; 41 parameters, 40 sources"
    },
    {
      "id": "S03",
      "test": "Billable volumes in the simulated P&L equal Actual counts in 02_Cleaned (Binzagr revenue codes; case pick in cases)",
      "status": "PASS",
      "detail": "differences: {}; cases picked 2,957,408"
    },
    {
      "id": "S04",
      "test": "Session rules: paid >= legal hours; 0 <= recoverable <= observed; savings only on eligible shifts; >12h sessions split",
      "status": "PASS",
      "detail": ""
    },
    {
      "id": "S05",
      "test": "Monthly P&L labour cost reconciles to session cost + paid days without a scan (head-count basis), and its scan-day part to the sessions",
      "status": "PASS",
      "detail": "P&L 6,146,784 = sessions 4,630,232 + paid days without a scan 1,516,551"
    },
    {
      "id": "S06",
      "test": "Baseline EBIT margin equals the benchmark margin parameter (cost-recovery construction)",
      "status": "PASS",
      "detail": "6.5000%"
    },
    {
      "id": "S07",
      "test": "Monte Carlo quantiles ordered; Base scenario inside the P10-P90 band",
      "status": "PASS",
      "detail": "recoverable P10 491,647 / Base 639,485 / P90 805,806"
    },
    {
      "id": "S07b",
      "test": "Scenario ordering Conservative < Base < Stretch",
      "status": "PASS",
      "detail": ""
    },
    {
      "id": "S08",
      "test": "Rate card positive and ordered (low <= base <= high) for every billed activity",
      "status": "PASS",
      "detail": "9 activities"
    },
    {
      "id": "S08b",
      "test": "Case-pick labour per loose case on the days people worked is not above the highest case rate Binzagr quoted (otherwise every client would be priced below labour)",
      "status": "PASS",
      "detail": "worked-time labour SAR 0.77 per loose case vs client rates SAR 0.50-0.80: at SAR 0.50 the price would not cover it (question V12); incl. paid days without a scan SAR 1.02 (facility basis, to compare with Binzagr cost per case, V11)"
    },
    {
      "id": "S08c",
      "test": "Information: full cost-recovery case-pick rate vs Binzagr's example rates (differs because storage and other charges are not modelled)",
      "status": "WARN",
      "detail": "cost-recovery SAR 2.17 per case vs client SAR 0.50-0.80"
    },
    {
      "id": "S08d",
      "test": "Information: receiving rate vs US survey conversion (US handling fee only; ours carries inbound admin and the opex gross-up)",
      "status": "WARN",
      "detail": "receiving base SAR 34.35 vs external SAR 13.46 (+155%)"
    },
    {
      "id": "S09",
      "test": "Receivables: balance = allocated + unexplained; open <= invoice; due >= invoice date; item totals = customer totals",
      "status": "PASS",
      "detail": "1,616 customers, 6,011 open items"
    },
    {
      "id": "S10",
      "test": "Outlet activity: one row per customer in the master, status always set",
      "status": "PASS",
      "detail": "18,983 rows"
    },
    {
      "id": "S11",
      "test": "Official Eid dates fall inside the event windows and the warehouse data shows closures on them",
      "status": "PASS",
      "detail": "observed closures: ['2026-03-21', '2026-03-22', '2026-03-23', '2026-05-26', '2026-05-27', '2026-05-28', '2026-09-23']"
    },
    {
      "id": "S12",
      "test": "Client typing consistent with item-code matching",
      "status": "PASS",
      "detail": "{'binzagr_business_unit': 26, 'external_3pl_client': 5}"
    },
    {
      "id": "S13",
      "test": "Badge-sharing risk: every session tiered; all >16h sessions are high risk",
      "status": "PASS",
      "detail": "{'none': 22476, 'low': 488, 'medium': 427, 'high': 198}"
    },
    {
      "id": "S15",
      "test": "Labour cost posted to activities reconciles to session labour cost (to the riyal)",
      "status": "PASS",
      "detail": "posted 4,630,232 vs sessions 4,630,232"
    },
    {
      "id": "S16",
      "test": "Only activities Binzagr marks 'Revenue Generation' are billed, and each of them has a rate",
      "status": "PASS",
      "detail": "billed [153, 172, 183, 204, 206, 350, 391, 400, 410]; Binzagr revenue codes in the log [153, 172, 183, 204, 206, 350, 391, 400, 410] (code 100 excluded: log says Item Import, mapping says Picked Volume)"
    },
    {
      "id": "S17",
      "test": "Every session has a cost tier from the WMS role; supervisory and bulk-posting sessions carry no savings",
      "status": "PASS",
      "detail": "bulk-posting sessions 871; supervisory 14"
    },
    {
      "id": "S18",
      "test": "No employee names from the WMS user list appear in any simulated table",
      "status": "PASS",
      "detail": "[]"
    },
    {
      "id": "S19",
      "test": "Splitting outbound cost by billed lines matches the split by actual pick time (Picking scans linked to their Case Pick / Pallet Pick row) within 5 points",
      "status": "PASS",
      "detail": "case pick share: 80.4% by lines vs 80.1% by pick time; 100.0% of 516,761 Picking scans linked"
    },
    {
      "id": "S20",
      "test": "Head count: scan-day FTE <= payroll head count <= all employee ids each month; payroll people scanning <= active people in Binzagr's user list; person-month costs reconcile to the sessions",
      "status": "PASS",
      "detail": "FTE 115 / 161 / 199; employee ids scanning 202 a month; user-list active people 269"
    },
    {
      "id": "S14",
      "test": "Every parquet has a CSV twin with equal rows; no file over 29 MB",
      "status": "PASS",
      "detail": "[]"
    }
  ]
}