Every number traces back to
its source
BuildTLFs generates Tables, Listings, and Figures from one analysis spec with cell-level provenance and identical Python, R, and SAS output, while patient data never leaves your boundary.
A table is only as trustworthy as the trail behind it
TLFs are the regulatory output, yet traceability and reproducibility are still manual. One number a reviewer cannot tie back to source can stall a submission, and re-running an old output is rarely byte-for-byte the same.
× Provenance lives in people's heads
When a reviewer asks where a cell came from, the answer is a programmer reconstructing the logic by hand from scripts and memory.
× Outputs are hard to reproduce
Re-running last quarter's table on today's tools rarely returns the exact same numbers, so a defended result quietly drifts.
× Raw data has to travel
Many tools require shipping patient data to the engine, widening the privacy and compliance surface you have to defend.
One spec, three identical outputs, every cell traceable
BuildTLFs drives generation from a CDISC-aligned spec, computes once and proves Python, R, and SAS agree, and links every output cell to its source. The control plane holds specs and provenance and never touches patient data.
Author the analysis shell once. The same spec drives the compute and both code exports, so the spec is the single source of truth.
Python compute, the R export, and the SAS export are checked to produce identical results before a table can advance.
Every cell links to its dataset, variable, where-clause, and the N behind it, so any number is verifiable in seconds.
Build the shell, or ingest the SAP
- Start from scratch, ingest an analysis spec, or copy a global template. The shell is CDISC-aligned from the first row.
- An ingested SAP populates the row and column structure, which you keep, edit, or extend.
Why it mattersThe spec is the single source of truth, readable and reusable across studies rather than buried in one-off code.
Python, R, and SAS, proven identical
- The spec compiles to Python, R, and SAS that follow the same summary logic line for line.
- The platform runs all three and confirms the outputs match before the table can advance.
Why it mattersPick any language to reproduce a result and trust it agrees with the other two, so the triple-language promise is verified, not assumed.
Every cell links back to its source
- Select any cell to see its dataset, variable, where-clause, and the N behind it.
- The trace is captured at generation time, so it is always current with the value on the page.
Why it mattersA reviewer verifies any number in seconds, which is the difference between a clean review and a finding.
| Age (years) | Placebo | Drug 50mg | Drug 100mg |
|---|---|---|---|
| n | 84 | 86 | 85 |
| Mean (SD) | 54.2 (11.3) | 55.8 (10.7) | 53.9 (12.1) |
| Median | 54.0 | 56.0 | 53.0 |
| Min, Max | 31, 78 | 34, 79 | 29, 81 |
Submission-ready RTF and HTML
- Generate RTF for the dossier and HTML for review from the same run, with no re-keying.
- Headers, footnotes, and population labels render straight from the spec.
Why it mattersOne spec yields the formats both your submission and your reviewers need, so the dossier and the review copy can never disagree.
| Demographics | Placebo n (%) | Drug 50mg n (%) | Format |
|---|---|---|---|
| Sex - Female | 41 (48.8) | 45 (52.3) | RTF |
| Sex - Male | 43 (51.2) | 41 (47.7) | RTF |
| Race - White | 60 (71.4) | 62 (72.1) | HTML |
| Race - Black | 14 (16.7) | 13 (15.1) | HTML |
| Race - Other | 10 (11.9) | 11 (12.8) | one run |
A library that compounds across studies
- Demographics and AE-incidence anchors ship in as global templates.
- Promote your own proven shells to a global library that every study can draw from.
Why it mattersEach study reuses proven shells instead of re-authoring, which cuts time and variation across your portfolio.
Specs cross the boundary, data never does
- The control plane holds specs, generated code, and provenance.
- A data-plane runner executes at your boundary and returns only metadata, code, and audit.
Why it mattersYour patient data stays in your environment, which shrinks the compliance surface to almost nothing.
Metadata and code only
Patient data and ADaM datasets stay in your environment. Only specs, generated code, provenance, and audit ever cross.
Studies, deliverables, and outputs in order
- Organize TLFs under deliverables such as CSR, DMC, SDR, and IA within each study.
- Every table, listing, and figure has a home, so the backlog stays clean.
Why it mattersThe backlog mirrors how your team actually delivers, so nothing is orphaned and status is clear at a glance.
Built for outputs you can defend line by line
| Capability | SAS macros | Proprietary TLF tools | In-SCE scripting | BuildTLFs |
|---|---|---|---|---|
| One spec, identical Python, R, and SAS | ||||
| Cell-level provenance to source | ||||
| Submission-ready RTF and HTML from one run | ||||
| Reusable template library | ||||
| Patient data never leaves your boundary | ||||
| Append-only Part 11 audit trail |
One generator, six points of view
Statistical programmer
Author the analysis shell once and generate Python, R, and SAS for the same table, with no hand-syncing across languages.
Biostatistician
Trust that every reported number ties back to the ADaM source, with the where-clause and N visible on any cell.
Medical writer
Pull submission-ready tables and figures straight from the run, knowing the numbers in the report match the dossier.
QC programmer
Review the triple-engine compare in one place and sign off knowing Python, R, and SAS produced identical output.
Data manager
See which deliverables and outputs depend on each ADaM dataset, so a data refresh has a clear, scoped impact.
QA / auditor
Open any output cell and follow the captured trail to its source logic, ready for inspection on demand.
Regulatory rigor, by construction
The controls auditors look for are inherent in the system, not bolted on after the fact.
21 CFR Part 11
Append-only audit trail, server-time stamping, access control, and human-gated approvals on every output.
Control and data-plane separation
Patient data stays at your boundary. The control plane holds only specs, code, and provenance, never the rows.
Cell-level provenance audit
Every output cell links to its source logic, so any number can be traced to dataset, variable, where-clause, and N.
Tenant isolation
Row-level security separates every tenant's specs, outputs, and audit at the database, verified through the request path.
Generate one of your TLF shells in a 30-day pilot
See BuildTLFs turn your spec into RTF and HTML, prove Python, R, and SAS agree, and trace every cell to source in days. Your data stays at your boundary and the code is yours to keep.
- We load a study spec into a private workspace
- Your team authors a shell and generates a TLF set
- You keep the R and SAS plus the provenance
- A readout on review time saved
info@the-bdkm.com · BDKM LLC · Back to Life Sciences