Shell Gallery

Pick a preloaded table shell or upload your own

ShellForge v0.2.1

Preloaded table shells

Upload your own shell

DOCX · RTF · PDF · TXT · XLSX
Drop a shell file here or click to browse
The shell parser extracts titles, columns, row labels and footnotes into a structured shell.

Datasets

Upload dataset
sas7bdat · xpt · csv · parquet
Select a dataset
Choose an ADaM dataset on the left to inspect variables, labels and a row preview.

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

1
Pick or upload a shell

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).

2
Explore the data

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.

3
Auto-annotate

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).

4
Review & correct

Every cell of the mapping table is editable — dataset, variable, PARAMCD, where-clause and statistic. Your corrections are kept and used for code generation.

5
Generate programs

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.

6
Execute & download

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

InputFormatsNotes
Table shells.docx .rtf .pdf .txt .xlsxParsed into structured JSON
Datasets.sas7bdat .xpt .csv .parquet200 MB max per file
Programs out.sas .RPaired, same titles/footnotes
Tables out.rtf .pdf annotated.pdfJournal style, page X of Y
Bundle.zipAll artifacts + annotations.json

Accuracy notes

Annotations with confidence < 0.5 (red badge) should always be reviewed manually. Rule-based mappings (exact label or synonym match) are highly reliable; LLM mappings are best-effort suggestions.

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.