Preloaded table shells
Upload your own shell
DOCX · RTF · PDF · TXT · XLSXDatasets
What is ShellForge?
ShellForge is an ADaM Table Shell Annotation & TLF Program Studio. You start from a statistical table shell (the empty mock-up a biostatistician designs), ShellForge automatically annotates every row, column and statistic with the exact ADaM dataset.variable, filter and statistic that produces it, then generates paired SAS and R programs, executes the R program server-side, and renders regulatory-standard RTF / PDF outputs plus an annotated PDF with red callout labels — the same artifact used for define.xml-style traceability reviews.
About — ShellForge v0.2.1, created & developed by Bhanoji Duppada.
Step-by-step guide
Go to Shells and select one of the 18 preloaded shells (demographics, AE overview, labs, vitals, K-M, listings…) or drop your own DOCX / RTF / PDF / TXT / XLSX shell into the upload zone. The parser converts it into a structured shell (columns, rows, footnotes).
The Data Viewer lists the preloaded pharmaverseadam ADaM datasets (ADSL, ADAE, ADLB, ADVS, ADTTE, ADCM, ADEX). Inspect variable names, labels and types, filter variables, and preview the first 50 rows. You can also upload your own sas7bdat / xpt / csv / parquet.
On the Annotate tab, run the annotation engine. A rule pass matches shell labels to variables via normalized labels and a clinical synonym map; an LLM pass resolves the remainder. Every mapping shows a confidence badge and its source (rule or llm).
Every cell of the mapping table is editable — dataset, variable, PARAMCD, where-clause and statistic. Your corrections are kept and used for code generation.
The Programs tab produces a submission-style SAS program (PROC SQL / MEANS / FREQ, ODS RTF Journal style) and a runnable tidyverse + rtables R program with identical titles and footnotes. Copy or download either.
Execute the R program server-side. The Outputs tab then offers the RTF, the PDF (Journal style with page X of Y), the annotated PDF with red callouts, and a ZIP bundle containing .sas, .R, .rtf, .pdf, annotated.pdf and annotations.json.
Supported formats
| Input | Formats | Notes |
|---|---|---|
| Table shells | .docx .rtf .pdf .txt .xlsx | Parsed into structured JSON |
| Datasets | .sas7bdat .xpt .csv .parquet | 200 MB max per file |
| Programs out | .sas .R | Paired, same titles/footnotes |
| Tables out | .rtf .pdf annotated.pdf | Journal style, page X of Y |
| Bundle | .zip | All artifacts + annotations.json |
Accuracy notes
The annotation engine targets ≥90% coverage on the preloaded shells. Generated R programs are executed as a structural validator for the paired SAS code: if the R table builds and renders, the row/column logic encoded in both programs is consistent. SAS programs follow submission conventions (header block, ODS RTF Journal) but are not executed on this server.
FAQ
Where does the demo data come from?
The preloaded ADaM datasets come from the open-source pharmaverseadam R package (CDISC pilot-style data produced with admiral). They contain no real subject data.
What does the where-clause in an annotation mean?
It is the subsetting filter applied before computing the statistic, e.g. SAFFL == "Y" for the safety population or TRTEMFL == "Y" for treatment-emergent AEs. Combined with dataset, variable, PARAMCD and statistic, it fully determines each cell of the table.
Why both SAS and R programs?
Pharma submissions are still SAS-first, but double programming is standard QC practice. ShellForge emits both from the same annotation set so the R program acts as an executable validator of the table logic, and teams can pick either language.
Can I fix a wrong mapping?
Yes — every field in the Annotate table is editable. Edit dataset, variable, PARAMCD, where or statistic, then regenerate the programs. Your edits override the engine output.
What is the annotated PDF?
The shell rendered with red callout labels next to every element, e.g. "Age (years), Mean (SD)" → ADSL.AGE | SAFFL=="Y" | mean/sd. It mirrors the annotated CRF concept, applied to TLF shells, and is ideal for spec review meetings.
R execution failed — what now?
The job log on the Outputs tab shows the captured Rscript stderr. ShellForge attempts one automatic LLM repair; if it still fails, review the log, adjust the annotations (often a wrong PARAMCD or where-clause), and regenerate.
Is my uploaded data stored?
Uploads are converted to parquet and kept in the server workspace for this demo instance only. Do not upload real subject-level data to a demo environment.