transcriptQC · manecheck
Is this transcript aligned with the current MANE reference set? Variant reports arrive on old or arbitrary RefSeq/Ensembl transcripts: NM_007294.3, NM_021007.2, ENST…. MANE is the NCBI/EMBL-EBI reference set for exactly this — MANE Select is one agreed transcript per gene, MANE Plus Clinical adds isoforms needed for known clinically relevant variants. manecheck compares what you were given with a versioned MANE snapshot and reports the alignment with a suggested action, one transcript or a whole lab table at a time, offline, from the MANE bulk files shipped inside the package. It is a reference-choice QC, not a transcript-selection policy: a non-MANE transcript can be the right choice with a documented rationale.
pip install transcriptqc
manecheck variants.csv --html report.html # columns: gene, transcript, variant (any subset; or one HGVS column)
manecheck "NM_007294.3:c.5266dupC"
manecheck NM_021007.2 --gene SCN2A
manecheck SCN2A
What it says
BRCA1 c.5266dupC
Input transcript: NM_007294.3
Current MANE Select: NM_007294.4
Status: OLD_VERSION ⚠
Action: update transcript version; re-validate c. position
Note: current version is NM_007294.4
SCN2A c.4766A>G
Input transcript: NM_021007.2
Current MANE Select: NM_001040142.2
MANE Plus Clinical: NM_001371246.1
Status: NON_MANE ⚠
Action: re-report on the MANE Select (or justify)
Note: gene has MANE Plus Clinical transcript(s): NM_001371246.1 — check which isoform carries the variant
BRCA1 c.100A>G
Input transcript: NM_000059.4
Current MANE Select: NM_007294.4
Status: GENE_MISMATCH ✗
Action: fix gene or transcript
Note: NM_000059.4 is the MANE Select transcript of BRCA2, not BRCA1
Note the second one: the report in the brief assumed SCN2A's MANE Select was NM_021007.x. In MANE v1.5 it is NM_001040142.2, and there is a Plus Clinical isoform NM_001371246.1 — exactly the kind of thing this tool is for. The third catches a transcript pasted from the wrong gene.
The batch summary
TRANSCRIPT QC
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
14 transcripts checked · MANE v1.5 (bundled)
✗ 1 gene mismatch
✗ 1 unparseable
⚠ 1 mane select changed
⚠ 3 old version
⚠ 2 non mane
? 1 unknown gene
✓ 5 mane select
ℹ 1 genes with a relevant MANE Plus Clinical transcript
Potential reporting problems: 9
--csv, --json and --html write the table (see examples/report.html); --fail exits 1 when any potential problem is present, so it can gate a pipeline or a report sign-off.
Statuses
| status | meaning | action |
|---|---|---|
MANE_SELECT |
matches the current MANE Select | none |
MANE_PLUS_CLINICAL |
a MANE Plus Clinical isoform | state why this isoform is used |
OLD_VERSION |
right transcript, outdated version | update version, re-validate the c. position |
MANE_SELECT_CHANGED |
used to be MANE Select; the selection moved to another accession (from MANE's own change list, with CDS affected: yes/no) | move to the current MANE Select, re-map |
NON_MANE |
not a MANE transcript for the gene | review against MANE Select / Plus Clinical; document the rationale if retained |
GENE_MISMATCH |
the accession is MANE for a different gene | fix gene or transcript |
GENE_NOT_IN_MANE |
protein-coding gene without a MANE transcript yet | follow gene-specific or laboratory transcript-selection policy |
NEWER_VERSION |
newer than the snapshot | refresh the snapshot (--mane current) |
UNKNOWN_TRANSCRIPT / UNKNOWN_GENE / UNPARSEABLE |
cannot resolve | add gene · check symbol · fix accession |
Genes with a Plus Clinical isoform are flagged on every row of that gene: check which isoform actually carries the variant.
Reproducible by construction
The package bundles MANE v1.5 (summary, changed_select_accessions, protein_coding_genes_not_in_mane from the NCBI bulk directory). Every report states the release it was checked against. --mane 1.6 or --mane current downloads another release once into ~/.cache/transcriptqc; nothing else touches the network. RefSeq (NM_/NR_/XM_/XR_) and Ensembl (ENST) accessions both work, with or without version.
Python API
from transcriptqc import load_mane, check_transcript, check_hgvs, check_file, mane_for_gene
m = load_mane() # bundled v1.5
check_transcript("NM_007294.3", gene="BRCA1", mane=m).status # 'OLD_VERSION'
check_hgvs("NM_007294.3:c.5266dupC", m).mane_select # 'NM_007294.4'
mane_for_gene("SCN2A", m)["plus_clinical"]
results = check_file("variants.csv", m)
Tests
Six offline tests on the bundled snapshot: real MANE values (BRCA1, SCN2A with its Plus Clinical isoform), every status with the case that triggers it, the change list (ACHE moved to NM_000665.5, ACYP2's change affects the CDS), a gene not in MANE (AKR7L), HGVS forms, file input with mixed columns, and all four report formats. 84 % line coverage.
Not in scope, on purpose
It checks the transcript, not the variant: no HGVS validation, no coordinate lift between versions (use VariantValidator or Mutalyzer for that; this tells you when you need to). MANE transcript definitions are anchored to GRCh38; this tool does not validate assembly-specific genomic coordinates. MANE mappings to GRCh37 and other assemblies are provided separately by NCBI and are not used here.
Roadmap
assembly check when genomic coordinates are supplied · Ensembl ↔ RefSeq consistency check on paired accessions · MANE version diff (manecheck diff 1.4 1.5) · VCF INFO field check · pairs with VariantStory and vus-recheck.
Name
Repository transcriptQC, command manecheck (also transcriptqc): MANE is the engine today; version freshness, RefSeq/Ensembl matching and assembly checks fit under the wider name later without renaming. An unrelated eastgenomics/ManeCheck repository exists on GitHub.
Cite
Solosenko M. transcriptQC: MANE Select / MANE Plus Clinical transcript check for clinical reporting. 2026. doi:10.5281/zenodo.22285580 (concept DOI, all versions; v0.1.1 = 10.5281/zenodo.22285581). Machine-readable in CITATION.cff.
License
MIT — Margarita Solosenko, 2026. MANE data © NCBI/EMBL-EBI, public domain / open licence per their terms.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file transcriptqc-0.1.1.tar.gz.
File metadata
- Download URL: transcriptqc-0.1.1.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cda82807327e19771b5a15d36a7538f70c0fc1e67ac472227fb90be10a53d5fe
|
|
| MD5 |
4e0388c00b4bc79d391c81395be702f7
|
|
| BLAKE2b-256 |
2ee05038c457d6ec1d938f1e5748b2685247f3c21c15ffce51cc744ee1d95e28
|
File details
Details for the file transcriptqc-0.1.1-py3-none-any.whl.
File metadata
- Download URL: transcriptqc-0.1.1-py3-none-any.whl
- Upload date:
- Size: 1.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
631805a9d8e888512e89c52c19292b563f43cd953da3f9ec5253b2e9ebd2708e
|
|
| MD5 |
c9636bcd4abf3cd7075fd9bf5c783efe
|
|
| BLAKE2b-256 |
ee6a8b1d199435e61a8607139355907695b96aa4e6bcc7f767f60380cefb82da
|