{"schema_version":"1","site":"https://decosa.ai","id":"filing-tieout","num":"57","name":"Filing tie-out and MD&A grounding","tool_name":"Tie out MD&A figures","short":"Filing tie-out","blurb":"Ties every figure in a 10-K or 10-Q's MD&A to the filing's tagged statements and notes, in code: the cell it equals, or the change, percentage change or margin it is computed from. A figure that does not tie is flagged with the cell it was compared with: a different value, last year's figure, million for billion, the other direction, a note reference to the wrong note, or a note table that disagrees with a statement. Figures the tables do not show are left for a person. You get a workpaper and a signed record. A preparer's and reviewer's aid, not an audit.","status":"live","labels":{"industry":["finance","compliance-trust"],"job":["review","attest"],"input":["files","text"],"deploy":["selfhost"],"status":"live","output":["record","data"],"data":["confidential"],"hardware":"gpu-96","licence":"permissive"},"industries":["finance","compliance-trust"],"runs_in":["selfhost"],"part_of":[],"built_from":["numeric-grounding","grounding","signed-record"],"models":"The tie-out is plain code; Qwen3.8-27B optionally reads claims in words","where":"Self-host for drafts (pre-release numbers are MNPI); the hosted demo ties public EDGAR filings","hardware":"Any CPU for the tie-out; 1× RTX PRO 6000 (96 GB) or 1× RTX 5090 (32 GB) for Qwen3.8-27B if you want claims in words read","final_artifact":"A Markdown and CSV workpaper with every figure's cell or derivation, and a signed JSON record of hashes, statuses and fact ids.","self_host_first":true,"verification":{"receipt_coverage":"full","summary":"Every tie names a fact id; receipt per claim read; signed record over hashes, statuses and fact ids","manual_qa":{"hosted":{"date":"2026-09-26","result":"pass","p50_ms":9453,"p95_ms":null,"runs":null,"receipts_per_run":1,"cost_per_run_usd":0.0004},"selfhost":{"date":"2026-09-26","result":"pass","method":"fresh clone, compose up, sample against local model servers","notes":"A fresh clone of a decosa-api pre-release build (not yet merged), the api image built from it with DECOSA_TIEOUT_PUBLIC_ONLY=0, on the direct route to the running local Qwen3.8-27B. Re-run on commit 2562f1c with the rehearsal bundle (16 of 16 checks). The planted sample caught all seven plants in 0.21 s (0.61 s with one claim read), the clean sample had no flags, the record verified and a changed status failed, and an EDGAR fetch worked from the container."},"known_limits":["Only MD&A prose is tied; tables inside MD&A are not.","Recall is low by design: most wrong figures in single-figure sentences come back untraced rather than flagged.","Figures for segments, non-GAAP measures or narrower scopes that share a line's label can still be flagged against the consolidated line.","Drafts must be iXBRL or pasted text with CSV tables; Word and PDF are not read.","10-Q quarter periods are handled but were not evaluated."],"nightly_covers":null},"nightly":"https://api.decosa.ai/verify/status"},"eval_summary":{"metrics":[{"name":"False flags on untouched held-out 10-K MD&As (frozen rules)","value":"11 in 6,039 figures (1.8 per 1,000)","unit":null,"n":6039,"split":"test","note":"13 flags in 6 of 40 filings; 2 were real inconsistencies (stale note numbers in Harmonic). 6 flags, 2 real, after post-test fixes (not a clean test)."},{"name":"Note table that disagrees with a statement, caught","value":"79/79","unit":null,"n":79,"split":"test","note":null},{"name":"Scale error (million/billion) caught","value":"88/142 (62%)","unit":null,"n":142,"split":"test","note":null},{"name":"Another period's figure caught","value":"38/150 (25%)","unit":null,"n":150,"split":"test","note":null},{"name":"Flipped direction caught in code","value":"38/130 (29%)","unit":null,"n":130,"split":"test","note":null},{"name":"Wrong percentage change caught","value":"14/91 (15%)","unit":null,"n":91,"split":"test","note":null},{"name":"Changed figure caught","value":"22/153 (14%)","unit":null,"n":153,"split":"test","note":"Figures that tied in the clean pass; over all MD&A amounts 10/156."},{"name":"Flipped direction claims shown as a claim mismatch","value":"20/40","unit":null,"n":40,"split":"test","note":"3 of the same 40 sentences unflipped were also shown as mismatches; flips the judge called contradicted but was not sure of go to review. Measured 30 Sep on the direct route (same weights)."},{"name":"MD&A figures tied or computed","value":"34.6%","unit":null,"n":6039,"split":"test","note":null}],"dataset":"FY2025 10-Ks of US large accelerated filers from the SEC Financial Statement Data Sets 2026q1, picked by hash of the accession number and fetched from EDGAR: 100 for development (two rounds) and 40 fetched after the rules were frozen (test). Errors planted in code in the real MD&A text; the untouched MD&A is the clean set.","held_out":true,"caveats":["One agent wrote the rules, planted the errors and judged which flags on clean filings were real errors.","The planted errors are ours; real draft errors may differ.","Recall is low by design; most figures are not in the tagged tables at all and come back untraced.","The claim-judge eval forced the judge on every sentence; the product's sentence selection changed afterwards.","MD&A tables and 10-Q quarters are not measured."],"date":"2026-09-26","doc_url":"https://decosa.ai/metrics/evals/filing-tieout"},"stack":{"summary":"For SEC reporting teams, controllers and audit staff. Give it an inline XBRL 10-K or 10-Q (a draft from your disclosure tool, or a filed one from EDGAR), or tables pasted as CSV with a draft. Each figure in the MD&A prose is tied in code: to the cell it equals (fact id, table, period), or to the change, percentage change, margin or sum it is computed from, or it is flagged with the cell it was compared with: a different value, another period's figure, the wrong scale, the other direction, a note reference to the wrong note, or a note table that disagrees with a statement. Figures the tables do not show come back untraced for a person, not as errors. Optionally Qwen3.8-27B reads claims in words against the named lines. You get a Markdown and CSV workpaper and a signed record. A preparer's and reviewer's aid, not an audit.","tagline":"Every figure in a 10-K or 10-Q's MD&A tied to the tagged statements and notes, in code, with a signed workpaper.","deployment":"self-host-first","regulatory_note":"Checked 26 Sep 2026. Pre-release financial statements are material non-public information, so this is self-host first: the hosted demo ties public EDGAR filings, the bundled samples and text you declare public, and refuses the rest. MD&A content is set by SEC Regulation S-K Item 303 (eCFR, current text); the tie-out checks that the figures agree with the statements, not that the discussion is complete or its explanations right. Statements and notes are tagged in inline XBRL under Regulation S-T Rule 405; it reads the tags as filed and does not validate them. EDGAR requests follow SEC's fair-access policy (a declared User-Agent, well under 10 requests a second). PCAOB QC 1000 (a firm's system of quality control) is context for audit firms; we understand it to be effective 15 December 2026 after a postponement, but could not confirm the date on the PCAOB docket page (unverified). It is not an audit, gives no opinion and never says 'compliant'. Not legal or accounting advice. Model licence: Apache-2.0 (Qwen3.8-27B).","components":[{"id":"tieout","role":"iXBRL parser, figure tie-out, period and scale rules, direction and cross-reference checks, workpaper and signed record (no model; CPU)","name":"decosa-api tie-out (decosa_api/verticals/tieout) with the numeric grounding block's table-cell matcher (decosa_api/verticals/numeric/cells.py)","hf_repo":null,"license":"AGPL-3.0-or-later","params":null,"quant":null,"vram_gb":0,"memory_gb_estimate":null,"engine":"Python 3.12, standard library HTML parser; Decimal arithmetic for ties at the stated rounding, changes, percentage changes (allowing for the tables' rounding), margins, shares and sums","receipt_coverage":"partial","in_hosted_demo":null,"tiers":["lite","standard"],"alternative_to":null},{"id":"model","role":"Claims in words (optional): the grounding judge reads a sentence against the named lines' figures","name":"Qwen3.8-27B (NVFP4)","hf_repo":"nvidia/Qwen3.8-27B-NVFP4","license":"Apache-2.0","params":"27.8B","quant":"NVFP4 (MLP NVFP4, GDN/attention FP8) + FP8 KV cache; MTP head, 3 draft tokens","vram_gb":20,"memory_gb_estimate":null,"engine":"vLLM 0.29.0, temperature 0, thinking off, prefix caching","receipt_coverage":"strong","in_hosted_demo":true,"tiers":["standard"],"alternative_to":null},{"id":"docreader","role":"Tables inside the MD&A, and Word or PDF drafts (alternate)","name":"A licence-clean table and document reader (not chosen)","hf_repo":null,"license":"unknown","params":null,"quant":null,"vram_gb":null,"memory_gb_estimate":null,"engine":null,"receipt_coverage":"none","in_hosted_demo":false,"tiers":["alternates"],"alternative_to":null}],"tiers":[{"id":"lite","label":"Lite · figures only, no GPU","summary":"Every figure, period, scale, direction and note reference tied in code; no model, no receipts. Runs on any CPU.","components":["tieout"],"hardware":"Any CPU","quality_evidence":[{"metric":"False flags on untouched held-out 10-K MD&As (40 filings, frozen rules)","value":"11 in 6,039 figures (1.8 per 1,000); 2 more flags were real errors","source":"docs/evals/filing-tieout.md, 26 Sep 2026"},{"metric":"Planted errors caught, held-out: note table vs statement / scale / period / direction / % change / changed figure","value":"79/79 / 88/142 / 38/150 / 38/130 / 14/91 / 22/153","source":"docs/evals/filing-tieout.md, 26 Sep 2026"},{"metric":"MD&A figures tied or computed (held-out)","value":"34.6%","source":"docs/evals/filing-tieout.md, 26 Sep 2026"},{"metric":"Parser vs SEC's own extracted statement figures","value":"10,808 of 10,813","source":"docs/evals/filing-tieout.md, 26 Sep 2026"}],"latency_note":"The code checks alone are quick on one core, with no model call; the measured time is in the eval files.","in_hosted_demo":true,"receipt_coverage":"none","receipt_note":"No model call, so no receipts; the tie-out is deterministic code.","hosting":null},{"id":"standard","label":"Standard · one GPU for claims in words (hosted demo)","summary":"The lite tier plus Qwen3.8-27B reading up to 12 claims in words ('gross margin improved') against the named lines' figures.","components":["tieout","model"],"hardware":"1x RTX PRO 6000 96 GB (measured) or 1x RTX 5090 32 GB (estimate)","quality_evidence":[{"metric":"Flipped direction claims shown as mismatches (40 held-out sentences)","value":"20/40","source":"docs/evals/filing-tieout/claims-results-p1-1.json, 30 Sep 2026"},{"metric":"True sentences shown as mismatches (the same 40, unflipped)","value":"3/40","source":"docs/evals/filing-tieout/claims-results-p1-1.json, 30 Sep 2026"}],"latency_note":"Each claim sentence adds one model call on the shared gateway, so filings with more claims take longer; the measured time is shown in the header.","in_hosted_demo":true,"receipt_coverage":"strong","receipt_note":"Every claim read is a separate gateway call with a gateway-signed receipt; the signed record lists them.","hosting":null}],"alternates":[{"id":"docreader","label":"MD&A tables and Word/PDF drafts","components":["docreader"],"hardware":"1x RTX PRO 6000 96 GB (estimate)","use":"Tie the tables inside MD&A and read drafts from Word or PDF, not only iXBRL and pasted text. The reader is not chosen yet; it must be licence-clean.","status":"not built"}],"services":[{"name":"decosa-api","port":8445,"image":"${DECOSA_REGISTRY}/decosa-api:<tag>","purpose":"GET /tieout/info, /tieout/samples; POST /tieout/check (SSE or JSON), /tieout/verify. Stores only a cache of public EDGAR documents."},{"name":"vLLM (model, standard tier)","port":8114,"image":"vllm/vllm-openai@sha256:c2914767605584b6d8f45686b82de173ecc99e781897aa3d0a66dacd72c51ae1","purpose":"Qwen3.8-27B NVFP4 for claims in words, behind our gateway (hosted) or called directly (self-host)."}],"tools":[{"name":"SEC EDGAR (filings) and the Financial Statement and Notes data sets","url":"https://www.sec.gov/data-research/sec-markets-data/financial-statement-notes-data-sets","license":"US government work (public domain)","purpose":"The demo filings, the eval's 140 10-Ks and the parser check against SEC's own extracted figures."},{"name":"SEC, Accessing EDGAR Data (fair access)","url":"https://www.sec.gov/os/accessing-edgar-data","license":"US government work (public domain)","purpose":"User-Agent and rate rules the fetcher follows."},{"name":"Regulation S-K Item 303 (eCFR)","url":"https://www.ecfr.gov/current/title-17/chapter-II/part-229/subpart-229.300/section-229.303","license":"US regulation (public domain)","purpose":"What MD&A must discuss."},{"name":"PCAOB Docket 046, QC 1000","url":"https://pcaobus.org/about/rules-rulemaking/rulemaking-dockets/docket-046","license":"PCAOB publication","purpose":"Quality-control context for audit firms (effective date unverified)."},{"name":"scripts/eval_tieout.py and docs/evals/filing-tieout.md","url":null,"license":"Apache-2.0","purpose":"The filing sets, planted errors, clean-filing flags, the claim-judge eval and every result file."},{"name":"POST /tieout/verify","url":null,"license":"Apache-2.0","purpose":"Check a record's signature and the hashes of its Markdown and CSV workpapers."}],"hardware":[{"tier":"CPU only","fits":true,"notes":"Measured on our server: parse and tie of a whole 10-K takes a median 0.44-0.5 s on one core. This is the lite tier."},{"tier":"1x RTX PRO 6000 Blackwell 96 GB","fits":true,"notes":"Measured on our server: the hosted demo's claim calls ran on this card through the shared gateway."},{"tier":"1x RTX 5090 32 GB","fits":true,"notes":"Estimate: Qwen3.8-27B NVFP4 needs about 20 GB of weights plus KV cache; not run for this tool."}],"latency":[{"lane":"tie a whole 10-K (parse + figures + cross-references, no model)","typical_ms":440,"source":"measured on our server 2026-09-26: median over 40 held-out 10-Ks"},{"lane":"planted sample with claims in words, hosted gateway route","typical_ms":9450,"source":"measured on our server 2026-09-26: 3 smoke runs, 7.2-9.8 s, one claim call"},{"lane":"public 10-K fetched from EDGAR and tied (no claims)","typical_ms":2600,"source":"measured on our server 2026-09-26: Eastman Chemical, 2.4-2.8 s including two EDGAR requests"}],"benchmark":null,"notes":["On 40 held-out FY2025 10-Ks (frozen rules), the untouched MD&As produced 13 flags in 6,039 figures; 2 were real inconsistencies in the filings and 11 were false (1.8 per 1,000 figures). After fixing the bug classes that run showed, 6 flags, 2 real.","Planted errors caught on that held-out set: a note table that disagrees with a statement 79/79, a wrong scale 88/142, another period's figure 38/150, a flipped direction 38/130, a wrong percentage change 14/91, a changed figure 22/153. Recall is low by design: a near miss is only called when the sentence is surely about that line.","About a third of MD&A figures sit in tagged cells; the rest (non-GAAP measures, segment detail, deal terms, statistics) come back untraced for a person.","Across 140 filed 10-Ks it found five real inconsistencies we checked by hand: an accumulated deficit in Applied Optoelectronics' MD&A that disagrees with its balance sheet, and stale note numbers in Vaxcyte, NETGEAR and Harmonic (two).","The claim judge (re-measured 30 Sep, after a contradicted claim became a mismatch only when the judge is sure and compared a line the sentence names): 20 of 40 flipped direction claims shown as mismatches, 27 of 40 with the code's direction check, and 3 of 40 true sentences; the flips the judge was unsure of go to review."]},"buyer_facts":[{"label":"Data retention","value":"Nothing stored but a cache of public EDGAR documents you asked for. Drafts and tables live in memory for the request; the signed record holds hashes, statuses and fact ids, never text; logs carry counts only."},{"label":"What leaves the box","value":"Only an EDGAR request (CIK and accession number) when you ask for a public filing. Hosted: claim reads go through our gateway to the GPU serving Qwen3.8-27B. Self-hosted on the direct route with EDGAR off: nothing."},{"label":"What it will not do","value":"Audit, give an opinion or say 'compliant'. A clean result reads 'every figure tied to the tables (review still required)'; untraced figures are left for a person."},{"label":"Input formats","value":"An iXBRL 10-K or 10-Q up to 20 MB, a CIK and accession number, or up to 30 CSV tables with a draft of up to 120,000 characters; an optional trial balance CSV (account, name, balance, line)."},{"label":"Typical run","value":"The figures are tied in code, a whole 10-K MD&A in about a second with no model. Each claim in words that is read is one gateway call, up to the run's claims cap, so a 10-K with many claims costs several times the planted sample; the cost per filing shown is measured on whole filed 10-Ks with their claims read."}],"data_handling":{"page":"/data#filing-tieout","self_host":{"level":"confidential","leaves":"identifiers","summary":"Runs on your machine; by default only short identifiers or a digest go to the public services listed in external_calls."},"hosted":{"level":"operator-processed","demo_only":true,"summary":"Hosted demo on sample or public data only; self-host for real data.","gpus":"operator-contracted","third_parties":[],"retention":"Nothing stored but a cache of public EDGAR documents you asked for. Drafts and tables live in memory for the request; the signed record holds hashes, statuses and fact ids, never text; logs carry counts only.","used_for_training":false,"encrypted_while_processed":false},"sealed_tier":{"applies":false,"note":"The sealed tier (raw chat only, never use-case pipelines) is paused at launch (/docs/sealed-tier)."},"external_calls":[{"to":"SEC EDGAR (www.sec.gov)","route":"both","sends":"identifiers","what":"The CIK and accession number of a public filing you ask it to fetch, with a User-Agent naming the operator's contact address. Never your draft or tables.","default":"on","off":"Set DECOSA_TIEOUT_EDGAR=0, or send the document yourself."}]},"console":{"href":"/tools/finance/filing-tieout","input":"tieout","lanes":[{"id":"figures","title":"Figures, sentence by sentence","kind":"list"},{"id":"flags","title":"Flags","kind":"list"},{"id":"record","title":"Workpaper and signed record","kind":"json"}],"samples":[{"n":1,"id":"amd-fy2025-planted","title":"Amd fy2025 planted","deep_link":"/tools/finance/filing-tieout?sample=1&autorun=0"},{"n":2,"id":"aaoi-fy2025","title":"Aaoi fy2025","deep_link":"/tools/finance/filing-tieout?sample=2&autorun=0"},{"n":3,"id":"amd-fy2025","title":"Amd fy2025","deep_link":"/tools/finance/filing-tieout?sample=3&autorun=0"},{"n":4,"id":"synthetic-tables","title":"Synthetic tables","deep_link":"/tools/finance/filing-tieout?sample=4&autorun=0"}],"deep_link_params":{"sample":"1-based index into samples, or a sample id","autorun":"1 = start the run once the sample is loaded; 0 (default) = only preselect","reduce-motion":"1 = turn off animations"}},"api":{"base":"https://api.decosa.ai","contract":"/api/contract.json","contract_markdown":"/api/contract.md","reference":"/docs/api","keys":"/account/keys"},"prompts":{"hosted":"/prompts/filing-tieout-hosted.md","selfhost":"/prompts/filing-tieout-selfhost.md","assemble":"/prompts/filing-tieout-assemble.md","mac":null},"rehearsal":{"bundle":"/samples/filing-tieout.zip","bundle_url":"https://decosa.ai/samples/filing-tieout.zip","folder":"/samples/filing-tieout/","expected":"/samples/filing-tieout/expected.json","files":["/samples/filing-tieout/expected.json","/samples/filing-tieout/inputs/balance-sheet.csv","/samples/filing-tieout/inputs/draft.txt","/samples/filing-tieout/inputs/income-statement.csv","/samples/filing-tieout/inputs/trial-balance.csv"],"bytes":3482,"checks":["the synthetic draft does not tie","the transposed 2024 net income is a value mismatch naming the table's figure","the inventories accounts do not roll up to the balance sheet","the cash accounts roll up exactly","the planted AMD draft does not tie","four planted figures are mismatches (value, value, period, scale)","the scale error names the $577 million cell","the swapped period is recognised as another year's figure","the flipped direction is caught","the wrong note number is caught","the note table that disagrees with the income statement is caught","most figures still tie or compute","no model call was made (figures only)","the signed record verifies with both workpapers","the Markdown workpaper matches its hash","a changed status breaks the signature"],"licence":"The synthetic company, its tables, trial balance and draft are made up (part of decosa-api, AGPL-3.0-or-later). The AMD 10-K is an SEC EDGAR filing, a US government work in the public domain (17 U.S.C. 105).","about":"Two runs, for a self-hosted install (DECOSA_TIEOUT_PUBLIC_ONLY=0; on a public-only instance the pasted tables need \"public\": true, which the first step sends). First, a made-up company (Example Instruments Co.): its income statement and balance sheet as CSV in millions, a trial balance mapped to three balance-sheet lines, and a short MD&A draft in which 2024 net income is written as $64.2 million instead of $62.4 million. Second, AMD's filed FY2025 10-K (bundled with the API, public domain) with six errors planted in its MD&A text and one note table changed. Figures are tied in code with no model call (judge_claims false), so the rehearsal needs no GPU. Every planted error must come back as a mismatch naming the right cell, the rest must tie or compute, and the signed record must verify and catch a changed status.","run":{"containers":"docker compose exec api python scripts/rehearse.py filing-tieout","checkout":"python scripts/rehearse.py filing-tieout --bundle filing-tieout.zip --base-url http://127.0.0.1:8445","mac":".venv/bin/python scripts/rehearse.py filing-tieout"},"guidance":"Set up with a coding agent (we recommend Claude Code with Claude Opus 5.5; any capable coding agent works) on mock data only, run the rehearsal until every check passes, then run your own data locally yourself. Never give the agent real data during setup."},"hardware_fit":{"check":"/self-host/hardware?use=filing-tieout","data":"/api/hardware.json","tiers":[{"id":"lite","gpu_gb":0,"basis":null,"unknown":[]},{"id":"standard","gpu_gb":57.6,"basis":"stack","unknown":[]},{"id":"alternate-docreader","gpu_gb":0,"basis":null,"unknown":["docreader"]}],"mac":null},"links":{"page":"/tools/finance/filing-tieout","json":"/use-cases/filing-tieout.json","metrics":"/metrics/filing-tieout","console":"/tools/finance/filing-tieout","console_sample":"/tools/finance/filing-tieout?sample=1&autorun=0","stack":"/tools/finance/filing-tieout#stack","try_live":"/tools/finance/filing-tieout","watch":"/tools/finance/filing-tieout","build":"/tools/finance/filing-tieout#build","self_host":"/tools/finance/filing-tieout#self-host","prompts":{"hosted":"/prompts/filing-tieout-hosted.md","selfhost":"/prompts/filing-tieout-selfhost.md","assemble":"/prompts/filing-tieout-assemble.md","mac":null}}}