# Deck QC Desk > A quality-control desk for investment banking and client presentations. Paste a deck's slide text or > drop a .pptx; the browser checks every figure on every slide for free, a refresh lane rolls the deck > to new numbers with a change list the user approves line by line, and a paid QC pass writes the deck > check report. Every quote and figure the model writes is checked against the slide it cites. > https://deck-qc-desk.skillsafe.ai/ Deck QC Desk is a web app on SkillSafe derived from two agent skills in anthropics/financial-services-plugins (Apache-2.0): @anthropics/ib-check-deck (primary) and @anthropics/deck-refresh. It runs on gpt-terra and is metered per run; the prescan and the refresh change list are free and need no account. ## What the free prescan computes - Input: slide text with "## Slide N" markers (or --- separators), Markdown pipe tables, or a .pptx that is unzipped in the browser - text, tables and chart series data in slide order. Up to 80 slides. - Every figure with its slide, metric (nearest keyword or table row label) and period (nearest FY / LTM / quarter token or the table column header). $500M, $500MM and $500,000,000 are one number; a bare cell under a ($M) header is read in $M. - Cross-slide consistency: the same metric for the same period compared across slides at display precision ($0.5B and $485M agree, $318M and $305M do not) (a JavaScript port of ib-check-deck's extract_numbers.py, grouped by metric, unit class and period). - Arithmetic: growth "from A to B" against the stated %, CAGR with both years, EBITDA margin against its revenue and EBITDA (the deck's revenue for that period when the slide omits it), table Total rows. - Plausibility: "#1", "leading", "largest" claims tested as revenue / stated market size. - Drift: $M vs $MM, thousands separators vs K, date formats, quarter and fiscal-year label styles. - Sources and periods: slides with figures or charts and no source line; financial figures with no period. - Language against the skill's IB terminology table: contractions, exclamation points, casual phrasing, first person, unsupported superlatives, vague quantifiers; "Adjusted EBITDA" vs "EBITDA" drift. - Every flag has an id (P1, P2 ...) that the QC pass must answer. ## What the refresh lane does (free) - Mapping lines: "old -> new (label)", "label old -> new", tab-separated columns, or a new value alone. - Finds every instance of each old figure across scale ($485M, $0.485B, $485,000,000), precision ($485.0M, ~$485M), unit style ($485MM, $485 million) and bare chart or table numbers. - Writes each replacement in that instance's own style, and says when the deck's precision rounds it. - Flags derived numbers next to a changed figure (growth, margins, shares, multiples, totals) and recomputes growth, margins and totals where the deck gives the inputs. Nothing is applied until ticked. - Exports the refreshed slide text, a change log ("Changed" / "Still flagged - did NOT change") and a CSV. - Copies a find-and-replace list for PowerPoint: one pair per distinct change with its slides, and a caution wherever the old text stays on another slide (so Replace All would be wrong). - Never drops slides: a refreshed deck keeps every slide, including any past the 80-slide prescan limit. ## Limits are never silent Past 80 slides, past one run's input size, or past the change-list limits, the page says what was left out, the model is told, every affected export says "Partial", and the download name carries "-PARTIAL". ## Re-checking a deck A new QC pass of a deck you checked before is compared with your last pass of that deck: findings resolved, new and still open, on the page and in the report. ## What the paid runs return One JSON object per run, routed on `task`: - `check`: `verdict` (not_ready, fix_before_sending, client_ready - derived strictly from severities), `headline`, `findings` (severity critical / important / minor, category, slides, exact quote, issue, action, fix_from, fix_to, prescan id), `prescan_responses` (every prescan flag confirmed or dismissed), `checklist`, `summary`. Number fixes hand back to the refresh lane as a mapping in one click. - `refresh`: `headline`, `mapping` (reading, confidence, proposed old value for new-only lines), `skip` (instances that are a different metric), `extra` (missed instances), `derived` (stale figures with recalculations when the policy allows), `narrative` (wording that no longer fits), `questions`, `summary`. The review applies to the change list in one click; the user still approves each row. ## Limits It reads text, not pixels: overlaps, overflow, fonts and contrast need a person. It cannot write a .pptx back; the user edits from the change log. It knows nothing the deck does not say. Quality control, not investment advice. ## Links - App: https://deck-qc-desk.skillsafe.ai/ - API tutorial: https://deck-qc-desk.skillsafe.ai/api.html - Source skills: https://skillsafe.ai/skill/@anthropics/ib-check-deck and https://skillsafe.ai/skill/@anthropics/deck-refresh