{"id":831,"date":"2026-09-13T16:07:37","date_gmt":"2026-09-13T16:07:37","guid":{"rendered":"https:\/\/www.opey.org\/opeyit\/?page_id=831"},"modified":"2026-09-13T21:42:03","modified_gmt":"2026-09-13T21:42:03","slug":"cpcd-calculator","status":"publish","type":"page","link":"https:\/\/www.opey.org\/opeyit\/?page_id=831","title":{"rendered":"CPCD Calculator"},"content":{"rendered":"\n<!--\n=====================================================\nCOST PER COMPLIANT DECISION CALCULATOR\nCompanion tool for WHEN AGENTS RULE by Steven Oppenheim\n=====================================================\n\nHOW TO INSTALL\n1. Create a WordPress page titled \"Cost Per Compliant Decision Calculator\"\n2. Add a Custom HTML block\n3. Paste this entire file into that block\n4. Preview, then Publish\n5. Replace #REPLACE_TOOL_CPCD on the book page (page_id 748)\n   with ?page_id=THIS_PAGE_ID\n\nSELF CONTAINED. Scoped to #war-cpcd-2026 so it cannot collide with\nthe book page, the clock reader or the classifier.\n\n=====================================================\nTHE FORMULA, TAKEN FROM CHAPTER 10 VERBATIM\n=====================================================\n  CpCD = (Compute Cost + Compliance Overhead + Latency Cost\n          + Governance Overhead) \/ Decision Volume\n\nThe four inputs as Chapter 10 defines them:\n  COMPUTE      GPU time, token volume, API fees, or amortised owned\n               hardware cost.\n  COMPLIANCE   Audit logging, data lineage, regulatory documentation,\n               evidence preservation. Chapter 10 is explicit that this\n               does NOT fall with an infrastructure change and may rise\n               slightly, because more logging infrastructure is owned.\n               This is the input that keeps CpCD from degenerating into\n               a pure cost optimisation metric.\n  LATENCY      Round trip delay converted to money: abandoned\n               transactions, SLA penalties, clinical risk windows.\n               Requires per workload calibration.\n  GOVERNANCE   Human review sampling, escalation handling, model\n               monitoring, override documentation. Scales with\n               autonomy level and reversibility.\n\n=====================================================\nTHE TOOL LOADS WITH THE BOOK'S WORKED EXAMPLE\n=====================================================\nChapter 10's Continental Industrial Holdings credit decisioning case,\nat one million decisions a month:\n\n  Cloud baseline        0.063 per compliant decision\n    compute      0.032   compliance   0.019\n    latency      0.008   governance   0.004\n  Private on premises   0.028 per compliant decision\n    compute      0.004   compliance   0.019  (unchanged)\n    latency      0.001   governance   0.004  (unchanged)\n  Saving 35,000 a month. A 55 percent reduction.\n\nEvery figure in that example is internally consistent and the tool\nreproduces it exactly on first load. The second case in Chapter 10,\nat 1.2 million decisions a month moving 85,000 to 35,000 monthly\nspend, gives 0.071 to 0.029 and a 59 percent reduction, which the\ntool also reproduces. Both were used as verification cases.\n\nInputs are entered as MONTHLY SPEND per component rather than as per\ndecision figures, because that is the form the numbers already exist\nin. Chapter 10 makes the same point: the formula needs no new\ninstrumentation, only assembly.\n\n=====================================================\nWHERE EACH INPUT COMES FROM  (the first CFO question)\n=====================================================\n  COMPUTE      Your FinOps data. FOCUS 1.2, ratified 29 May 2025,\n               added token lifecycle support so per token billing\n               normalises. FOCUS 1.3, ratified 4 December 2025, added\n               split cost allocation, which closes the shared GPU\n               cluster gap. Pair with the FinOps Foundation's FinOps\n               for AI guidance.\n  COMPLIANCE   Audit logging and retention spend, lineage tooling,\n               documentation effort, external adviser fees.\n  LATENCY      Latency telemetry multiplied by your own calibrated\n               conversion or abandonment sensitivity. Published\n               benchmarks range from roughly 1 percent to 7 percent\n               conversion loss per 100 milliseconds, a sevenfold\n               spread, which is why the tool asks you to calibrate\n               rather than assuming a figure.\n  GOVERNANCE   Reviewer staffing cost, escalation handling, model\n               monitoring tooling, override documentation effort.\n\n=====================================================\nTHE TWO TRAPS THIS TOOL CHECKS FOR\n=====================================================\n1. THE UTILISATION TRAP. An amortised owned compute figure is only\n   valid at the utilisation actually achieved. Measured enterprise\n   accelerator utilisation is commonly reported in the 5 to 30\n   percent range, and the self host crossover generally requires\n   sustained utilisation above about 40 percent. A target CpCD built\n   on nameplate capacity can be wrong by an order of magnitude, and\n   it is the single most common way an on premises business case\n   fails its first finance review.\n\n2. THE DEFLATION PARADOX. Per token prices are falling fast, yet\n   total AI bills keep rising, because agentic workloads consume\n   several times more tokens per task than chat workloads. Unit cost\n   and total cost therefore move in opposite directions. The tool\n   models them separately and reports both trajectories, because a\n   board that is shown only the falling unit cost has been misled.\n\n=====================================================\nWORDPRESS COMPATIBILITY  (do not reintroduce these)\n=====================================================\n  - NO less than sign anywhere in the script.\n  - NO ampersand in the script.\n  - NO innerHTML. All output built with createElement and textContent.\n  - No template literals, arrow functions or optional chaining.\n  - Works with JavaScript disabled: the noscript block carries the\n    formula, the worked example and the manual method.\n\nNO HYPHENS, EM DASHES OR EN DASHES IN VISIBLE COPY.\n-->\n\n<div id=\"war-cpcd-2026\">\n\n<style>\n#war-cpcd-2026 {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif !important;\n    color: #333 !important; line-height: 1.6 !important; max-width: 100% !important; margin: 0 !important; padding: 0 !important;\n}\n#war-cpcd-2026 * { box-sizing: border-box !important; }\n#war-cpcd-2026 a { text-decoration: none !important; }\n#war-cpcd-2026 .cp-inner { max-width: 900px !important; margin: 0 auto !important; }\n#war-cpcd-2026 .cp-wide { max-width: 1120px !important; margin: 0 auto !important; }\n\n#war-cpcd-2026 .cp-band { background: linear-gradient(90deg, #D97706 0%, #B45309 100%) !important; padding: 12px 20px !important; text-align: center !important; }\n#war-cpcd-2026 .cp-band p { margin: 0 !important; color: #fff !important; font-size: 13.5px !important; font-weight: 500 !important; }\n#war-cpcd-2026 .cp-band strong { color: #FFE9A8 !important; }\n\n#war-cpcd-2026 .cp-hero {\n    background: radial-gradient(circle at 80% 20%, rgba(217,119,6,0.22) 0%, transparent 55%),\n                linear-gradient(135deg, #0a1622 0%, #1a2a3a 55%, #2d4156 100%) !important;\n    padding: 52px 20px 46px 20px !important;\n}\n#war-cpcd-2026 .cp-eyebrow { display: inline-block !important; color: #c9a227 !important; font-size: 11px !important; font-weight: 700 !important; letter-spacing: 2px !important; text-transform: uppercase !important; margin-bottom: 12px !important; }\n#war-cpcd-2026 .cp-h1 { color: #fff !important; font-size: 42px !important; font-weight: 800 !important; margin: 0 0 14px 0 !important; line-height: 1.06 !important; letter-spacing: -0.5px !important; }\n#war-cpcd-2026 .cp-lede { color: rgba(255,255,255,0.85) !important; font-size: 17px !important; margin: 0 0 20px 0 !important; line-height: 1.5 !important; max-width: 680px !important; }\n#war-cpcd-2026 .cp-formula { background: rgba(0,0,0,0.28) !important; border: 1px solid rgba(201,162,39,0.42) !important; border-radius: 8px !important; padding: 16px 18px !important; max-width: 680px !important; margin-bottom: 22px !important; }\n#war-cpcd-2026 .cp-formula span { display: block !important; color: #c9a227 !important; font-size: 10.5px !important; font-weight: 800 !important; letter-spacing: 1.6px !important; text-transform: uppercase !important; margin-bottom: 8px !important; }\n#war-cpcd-2026 .cp-formula code { display: block !important; color: #fff !important; font-family: Georgia, 'Times New Roman', serif !important; font-size: 15.5px !important; line-height: 1.55 !important; background: none !important; padding: 0 !important; }\n#war-cpcd-2026 .cp-facts { display: flex !important; flex-wrap: wrap !important; gap: 10px !important; margin-bottom: 24px !important; }\n#war-cpcd-2026 .cp-fact { background: rgba(255,255,255,0.08) !important; border: 1px solid rgba(255,255,255,0.18) !important; border-radius: 6px !important; padding: 9px 14px !important; color: rgba(255,255,255,0.9) !important; font-size: 12.5px !important; font-weight: 600 !important; }\n#war-cpcd-2026 .cp-fact b { color: #c9a227 !important; }\n#war-cpcd-2026 .cp-honest { max-width: 700px !important; background: rgba(201,162,39,0.10) !important; border-left: 4px solid #c9a227 !important; border-radius: 6px !important; padding: 16px 18px !important; color: rgba(255,255,255,0.82) !important; font-size: 13.5px !important; line-height: 1.65 !important; }\n#war-cpcd-2026 .cp-honest b { color: #c9a227 !important; }\n\n#war-cpcd-2026 .cp-form { background: #f7f8fa !important; padding: 46px 20px !important; }\n#war-cpcd-2026 .cp-sec { background: #fff !important; border: 1px solid #e2e6ea !important; border-radius: 12px !important; margin-bottom: 22px !important; overflow: hidden !important; }\n#war-cpcd-2026 .cp-shead { padding: 20px 24px !important; display: flex !important; align-items: center !important; gap: 15px !important; flex-wrap: wrap !important; }\n#war-cpcd-2026 .cp-shead.s1 { background: linear-gradient(135deg, #475569 0%, #334155 100%) !important; }\n#war-cpcd-2026 .cp-shead.s2 { background: linear-gradient(135deg, #B91C1C 0%, #991B1B 100%) !important; }\n#war-cpcd-2026 .cp-shead.s3 { background: linear-gradient(135deg, #059669 0%, #047857 100%) !important; }\n#war-cpcd-2026 .cp-shead.s4 { background: linear-gradient(135deg, #D97706 0%, #B45309 100%) !important; }\n#war-cpcd-2026 .cp-snum { width: 46px !important; height: 46px !important; flex-shrink: 0 !important; background: rgba(255,255,255,0.16) !important; border: 2px solid rgba(255,255,255,0.35) !important; border-radius: 10px !important; display: flex !important; align-items: center !important; justify-content: center !important; color: #fff !important; font-size: 17px !important; font-weight: 800 !important; }\n#war-cpcd-2026 .cp-stitle { flex: 1 !important; min-width: 200px !important; }\n#war-cpcd-2026 .cp-stitle h2 { margin: 0 0 4px 0 !important; color: #fff !important; font-size: 20px !important; font-weight: 700 !important; line-height: 1.25 !important; }\n#war-cpcd-2026 .cp-stitle p { margin: 0 !important; color: rgba(255,255,255,0.88) !important; font-size: 13px !important; line-height: 1.45 !important; }\n#war-cpcd-2026 .cp-sbody { padding: 20px 24px !important; }\n#war-cpcd-2026 .cp-fields { display: grid !important; grid-template-columns: repeat(2, 1fr) !important; gap: 14px !important; }\n#war-cpcd-2026 .cp-f label { display: block !important; font-size: 13px !important; font-weight: 700 !important; color: #1a2a3a !important; margin-bottom: 5px !important; line-height: 1.4 !important; }\n#war-cpcd-2026 .cp-f .cp-hint2 { display: block !important; font-size: 11.5px !important; font-weight: 400 !important; color: #6b7785 !important; margin-top: 2px !important; line-height: 1.45 !important; }\n#war-cpcd-2026 .cp-wrap { display: flex !important; align-items: stretch !important; }\n#war-cpcd-2026 .cp-pre, #war-cpcd-2026 .cp-post {\n    background: #eef1f4 !important; border: 1px solid #dde2e7 !important; color: #6b7785 !important;\n    font-size: 13.5px !important; font-weight: 700 !important; display: flex !important;\n    align-items: center !important; padding: 0 11px !important; flex-shrink: 0 !important;\n}\n#war-cpcd-2026 .cp-pre { border-right: none !important; border-radius: 7px 0 0 7px !important; }\n#war-cpcd-2026 .cp-post { border-left: none !important; border-radius: 0 7px 7px 0 !important; }\n#war-cpcd-2026 .cp-f input[type=\"number\"], #war-cpcd-2026 .cp-f input[type=\"text\"] {\n    flex: 1 !important; min-width: 0 !important; width: 100% !important; padding: 12px 13px !important;\n    border: 1px solid #dde2e7 !important; border-radius: 7px !important; font-size: 14.5px !important;\n    font-family: inherit !important; color: #1a2a3a !important; min-height: 46px !important;\n}\n#war-cpcd-2026 .cp-wrap input[type=\"number\"] { border-radius: 0 !important; }\n#war-cpcd-2026 .cp-wrap .cp-pre + input[type=\"number\"] { border-radius: 0 7px 7px 0 !important; }\n#war-cpcd-2026 .cp-wrap input[type=\"number\"] + .cp-post { border-radius: 0 7px 7px 0 !important; }\n#war-cpcd-2026 .cp-wrap .cp-pre + input[type=\"number\"] + .cp-post { border-radius: 0 !important; }\n#war-cpcd-2026 .cp-f input.cp-bad { border-color: #B91C1C !important; background: #fdf2f2 !important; }\n#war-cpcd-2026 .cp-full { grid-column: span 2 !important; }\n#war-cpcd-2026 .cp-q { padding: 16px 0 0 0 !important; }\n#war-cpcd-2026 .cp-qlabel { font-size: 14.5px !important; font-weight: 700 !important; color: #1a2a3a !important; margin: 0 0 4px 0 !important; line-height: 1.45 !important; }\n#war-cpcd-2026 .cp-help { font-size: 12.5px !important; color: #6b7785 !important; margin: 0 0 10px 0 !important; line-height: 1.55 !important; }\n#war-cpcd-2026 .cp-opt { display: block !important; position: relative !important; padding: 12px 14px 12px 42px !important; border: 1px solid #dde2e7 !important; border-radius: 7px !important; margin-bottom: 8px !important; cursor: pointer !important; font-size: 14px !important; color: #444 !important; line-height: 1.5 !important; background: #fff !important; min-height: 44px !important; }\n#war-cpcd-2026 .cp-opt:hover { border-color: #b9c2cb !important; background: #fbfcfd !important; }\n#war-cpcd-2026 .cp-opt input { position: absolute !important; left: 14px !important; top: 14px !important; width: 18px !important; height: 18px !important; margin: 0 !important; cursor: pointer !important; }\n#war-cpcd-2026 .cp-locked { background: #fff9f0 !important; border: 1px solid #f0dcc0 !important; border-left: 4px solid #D97706 !important; border-radius: 7px !important; padding: 13px 15px !important; font-size: 13px !important; color: #6d4a00 !important; line-height: 1.6 !important; margin-bottom: 16px !important; }\n#war-cpcd-2026 .cp-locked b { color: #8a5a00 !important; }\n\n#war-cpcd-2026 .cp-progress { position: sticky !important; bottom: 0 !important; background: #1a2a3a !important; padding: 14px 20px !important; z-index: 20 !important; box-shadow: 0 -4px 18px rgba(0,0,0,0.22) !important; }\n#war-cpcd-2026 .cp-pinner { max-width: 900px !important; margin: 0 auto !important; display: flex !important; align-items: center !important; gap: 12px !important; flex-wrap: wrap !important; }\n#war-cpcd-2026 .cp-ptext { color: rgba(255,255,255,0.9) !important; font-size: 13px !important; font-weight: 600 !important; flex: 1 !important; min-width: 150px !important; margin: 0 !important; }\n#war-cpcd-2026 .cp-ptext b { color: #c9a227 !important; }\n#war-cpcd-2026 .cp-go { background: #c9a227 !important; color: #1a2a3a !important; border: none !important; padding: 14px 24px !important; min-height: 48px !important; border-radius: 7px !important; font-size: 14.5px !important; font-weight: 800 !important; cursor: pointer !important; font-family: inherit !important; }\n#war-cpcd-2026 .cp-go:hover { background: #ddb832 !important; }\n#war-cpcd-2026 .cp-go[disabled] { background: #6b7785 !important; color: rgba(255,255,255,0.72) !important; cursor: not-allowed !important; }\n#war-cpcd-2026 .cp-clear { background: transparent !important; color: rgba(255,255,255,0.85) !important; border: 2px solid rgba(255,255,255,0.3) !important; padding: 12px 18px !important; min-height: 48px !important; border-radius: 7px !important; font-size: 13px !important; font-weight: 700 !important; cursor: pointer !important; font-family: inherit !important; }\n#war-cpcd-2026 .cp-clear:hover { border-color: rgba(255,255,255,0.6) !important; }\n\n#war-cpcd-2026 .cp-result { display: none !important; background: linear-gradient(135deg, #0a1622 0%, #1a2a3a 100%) !important; padding: 52px 20px !important; }\n#war-cpcd-2026 .cp-result.on { display: block !important; }\n#war-cpcd-2026 .cp-headline { background: #fff !important; border-radius: 14px !important; padding: 30px 28px !important; margin-bottom: 22px !important; }\n#war-cpcd-2026 .cp-hl-top { font-size: 13px !important; font-weight: 700 !important; color: #6b7785 !important; margin: 0 0 18px 0 !important; }\n#war-cpcd-2026 .cp-hl-grid { display: grid !important; grid-template-columns: 1fr auto 1fr auto !important; gap: 18px !important; align-items: center !important; }\n#war-cpcd-2026 .cp-hl-cell span { display: block !important; font-size: 10.5px !important; font-weight: 800 !important; letter-spacing: 1.2px !important; text-transform: uppercase !important; color: #6b7785 !important; margin-bottom: 6px !important; }\n#war-cpcd-2026 .cp-hl-cell b { display: block !important; font-size: 38px !important; font-weight: 800 !important; font-family: Georgia, serif !important; color: #1a2a3a !important; line-height: 1 !important; }\n#war-cpcd-2026 .cp-hl-cell i { display: block !important; font-size: 12px !important; font-style: normal !important; color: #6b7785 !important; margin-top: 6px !important; }\n#war-cpcd-2026 .cp-hl-arrow { font-size: 26px !important; color: #c9a227 !important; font-weight: 800 !important; }\n#war-cpcd-2026 .cp-hl-cell.win b { color: #047857 !important; }\n#war-cpcd-2026 .cp-hl-cell.lose b { color: #B91C1C !important; }\n\n#war-cpcd-2026 .cp-grid2 { display: grid !important; grid-template-columns: repeat(2, 1fr) !important; gap: 18px !important; margin-bottom: 22px !important; }\n#war-cpcd-2026 .cp-panel { background: #fff !important; border-radius: 12px !important; padding: 24px 22px !important; margin-bottom: 22px !important; }\n#war-cpcd-2026 .cp-grid2 .cp-panel { margin-bottom: 0 !important; }\n#war-cpcd-2026 .cp-panel h3 { margin: 0 0 6px 0 !important; font-size: 19px !important; font-weight: 800 !important; color: #1a2a3a !important; line-height: 1.3 !important; }\n#war-cpcd-2026 .cp-panel .cp-sub { margin: 0 0 16px 0 !important; font-size: 13px !important; color: #6b7785 !important; line-height: 1.6 !important; }\n#war-cpcd-2026 .cp-big { font-size: 30px !important; font-weight: 800 !important; color: #1a2a3a !important; line-height: 1.1 !important; margin: 0 0 4px 0 !important; font-family: Georgia, serif !important; }\n#war-cpcd-2026 .cp-big.neg { color: #B91C1C !important; }\n#war-cpcd-2026 .cp-note { border-radius: 8px !important; padding: 15px 17px !important; font-size: 13.5px !important; line-height: 1.65 !important; margin-top: 14px !important; }\n#war-cpcd-2026 .cp-note.warn { background: #fadbd8 !important; border-left: 4px solid #B91C1C !important; color: #6d2019 !important; }\n#war-cpcd-2026 .cp-note.caution { background: #fdf2d0 !important; border-left: 4px solid #D97706 !important; color: #6d4a00 !important; }\n#war-cpcd-2026 .cp-note.ok { background: #dcf0e4 !important; border-left: 4px solid #059669 !important; color: #14603c !important; }\n#war-cpcd-2026 .cp-note.info { background: #eef2f7 !important; border-left: 4px solid #475569 !important; color: #2f3c4d !important; }\n\n#war-cpcd-2026 table.cp-tbl { width: 100% !important; min-width: 620px !important; border-collapse: collapse !important; font-size: 13px !important; }\n#war-cpcd-2026 table.cp-tbl th { background: #1a2a3a !important; color: #fff !important; text-align: left !important; padding: 10px 12px !important; font-size: 11px !important; font-weight: 800 !important; letter-spacing: 0.5px !important; text-transform: uppercase !important; }\n#war-cpcd-2026 table.cp-tbl td { padding: 10px 12px !important; border-bottom: 1px solid #eef1f4 !important; vertical-align: top !important; color: #444 !important; line-height: 1.5 !important; }\n#war-cpcd-2026 table.cp-tbl tr:nth-child(even) td { background: #fafbfc !important; }\n#war-cpcd-2026 table.cp-tbl td.num { text-align: right !important; font-family: Georgia, serif !important; white-space: nowrap !important; }\n#war-cpcd-2026 table.cp-tbl tr.total td { font-weight: 800 !important; color: #1a2a3a !important; background: #f4f6f8 !important; border-top: 2px solid #1a2a3a !important; }\n#war-cpcd-2026 table.cp-tbl tr.flat td { color: #8a5a00 !important; background: #fffaf1 !important; }\n#war-cpcd-2026 .cp-scroll { overflow-x: auto !important; -webkit-overflow-scrolling: touch !important; }\n#war-cpcd-2026 .cp-hint { display: none !important; }\n@media (max-width: 768px) { #war-cpcd-2026 .cp-hint { display: block !important; font-size: 11.5px !important; font-weight: 700 !important; color: #6b7785 !important; margin: 0 0 8px 0 !important; } }\n\n#war-cpcd-2026 .cp-ask { border-left: 6px solid #c9a227 !important; }\n#war-cpcd-2026 .cp-askrow { display: flex !important; gap: 14px !important; padding: 12px 0 !important; border-bottom: 1px solid #eef1f4 !important; flex-wrap: wrap !important; }\n#war-cpcd-2026 .cp-askrow:last-child { border-bottom: none !important; }\n#war-cpcd-2026 .cp-askrow b { flex: 0 0 168px !important; font-size: 11px !important; font-weight: 800 !important; letter-spacing: 1px !important; text-transform: uppercase !important; color: #6b7785 !important; padding-top: 2px !important; }\n#war-cpcd-2026 .cp-askrow span { flex: 1 1 240px !important; font-size: 15px !important; color: #1a2a3a !important; line-height: 1.55 !important; font-weight: 600 !important; }\n#war-cpcd-2026 .cp-grade { display: inline-flex !important; align-items: center !important; justify-content: center !important; width: 62px !important; height: 62px !important; border-radius: 50% !important; font-size: 30px !important; font-weight: 800 !important; font-family: Georgia, serif !important; margin-bottom: 12px !important; }\n#war-cpcd-2026 .cp-grade.gA { background: #dcf0e4 !important; color: #14603c !important; }\n#war-cpcd-2026 .cp-grade.gB { background: #e4f0dc !important; color: #3d6014 !important; }\n#war-cpcd-2026 .cp-grade.gC { background: #fdf2d0 !important; color: #8a6100 !important; }\n#war-cpcd-2026 .cp-grade.gD { background: #fadbd8 !important; color: #922b21 !important; }\n#war-cpcd-2026 .cp-exec { display: grid !important; grid-template-columns: repeat(3, 1fr) !important; gap: 14px !important; }\n#war-cpcd-2026 .cp-execbox { background: #f6f8fa !important; border-radius: 8px !important; padding: 16px 17px !important; border-top: 4px solid #475569 !important; }\n#war-cpcd-2026 .cp-execbox.cfo { border-top-color: #D97706 !important; }\n#war-cpcd-2026 .cp-execbox.cro { border-top-color: #B91C1C !important; }\n#war-cpcd-2026 .cp-execbox.cio { border-top-color: #7C3AED !important; }\n#war-cpcd-2026 .cp-execbox h4 { margin: 0 0 8px 0 !important; font-size: 14px !important; font-weight: 800 !important; color: #1a2a3a !important; }\n#war-cpcd-2026 .cp-execbox p { margin: 0 !important; font-size: 13px !important; color: #444 !important; line-height: 1.6 !important; }\n\n#war-cpcd-2026 .cp-card { background: #f6f8fa !important; border: 1px dashed #c3ccd5 !important; border-radius: 8px !important; padding: 18px 20px !important; font-size: 13px !important; color: #333 !important; line-height: 1.7 !important; white-space: pre-wrap !important; font-family: Georgia, 'Times New Roman', serif !important; }\n#war-cpcd-2026 .cp-btnrow { display: flex !important; gap: 10px !important; flex-wrap: wrap !important; margin-top: 16px !important; }\n#war-cpcd-2026 .cp-btn { background: #1a2a3a !important; color: #fff !important; border: none !important; cursor: pointer !important; padding: 13px 20px !important; min-height: 44px !important; border-radius: 6px !important; font-size: 13px !important; font-weight: 700 !important; font-family: inherit !important; display: inline-flex !important; align-items: center !important; }\n#war-cpcd-2026 .cp-btn:hover { background: #2d4156 !important; }\n#war-cpcd-2026 .cp-btn.gold { background: #c9a227 !important; color: #1a2a3a !important; }\n#war-cpcd-2026 .cp-btn.ghost { background: transparent !important; color: #1a2a3a !important; border: 2px solid #c3ccd5 !important; }\n\n#war-cpcd-2026 .cp-next { background: #fff !important; padding: 50px 20px !important; }\n#war-cpcd-2026 .cp-next h3 { text-align: center !important; font-size: 28px !important; font-weight: 800 !important; color: #1a2a3a !important; margin: 0 0 10px 0 !important; }\n#war-cpcd-2026 .cp-next .cp-sub { text-align: center !important; max-width: 660px !important; margin: 0 auto 32px auto !important; color: #6b7785 !important; font-size: 15px !important; line-height: 1.6 !important; }\n#war-cpcd-2026 .cp-grid3 { display: grid !important; grid-template-columns: repeat(3, 1fr) !important; gap: 18px !important; }\n#war-cpcd-2026 .cp-tile { border: 1px solid #e2e6ea !important; border-radius: 10px !important; padding: 22px 20px !important; background: #fbfcfd !important; }\n#war-cpcd-2026 .cp-tile h4 { margin: 0 0 8px 0 !important; font-size: 16px !important; font-weight: 700 !important; color: #1a2a3a !important; line-height: 1.35 !important; }\n#war-cpcd-2026 .cp-tile p { margin: 0 0 14px 0 !important; font-size: 13.5px !important; color: #555 !important; line-height: 1.6 !important; }\n#war-cpcd-2026 .cp-tile a { display: inline-block !important; background: #1a2a3a !important; color: #fff !important; padding: 11px 18px !important; min-height: 44px !important; border-radius: 6px !important; font-size: 12.5px !important; font-weight: 700 !important; line-height: 22px !important; }\n#war-cpcd-2026 .cp-tile a:hover { background: #c9a227 !important; color: #1a2a3a !important; }\n#war-cpcd-2026 .cp-cta { background: linear-gradient(135deg, #c9a227 0%, #ddb832 100%) !important; padding: 46px 20px !important; text-align: center !important; }\n#war-cpcd-2026 .cp-cta h3 { font-size: 27px !important; font-weight: 800 !important; color: #1a2a3a !important; margin: 0 0 10px 0 !important; }\n#war-cpcd-2026 .cp-cta p { font-size: 15.5px !important; color: #1a2a3a !important; opacity: 0.85 !important; margin: 0 0 24px 0 !important; }\n#war-cpcd-2026 .cp-ctarow { display: flex !important; justify-content: center !important; gap: 11px !important; flex-wrap: wrap !important; }\n#war-cpcd-2026 .cp-ctarow a { background: #1a2a3a !important; color: #fff !important; padding: 13px 22px !important; min-height: 44px !important; border-radius: 6px !important; font-size: 13px !important; font-weight: 700 !important; display: inline-flex !important; align-items: center !important; }\n#war-cpcd-2026 .cp-ctarow a:hover { background: #2d4156 !important; }\n#war-cpcd-2026 .cp-fine { background: #1a2a3a !important; padding: 24px 20px !important; }\n#war-cpcd-2026 .cp-fine p { max-width: 900px !important; margin: 0 auto !important; color: rgba(255,255,255,0.62) !important; font-size: 11.5px !important; line-height: 1.75 !important; }\n#war-cpcd-2026 .cp-manual { background: #fff9f0 !important; border-top: 4px solid #D97706 !important; padding: 40px 20px !important; }\n#war-cpcd-2026 .cp-manual h3 { font-size: 23px !important; font-weight: 800 !important; color: #1a2a3a !important; margin: 0 0 10px 0 !important; }\n\n@media print {\n    #war-cpcd-2026 .cp-band, #war-cpcd-2026 .cp-hero, #war-cpcd-2026 .cp-form,\n    #war-cpcd-2026 .cp-progress, #war-cpcd-2026 .cp-next, #war-cpcd-2026 .cp-cta,\n    #war-cpcd-2026 .cp-btnrow { display: none !important; }\n    #war-cpcd-2026 .cp-result { background: #fff !important; padding: 0 !important; }\n    #war-cpcd-2026 .cp-panel, #war-cpcd-2026 .cp-headline { border: 1px solid #ccc !important; page-break-inside: avoid !important; }\n    #war-cpcd-2026 .cp-fine { background: #fff !important; }\n    #war-cpcd-2026 .cp-fine p { color: #666 !important; }\n    #war-cpcd-2026 table.cp-tbl { min-width: 0 !important; }\n}\n\n@media (max-width: 900px) {\n    #war-cpcd-2026 .cp-grid2 { grid-template-columns: 1fr !important; }\n    #war-cpcd-2026 .cp-grid3 { grid-template-columns: 1fr !important; max-width: 480px !important; margin: 0 auto !important; }\n    #war-cpcd-2026 .cp-exec { grid-template-columns: 1fr !important; }\n    #war-cpcd-2026 .cp-hl-grid { grid-template-columns: 1fr !important; gap: 14px !important; }\n    #war-cpcd-2026 .cp-hl-arrow { display: none !important; }\n}\n@media (max-width: 768px) {\n    #war-cpcd-2026 .cp-h1 { font-size: 31px !important; }\n    #war-cpcd-2026 .cp-hero { padding: 38px 18px 34px 18px !important; }\n    #war-cpcd-2026 .cp-form, #war-cpcd-2026 .cp-result, #war-cpcd-2026 .cp-next { padding: 34px 16px !important; }\n    #war-cpcd-2026 .cp-shead, #war-cpcd-2026 .cp-sbody { padding-left: 16px !important; padding-right: 16px !important; }\n    #war-cpcd-2026 .cp-fields { grid-template-columns: 1fr !important; }\n    #war-cpcd-2026 .cp-full { grid-column: span 1 !important; }\n    #war-cpcd-2026 .cp-panel { padding: 20px 17px !important; }\n    #war-cpcd-2026 .cp-headline { padding: 22px 18px !important; }\n    #war-cpcd-2026 .cp-hl-cell b { font-size: 31px !important; }\n    #war-cpcd-2026 .cp-formula code { font-size: 14px !important; }\n}\n@media (max-width: 420px) {\n    #war-cpcd-2026 .cp-h1 { font-size: 27px !important; }\n    #war-cpcd-2026 .cp-hl-cell b { font-size: 27px !important; }\n    #war-cpcd-2026 .cp-big { font-size: 25px !important; }\n    #war-cpcd-2026 .cp-formula code { font-size: 12.5px !important; }\n}\n<\/style>\n\n<div class=\"cp-band\">\n    <p>THE FINANCIAL METRIC: <strong>What does it cost to make one AI decision you can legally, auditably and defensibly stand behind?<\/strong><\/p>\n<\/div>\n\n<div class=\"cp-hero\">\n    <div class=\"cp-inner\">\n        <span class=\"cp-eyebrow\">Framework Three \/\/ When Agents Rule<\/span>\n        <h1 class=\"cp-h1\">Cost Per Compliant Decision<\/h1>\n        <p class=\"cp-lede\">Price your governance as unit economics rather than as a cost line. Compare two infrastructure or governance positions, get the trajectory of both, and get the present value cost of waiting a year to act.<\/p>\n        <div class=\"cp-formula\">\n            <span>The formula, Chapter 10<\/span>\n            <code>CpCD = (Compute + Compliance Overhead + Latency Cost + Governance Overhead) divided by Decision Volume<\/code>\n        <\/div>\n        <div class=\"cp-facts\">\n            <span class=\"cp-fact\"><b>4<\/b> cost components<\/span>\n            <span class=\"cp-fact\"><b>2<\/b> scenarios compared<\/span>\n            <span class=\"cp-fact\"><b>5<\/b> year trajectory<\/span>\n            <span class=\"cp-fact\"><b>6<\/b> minutes<\/span>\n        <\/div>\n        <div class=\"cp-honest\">\n            <b>It needs no new instrumentation.<\/b> Every input already exists somewhere in your enterprise. The metric assembles them into the one number that closes the gap between three dashboards nobody looks at together: the cloud bill, the regulatory exposure register and the model performance report.<br><br>\n            <b>It is loaded with the book&#8217;s own worked example<\/b> so you can see the shape of an answer before you enter anything. Replace every figure with yours, or clear the form and start blank. Nothing is transmitted or stored, and everything is computed in your browser.<br><br>\n            <b>Two traps it checks for.<\/b> Whether your owned compute figure survives the utilisation you actually achieve, which is the commonest way an on premises case fails its first finance review. And whether you are about to show a board a falling unit cost while the total bill rises, which is what happens when token prices fall more slowly than agentic token consumption grows.\n        <\/div>\n    <\/div>\n<\/div>\n\n<div class=\"cp-form\">\n<div class=\"cp-inner\">\n\n    <!-- SECTION 1 -->\n    <div class=\"cp-sec\">\n        <div class=\"cp-shead s1\">\n            <div class=\"cp-snum\">1<\/div>\n            <div class=\"cp-stitle\">\n                <h2>The workload<\/h2>\n                <p>CpCD is calculated per workload, not across the portfolio. Pick one.<\/p>\n            <\/div>\n        <\/div>\n        <div class=\"cp-sbody\">\n            <div class=\"cp-locked\">\n                <b>Loaded with the worked example from Chapter 10.<\/b> Continental Industrial Holdings credit decisioning, one million decisions a month, moving from public cloud to a private on premises stack. Replace every number with your own, or use Clear the form at the bottom of the page.\n            <\/div>\n            <div class=\"cp-fields\">\n                <div class=\"cp-f cp-full\">\n                    <label for=\"cp-name\">Workload name\n                        <span class=\"cp-hint2\">Labels the output only.<\/span>\n                    <\/label>\n                    <input type=\"text\" id=\"cp-name\" value=\"Credit decisioning\">\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-vol\">Compliant decisions per month\n                        <span class=\"cp-hint2\">Decisions that must be auditable and defensible. This is the denominator.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><input type=\"number\" id=\"cp-vol\" min=\"1\" step=\"1\" value=\"1000000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-ccy\">Currency\n                        <span class=\"cp-hint2\">Three letter code. Labels the amounts so a board paper cannot be read in the wrong currency.<\/span>\n                    <\/label>\n                    <input type=\"text\" id=\"cp-ccy\" value=\"USD\" maxlength=\"4\">\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-owner\">Named owner accountable for this number\n                        <span class=\"cp-hint2\">A person, not a function. An unowned unit cost is an analysis. An owned one is a commitment.<\/span>\n                    <\/label>\n                    <input type=\"text\" id=\"cp-owner\" placeholder=\"For example, R. Tanaka, VP Infrastructure\">\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-budget\">Annual technology budget\n                        <span class=\"cp-hint2\">Optional. Used only to express the saving as a share of spend, which is how a board reads materiality.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-budget\" min=\"0\" step=\"1000000\" value=\"0\" inputmode=\"numeric\"><span class=\"cp-post\">per year<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-trans\">One off transition cost\n                        <span class=\"cp-hint2\">Migration, build, licensing, change. Enter zero if this is a governance comparison rather than a move.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-trans\" min=\"0\" step=\"1000\" value=\"0\" inputmode=\"numeric\"><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- SECTION 2 -->\n    <div class=\"cp-sec\">\n        <div class=\"cp-shead s2\">\n            <div class=\"cp-snum\">2<\/div>\n            <div class=\"cp-stitle\">\n                <h2>Baseline, what you run today<\/h2>\n                <p>Monthly spend per component. The tool divides by volume to get the per decision figure.<\/p>\n            <\/div>\n        <\/div>\n        <div class=\"cp-sbody\">\n            <div class=\"cp-fields\">\n                <div class=\"cp-f\">\n                    <label for=\"cp-b1\">Compute\n                        <span class=\"cp-hint2\">GPU time, tokens, API fees, or amortised owned hardware. From your FinOps data.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-b1\" min=\"0\" step=\"100\" value=\"32000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-b2\">Compliance overhead\n                        <span class=\"cp-hint2\">Audit logging, lineage, regulatory documentation, evidence preservation.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-b2\" min=\"0\" step=\"100\" value=\"19000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-b3\">Latency cost\n                        <span class=\"cp-hint2\">Round trip delay converted to money: abandonment, service level penalties, risk windows.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-b3\" min=\"0\" step=\"100\" value=\"8000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-b4\">Governance overhead\n                        <span class=\"cp-hint2\">Human review sampling, escalation handling, model monitoring, override documentation.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-b4\" min=\"0\" step=\"100\" value=\"4000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- SECTION 3 -->\n    <div class=\"cp-sec\">\n        <div class=\"cp-shead s3\">\n            <div class=\"cp-snum\">3<\/div>\n            <div class=\"cp-stitle\">\n                <h2>Target, what you are proposing<\/h2>\n                <p>The same four components under the proposed placement or governance model.<\/p>\n            <\/div>\n        <\/div>\n        <div class=\"cp-sbody\">\n            <div class=\"cp-locked\">\n                <b>Be careful with compliance overhead.<\/b> Chapter 10 is explicit that it does not fall with an infrastructure change and may rise slightly, because more of the logging infrastructure becomes yours. A target that shows compliance overhead falling is the first thing a sceptical CFO will challenge, so have a reason ready or leave it unchanged.\n            <\/div>\n            <div class=\"cp-fields\">\n                <div class=\"cp-f\">\n                    <label for=\"cp-t1\">Compute\n                        <span class=\"cp-hint2\">Include amortisation over the expected useful life if this is owned capacity.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-t1\" min=\"0\" step=\"100\" value=\"4000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-t2\">Compliance overhead\n                        <span class=\"cp-hint2\">Usually unchanged. The regulation does not care where the inference runs.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-t2\" min=\"0\" step=\"100\" value=\"19000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-t3\">Latency cost\n                        <span class=\"cp-hint2\">Recalculated from the target round trip, using the same calibration.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-t3\" min=\"0\" step=\"100\" value=\"1000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-t4\">Governance overhead\n                        <span class=\"cp-hint2\">Unchanged unless the autonomy level or the review sampling changes.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><span class=\"cp-pre\">USD<\/span><input type=\"number\" id=\"cp-t4\" min=\"0\" step=\"100\" value=\"4000\" inputmode=\"numeric\"><span class=\"cp-post\">per month<\/span><\/div>\n                <\/div>\n            <\/div>\n            <div class=\"cp-q\">\n                <p class=\"cp-qlabel\">Does the target rely on owned or reserved accelerator capacity?<\/p>\n                <p class=\"cp-help\">An amortised figure is only valid at the utilisation you actually achieve. Measured enterprise accelerator utilisation is commonly reported far below nameplate.<\/p>\n                <label class=\"cp-opt\"><input type=\"radio\" name=\"cp-u\" value=\"na\"><span>No. The target uses metered or on demand capacity only.<\/span><\/label>\n                <label class=\"cp-opt\"><input type=\"radio\" name=\"cp-u\" value=\"high\"><span>Yes, and sustained utilisation above 40 percent is measured, not assumed.<\/span><\/label>\n                <label class=\"cp-opt\"><input type=\"radio\" name=\"cp-u\" value=\"mid\"><span>Yes, and measured utilisation is between 15 and 40 percent.<\/span><\/label>\n                <label class=\"cp-opt\"><input type=\"radio\" name=\"cp-u\" value=\"low\"><span>Yes, and utilisation is below 15 percent, or we have not measured it.<\/span><\/label>\n            <\/div>\n            <div class=\"cp-q\">\n                <p class=\"cp-qlabel\">How was the latency cost figure produced?<\/p>\n                <p class=\"cp-help\">This is the softest of the four inputs. Published sensitivity ranges from roughly one to seven percent conversion loss per hundred milliseconds, a sevenfold spread, so a borrowed benchmark is not evidence.<\/p>\n                <label class=\"cp-opt\"><input type=\"radio\" name=\"cp-l\" value=\"cal\"><span>Calibrated against our own conversion, abandonment or penalty data.<\/span><\/label>\n                <label class=\"cp-opt\"><input type=\"radio\" name=\"cp-l\" value=\"bench\"><span>Estimated from published industry benchmarks.<\/span><\/label>\n                <label class=\"cp-opt\"><input type=\"radio\" name=\"cp-l\" value=\"zero\"><span>Not quantified. Both latency figures are set to zero or are nominal.<\/span><\/label>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- SECTION 4 -->\n    <div class=\"cp-sec\">\n        <div class=\"cp-shead s4\">\n            <div class=\"cp-snum\">4<\/div>\n            <div class=\"cp-stitle\">\n                <h2>Trajectory assumptions<\/h2>\n                <p>Unit cost and total cost move in opposite directions. These four figures decide by how much.<\/p>\n            <\/div>\n        <\/div>\n        <div class=\"cp-sbody\">\n            <div class=\"cp-fields\">\n                <div class=\"cp-f\">\n                    <label for=\"cp-growth\">Annual growth in decision volume\n                        <span class=\"cp-hint2\">Your own forecast. This is what makes the do nothing position get worse rather than stay flat.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><input type=\"number\" id=\"cp-growth\" min=\"-50\" max=\"300\" step=\"1\" value=\"45\" inputmode=\"numeric\"><span class=\"cp-post\">percent<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-defl\">Annual decline in compute unit price\n                        <span class=\"cp-hint2\">Per token and per inference prices have been falling steadily. Enter the rate you will plan against.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><input type=\"number\" id=\"cp-defl\" min=\"0\" max=\"90\" step=\"1\" value=\"25\" inputmode=\"numeric\"><span class=\"cp-post\">percent<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-tok\">Annual growth in compute consumed per decision\n                        <span class=\"cp-hint2\">Agentic workloads consume several times more tokens per task than chat. This is what cancels the price decline.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><input type=\"number\" id=\"cp-tok\" min=\"0\" max=\"300\" step=\"1\" value=\"30\" inputmode=\"numeric\"><span class=\"cp-post\">percent<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f\">\n                    <label for=\"cp-cgrow\">Annual growth in compliance overhead per decision\n                        <span class=\"cp-hint2\">Rising evidence requirements. A workload whose compliance overhead is climbing is a signal, not a nuisance.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><input type=\"number\" id=\"cp-cgrow\" min=\"-20\" max=\"100\" step=\"1\" value=\"8\" inputmode=\"numeric\"><span class=\"cp-post\">percent<\/span><\/div>\n                <\/div>\n                <div class=\"cp-f cp-full\">\n                    <label for=\"cp-disc\">Discount rate\n                        <span class=\"cp-hint2\">Your corporate hurdle rate. Ask finance rather than choosing one.<\/span>\n                    <\/label>\n                    <div class=\"cp-wrap\"><input type=\"number\" id=\"cp-disc\" min=\"0\" max=\"40\" step=\"0.5\" value=\"9\" inputmode=\"decimal\"><span class=\"cp-post\">percent<\/span><\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n<\/div>\n<\/div>\n\n<div class=\"cp-progress\">\n    <div class=\"cp-pinner\">\n        <p class=\"cp-ptext\" id=\"cp-prog\"><b>Ready.<\/b><\/p>\n        <button type=\"button\" class=\"cp-clear\" id=\"cp-clearbtn\">Clear the form<\/button>\n        <button type=\"button\" class=\"cp-go\" id=\"cp-go\">Calculate CpCD<\/button>\n    <\/div>\n<\/div>\n\n<div class=\"cp-result\" id=\"cp-result\">\n<div class=\"cp-wide\">\n\n    <div class=\"cp-panel cp-ask\">\n        <h3 id=\"cp-askh\">The ask<\/h3>\n        <p class=\"cp-sub\">The decision, the amount, the owner and the consequence of deferral, in the order a board wants them. Everything below this panel is the evidence for it.<\/p>\n        <div id=\"cp-asklist\"><\/div>\n    <\/div>\n\n    <div class=\"cp-headline\">\n        <p class=\"cp-hl-top\" id=\"cp-hltop\">Cost per compliant decision<\/p>\n        <div class=\"cp-hl-grid\">\n            <div class=\"cp-hl-cell\">\n                <span>Baseline<\/span>\n                <b id=\"cp-hl-base\">0.000<\/b>\n                <i id=\"cp-hl-basei\">per compliant decision<\/i>\n            <\/div>\n            <div class=\"cp-hl-arrow\">to<\/div>\n            <div class=\"cp-hl-cell\" id=\"cp-hl-tcell\">\n                <span>Target<\/span>\n                <b id=\"cp-hl-targ\">0.000<\/b>\n                <i id=\"cp-hl-targi\">per compliant decision<\/i>\n            <\/div>\n            <div class=\"cp-hl-cell\" id=\"cp-hl-dcell\">\n                <span>Change<\/span>\n                <b id=\"cp-hl-delta\">0%<\/b>\n                <i id=\"cp-hl-deltai\"><\/i>\n            <\/div>\n        <\/div>\n        <div class=\"cp-note info\" id=\"cp-hl-note\"><\/div>\n    <\/div>\n\n    <div class=\"cp-panel\">\n        <h3>Where the money is, and what actually moved<\/h3>\n        <p class=\"cp-sub\">Per decision, to four places. The component that does not move is usually the most informative line in the table.<\/p>\n        <p class=\"cp-hint\">Swipe the table sideways to see every column.<\/p>\n        <div class=\"cp-scroll\">\n        <table class=\"cp-tbl\">\n            <thead><tr><th>Component<\/th><th>Baseline<\/th><th>Target<\/th><th>Change<\/th><th>Monthly effect<\/th><\/tr><\/thead>\n            <tbody id=\"cp-breakdown\"><\/tbody>\n        <\/table>\n        <\/div>\n        <div class=\"cp-note info\" id=\"cp-comp-note\"><\/div>\n    <\/div>\n\n    <div class=\"cp-grid2\">\n        <div class=\"cp-panel\">\n            <h3>Cash effect<\/h3>\n            <p class=\"cp-sub\">At today&#8217;s volume, before any trajectory effect.<\/p>\n            <p class=\"cp-big\" id=\"cp-monthly\">0<\/p>\n            <p class=\"cp-sub\" style=\"margin-bottom:14px !important;\">monthly saving at current volume<\/p>\n            <p class=\"cp-big\" id=\"cp-annual\">0<\/p>\n            <p class=\"cp-sub\" style=\"margin-bottom:0 !important;\">annualised at current volume<\/p>\n            <div class=\"cp-note ok\" id=\"cp-payback\"><\/div>\n            <div class=\"cp-note info\" id=\"cp-material\"><\/div>\n        <\/div>\n        <div class=\"cp-panel\">\n            <h3>Five year present value<\/h3>\n            <p class=\"cp-sub\">Savings discounted at your hurdle rate, with volume growth and unit price movement applied.<\/p>\n            <p class=\"cp-big\" id=\"cp-npv\">0<\/p>\n            <p class=\"cp-sub\" style=\"margin-bottom:14px !important;\">present value of the saving, net of transition cost<\/p>\n            <p class=\"cp-big neg\" id=\"cp-delay\">0<\/p>\n            <p class=\"cp-sub\" style=\"margin-bottom:0 !important;\">present value cost of waiting twelve months<\/p>\n            <div class=\"cp-note caution\" id=\"cp-delay-note\"><\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"cp-grid2\">\n        <div class=\"cp-panel\">\n            <h3>Confidence in this case<\/h3>\n            <p class=\"cp-sub\">Graded on the four things that decide whether a number survives challenge, not on how good the answer looks.<\/p>\n            <div class=\"cp-grade gA\" id=\"cp-grade\">A<\/div>\n            <p class=\"cp-big\" style=\"font-size:20px !important;\" id=\"cp-gradelabel\">Evidenced<\/p>\n            <ul class=\"cp-conflist\" id=\"cp-conflist\" style=\"margin:12px 0 0 0 !important;padding-left:20px !important;\"><\/ul>\n            <div class=\"cp-note info\" id=\"cp-confnote\"><\/div>\n        <\/div>\n        <div class=\"cp-panel\">\n            <h3>The case a sceptic would rebuild<\/h3>\n            <p class=\"cp-sub\">Every unproven input replaced with the conservative version, then recalculated. This is the number to present, not the optimistic one.<\/p>\n            <p class=\"cp-big\" id=\"cp-chal\">0<\/p>\n            <p class=\"cp-sub\" style=\"margin-bottom:14px !important;\">challenged present value, net of transition cost<\/p>\n            <p class=\"cp-big\" id=\"cp-chalunit\">0.0000<\/p>\n            <p class=\"cp-sub\" style=\"margin-bottom:0 !important;\">challenged target cost per compliant decision<\/p>\n            <div class=\"cp-note ok\" id=\"cp-chalnote\"><\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"cp-panel\">\n        <h3>How wrong can we be before this fails<\/h3>\n        <p class=\"cp-sub\">The case is linear in target compute cost, so the breakeven is exact rather than estimated. This is the answer to the question a CFO asks second.<\/p>\n        <div class=\"cp-grid2\" style=\"margin-bottom:0 !important;\">\n            <div>\n                <p class=\"cp-big\" id=\"cp-bevunit\">0.0000<\/p>\n                <p class=\"cp-sub\" style=\"margin-bottom:0 !important;\">target compute cost per decision at which five year present value reaches zero<\/p>\n            <\/div>\n            <div>\n                <p class=\"cp-big\" id=\"cp-bevhead\">0%<\/p>\n                <p class=\"cp-sub\" style=\"margin-bottom:0 !important;\">headroom: how far target compute can overrun before the case fails<\/p>\n            <\/div>\n        <\/div>\n        <div class=\"cp-note info\" id=\"cp-bevnote\"><\/div>\n    <\/div>\n\n    <div class=\"cp-panel\">\n        <h3>The trajectory a board needs to see<\/h3>\n        <p class=\"cp-sub\">Unit cost and total cost move in opposite directions. Showing only the first is how a cost surprise reaches a board.<\/p>\n        <p class=\"cp-hint\">Swipe the table sideways to see every column.<\/p>\n        <div class=\"cp-scroll\">\n        <table class=\"cp-tbl\">\n            <thead><tr><th>Year<\/th><th>Decisions<\/th><th>Baseline CpCD<\/th><th>Target CpCD<\/th><th>Baseline total<\/th><th>Target total<\/th><th>Saving<\/th><\/tr><\/thead>\n            <tbody id=\"cp-traj\"><\/tbody>\n        <\/table>\n        <\/div>\n        <div class=\"cp-note caution\" id=\"cp-paradox\"><\/div>\n    <\/div>\n\n    <div class=\"cp-panel\">\n        <h3>Assumption checks<\/h3>\n        <p class=\"cp-sub\">The three things a finance function will test before it accepts the number.<\/p>\n        <div class=\"cp-note info\" id=\"cp-util\"><\/div>\n        <div class=\"cp-note info\" id=\"cp-latconf\"><\/div>\n        <div class=\"cp-note info\" id=\"cp-provenance\"><\/div>\n    <\/div>\n\n    <div class=\"cp-panel\">\n        <h3>The same number, read by three executives<\/h3>\n        <p class=\"cp-sub\">CpCD reaches three people who otherwise look at three different dashboards.<\/p>\n        <div class=\"cp-exec\">\n            <div class=\"cp-execbox cfo\"><h4>The CFO reads a cost figure<\/h4><p id=\"cp-cfo\"><\/p><\/div>\n            <div class=\"cp-execbox cro\"><h4>The Chief Risk Officer reads exposure per decision<\/h4><p id=\"cp-cro\"><\/p><\/div>\n            <div class=\"cp-execbox cio\"><h4>The CIO reads efficiency adjusted for performance<\/h4><p id=\"cp-cio\"><\/p><\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"cp-panel\">\n        <h3>Board paper<\/h3>\n        <p class=\"cp-sub\">Written to be pasted into a board or investment committee paper without editing. Replace the bracketed fields before circulating.<\/p>\n        <div class=\"cp-card\" id=\"cp-cardtext\"><\/div>\n        <div class=\"cp-btnrow\">\n            <button type=\"button\" class=\"cp-btn gold\" id=\"cp-copy\">Copy the paper<\/button>\n            <button type=\"button\" class=\"cp-btn\" id=\"cp-print\">Print or save as PDF<\/button>\n            <button type=\"button\" class=\"cp-btn ghost\" id=\"cp-again\">Back to the inputs<\/button>\n        <\/div>\n    <\/div>\n\n<\/div>\n<\/div>\n\n<div class=\"cp-next\">\n<div class=\"cp-wide\">\n    <h3>Take it further<\/h3>\n    <p class=\"cp-sub\">CpCD is the executive number. These are the instruments that produce the inputs and the case behind it.<\/p>\n    <div class=\"cp-grid3\">\n        <div class=\"cp-tile\">\n            <h4>The full investment case<\/h4>\n            <p>The Business Case and CpCD workbook carries the five year model this page summarises: sourced assumptions, hard cost reduction kept separate from expected loss avoided, a two way sensitivity grid, and a board summary that states plainly whether the case stands on cost reduction alone.<\/p>\n            <a href=\"https:\/\/www.opey.org\/opeyit\/?page_id=748#war-downloads-section\">Get the workbook<\/a>\n        <\/div>\n        <div class=\"cp-tile\">\n            <h4>Why governance overhead is what it is<\/h4>\n            <p>Governance overhead scales with autonomy and reversibility. The L0 to L5 Agent Classifier derives the level, the tier and the oversight mode the decision velocity actually permits, which is where the governance component of this formula comes from.<\/p>\n            <a href=\"https:\/\/www.opey.org\/opeyit\/?page_id=748#war-tools-section\">Classify the system<\/a>\n        <\/div>\n        <div class=\"cp-tile\">\n            <h4>The reasoning<\/h4>\n            <p>Chapter 10 introduces CpCD and works the example this page loads with. Chapter 7 covers the PLACE Framework that makes placement decisions legible in these terms. Chapter 11 applies the same discipline to quantum migration economics.<\/p>\n            <a href=\"https:\/\/www.amazon.com\/dp\/B0H85XZT25\">Get the book<\/a>\n        <\/div>\n    <\/div>\n<\/div>\n<\/div>\n\n<noscript>\n<div class=\"cp-manual\">\n<div class=\"cp-inner\">\n    <h3>Calculating this by hand<\/h3>\n    <p style=\"font-size:14.5px !important;color:#444 !important;line-height:1.7 !important;\">Interactive calculation is unavailable in your browser. The method is unchanged and takes a few minutes with a calculator.<\/p>\n    <ol style=\"font-size:14.5px !important;color:#444 !important;line-height:1.85 !important;\">\n        <li>Pick one workload. Establish the number of decisions a month that must be auditable and defensible. That is your denominator.<\/li>\n        <li>For your current position, total the monthly spend on each of the four components: compute, compliance overhead, latency cost and governance overhead.<\/li>\n        <li>Divide each by monthly decision volume. Add the four results. That is your baseline cost per compliant decision.<\/li>\n        <li>Repeat for the position you are proposing. Hold compliance overhead flat unless you can explain why the regulation cares where the inference runs.<\/li>\n        <li>The reduction is baseline minus target, divided by baseline. The monthly saving is that difference multiplied by monthly volume.<\/li>\n        <li>Then do the part most people skip. Grow decision volume by your own forecast and recompute total spend for each of the next five years. If volume grows faster than unit cost falls, the total bill rises while the unit cost improves. Report both.<\/li>\n    <\/ol>\n    <p style=\"font-size:14.5px !important;color:#444 !important;line-height:1.7 !important;\"><b>The worked example from Chapter 10.<\/b> One million decisions a month. Cloud baseline: compute 32,000, compliance 19,000, latency 8,000, governance 4,000, giving 0.063 per compliant decision. Private on premises target: compute 4,000, compliance 19,000 unchanged, latency 1,000, governance 4,000 unchanged, giving 0.028. A saving of 35,000 a month and a 55 percent reduction in cost per compliant decision.<\/p>\n    <p style=\"font-size:14.5px !important;color:#444 !important;line-height:1.7 !important;\"><b>Two checks before you present it.<\/b> If the target relies on owned accelerator capacity, confirm the amortised figure holds at the utilisation you actually achieve rather than at nameplate. And confirm the latency figure is calibrated against your own conversion or penalty data, because published sensitivity spans roughly one to seven percent conversion loss per hundred milliseconds.<\/p>\n<\/div>\n<\/div>\n<\/noscript>\n\n<div class=\"cp-cta\">\n    <h3>Governance funded is governance that happens<\/h3>\n    <p>If you cannot present Cost Per Compliant Decision today, you are managing the AI portfolio without its unit economics.<\/p>\n    <div class=\"cp-ctarow\">\n        <a href=\"https:\/\/www.opey.org\/opeyit\/?page_id=748\">The book page<\/a>\n        <a href=\"https:\/\/www.opey.org\/opeyit\/?page_id=748#war-downloads-section\">Free toolkit<\/a>\n        <a href=\"https:\/\/www.amazon.com\/dp\/B0H85XZT25\">Get the book<\/a>\n        <a href=\"https:\/\/www.opey.org\/opeyit\/?page_id=14\">Advisory services<\/a>\n        <a href=\"https:\/\/www.opey.org\/opeyit\/?page_id=327\">When Clouds Fail<\/a>\n    <\/div>\n<\/div>\n\n<div class=\"cp-fine\">\n    <p><b>About this calculator.<\/b> Cost Per Compliant Decision is the headline financial metric of When Agents Rule by Steven Oppenheim, introduced and developed in Chapter 10. This tool applies the formula as the chapter defines it and loads with the chapter&#8217;s worked example. It is a modelling instrument, not an audit, a valuation or a benchmark, and it reflects the figures you enter: a generous assumption produces a flattering answer and no useful information. No peer benchmark is claimed and no external dataset underlies it. Trajectory results depend on forecasts of volume, unit price and evidence requirements that nobody can make with confidence, which is why the tool asks you to supply them rather than supplying them for you. Nothing you enter leaves your browser: there is no account, no transmission and no storage. This is not legal, technical, accounting or financial advice, and it is not a substitute for your finance function.<\/p>\n<\/div>\n\n<\/div>\n<!-- End of #war-cpcd-2026 -->\n\n<script>\n\/* =========================================================\n   COST PER COMPLIANT DECISION CALCULATOR\n   No less than sign, no ampersand, no innerHTML, no template\n   literals, no arrow functions. See the notes at the top of\n   this file before editing.\n   ========================================================= *\/\n(function () {\n    var root = document.getElementById('war-cpcd-2026');\n    if (!root) { return; }\n\n    var YEARS = 5;\n\n    var MONEY_IDS = ['cp-b1','cp-b2','cp-b3','cp-b4','cp-t1','cp-t2','cp-t3','cp-t4','cp-trans','cp-budget'];\n    var RATE_IDS = ['cp-growth','cp-defl','cp-tok','cp-cgrow','cp-disc'];\n\n    function el(id) { return document.getElementById(id); }\n    function mk(tag, cls, txt) {\n        var n = document.createElement(tag);\n        if (cls) { n.className = cls; }\n        if (txt !== undefined) { if (txt !== null) { n.textContent = txt; } }\n        return n;\n    }\n    function clear(node) { while (node.firstChild) { node.removeChild(node.firstChild); } }\n\n    function val(id) {\n        var v = parseFloat(el(id).value);\n        if (isNaN(v)) { return 0; }\n        return v;\n    }\n\n    \/* thousands separator without relying on locale support *\/\n    function group(intStr) {\n        var out = '';\n        var n = intStr.length;\n        var i = 0;\n        for (i = 0; i !== n; i++) {\n            if (i > 0) {\n                if ((n - i) % 3 === 0) { out = out + ','; }\n            }\n            out = out + intStr.charAt(i);\n        }\n        return out;\n    }\n    function money(x, dp) {\n        var neg = false;\n        if (x > -0.0000001) { neg = false; } else { neg = true; }\n        var a = Math.abs(x);\n        var s = a.toFixed(dp);\n        var parts = s.split('.');\n        var body = group(parts[0]);\n        if (parts.length > 1) { body = body + '.' + parts[1]; }\n        if (neg) { return '(' + body + ')'; }\n        return body;\n    }\n    function pct(x, dp) { return (x * 100).toFixed(dp) + '%'; }\n\n    function pick(name) {\n        var hit = root.querySelector('input[name=\"' + name + '\"]:checked');\n        if (!hit) { return null; }\n        return hit.value;\n    }\n\n    function ready() {\n        if (val('cp-vol') > 0) {\n            if (pick('cp-u') !== null) {\n                if (pick('cp-l') !== null) { return true; }\n            }\n        }\n        return false;\n    }\n\n    function refresh() {\n        var p = el('cp-prog');\n        clear(p);\n        if (ready()) {\n            p.appendChild(mk('b', null, 'Ready.'));\n            p.appendChild(document.createTextNode(' Twelve inputs set. Nothing is sent anywhere.'));\n            el('cp-go').removeAttribute('disabled');\n        } else {\n            var missing = [];\n            if (val('cp-vol') > 0) { missing = missing; } else { missing.push('decision volume'); }\n            if (pick('cp-u') === null) { missing.push('the owned capacity question'); }\n            if (pick('cp-l') === null) { missing.push('the latency calibration question'); }\n            p.appendChild(mk('b', null, 'Still needed: '));\n            p.appendChild(document.createTextNode(missing.join(', ') + '.'));\n            el('cp-go').setAttribute('disabled', 'disabled');\n        }\n    }\n\n    var COMPONENTS = [\n        { key: 'Compute', b: 'cp-b1', t: 'cp-t1', grows: 'compute' },\n        { key: 'Compliance overhead', b: 'cp-b2', t: 'cp-t2', grows: 'compliance' },\n        { key: 'Latency cost', b: 'cp-b3', t: 'cp-t3', grows: 'flat' },\n        { key: 'Governance overhead', b: 'cp-b4', t: 'cp-t4', grows: 'flat' }\n    ];\n\n    function compute() {\n        var vol = val('cp-vol');\n        if (vol > 0) { vol = vol; } else { return; }\n\n        var trans = val('cp-trans');\n        var g = val('cp-growth') \/ 100;\n        var defl = val('cp-defl') \/ 100;\n        var tok = val('cp-tok') \/ 100;\n        var cg = val('cp-cgrow') \/ 100;\n        var d = val('cp-disc') \/ 100;\n        var ccy = el('cp-ccy').value;\n        if (ccy) { ccy = ccy.replace(\/\\s+\/g, '').toUpperCase(); }\n        if (!ccy) { ccy = 'USD'; }\n        var name = el('cp-name').value;\n        if (name) { name = name.replace(\/\\s+\/g, ' '); }\n        if (!name) { name = 'This workload'; }\n\n        \/* per decision figures *\/\n        var bPD = [], tPD = [];\n        var i = 0;\n        for (i = 0; i !== COMPONENTS.length; i++) {\n            bPD.push(val(COMPONENTS[i].b) \/ vol);\n            tPD.push(val(COMPONENTS[i].t) \/ vol);\n        }\n        var bTot = 0, tTot = 0;\n        for (i = 0; i !== 4; i++) { bTot = bTot + bPD[i]; tTot = tTot + tPD[i]; }\n\n        var delta = bTot - tTot;\n        var deltaPct = 0;\n        if (bTot > 0) { deltaPct = delta \/ bTot; }\n        var monthly = delta * vol;\n        var annual = monthly * 12;\n\n        \/* ---------- headline ---------- *\/\n        el('cp-hltop').textContent = 'Cost per compliant decision for ' + name +\n            ', at ' + money(vol, 0) + ' decisions a month';\n        el('cp-hl-base').textContent = bTot.toFixed(4);\n        el('cp-hl-targ').textContent = tTot.toFixed(4);\n        el('cp-hl-delta').textContent = pct(deltaPct, 1);\n        el('cp-hl-basei').textContent = money(bTot * vol, 0) + ' a month';\n        el('cp-hl-targi').textContent = money(tTot * vol, 0) + ' a month';\n        if (delta > 0) {\n            el('cp-hl-tcell').className = 'cp-hl-cell win';\n            el('cp-hl-dcell').className = 'cp-hl-cell win';\n            el('cp-hl-deltai').textContent = 'reduction in unit cost';\n        } else {\n            el('cp-hl-tcell').className = 'cp-hl-cell lose';\n            el('cp-hl-dcell').className = 'cp-hl-cell lose';\n            el('cp-hl-deltai').textContent = 'the target is more expensive per decision';\n        }\n        var hn = el('cp-hl-note');\n        if (delta > 0) {\n            hn.className = 'cp-note ok';\n            hn.textContent = 'The target reduces the cost of producing one defensible decision by ' +\n                pct(deltaPct, 1) + ', worth ' + money(monthly, 0) +\n                ' a month at current volume. That is the sentence to open with, because it is the only version of this argument that a CFO, a Chief Risk Officer and a CIO can all act on from the same number.';\n        } else {\n            if (delta === 0) {\n                hn.className = 'cp-note info';\n                hn.textContent = 'The two positions cost the same per compliant decision. If the target is still worth doing, the argument is not a cost argument: it is jurisdictional exposure, resilience, or an option you are buying. Make that case explicitly rather than dressing it as a saving.';\n            } else {\n                hn.className = 'cp-note warn';\n                hn.textContent = 'The target costs more per compliant decision, by ' + pct(-deltaPct, 1) +\n                    '. That can still be the right decision, but it is not a cost case. State what the additional ' +\n                    money(-monthly, 0) + ' a month buys, in exposure removed or obligation met, and let the board price it.';\n            }\n        }\n\n        \/* ---------- breakdown ---------- *\/\n        var tb = el('cp-breakdown');\n        clear(tb);\n        var flatLines = [];\n        for (i = 0; i !== 4; i++) {\n            var tr = document.createElement('tr');\n            var cdelta = bPD[i] - tPD[i];\n            var isFlat = false;\n            if (Math.abs(cdelta) * vol > 0.5) { isFlat = false; } else { isFlat = true; }\n            if (isFlat) {\n                tr.className = 'flat';\n                flatLines.push(COMPONENTS[i].key);\n            }\n            tr.appendChild(mk('td', null, COMPONENTS[i].key));\n            var c1 = mk('td', 'num', bPD[i].toFixed(4)); tr.appendChild(c1);\n            var c2 = mk('td', 'num', tPD[i].toFixed(4)); tr.appendChild(c2);\n            var c3 = mk('td', 'num', isFlat ? 'unchanged' : (cdelta > 0 ? 'down ' + pct(cdelta \/ bPD[i], 0) : 'up')); tr.appendChild(c3);\n            var c4 = mk('td', 'num', money(cdelta * vol, 0)); tr.appendChild(c4);\n            tb.appendChild(tr);\n        }\n        var trt = document.createElement('tr');\n        trt.className = 'total';\n        trt.appendChild(mk('td', null, 'Cost per compliant decision'));\n        trt.appendChild(mk('td', 'num', bTot.toFixed(4)));\n        trt.appendChild(mk('td', 'num', tTot.toFixed(4)));\n        trt.appendChild(mk('td', 'num', pct(deltaPct, 1)));\n        trt.appendChild(mk('td', 'num', money(monthly, 0)));\n        tb.appendChild(trt);\n\n        var cn = el('cp-comp-note');\n        var complianceFlat = false;\n        if (Math.abs(bPD[1] - tPD[1]) * vol > 0.5) { complianceFlat = false; } else { complianceFlat = true; }\n        if (complianceFlat) {\n            cn.className = 'cp-note ok';\n            cn.textContent = 'Compliance overhead is held flat, which is the defensible position. Chapter 10 is explicit that regulatory requirements do not change with an infrastructure change, and that owning more of the logging infrastructure may push this component up slightly rather than down. Holding it flat is what stops this metric degenerating into a pure cost optimisation exercise.';\n        } else {\n            if (tPD[1] > bPD[1]) {\n                cn.className = 'cp-note ok';\n                cn.textContent = 'Compliance overhead rises in the target. That is credible and worth saying out loud: owning more of the logging and lineage infrastructure usually increases this component. A case that survives this admission is a stronger case than one that hides it.';\n            } else {\n                cn.className = 'cp-note warn';\n                cn.textContent = 'Compliance overhead falls in the target, and this is the first line a sceptical CFO will challenge. The regulation does not care where the inference runs. If the reduction is real, it comes from automating evidence production rather than from the infrastructure change, and it should be argued as a separate initiative with its own basis. Otherwise hold it flat and let the case stand on compute and latency.';\n            }\n        }\n\n        \/* ---------- trajectory ---------- *\/\n        var computeFactor = (1 + tok) * (1 - defl);\n        var trajRows = [];\n        var pvSave = 0;\n        var yr = 0;\n        for (yr = 1; yr !== YEARS + 1; yr++) {\n            var vAnnual = vol * 12 * Math.pow(1 + g, yr - 1);\n            var cf = Math.pow(computeFactor, yr - 1);\n            var cgf = Math.pow(1 + cg, yr - 1);\n            var bC = bPD[0] * cf + bPD[1] * cgf + bPD[2] + bPD[3];\n            var tC = tPD[0] * cf + tPD[1] * cgf + tPD[2] + tPD[3];\n            var bT = bC * vAnnual;\n            var tT = tC * vAnnual;\n            var sv = bT - tT;\n            pvSave = pvSave + sv \/ Math.pow(1 + d, yr);\n            trajRows.push({ y: yr, v: vAnnual, bC: bC, tC: tC, bT: bT, tT: tT, sv: sv });\n        }\n        var tj = el('cp-traj');\n        clear(tj);\n        for (i = 0; i !== trajRows.length; i++) {\n            var r = trajRows[i];\n            var row = document.createElement('tr');\n            row.appendChild(mk('td', null, 'Year ' + r.y));\n            row.appendChild(mk('td', 'num', money(r.v, 0)));\n            row.appendChild(mk('td', 'num', r.bC.toFixed(4)));\n            row.appendChild(mk('td', 'num', r.tC.toFixed(4)));\n            row.appendChild(mk('td', 'num', money(r.bT, 0)));\n            row.appendChild(mk('td', 'num', money(r.tT, 0)));\n            row.appendChild(mk('td', 'num', money(r.sv, 0)));\n            tj.appendChild(row);\n        }\n\n        var px = el('cp-paradox');\n        var unitUp = trajRows[YEARS - 1].bC > trajRows[0].bC;\n        var totalUp = trajRows[YEARS - 1].bT > trajRows[0].bT;\n        if (totalUp) {\n            if (unitUp) {\n                px.className = 'cp-note warn';\n                px.textContent = 'On your assumptions both unit cost and total cost rise across the five years, because compute consumed per decision is growing faster than unit prices are falling and compliance overhead is climbing. Nothing about this position improves by waiting.';\n            } else {\n                px.className = 'cp-note caution';\n                px.textContent = 'This is the pattern to take care with. Unit cost falls from ' +\n                    trajRows[0].bC.toFixed(4) + ' to ' + trajRows[YEARS - 1].bC.toFixed(4) +\n                    ' while the total baseline bill rises from ' + money(trajRows[0].bT, 0) + ' to ' +\n                    money(trajRows[YEARS - 1].bT, 0) + '. A board shown only the falling unit cost has been misled. Show both lines, every quarter, in the same slide.';\n            }\n        } else {\n            px.className = 'cp-note ok';\n            px.textContent = 'Both unit cost and total cost fall across the period on your assumptions. That is an unusual position, so check the volume growth figure: a flat or shrinking decision volume is worth confirming with the business before you rely on it.';\n        }\n\n        \/* ---------- cash and present value ---------- *\/\n        el('cp-monthly').textContent = money(monthly, 0);\n        el('cp-annual').textContent = money(annual, 0);\n        var npv = pvSave - trans;\n        el('cp-npv').textContent = money(npv, 0);\n        if (npv > 0) { el('cp-npv').className = 'cp-big'; } else { el('cp-npv').className = 'cp-big neg'; }\n\n        var pb = el('cp-payback');\n        if (trans > 0) {\n            if (monthly > 0) {\n                var months = trans \/ monthly;\n                pb.className = 'cp-note ok';\n                pb.textContent = 'Simple payback on the ' + money(trans, 0) + ' transition cost arrives in about ' +\n                    months.toFixed(1) + ' months at the current monthly saving, before any volume growth. Quote simple payback and present value together, never one instead of the other.';\n            } else {\n                pb.className = 'cp-note warn';\n                pb.textContent = 'There is a transition cost of ' + money(trans, 0) +\n                    ' and no monthly saving to recover it. Simple payback does not exist for this configuration, so the case has to rest entirely on exposure removed or obligation met.';\n            }\n        } else {\n            pb.className = 'cp-note info';\n            pb.textContent = 'No transition cost was entered, so no payback period is calculated. If this comparison involves any migration, build or licensing effort, enter it: a case with no transition cost is the first thing finance will disbelieve.';\n        }\n\n        \/* delay cost. If the whole savings profile shifts right by one year, the present\n           value becomes pvSave divided by (1 plus d), so the cost of delay is\n           pvSave multiplied by d divided by (1 plus d). Closed form, and it assumes the\n           profile is unchanged by the delay, which is the conservative treatment. *\/\n        var delayCost = 0;\n        if (pvSave > 0) { delayCost = pvSave * d \/ (1 + d); }\n        el('cp-delay').textContent = money(delayCost, 0);\n        var dn = el('cp-delay-note');\n        if (pvSave > 0) {\n            if (d > 0) {\n                dn.className = 'cp-note caution';\n                dn.textContent = 'Waiting twelve months costs ' + money(delayCost, 0) +\n                    ' in present value terms, on the assumption that the whole savings profile simply arrives a year later. Year one savings of ' +\n                    money(trajRows[0].sv, 0) + ' are not deferred, they are never earned. In practice this figure is the one that moves a funding decision.';\n            } else {\n                dn.className = 'cp-note info';\n                dn.textContent = 'With a discount rate of zero there is no present value penalty for delay in this model. Ask finance for the corporate hurdle rate; a zero rate understates the cost of waiting.';\n            }\n        } else {\n            dn.className = 'cp-note info';\n            dn.textContent = 'There is no positive saving to forgo, so no delay cost is calculated. If the target is still the right answer, the argument is exposure, not economics.';\n        }\n\n        \/* ---------- assumption checks ---------- *\/\n        var u = pick('cp-u');\n        var ut = el('cp-util');\n        if (u === 'na') {\n            ut.className = 'cp-note ok';\n            ut.textContent = 'Utilisation: not applicable. The target uses metered capacity, so the compute figure is what you are billed and carries no amortisation assumption. This removes the single most common way an on premises case fails its first finance review.';\n        } else {\n            if (u === 'high') {\n                ut.className = 'cp-note ok';\n                ut.textContent = 'Utilisation: measured above 40 percent, which is broadly the threshold at which owned capacity beats metered capacity. Because it is measured rather than assumed, the amortised compute figure of ' +\n                    tPD[0].toFixed(4) + ' per decision will survive challenge. Keep measuring it: the case degrades quietly if utilisation falls.';\n            } else {\n                if (u === 'mid') {\n                    ut.className = 'cp-note caution';\n                    ut.textContent = 'Utilisation: measured between 15 and 40 percent. That is the typical enterprise range and it sits below the level at which owned capacity usually wins. Your target compute figure of ' +\n                        tPD[0].toFixed(4) +\n                        ' per decision is only valid at the utilisation actually achieved, so show finance the measurement and the plan to raise it. Reserved capacity that idles still accrues.';\n                } else {\n                    ut.className = 'cp-note warn';\n                    ut.textContent = 'Utilisation: below 15 percent or unmeasured. This is the finding that most often breaks an owned compute case. An amortised figure divided by nameplate capacity rather than by the decisions actually served can be wrong by an order of magnitude, and your target compute figure of ' +\n                        tPD[0].toFixed(4) +\n                        ' per decision should be treated as unproven until utilisation is measured. Measure it before the paper goes to committee, not after.';\n                }\n            }\n        }\n\n        var l = pick('cp-l');\n        var lc = el('cp-latconf');\n        var latShare = 0;\n        if (bTot > 0) { latShare = bPD[2] \/ bTot; }\n        if (l === 'cal') {\n            lc.className = 'cp-note ok';\n            lc.textContent = 'Latency cost: calibrated against your own data. That matters here because latency is ' +\n                pct(latShare, 0) + ' of the baseline unit cost. Published sensitivity spans roughly one to seven percent conversion loss per hundred milliseconds, so a borrowed figure would have been the weakest number in the paper.';\n        } else {\n            if (l === 'bench') {\n                lc.className = 'cp-note caution';\n                lc.textContent = 'Latency cost: estimated from published benchmarks, and it carries ' +\n                    pct(latShare, 0) + ' of the baseline unit cost. Published sensitivity spans roughly one to seven percent conversion loss per hundred milliseconds, a sevenfold spread, so expect this line to be challenged. Show the case with latency set to zero as well: if it still clears, the challenge stops mattering.';\n            } else {\n                lc.className = 'cp-note info';\n                lc.textContent = 'Latency cost: not quantified, so it contributes nothing to either side. That is an honest position and it makes the rest of the case harder to attack. If this workload is latency sensitive, credit decisions, fraud checks and clinical support usually are, then quantifying it later will strengthen the case rather than weaken it.';\n            }\n        }\n\n        var pv = el('cp-provenance');\n        pv.className = 'cp-note info';\n        pv.textContent = 'Provenance: the first question finance asks is where each number came from. Compute comes from your FinOps data, which the FOCUS specification now normalises for token billing and shared accelerator allocation. Compliance overhead comes from audit logging and retention spend, lineage tooling and documentation effort. Latency cost comes from your own telemetry multiplied by your own calibrated sensitivity. Governance overhead comes from reviewer staffing, escalation handling and model monitoring. Record the source beside each figure before you circulate this.';\n\n        \/* ---------- three executives ---------- *\/\n        el('cp-cfo').textContent = 'A unit cost of ' + bTot.toFixed(4) + ' today, moving to ' +\n            tTot.toFixed(4) + ', comparable across workloads and across time, and improvable through placement. Workload owners can be held to the trajectory rather than to the invoice.';\n        var croText = 'Compliance overhead of ' + bPD[1].toFixed(4) +\n            ' per decision is regulatory cost made visible and attributable. ';\n        if (cg > 0) {\n            croText = croText + 'At your assumed ' + (cg * 100).toFixed(0) +\n                ' percent annual growth it reaches ' + (bPD[1] * Math.pow(1 + cg, YEARS - 1)).toFixed(4) +\n                ' by year five. A workload whose compliance overhead is rising signals a tightening environment or a degrading audit posture, and the pattern shows here before it becomes an enforcement action.';\n        } else {\n            croText = croText + 'You have assumed it stays flat. Few regulated workloads do, so test that assumption: rising evidence requirements are the normal case.';\n        }\n        el('cp-cro').textContent = croText;\n        el('cp-cio').textContent = 'Latency cost of ' + bPD[2].toFixed(4) + ' per decision, ' +\n            pct(latShare, 0) + ' of the unit cost, turns model and topology performance into a financial figure. A workload whose latency cost is rising signals a system needing optimisation or a deployment topology needing revision, visible before it becomes a user complaint.';\n\n        \/* ================= THE CHALLENGED CASE =================\n           Every unproven input replaced with its conservative version and the\n           model rerun. A CFO applies a haircut to numbers that have not been\n           evidenced, so the tool applies it first and shows the result. *\/\n        var chB = [bPD[0], bPD[1], bPD[2], bPD[3]];\n        var chT = [tPD[0], tPD[1], tPD[2], tPD[3]];\n        var haircuts = [];\n\n        \/* latency: a borrowed benchmark spans a sevenfold range, so remove it\n           from BOTH sides rather than discounting one *\/\n        if (l === 'bench') {\n            if (bPD[2] + tPD[2] > 0) {\n                chB[2] = 0; chT[2] = 0;\n                haircuts.push('Latency cost set to zero on both sides, because a published benchmark spanning roughly one to seven percent per hundred milliseconds is not evidence.');\n            }\n        }\n        \/* owned capacity: an amortised figure divided by nameplate rather than by\n           decisions actually served understates cost. Scale the target up. *\/\n        var utilMult = 1;\n        if (u === 'mid') { utilMult = 1.5; }\n        if (u === 'low') { utilMult = 2.5; }\n        if (utilMult > 1) {\n            chT[0] = tPD[0] * utilMult;\n            haircuts.push('Target compute multiplied by ' + utilMult.toFixed(1) +\n                ', because an amortised figure is only valid at the utilisation actually achieved.');\n        }\n        \/* compliance overhead falling with an infrastructure change is not defensible *\/\n        if (bPD[1] > tPD[1] + 0.0000001) {\n            chT[1] = bPD[1];\n            haircuts.push('Target compliance overhead held at the baseline, because the regulation does not care where the inference runs.');\n        }\n\n        var chBTot = chB[0] + chB[1] + chB[2] + chB[3];\n        var chTTot = chT[0] + chT[1] + chT[2] + chT[3];\n        var chPV = 0;\n        for (yr = 1; yr !== YEARS + 1; yr++) {\n            var chV = vol * 12 * Math.pow(1 + g, yr - 1);\n            var chcf = Math.pow(computeFactor, yr - 1);\n            var chcgf = Math.pow(1 + cg, yr - 1);\n            var chbC = chB[0] * chcf + chB[1] * chcgf + chB[2] + chB[3];\n            var chtC = chT[0] * chcf + chT[1] * chcgf + chT[2] + chT[3];\n            chPV = chPV + (chbC - chtC) * chV \/ Math.pow(1 + d, yr);\n        }\n        var chNPV = chPV - trans;\n        el('cp-chal').textContent = money(chNPV, 0);\n        el('cp-chalunit').textContent = chTTot.toFixed(4);\n        if (chNPV > 0) { el('cp-chal').className = 'cp-big'; } else { el('cp-chal').className = 'cp-big neg'; }\n        var chn = el('cp-chalnote');\n        if (haircuts.length === 0) {\n            chn.className = 'cp-note ok';\n            chn.textContent = 'No haircut was applied. Utilisation is measured or not applicable, latency is calibrated against your own data, and compliance overhead is not falling. The headline case and the challenged case are the same number, which is the strongest position this tool can report.';\n        } else {\n            if (chNPV > 0) {\n                chn.className = 'cp-note ok';\n                chn.textContent = 'The case survives being rebuilt by a sceptic, at ' + money(chNPV, 0) +\n                    ' against the headline ' + money(npv, 0) + '. Present the challenged figure and mention the headline, not the other way round. Adjustments applied: ' + haircuts.join(' ');\n            } else {\n                chn.className = 'cp-note warn';\n                chn.textContent = 'The case does not survive being rebuilt by a sceptic. It falls from ' +\n                    money(npv, 0) + ' to ' + money(chNPV, 0) + '. Do not take the headline figure to committee. Either evidence the assumptions first or propose a smaller first phase with a gate. Adjustments applied: ' + haircuts.join(' ');\n            }\n        }\n\n        \/* ================= BREAKEVEN =================\n           Present value is linear in target compute per decision, so the breakeven\n           is exact. K is the discounted, growth weighted, deflation weighted\n           volume against which target compute is charged. *\/\n        var kFactor = 0;\n        for (yr = 1; yr !== YEARS + 1; yr++) {\n            kFactor = kFactor + Math.pow(computeFactor, yr - 1) *\n                      (vol * 12 * Math.pow(1 + g, yr - 1)) \/ Math.pow(1 + d, yr);\n        }\n        var bevUnit = 0;\n        var headroom = 0;\n        if (kFactor > 0) { bevUnit = tPD[0] + npv \/ kFactor; }\n        if (tPD[0] > 0) { headroom = (bevUnit - tPD[0]) \/ tPD[0]; }\n        el('cp-bevunit').textContent = Math.max(0, bevUnit).toFixed(4);\n        var bvn = el('cp-bevnote');\n        if (npv > 0) {\n            if (tPD[0] > 0) {\n                el('cp-bevhead').textContent = pct(headroom, 0);\n                el('cp-bevhead').className = 'cp-big';\n                bvn.className = 'cp-note ok';\n                bvn.textContent = 'Target compute can come in at up to ' + Math.max(0, bevUnit).toFixed(4) +\n                    ' per decision, against the ' + tPD[0].toFixed(4) + ' you have modelled, before five year present value reaches zero. That is ' +\n                    pct(headroom, 0) + ' of headroom. Quote this figure unprompted: a case that states its own breakeven is treated very differently from one that has to be asked.';\n            } else {\n                el('cp-bevhead').textContent = 'n\/a';\n                el('cp-bevhead').className = 'cp-big';\n                bvn.className = 'cp-note info';\n                bvn.textContent = 'Target compute is zero, so headroom cannot be expressed as a percentage. The case breaks even once target compute reaches ' +\n                    Math.max(0, bevUnit).toFixed(4) + ' per decision.';\n            }\n        } else {\n            el('cp-bevhead').textContent = 'none';\n            el('cp-bevhead').className = 'cp-big neg';\n            bvn.className = 'cp-note warn';\n            bvn.textContent = 'There is no headroom, because present value is already negative. Target compute would have to fall to ' +\n                Math.max(0, bevUnit).toFixed(4) + ' per decision for the case to break even, against the ' +\n                tPD[0].toFixed(4) + ' modelled.';\n        }\n\n        \/* ================= CONFIDENCE GRADE =================\n           Graded on whether the number can be defended, not on how good it looks. *\/\n        var confPass = [];\n        var confFail = [];\n        if (u === 'na') { confPass.push('Compute is metered, so it carries no amortisation assumption.'); }\n        else {\n            if (u === 'high') { confPass.push('Owned capacity utilisation is measured above 40 percent.'); }\n            else {\n                if (u === 'mid') { confFail.push('Owned capacity utilisation is measured but below the level at which owned beats metered.'); }\n                else { confFail.push('Owned capacity utilisation is below 15 percent or unmeasured, so the target compute figure is unproven.'); }\n            }\n        }\n        if (l === 'cal') { confPass.push('Latency cost is calibrated against your own conversion or penalty data.'); }\n        else {\n            if (l === 'zero') { confPass.push('Latency cost is excluded rather than estimated, so it cannot be attacked.'); }\n            else { confFail.push('Latency cost rests on a published benchmark spanning a sevenfold range.'); }\n        }\n        if (bPD[1] > tPD[1] + 0.0000001) { confFail.push('Compliance overhead falls in the target, which the regulation does not support.'); }\n        else { confPass.push('Compliance overhead is held flat or rises, which is the defensible treatment.'); }\n        if (trans > 0) { confPass.push('A transition cost is included in the case.'); }\n        else { confFail.push('No transition cost is included, so the case assumes the change is free to make.'); }\n\n        var score = confPass.length;\n        var grade = 'D'; var glabel = 'Not yet presentable';\n        if (score === 4) { grade = 'A'; glabel = 'Evidenced'; }\n        if (score === 3) { grade = 'B'; glabel = 'Defensible'; }\n        if (score === 2) { grade = 'C'; glabel = 'Challengeable'; }\n        if (score > 4) { grade = 'A'; glabel = 'Evidenced'; }\n        el('cp-grade').className = 'cp-grade g' + grade;\n        el('cp-grade').textContent = grade;\n        el('cp-gradelabel').textContent = glabel;\n        var cl2 = el('cp-conflist'); clear(cl2);\n        for (i = 0; i !== confPass.length; i++) {\n            var liP = mk('li', null, confPass[i]);\n            liP.style.color = '#14603c';\n            liP.style.fontSize = '13px';\n            liP.style.lineHeight = '1.55';\n            liP.style.marginBottom = '6px';\n            cl2.appendChild(liP);\n        }\n        for (i = 0; i !== confFail.length; i++) {\n            var liF = mk('li', null, confFail[i]);\n            liF.style.color = '#922b21';\n            liF.style.fontSize = '13px';\n            liF.style.lineHeight = '1.55';\n            liF.style.marginBottom = '6px';\n            cl2.appendChild(liF);\n        }\n        var cfn = el('cp-confnote');\n        if (grade === 'A') {\n            cfn.className = 'cp-note ok';\n            cfn.textContent = 'All four tests pass. This case can go to an investment committee as it stands.';\n        } else {\n            if (grade === 'B') {\n                cfn.className = 'cp-note caution';\n                cfn.textContent = 'Three of four tests pass. Close the remaining one before the paper is circulated; it is the line a reviewer will find.';\n            } else {\n                if (grade === 'C') {\n                    cfn.className = 'cp-note caution';\n                    cfn.textContent = 'Two of four tests pass. Present the challenged figure rather than the headline, and say which assumptions you are still evidencing.';\n                } else {\n                    cfn.className = 'cp-note warn';\n                    cfn.textContent = 'Fewer than two tests pass. This is an internal working figure, not a board paper. Evidencing the failed items is cheaper than losing credibility on the first one a reviewer tests.';\n                }\n            }\n        }\n\n        \/* ================= MATERIALITY ================= *\/\n        var budget = val('cp-budget');\n        var mn = el('cp-material');\n        if (budget > 0) {\n            var shareB = annual \/ budget;\n            mn.className = 'cp-note info';\n            mn.textContent = 'Materiality: the annualised saving is ' + pct(shareB, 2) +\n                ' of a ' + money(budget, 0) + ' annual technology budget, and the five year present value is ' +\n                pct(npv \/ budget, 1) + ' of one year of it. An absolute figure with no denominator is how a sound case gets filed rather than funded, so lead with the share.';\n        } else {\n            mn.className = 'cp-note info';\n            mn.textContent = 'Materiality: no technology budget was entered, so the saving is shown in absolute terms only. Enter one and the tool expresses the saving as a share of spend, which is how a board judges whether a number is worth a meeting.';\n        }\n\n        \/* ================= THE ASK ================= *\/\n        var owner = el('cp-owner').value;\n        if (owner) { owner = owner.replace(\/\\s+\/g, ' '); }\n        var askList = el('cp-asklist'); clear(askList);\n        var decision = '';\n        if (delta > 0) {\n            decision = 'Approve the move for ' + name + ', reducing cost per compliant decision from ' +\n                       bTot.toFixed(4) + ' to ' + tTot.toFixed(4) + ', a ' + pct(deltaPct, 1) + ' reduction.';\n        } else {\n            if (delta === 0) {\n                decision = 'Decide on ' + name + ' on grounds other than unit cost. The two positions cost the same per compliant decision.';\n            } else {\n                decision = 'Decide on ' + name + ' as an exposure decision, not a cost decision. The target costs ' +\n                           pct(-deltaPct, 1) + ' more per compliant decision.';\n            }\n        }\n        var amount = '';\n        if (trans > 0) { amount = ccy + ' ' + money(trans, 0) + ' of one off transition cost.'; }\n        else { amount = 'No capital requested. No transition cost has been entered, which committee will question.'; }\n        var ret = '';\n        if (chNPV > 0) {\n            ret = ccy + ' ' + money(chNPV, 0) + ' five year present value on the challenged case, ' + ccy + ' ' + money(npv, 0) + ' on the headline case.';\n        } else {\n            ret = ccy + ' ' + money(npv, 0) + ' on the headline case, but ' + ccy + ' ' + money(chNPV, 0) +\n                  ' once unproven assumptions are rebuilt conservatively. The challenged figure is the one to quote.';\n        }\n        var ownerLine = '';\n        if (owner) { ownerLine = owner + ', accountable for this workload\\'s cost per compliant decision and for the trajectory reported each quarter.'; }\n        else { ownerLine = 'NOT NAMED. Chapter 7 asks who owns this workload\\'s cost per compliant decision. Until that is a person rather than a function, this is an analysis and not a commitment.'; }\n        var delayLine = '';\n        if (delayCost > 0) {\n            delayLine = ccy + ' ' + money(delayCost, 0) + ' in present value, plus year one savings of ' + ccy + ' ' + money(trajRows[0].sv, 0) +\n                        ' which are not deferred but never earned.';\n        } else {\n            delayLine = 'No quantified cost of delay, because there is no positive saving to forgo.';\n        }\n        var askRows = [\n            ['Decision requested', decision],\n            ['Amount requested', amount],\n            ['Return', ret],\n            ['Confidence', grade + ', ' + glabel.toLowerCase() + '. ' + confPass.length + ' of 4 evidence tests pass.'],\n            ['Accountable owner', ownerLine],\n            ['Cost of deferring twelve months', delayLine]\n        ];\n        for (i = 0; i !== askRows.length; i++) {\n            var arow = mk('div', 'cp-askrow');\n            arow.appendChild(mk('b', null, askRows[i][0]));\n            arow.appendChild(mk('span', null, askRows[i][1]));\n            askList.appendChild(arow);\n        }\n        el('cp-askh').textContent = 'The ask, for ' + name;\n\n        \/* ---------- board paper ---------- *\/\n        var lines = [];\n        lines.push('COST PER COMPLIANT DECISION');\n        lines.push('Workload: ' + name);\n        lines.push('Prepared [DATE] by [NAME, ROLE]. Method: the CpCD formula from When Agents Rule, Chapter 10.');\n        lines.push('All amounts in ' + ccy + '. Unit costs are per compliant decision, to four decimal places.');\n        lines.push('');\n        lines.push('HEADLINE. Baseline ' + bTot.toFixed(4) + ' per compliant decision. Target ' +\n                   tTot.toFixed(4) + '. Change ' + pct(deltaPct, 1) + '. At ' + money(vol, 0) +\n                   ' decisions a month that is ' + ccy + ' ' + money(monthly, 0) + ' a month and ' + ccy + ' ' +\n                   money(annual, 0) + ' annualised.');\n        lines.push('');\n        lines.push('COMPONENTS, PER DECISION.');\n        for (i = 0; i !== 4; i++) {\n            lines.push('  ' + COMPONENTS[i].key + ': ' + bPD[i].toFixed(4) + ' to ' + tPD[i].toFixed(4));\n        }\n        if (flatLines.length > 0) {\n            lines.push('  Held unchanged: ' + flatLines.join(', ') + '.');\n        }\n        lines.push('');\n        lines.push('FIVE YEAR POSITION at a ' + (d * 100).toFixed(1) + ' percent discount rate.');\n        lines.push('  Present value of savings, net of transition cost: ' + ccy + ' ' + money(npv, 0) + '.');\n        if (trans > 0) {\n            if (monthly > 0) {\n                lines.push('  Simple payback on ' + ccy + ' ' + money(trans, 0) + ' transition cost: about ' +\n                           (trans \/ monthly).toFixed(1) + ' months.');\n            }\n        }\n        if (pvSave > 0) {\n            lines.push('  Present value cost of waiting twelve months: ' + ccy + ' ' + money(delayCost, 0) + '.');\n        } else {\n            lines.push('  Present value cost of waiting twelve months: not applicable. There is no positive saving to forgo, so delay carries no quantified financial penalty in this model. That is not an argument for waiting: if the target is still the right answer, the case is exposure rather than economics.');\n        }\n        lines.push('');\n        lines.push('TRAJECTORY. Baseline unit cost moves ' + trajRows[0].bC.toFixed(4) + ' to ' +\n                   trajRows[YEARS - 1].bC.toFixed(4) + ' over five years while the baseline total bill moves ' +\n                   ccy + ' ' + money(trajRows[0].bT, 0) + ' to ' + ccy + ' ' + money(trajRows[YEARS - 1].bT, 0) +\n                   ', on assumed volume growth of ' + (g * 100).toFixed(0) +\n                   ' percent, compute unit price decline of ' + (defl * 100).toFixed(0) +\n                   ' percent, compute per decision growth of ' + (tok * 100).toFixed(0) +\n                   ' percent and compliance overhead growth of ' + (cg * 100).toFixed(0) + ' percent, all annual.');\n        lines.push('');\n        lines.push('THE ASK.');\n        for (i = 0; i !== askRows.length; i++) {\n            lines.push('  ' + askRows[i][0] + ': ' + askRows[i][1]);\n        }\n        lines.push('');\n        lines.push('CHALLENGED CASE. Rebuilt with every unproven input replaced by its conservative version: ' +\n                   ccy + ' ' + money(chNPV, 0) + ' five year present value, target unit cost ' + chTTot.toFixed(4) + '.');\n        if (haircuts.length > 0) {\n            for (i = 0; i !== haircuts.length; i++) { lines.push('  ' + haircuts[i]); }\n        } else {\n            lines.push('  No haircut applied. Headline and challenged cases are identical.');\n        }\n        lines.push('');\n        lines.push('BREAKEVEN. Target compute can reach ' + Math.max(0, bevUnit).toFixed(4) +\n                   ' per decision, against ' + tPD[0].toFixed(4) + ' modelled, before five year present value reaches zero.');\n        lines.push('');\n        lines.push('CONFIDENCE. Grade ' + grade + ', ' + glabel + '. ' + confPass.length + ' of 4 evidence tests pass.');\n        for (i = 0; i !== confFail.length; i++) { lines.push('  Outstanding: ' + confFail[i]); }\n        lines.push('');\n        lines.push('ASSUMPTION CHECKS.');\n        lines.push('  Owned capacity utilisation: ' + el('cp-util').textContent);\n        lines.push('  Latency calibration: ' + el('cp-latconf').textContent);\n        lines.push('');\n        lines.push('BASIS AND LIMITS. A modelling instrument applying the Chapter 10 formula to figures supplied by the preparer. Not an audit, a valuation or a benchmark. No external dataset underlies it and no peer comparison is claimed. Trajectory figures depend on forecasts of volume, unit price and evidence requirements that carry real uncertainty. Not accounting or financial advice.');\n        el('cp-cardtext').textContent = lines.join('\\n');\n\n        var res = el('cp-result');\n        res.className = 'cp-result on';\n        res.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n\n    \/* wiring *\/\n    var watched = root.querySelectorAll('input');\n    var k = 0;\n    for (k = 0; k !== watched.length; k++) {\n        watched[k].addEventListener('change', refresh);\n        watched[k].addEventListener('input', refresh);\n    }\n    el('cp-go').addEventListener('click', compute);\n    el('cp-print').addEventListener('click', function () { window.print(); });\n\n    el('cp-again').addEventListener('click', function () {\n        el('cp-result').className = 'cp-result';\n        root.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n\n    el('cp-clearbtn').addEventListener('click', function () {\n        var j = 0;\n        for (j = 0; j !== MONEY_IDS.length; j++) { el(MONEY_IDS[j]).value = '0'; }\n        el('cp-vol').value = '';\n        el('cp-name').value = '';\n        el('cp-owner').value = '';\n        el('cp-budget').value = '0';\n        el('cp-ccy').value = 'USD';\n        var rs = root.querySelectorAll('input[type=\"radio\"]');\n        for (j = 0; j !== rs.length; j++) { rs[j].checked = false; }\n        el('cp-result').className = 'cp-result';\n        refresh();\n        root.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n\n    el('cp-copy').addEventListener('click', function () {\n        var txt = el('cp-cardtext').innerText;\n        var btn = el('cp-copy');\n        function done(ok) {\n            btn.textContent = ok ? 'Copied' : 'Select the text above to copy';\n            window.setTimeout(function () { btn.textContent = 'Copy the paper'; }, 2600);\n        }\n        if (navigator.clipboard) {\n            navigator.clipboard.writeText(txt).then(function () { done(true); }, function () { done(false); });\n        } else {\n            var ta = document.createElement('textarea');\n            ta.value = txt;\n            document.body.appendChild(ta);\n            ta.select();\n            var ok = false;\n            try { ok = document.execCommand('copy'); } catch (e) { ok = false; }\n            document.body.removeChild(ta);\n            done(ok);\n        }\n    });\n\n    refresh();\n}());\n<\/script>\n\n\n\n<div id=\"elemID031021\" style=\"line-height:16px;text-align:center;z-index:100000;\"><a title=\"wix guests ip\" href=\"https:\/\/www.tracemyip.org\/pv1-3-36447-2\"><img decoding=\"async\" src=\"\/\/s3.tracemyip.org\/vLg\/1217\/4684NR-IPIB\/57003\/9\/njsUrl\/\" alt=\"Wix guests ip\" referrerpolicy=\"no-referrer-when-downgrade\" style=\"border:0px;\"><\/a><div><a href=\"https:\/\/www.tracemyip.org\/pv1-3-36447-2\">ip traffic<\/a><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>THE FINANCIAL METRIC: What does it cost to make one AI decision you can legally, auditably and defensibly stand behind? Framework Three \/\/ When Agents Rule Cost Per Compliant Decision Price your governance as unit economics rather than as a cost line. Compare two infrastructure or governance positions, get the trajectory of both, and get [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-831","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.opey.org\/opeyit\/index.php?rest_route=\/wp\/v2\/pages\/831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.opey.org\/opeyit\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.opey.org\/opeyit\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.opey.org\/opeyit\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.opey.org\/opeyit\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=831"}],"version-history":[{"count":3,"href":"https:\/\/www.opey.org\/opeyit\/index.php?rest_route=\/wp\/v2\/pages\/831\/revisions"}],"predecessor-version":[{"id":854,"href":"https:\/\/www.opey.org\/opeyit\/index.php?rest_route=\/wp\/v2\/pages\/831\/revisions\/854"}],"wp:attachment":[{"href":"https:\/\/www.opey.org\/opeyit\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}