open.gismo · data loading · Part 1

Thirteen front doors

The gap analysis scored row D1 — a data-mapping surface — as present on five platforms and missing here. This asks the narrower question it left open: for each of the thirteen, what does a person actually do?

Six kinds of front door

Every platform surveyed uses two or three of these. Naming them is what makes the comparison mean anything, because “has a data-mapping surface” turns out to cover four quite different products.

A

Drop files

A file picker inside the product. You choose files, it reads them, it tells you whether they passed.

B

Point at a folder

You name a directory. The product scans it and recognises datasets by their filenames or standard domain codes.

C

Write code

You assemble the data object yourself in R and hand it over. The mapping is whatever your script does.

D

Write config

You edit declarative files — YAML, a settings block — that name datasets and columns. No interface at all.

E

Map in a grid

An in-product surface where your columns are set against the ones the tool wants, and you pick.

F

Hand it to somebody

A vendor services team, an administrator role, or a data manager does the mapping. End users select from what they made.

open.gismo today is D and only D, at the hardest possible grain: fourteen domains and 126 required columns, edited by hand across fourteen workflow files.

At a glance

Two questions per platform: can a user map a column without leaving the product, and can they fix a value — a category spelled differently, a unit, an identifier format. The second column is where almost everything falls over.

PlatformDoorsColumn mappingValue fixingWhen it does not fit
safetyGraphics / ISGopen source A · C · E Mapping tabPer-field dropdowns, auto-filled from a detected standard None documented Charts that lack a field are disabled; you fill the mapping tab and export the settings
teal / NESTopen source C In your R code In your R code Your script fails, or a module errors
DaVinci dv.*open source C In your R code In your R code Documented as a preprocessing step you own before run_app()
tidyCDISCopen source A None — conformance or nothing None Missing a required variable rejects the upload outright; missing a recommended one warns and proceeds
clinDataReviewopen source D Named in YAMLDatasets and variables per chapter config None documented A JSON-Schema check validates the config; data problems surface when the report knits
JMP Clinicalcommercial B · E None documentedDomains recognised by CDISC code Clinical RecoderMerge, split and rename values; original column kept A study without DM (SDTM) or ADSL/ADDM (ADaM) cannot be added
JReviewcommercial F In the data dictionaryAdministrator-configured, not end-user Not established Its standard reports assume consistent SDTM upstream
Spotfire clinicalcommercial F Not established Not established Not established from public documentation
elluminatecommercial E · F MapperVisual drag-and-drop transformation builder Same surface Vendor material describes the Mapper as the answer; failure behaviour not established
CluePointscommercial F Vendor analysts Vendor analysts Handled inside a data-transfer agreement and a services engagement
Medidata Clinical Data Studiocommercial E · F Low-code transformsSelf-service ingestion of non-Medidata sources Unit conversion library Inbound data is validated during ingestion
Veeva CDBcommercial E · F Ingestion engineConfigured by data managers; CQL for transforms Via CQL Inbound data is checked against defined types, ranges and formats on arrival
Oracle Empirica Signalcommercial E · F Data configurationA named, reusable, importable object Transforms in the configuration Only a user with the Manage Configurations permission can build one

“Not established” is a statement about the documentation available, not about the product. Depth follows publication: Spotfire clinical and CluePoints publish little at this level of detail, and their rows are short for that reason alone.

Capsule by capsule

What a user does, in the words of the documentation.

safetyGraphics / ISG open source · A · C · E

Our own ancestor, and the only surveyed tool that gives an end user a real column-mapping surface and hands the result back out as code.

Getting in
safetyGraphicsInit() opens a setup screen: choose charts first, and the app derives which datasets it now needs. Load buttons import files through datamods, in any format rio reads — text, Excel, SAS, SPSS. The Run App button activates once every required domain has a file. The alternative is to pass a named list straight in: safetyGraphicsApp(domainData = sdtm).
Mapping
A Mapping tab tells charts which column and which field to use for each chart component. It is filled in automatically for recognised standards and by hand otherwise, with a checkbox at the top to preview the loaded data.
Detection
detectStandard() compares the columns present against the required columns of each known standard and returns the best match, whether it is full or partial, the proportion matched, and which columns mapped — reported to the user as text of the form Partial SDTM (4/9 cols/fields matched). ADaM and SDTM ship; further standards are added by editing the package’s meta table.
Writing back
Fill the mapping once, then export code that restarts the app with those settings pre-populated. The exported YAML carries the mapping.
Values
Nothing documented. The mapping identifies columns; it does not recode what is inside them.

tidyCDISC (Biogen) open source · A

The sharpest contrast in the survey: a front door with no mapping behind it at all.

Getting in
A Browse button on the landing Data tab, one file or several at once. .sas7bdat only. ADSL is mandatory and the analysis tabs stay disabled until one is uploaded; other domains are optional.
Mapping
None. Conformance to ADaM-ish rules is the contract, per dataset — an ADMH must carry MHCAT; an ADAE is recommended to carry AESTDT, AEDECOD, AESEV, AESER.
When it does not fit
A missing required variable — or one present but entirely missing values — raises an error and the file does not upload. A missing recommended variable warns and the file is still usable.

teal / NEST (Roche) and DaVinci dv.* (Boehringer) open source · C

Two of the three biggest open-source module libraries, and neither has a front door for a non-programmer. The data object is something you build.

teal
Every dataset passes through a teal_data object handed to teal::init(data = ). Relationships between datasets are declared with join_keys() — the STUDYID / USUBJID linkage between ADSL and the BDS datasets is written by hand. Remote sources are reached by supplying a teal_data_module that describes how to pull them.
DaVinci
dv.loader::load_data() reads .rds and .sas7bdat from a subdirectory of the path in the RXD_DATA environment variable, preferring .rds; load_files() takes explicit paths. The result goes to dv.manager::run_app(data = list(...), module_list = , filter_data = "adsl"), and each module declares the dataset_names it may see. Documentation tells you to preprocess types and labels before handing the list over.
Worth noticing
Both put the join keys in the user’s hands and neither checks them. This is the same exposure open.gismo has, arrived at from the opposite direction.

clinDataReview (Open Analytics) open source · D

The closest structural analogue to open.gismo today: declarative config files, no interface, and a schema check over the config rather than over the data.

Getting in
A general config.yml names pathDataFolder — a directory of SAS7BDAT or XPT files — plus optional study name and a data-batch version. Per-chapter files config-<chapter>.yml each name a dataFileName and the template that renders it; parameters reach the template as params$.
Several files, one dataset
dataFileName accepts an array. Files are row-bound and a DATASET column records which file each row came from — a documented answer to the two-lab-vendors problem.
Validation
A JSON-Schema requirement file checks that the configuration complies with its specification. That is validation of the config, not of the study data.
Batch comparison
The gap analysis scored clinDataReview as shipping comparison across two data batches. The mechanism — whether that is a second data folder, a version key, or something else — could not be established from the reporting vignette read here, and is recorded as unestablished rather than guessed.

JMP Clinical commercial · B · E

The cleanest example of door B, and the only surveyed platform with a dedicated surface for fixing values rather than column names.

Getting in
Studies → Add Study from Folders. You give a study name and the path to a folder of SDTM/SEND datasets, a folder of ADaM datasets, or both, as SAS datasets or SAS transport files. JMP scans the folders and identifies domains from their standard two-letter codes, with three- and four-letter codes for split domains.
Requirements
DM for SDTM, or ADDM/ADSL for ADaM, must be present or the study cannot be added. ADaM findings datasets must carry PARAMCD and either AVAL or AVALC.
Column mapping
None documented. Recognition is by domain code, and define.xml is not mentioned in the study-import documentation read here.
The Recoder
A separate tool over any registered study’s domains: change how a value is encoded, map several values onto one, or split one value into several. It preserves the original column under a suffixed name and writes a formula recording the transformation — a provenance move worth stealing outright.

JReview, CluePoints, Veeva CDB, Empirica Signal commercial · mostly F

Four products where the honest answer to “what does a user do to get their data in” is: somebody else does it.

JReview
An integrated data dictionary (IRDD) connects directly to Oracle- and SQL-Server-backed clinical data management systems and to EDC systems including Rave and InForm. The vendor describes study setup as minutes of dictionary-driven configuration with no custom programming and no reformatting of data. Its standard reports are built on SDTM structure, and a PHUSE paper on supporting JReview notes that organisations write SDTM Interpretation Guides precisely because consistent mapping upstream is what makes the shared reports work.
CluePoints
Electronic links pull automatically from Rave, InForm and TrialMaster; anything else arrives as files over SFTP under a data transfer agreement whose frequency is negotiated to match the monitoring plan. CluePoints’ own analysts configure the system and process the data.
Veeva CDB
An ingestion engine data managers configure rather than build integrations against. Incoming third-party data is mapped onto a common study backbone — a single consolidated structure per trial — and checked on arrival against defined data types, ranges and formats. Transformations use Clinical Query Language. A partner programme exists for data providers delivering into it.
Empirica Signal
A data configuration is a named object listing the variables — source table columns — available for mining and querying, including which are available for subsetting and stratification and how source data is transformed. A user holding the Manage Configurations permission creates one and publishes it; everyone else selects from the list. Pre-built configurations ship for Argus Mart and are loaded by import.
The pattern
The mapping is a privileged artifact created once by a role — administrator, data manager, vendor analyst — and consumed by everyone else. Empirica makes this explicit down to the permission name.

elluminate and Medidata Clinical Data Studio commercial · E · F

The two clearest examples of a real mapping grid marketed as a product feature rather than a service. Both descriptions come from vendor material and should be read as claims.

elluminate
The platform ingests from any source in any format; the Mapper module is a visual drag-and-drop interface for complex transformations, aimed at less technical staff, turning disparate streams into CDISC SDTM and analysis datasets. eClinical states that SDTM produced with Mapper has been used in FDA submissions.
Medidata
Clinical Data Studio ingests and validates non-Medidata sources — other EDCs, labs, eCOA — self-service, with low-code transformation and a drag-and-drop listings builder. Standardisation includes automatic unit conversion from a library of conversion factors. Medidata states IT and clinical programming teams can configure it in as little as three days.
Worth noticing
Unit conversion is the value-level problem, solved by shipping a reference library rather than by asking each study to write the arithmetic. That is a design answer, not just a feature.

Three things the survey settles

Sources

Everything above was read on 2026-08-27 from these public pages. Product documentation flatters; vendor claims are marked as claims in the capsules.