T TNBC Atlas

For researchers & clinicians

Methods & provenance

How the TNBC Atlas bibliography is built — the sources, the search query, the deduplication ladder, the enrichment passes, the tiering process, the update cadence, and the known limitations. Everything described here is reproducible from the public code repository.

Production corpus. The bibliography now spans the full TNBC literature back to the mid-1980s: 101,106 canonical records covering 1985–2026, refreshed weekly. The historical backfill is complete — the earlier 24-month pilot (14,319 records) has been superseded. The methods below describe the production pipeline; the numbers cited reflect the current corpus.

Sources

The bibliography is harvested from six free, public sources. Three are primary (discovery): they generate the candidate-record set. Three are enrichment: they add metadata to records already on hand. We avoid Scopus and Web of Science as hard dependencies in order to keep the pipeline reproducible without institutional licensing.

Primary (discovery):

Enrichment:

Search query

The PubMed query (analogous queries adapted to each source’s syntax):

("triple-negative breast cancer"[Title/Abstract]
 OR "triple negative breast cancer"[Title/Abstract]
 OR "TNBC"[Title/Abstract]
 OR "basal-like breast cancer"[Title/Abstract]
 OR "estrogen receptor-negative breast cancer"[Title/Abstract])

The production harvest applies the full query specification, which additionally covers "basal-like breast cancer" and the explicit ER/PR/HER2-negativity construction so the corpus reaches back to the 1980s, before the modern term existed. The original 24-month pilot used a deliberately narrower query to keep results inspectable during architecture validation.

The query runs separately against each primary source. Date-window filtering happens server-side at each source where possible.

Deduplication

Records arriving from the three primary sources are collapsed into canonical records by a three-step ladder, in this priority order:

  1. DOI exact match (lowercased, normalized). Collapses roughly half of raw records to canonicals.
  2. PMID exact match. Adds another ~12%.
  3. Fuzzy title match using rapidfuzz.ratio ≥ 92, gated by exact first-author last-name match and publication-year within ±1. Catches preprint–published pairs, corrigenda, and records with malformed DOI strings.

Source priority for the canonical record body (when sources conflict on a field): PubMed → Europe PMC → OpenAlex. OpenAlex citation counts and ORCID-resolved authors are always merged in regardless of who supplied the canonical body. Every dedup decision is logged with its match basis in dedup_decisions.

Preprint-to-published links are preserved as relationships, not collapsed: both records remain in the database, joined by preprint_of / peer_reviewed_of foreign keys.

Enrichment

After dedup, every canonical record with a DOI is enriched in two passes:

Crossref Works

For each DOI, api.crossref.org/works/{doi} is fetched. Fields written back: publication_date (Crossref is authoritative for this), crossref_type (journal-article / posted-content / proceedings-article / dataset / etc.), license URL, references_count, and a JSONB blob containing publisher, funders, container title, ISSN, and subject codes.

Crossref is treated as authoritative for publication_date across the corpus. Where a source database’s date-of-record drifts later than the true publication date (proceedings reissues, online updates, citation aliases), the Crossref date takes precedence, anchoring each record to when the work was actually published — which matters for any date-bound analysis.

Unpaywall

For each DOI, api.unpaywall.org/v2/{doi} is fetched. Unpaywall’s oa_status overrides OpenAlex’s OA classification (Unpaywall is more conservative and doesn’t use the non-standard "diamond" category); Unpaywall’s best-OA-location URL overrides OpenAlex’s when it provides a direct PDF link.

Both enrichers are concurrent (6 worker threads), respect the polite-pool rate limits, and are resumable — safe to call repeatedly; already-enriched rows are skipped.

Retraction sweep

The Crossref-hosted Retraction Watch CSV (api.labs.crossref.org/data/retractionwatch) is downloaded weekly and cross-referenced against our corpus by DOI and PMID. Matched records have retraction_status set to retracted or concern as appropriate, plus the retraction-notice DOI and date.

Against the full corpus, 77 records are flagged — 74 retracted and 3 under an expression of concern — cross-referenced from roughly 67,700 Retraction Watch notices. Each flagged record carries its retraction-notice DOI and date, and any synthesis page citing a flagged record is itself flagged for editorial review within 48 hours.

Tiering

Records are tiered 1–4 to drive default surfacing on the website:

TierMeaningHow assigned
1 Foundational; field-defining Hand-curated; ~60 entries in the v1 seed list (see tier-1 seed governance below)
2 Landmark; high-citation and practice-changing Algorithmically nominated (top-decile citations within publication-year cohort), human-confirmed
3 Supporting peer-reviewed work Default for peer-reviewed journal articles; the bulk of the corpus
4 Archival; superseded; low-citation; tangentially relevant Records de-emphasized in default views; still searchable and exportable

A record’s tier can change over time. Tier review runs quarterly. Every tier move is logged.

Tier-1 seed governance

The hand-curated tier-1 list is versioned in Git and reviewed by the editorial board before any record is promoted in production. The v1 draft (60 entries) was assembled by triangulating four published TNBC bibliometric reviews (the 2022 Clin Exp Med top-100, the 2024 ADC and immunotherapy bibliometrics, the 2024 neoadjuvant analysis) plus editorial picks for the foundational subtype, IHC-guideline, TILs, and PARP-inhibitor literature. Each entry carries: full citation, taxonomy domain, rationale, confidence tag (high / medium / low), and source provenance.

The tier-1 list also serves as a recall benchmark for every harvest run: after a harvest completes, a script reports the proportion of tier-1 entries found in the corpus, broken down by in-window vs. out-of-window and by domain. In-window recall is the operationally meaningful number.

Update cadence

JobFrequency
Incremental new-paper sweep (PubMed, Europe PMC, OpenAlex, preprints)Weekly
Citation-count refresh (OpenAlex)Quarterly
Retraction sweep (Retraction Watch)Weekly
Manual tier reviewQuarterly
Full re-harvest with backfillAnnually

When a cited paper is retracted, every synthesis page that cites it is flagged for editorial review within 48 hours and revised within 14 days. The change is recorded in the errata and changelog.

Known limitations

Honest framing matters more than completeness claims for a methods page on a medical site. The current corpus has these caveats:

Reproducibility

The full pipeline — schema, harvesters, dedup, enrichment, retraction sweep, exports, and the tier-1 benchmark — is implemented in Python and shipped as part of the project repository. Anyone with PostgreSQL 14+, Python 3.10+, and a few standard libraries (psycopg, requests, biopython, rapidfuzz) can reproduce the pipeline end to end against the live free APIs.

Bulk exports of the canonical bibliography are available in CSV, JSONL, BibTeX, and RIS formats; see Public API & exports (coming with the production database deployment).

Coverage report

A periodic coverage report breaks down the corpus by year, journal, country (from OpenAlex author-institution codes), open-access status, publication type, and language. Highlights from the current corpus:


Last reviewed: 2026-07-09. Methods evolve with the pipeline; this page is updated whenever a meaningful change is made (new source added, dedup rule changed, tier assignment policy revised). Material changes are noted in the errata and changelog.