A local Streamlit tool that runs a large library of built-in checks across SDTM/ADaM datasets and presents findings in a two-tab dashboard, each with an impact level, a plain-English explanation, a resolution hint, and reproducible SAS to drill into offending records.
Pinnacle 21 checks conformance to the CDISC standard. CIS runs locally before a P21 run and adds what a programmer actually needs to act: one impact scale, a plain-English explanation per finding, and copyable SAS to reproduce it.
How it works
Typical layout
By the numbers
Screenshots
sdtm-checks-cis-01-upload.png into/public/screenshots/sdtm-checks-cis/
sdtm-checks-cis-02-summary.png into/public/screenshots/sdtm-checks-cis/
sdtm-checks-cis-03-detail.png into/public/screenshots/sdtm-checks-cis/
Data flow
SDTM and ADaM datasets accumulate data quality issues that are expensive to find late. A full Pinnacle 21 run or sponsor review is slow feedback for a programmer mid-build.
Input: SAS7BDAT / XPT datasets (SDTM + ADaM)
|
v
Parser (modules/parser.py) normalises datasets into a common frame
|
v
Check Registry (registry.py) domain-modular checks: modules/checks/<domain>.py
| (ae, lb, dm, cm, ds, eg, ex, vs, pk, onc ...)
v
Engine (engine.py) runs each check, collects findings
|
v
Impact + Aggregator single 1-5 impact scale, dedupes, ranks
|
v
Reporter (reporter.py) --> Two-tab Streamlit dashboard: Summary + Detail Engineering trade-offs
At a glance
A quick visual read of the countable facts; full detail in the table.
Relative scale · values labelled · unit: count
Processing characteristics
| Metric | Value | Notes |
|---|---|---|
| Built-in checks | 260+ | Domain-modular; v34 vectorised AE018/19/21, MH003, DS010, EG008 |
| Test functions | 109 | Counted across the test suite |
| Impact scale | 1-5 | Critical / High / Medium / Low / Info |
| Dashboard tabs | 2 | Issue Summary + Detail (reduced from eight) |
| Input formats | SAS7BDAT, XPT | Read via pyreadstat |
| Logging | Rotating 5MB x 5 | logs/cis.log |
Functional wins
Module dependencies
- Python 3.9+
- pyyaml
- streamlit
- fastapi
- uvicorn
- pandas
- pyreadstat
- openpyxl
- xlsxwriter
- pytest