Conceptual deck · QC'd build, October 2026 Companion to Deck B — Implementation Walkthrough and the runnable apps in ../.
AECOM and AESPID as the usual offenders; the scan reaches every non-numeric column by content, not by a hard-coded name list).| Tier | Product | What it is, in one line | Hands forward |
|---|---|---|---|
| Tier 1 | eCRF intake / normalizer (the document-mode front-end is LiteParse, not exercised here) | aligns each incoming row to its participant, copies the verbatim and every field through unchanged, and discovers which columns to scan by content — every non-numeric column — rather than a name-based rule | the untouched verbatim; the untouched free-text strings; the detected column list |
| Tier 2 | Cactus Needle3 | a Laddered Simple Attention Network on CPU/NPU that does Pydantic-schema entity extraction and encodes the verbatim to a 3072-dim unit vector (its own general-purpose embedding, not a biomedical encoder such as SapBERT), retrieving the nearest MedDRA terms from an HNSW inner-product graph | candidate terms with their full hierarchy path (LLT→PT→HLT→HLGT→SOC) + closeness numbers; identifier spans + type + in-field offsets |
| Tier 3 | Laya | a non-autoregressive classifier (ModernBERT backbone + decision head) that answers fixed yes/no, rating and pick questions about a string in one pass (about 0.3 s per question on a 4-vCPU CPU, measured) and returns probabilities calibrated by a temperature fitted on labeled data | P(direct PHI), P(re-identification risk); the ambiguity scalar the coding re-ranker consumes |
| Tier 4 | XGBoost | a boosted-tree ensemble (under 10 ms per record, measured) that reads only the named columns from Tiers 1–3 and applies an explicit, movable rule — re-rank + gate for coding, per-span redaction for PHI | coded fields + status; scrubbed field copies + per-row flag |
noul / score / choice), scored in one shot, so there is no decoding step and nothing to parse.binary:logistic, one score per candidate) over retrieval cosine, retrieval rank, normalized edit-distance similarity, Jaro-Winkler similarity, a body-system agreement indicator and the Tier-3 ambiguity scalar; the stand-in uses the first four as a fixed weighted sum whose weights sum to one. Above a reviewer-set confidence gate the coded fields are auto-populated; below it the top candidates are pre-populated into the human coding queue. The gate is a configurable operating point (the build defaults to 0.88; a 0.90 setting is also exercised in the worked routing), recorded in the audit, not a constant invented in code.SAN_<field>) and a per-row flag; the per-token geometry/header rule belongs to the scanned-document path and is not executed here.