efac0c1abcc802cd0bbd039e99c23c27e3166f70
lrnassar
  Tue Jul 7 12:38:35 2026 -0700
Fix BP7 miscategorization in TP53 Provisional Classification track. BP7 is a computational code (synonymous/intronic, SpliceAI-based), not a clinical one; it was incorrectly grouped with PS1/PS2/PS4/PP1/PP4/BS4 as requiring clinical observations. Reworded the docstring and mouseover to note BP7 is out of scope for this missense-only track. refs #37399

diff --git src/hg/makeDb/scripts/tp53/tp53ProvisionalClass.py src/hg/makeDb/scripts/tp53/tp53ProvisionalClass.py
index 0986e8bee81..88cb7c72196 100644
--- src/hg/makeDb/scripts/tp53/tp53ProvisionalClass.py
+++ src/hg/makeDb/scripts/tp53/tp53ProvisionalClass.py
@@ -6,31 +6,33 @@
 from applicable evidence codes the VCEP has pre-computed:
 
   * PM1 hotspot         (Clinical Domains + cancerhotspots.org)
   * PS3 / BS3           (CSpec GN009 v2.4.0 Table S3)
   * PP3 / BP4           (CSpec GN009 v2.4.0 Table S2)
   * BA1 / BS1 / PM2     (gnomAD v4.1 exomes, per CSpec FAF/grpmax thresholds)
   * BS2                 (FLOSSIES healthy-women-over-70 cohort)
   * Splicing PP3        (SpliceAI >= 0.2)
 
 The point sum is bucketed into P / LP / VUS / LB / B per the CSpec
 classification ranges. BA1 is stand-alone Benign and forces class = Benign
 regardless of other evidence.
 
 DELIBERATELY EXCLUDED from the sum (documented in every mouseover):
   - PVS1 (null variants only; handled in separate track)
-  - PS1 / PS2 / PS4 / PP1 / PP4 / BS4 / BP7 (require clinical observations)
+  - PS1 / PS2 / PS4 / PP1 / PP4 / BS4 (require clinical observations)
+  - BP7 (computational, but synonymous/intronic only; out of scope for this
+    missense-only track)
 
 This is NOT a VCEP classification — the warning is in every mouseover
 since clinicians live in the mouseover, not the description page.
 
 bigBed 9+9.
 """
 
 import argparse
 import json
 import os
 import re
 import sys
 
 import openpyxl
 
@@ -362,31 +364,32 @@
         if g is None:
             continue
         if strand == '-':
             g_ref = rcomp.get(c_ref, c_ref)
             g_alt = rcomp.get(c_alt, c_alt)
         else:
             g_ref = c_ref
             g_alt = c_alt
         if (chrom, g + 1, g_ref, g_alt) in flossies_lookup:
             return True
     return False
 
 
 CAVEATS_STR = (
     "PVS1 (null variants only — see PVS1 tracks); "
-    "PS1/PS2/PS4/PP1/PP4/BS4/BP7 (require clinical observations)."
+    "PS1/PS2/PS4/PP1/PP4/BS4 (require clinical observations); "
+    "BP7 (synonymous/intronic; N/A to missense)."
 )
 
 
 HEADER_WARNING = (
     "<b style='color:#c00000'>"
     "NON-FINAL: NOT a VCEP classification &#8212; preliminary point-sum only."
     "</b>"
 )
 
 
 def mouseover(name, cls, pts, pm1, ps3, pp3, af_lbl, bs2_lbl, applied,
               spliceai, splice_pp3_active, splice_overrode_bp4, codon, ba1):
     splice_section = ""
     if spliceai and spliceai > 0:
         if splice_pp3_active and splice_overrode_bp4: