WorkflowClinical Development

Medical Writing Quality Control

Medical writing quality control that traces every number to its table cell, so reviewers see only the mismatches

Every number traced to its table cell; reviewers see only mismatches

See one case, screen by screen ↓
demo1,150numberson 8 drafts traced to their table cells, with 18 left for a person to decide
demo9quotesin 6 documents still carrying dry-run values, found the moment one table was re-run
target94.5%of numbers match their table on the first pass; reviewers decide only the rest
target1.2daysmedian from draft received to QC sign-off
In short

What is Medical Writing Quality Control?

Software that checks a results document — a CSR section, synopsis, abstract, manuscript, lay summary or IB update — against the statistical outputs it quotes. Medical Writing Quality Control uses five agents to trace every number to its TLF cell, check it against your house rules and the other drafts, and raise only the numbers that disagree, for the QC lead to decide and sign.

How to choose AI solutions for life sciences →

Updated

The problem

Why QC of a results document takes days, and still misses the late re-run

Every CSR section, synopsis, abstract, manuscript, lay summary and IB update restates results from the TLFs. Before it goes out, a QC reviewer ticks each number against its table cell by hand — and checks that it comes from the analysis set the sentence names, uses the right denominator, is the primary analysis and is rounded the house way. One efficacy section can quote more than 200 numbers, and most of them already agree.

The dangerous case is the late re-run. A data query before lock changes one cell, the statistician re-runs the output, and the old value lives on in documents nobody re-checks: the synopsis now contradicts Section 14, the congress abstract quotes dry run 2, the plain-language summary rounds a number that no longer exists. Nobody can say, quickly, which drafts still quote the old cell.

typical2–5daysof manual QC per document
demo214numbersquoted in one CSR efficacy section, each to be ticked against its table
Where a CSR section's QC days goestimated
By hand4.5 days
With the solution1.7 days
  • Finding every number and the output it should come from0.8 → 0.1 d
  • Ticking each number against its TLF cell1.5 → 0.1 d
  • Population, denominator, analysis and rounding0.8 → 0.5 d
  • Working out which run a number came from, and statistician queries0.8 → 0.5 d
  • Cross-checking the synopsis, abstract and other drafts0.5 → 0.3 d
  • Comment log, corrections to the writer and the QC record0.3 → 0.2 d

Estimated split for one CSR section, by hand and with the solution. The totals — 4.5 working days by hand, 1.7 with the agents — are the medians the working solution's dashboard shows for a CSR section.

How it works

How a draft moves

Agents find every number, match it to its table cell, check house rules and the other documents, and trace every quote when a table is re-run; the QC lead decides each finding and signs.

What comes in
Draft inDraft + results tables · report, summary, abstract, paper
Agents at work
Number finderevery number + context
Then
Table matcheroutput, row, column
Then
Rule checker
Cross-document checkerre-run ripple across drafts
A person decides
QC leaddecides each finding and signs
What comes out
QC report
Corrections for writers
Signed QC record
One case, step by step

One late re-run, from the ripple to a signed QC record

VLT-302 — Veltrimab 150 mg every two weeks against placebo in plaque psoriasis, 642 patients randomised. The final run is loaded on Oct 2, and one sPGA table has changed since dry run 2. Here is what happens next, screen by screen, in the working solution.

  1. 01Morning

    Every draft on one desk, every number a dot

    Lena Ortiz · QC lead, medical writing

    Lena's home is the QC desk: 8 drafts on the desk, 1,150 numbers traced to their table cells, 18 to decide. Each draft is a page — CSR §11 Efficacy with 214 numbers and 9 open, the congress abstract due Oct 9 with 3 — and each number is a dot coloured by verdict: agrees with its cell, derived and recalculated, rounding or format, mismatch, no source, decided.

    “Each dot is one number · hover a large dot to see it”

  2. 02The re-run

    One table changed in two cells — the ripple shows where it is quoted

    Table matcher

    Above the pages runs the results package: VLT-302 final run, Oct 2, 412 outputs. Table 14.2.2.1 is marked in red: data query DQ-1187 at site 114 re-scored one Week 16 sPGA reading before lock, so Veltrimab responders went from 285 (66.6) to 284 (66.4) and the difference from 61.4 to 61.2. “Show the ripple” draws a line from the table to each quote of the changed cells: 9 quotes in 6 documents.

    “These drafts still quote dry run 2.”

  3. 03One click

    “Re-check the 9 quotes” — 6 still disagree, 3 settled

    Table matcher

    The table matcher compares the two runs — 2 of 9 cells changed — finds every quote of the changed cells and re-checks each against the final run. The CSR Synopsis and IB §5.3 quotes are already settled, their corrections sent; CSR §11, the congress abstract, the manuscript and the plain-language summary still quote dry run 2. The writers — Dr. Maya Chen, Priya Raman and Dana Okafor — are notified.

    Each step is shown as it runs, with what it found.

  4. 04Page 47

    The sentence, the reasoning and the table cell, side by side

    Lena Ortiz · QC lead, medical writing

    Lena opens 66.6% → 66.4% in CSR §11. The draft sits on the left, the TLF on the right, and a thread runs from the sentence to the cell — Table 14.2.2.1, Veltrimab column, 284 (66.4). Between them the rule checker explains the finding, the suggested fix and how sure the three agents are: 0.98.

    Rule checker: “The draft quotes dry run 2 (Sep 12). In the final run (Oct 2) one Week 16 sPGA reading at site 114 was corrected after data query DQ-1187, so Veltrimab responders fell from 285 to 284.”

  5. 05Where it came from

    The old number, found in the superseded run

    Table matcher

    One toggle switches the table to dry run 2 of Sep 12, stamped superseded, with 285 (66.6) in the cell the draft quotes and the footnote “DRY RUN — NOT FOR REPORTING. Data before database lock.” The verdict is always taken against the final run; the superseded run only shows where a stale number came from.

    The table matcher never matches against a superseded run without flagging it.

  6. 06Accept fix

    She accepts 66.4%; the fix goes to the writer

    Lena Ortiz · QC lead, medical writing

    Lena accepts the fix. The finding records who decided and when, the dot turns to decided, and the correction goes on Dr. Maya Chen's corrections list. The agents never edit the draft — the writer makes the change in her own document.

    “Fix accepted — 66.6% → 66.4% · on the corrections list for Dr. Maya Chen”

  7. 07Page 48

    The right number, from the wrong analysis set

    Rule checker

    Not every finding is a re-run. The sentence says per-protocol set, but 27.6% is the ITT result for PASI 100 in Table 14.2.3.1; the per-protocol value is 28.7% (116/404) in Table 14.2.3.2. On page 47 the confidence interval 55.4, 67.0 comes from the unstratified sensitivity analysis — the primary analysis gives 55.9, 66.5.

    “Change the value — or the population and the table reference.”

  8. 08Across documents

    Every finding, with the decision on record

    Lena Ortiz · QC lead, medical writing

    The findings list shows every number that disagrees with its table, across all documents: the draft value against the table value, the type — stale table version, wrong denominator, rounding, format, wrong population, different analysis, no source, wrong column, count differs — the source output and the status. From here Lena exports the comment log and sends the corrections to the writers.

  9. 09A new draft

    The topline memo, checked in seconds — and a number with no source

    Table matcher

    Omar's topline results memo v2 arrives and Lena checks it against the VLT-302 final run under the house rules for CSRs, memos and regulatory documents. Of 31 numbers, two are findings. “87 sites” has no output: the table matcher searched all 412 outputs, and site counts live in listing 16.1.4, which has not been loaded. Any TEAE at 52.1% divides by the randomised N instead of the safety set — 52.2%.

    “Load listing 16.1.4 to check the site count, or remove the sentence.”

  10. 10Signed

    Every finding decided, the QC record signed

    Lena Ortiz · QC lead, medical writing

    Lena marks the site sentence for removal and accepts the safety-set fix. With every finding decided, she signs the QC record: 31 numbers checked, 2 findings decided, against the final run of Oct 2. The meaning of her signature is “QC review complete — every number verified against the final tables”, and she re-authenticates with her password.

    “The QC record — every number, both locations and each decision — is kept with the document.”

Who it’s for

Built for everyone who stands behind a number.

The same re-run, seen by the four people who carry it — what QC week looked like, and what it looks like now.

LO
Lena OrtizQC lead, medical writing · signs QC records
QC lead, medical writing
Before
Ticks 214 numbers in one efficacy section to find the nine that matter, and checks and signs every results document by hand against the TLFs.
Now
Opens each draft already traced number by number and decides only the findings, each with the sentence and the table cell side by side.
MC
Dr. Maya ChenLead medical writer · CSR §10, §11, §12 and Synopsis
Lead medical writer
Before
After a late re-run, has no quick way to know which of her sentences still quote dry run 2.
Now
Receives each accepted fix on her corrections list, with the page, the sentence and the table cell it must match.
OH
Omar HaddadLead biostatistician · answers “which number is right?”
Lead biostatistician
Before
Changes one cell in a late re-run, then cannot see who quoted it, and fields queries on which value is current.
Now
Sees every quote of every cell on the table's own page, and the queries that need his answer come to him by name.
PR
Priya RamanPublications manager · congress abstract and manuscript
Publications manager
Before
Writes the abstract early, from dry runs, to a congress deadline — and inherits whatever changed afterwards.
Now
Her abstract's whole-number percentages are verified against the final tables, and its three findings sit at the top of the QC lead's list, due Oct 9.
Built on the engine

5 agents. Each with one job, and hard limits.

Agents find every number, match it to its table cell, check house rules and the other documents, and trace every quote when a table is re-run; the QC lead decides each finding and signs.

Number finder

Reads the draft section by section, in-text tables included, and records every number with its statistic, endpoint, arm, visit, the analysis population named or implied by the sentence, its page and sentence. It marks derived numbers — differences, ratios, “about N times” — and the cells they are built from.

  • Extracts only — never edits the draft
  • Every number keeps its page and sentence
Table matcher

Finds the TLF output whose title, population, endpoint and visit fit the sentence, then the row and column for the arm and statistic in the current run. When an output is re-run it compares the runs and finds every quote of the changed cells. If nothing fits, it says which outputs it searched and the nearest candidates.

  • The verdict uses the current run only
  • Cites output, row, column and run time
  • Never matches against a superseded run without flagging it
Rule checker

Compares each number with its cell: population and denominator (the safety set for safety data), analysis (primary unless the sentence names a sensitivity analysis), arm and visit, then the house rules for rounding and format. It recalculates every derived number and gives a verdict, a type, a reason a writer understands and a suggested fix.

  • Rounds once, from the table value
  • Never marks a finding resolved — a person decides
  • Never decides which number is right — that is the statistician's answer
Cross-document checker

Checks that the synopsis, abstract, manuscript and summaries agree with each other and with documents already signed.

  • Reports disagreements; never picks a winner
  • Never edits a signed document
QC report writer

Writes the number-by-number QC report, the comment log and the corrections memo for each writer.

  • Reports decisions exactly as recorded
  • Both locations cited for every finding
  • Never signs
QC lead

Decides each finding and signs. The agents propose; a named person decides.

Ask in plain words

Ask about any number, table or document

Ask in plain words — which numbers disagree, where a table is quoted, why a finding was raised — or tell it which house rule to add. Every answer points to the sentence and the cell.

Where is Table 14.2.2.1 quoted, and what changed?

The final run (Oct 2) changed 2 cells: Veltrimab responders 285 (66.6) → 284 (66.4) and the difference 61.4 → 61.2 (data query DQ-1187, site 114). Those cells are quoted 9 times in 6 documents with the old values — CSR §11, the abstract, the manuscript, the lay summary, the synopsis and IB §5.3. 6 are still open; the synopsis and IB corrections are already with the writers.

Why does the safety set matter?

Safety percentages use the safety set — the 427 Veltrimab patients who were treated — not the 428 randomised. Dividing by 428 gives 52.1% for any TEAE instead of 52.2%, and 12.1% for nasopharyngitis in the manuscript instead of 12.2%.

What is a number with no source?

A number no output reports. CSR §11 says 88% of responders kept their response through Week 52 — but the maintenance period is still blinded and the package has no Week 52 table. The agents searched all 412 outputs; the nearest stops at Week 16. Remove the sentence, or keep it with a reason until the addendum.

Add a rule: “about N times” must be within 5% of the table ratio

Done. New house rule 7: “about N times” must be within 5% of the ratio of the table values. The rule checker re-checked the derived ratios on the desk: CSR §11 says “about 10 times”, and 72.7 ÷ 7.0 = 10.4 — 3.8% away, so it stays derived · verified. The rule is live in Settings and on the audit trail.

Every screen

The working solution, as it ships.

13 screens from the working solution, on its sample data. Pick one to see it large.

The QC deskEvery active draft as a page and every number as a dot coloured by verdict, the results package above, and the findings to decide by due date.
The re-run rippleA re-run table drawn to every quote of its changed cells: 9 quotes in 6 documents, with the drafts it does not touch dimmed.
Re-checking the quotesThe two runs compared, every quote found and re-checked against the final run, and the writers notified — 6 still open, 3 settled.
Draft and table, side by sideThe sentence, the matched TLF cell and the rule checker's reasoning, with the suggested fix and what to do with it.
Where a stale number came fromThe superseded dry run, stamped as such, showing the cell the draft still quotes.
A fix acceptedThe decision with its name and time, the fix marked in the sentence and the correction on the writer's corrections list.
Wrong analysis setA per-protocol sentence quoting the ITT value, with the per-protocol cell it should match.
All findingsEvery number that disagrees with its table across documents, by type, source output and status, with the comment log export and corrections to writers.
A number with no sourceA new draft checked against the final run: a site count no output reports, the outputs searched and where the number would live.
Sign the QC recordNumbers checked, findings decided, the results package, the meaning of the signature and re-authentication.
A table and every quote of itThe re-run output with the changed cells, each quote badged by cell, the documents that quote it and their status.
The dashboardNumbers checked, findings by type and by document type, first-pass agreement and median time to QC sign-off against checking by hand.
Your rulesSource of truth, rounding and format, house rules, who signs, who answers statistician queries and who receives corrections.
Governance

Built for documents a regulator reads: cited, decided, signed.

Every finding cites both locationsEach finding links the draft's page and sentence to the output, row, column and run it was checked against, so a reviewer or auditor can see both without searching.
One source of truth per studyVerdicts use the current results package only. A number that matches a superseded run is flagged with where it came from, never passed.
A person decides every findingOnly a person can resolve a finding: accept the fix, ask the statistician, remove the sentence or keep it as written. Keeping a number as written needs a reason, and every decision records who, when and why.
Drafts are never edited by agentsAccepted fixes go to the document's author as corrections. The agents never change a draft, never edit a signed document and never choose between conflicting numbers.
The QC record is signed, with its meaningThe QC lead signs with an electronic signature, a stated meaning and re-authentication. The record — every number, both locations and each decision — is kept with the document version.
Every step on the audit trailEach agent step, statistician query and answer, decision, house-rule change and signature is on the audit trail, with who did it and when.
Configuration

Your house style, not ours

What counts as a match, how numbers are rounded and who decides are settings, alongside the house rules the rule checker applies.

SettingDefaultChoose from
Results packageVLT-302 final run · Oct 2VLT-302 final run · Oct 2 · VLT-302 dry run 2 · Sep 12
Flag numbers that match a superseded runOnOn · Off — shows where a stale number came from
RoundingHalf away from zero (SAS ROUND)Half away from zero (SAS ROUND) · Half to even
Percentages in the bodyOne decimal (72.7%)One decimal (72.7%) · Whole numbers (73%)
Small p-valuesp<0.001p<0.001 · p<.001
Treat format-only differences as notesOffOn · Off — when on, rounding and format items no longer block sign-off
QC sign-offLena OrtizLena Ortiz · Dana Okafor
Statistician queries go toOmar HaddadOmar Haddad · Sam Patel
Connections

Works with the documents and outputs your QC already runs on

Draft documentsCSR sections, synopses, abstracts, manuscripts, lay summaries and IB sections, in Word or PDF
TLF outputstables, listings and figures in RTF or PDF, from the current run and earlier runs
House style rulesrounding, decimals, p-value format and population rules
Statistical analysis planthe primary and sensitivity analyses a sentence may quote
Signed documentsearlier signed QC records and documents the drafts must agree with
QC outputsthe QC report as PDF, the comment log as .xlsx and a corrections memo per writer
What it changes

The difference, in numbers.

Every figure is labelled: a target the solution is built to, an estimate, a typical published result, or a proven one.

target
1.2days
median from draft received to QC sign-off
By hand2–5 days
With agents1.2 days
target
94.5%
of numbers match their table on the first pass; reviewers decide only the rest
typical
≈ 50%
fewer number errors reaching review, reported for AI-assisted report writing

“demo” = seen in the working solution, on its sample study data · “target” = the design goal, measured in the live solution · “estimated” = our estimate · “typical” = published figures (manual QC of 2–5 days per document; LTIMindtree, Role of Intelligent Automation in Transforming the CSR QC Process, 2020; ICH E3 on where results sit in a clinical study report). People, companies, studies and products named on this page — Northwind Bio, Veltrimab, VLT-302 — are fictional: characters and sample data in the working solution.

Questions

What medical writing and QC leads ask us.

What is medical writing quality control software?

Software that checks a results document — a CSR section, synopsis, abstract, manuscript, lay summary or IB update — against the statistical outputs it quotes. Medical Writing Quality Control uses five agents to trace every number to its TLF cell, check it against your house rules and the other drafts, and raise only the numbers that disagree, for the QC lead to decide and sign.

How does it check CSR numbers against the TLFs?

The number finder records each number with its statistic, endpoint, arm, visit and population. The table matcher finds the output, row and column in the current run, and the rule checker compares value, population, denominator, analysis and rounding, recalculating derived numbers such as differences and “about N times”. Each finding cites the draft page and the table cell.

What happens when a table is re-run late?

The table matcher compares the new run with the earlier one, finds every quote of the changed cells across all drafts and re-checks them against the final run. In the working solution one re-run sPGA table showed 9 quotes in 6 documents still carrying dry-run values; 3 were already settled and 6 went to the writers.

Does it check population, denominator and rounding, not just the value?

Yes. Safety percentages must use the safety set, efficacy percentages the analysis set named in the sentence, and confidence intervals the same output as the estimate. Values are rounded once from the table, half away from zero by default, with one decimal in CSRs and whole numbers allowed in abstracts and lay summaries.

Does the AI change our drafts?

No. The agents never edit a draft or a signed document. Accepted fixes go to the document's author as corrections, and the writer makes the change in their own document.

Do people stay in control of QC sign-off?

Yes. Only a person can resolve a finding — accept the fix, ask the statistician, remove the sentence or keep it with a reason — and the agents never choose which of two conflicting numbers is right. The QC lead signs the QC record with an electronic signature and its meaning, and cannot sign while a finding is still open.

Can we use our own house style and rounding rules?

Yes. The results package, rounding method, decimal places, p-value format, whether format-only differences count as findings, the house rules themselves, the QC signer and the statistician for queries are all settings. New house rules can be added in plain words, and the rule checker applies them straight away.

How long does it take to go live?

The Agentic Solution Engine builds and deploys it from your requirements and documents — your house style, a results package and a sample of past drafts — and it goes live once every quality gate has passed. We will walk you through it on your own documents first.

See it on
your drafts.

We'll run Medical Writing Quality Control on a past CSR section and its TLFs of your own.