Skip to content

fix(nport): tickers for abbreviated and reordered issuer names - #93

Merged
daggerok merged 1 commit into
mainfrom
fix/q35-abbreviated-issuer-names
Oct 26, 2026
Merged

daggerok merged 1 commit into
mainfrom
fix/q35-abbreviated-issuer-names

Conversation

@daggerok

Copy link
Copy Markdown
Owner

What changed

  • Re-applied the shared nport-reader block (workspace etf-std/nport-reader.block.ts, open item Q35). A common-stock row the exact SEC name key leaves without a ticker gets a second match on a looser key (nportLooseKey): a Bloomberg qualifier after a slash and a trailing NEW, DEL or state code dropped, abbreviations seen in real filings read as one word (COS = COMPANIES, FINL, PPTYS, MFG, HLDGS, SVCS, GRP, BANCORPORATION = BANCORP, ...), words sorted so EDGAR's reordered titles meet the usual order (SCHWAB CHARLES CORP = Charles Schwab Corp/The, HORTON D R INC = DR Horton Inc)
  • The loose key must name one company: one CIK in SEC company_tickers.json and/or one company's common shares in the Nasdaq Trader directories (both must agree when both know it). Several listed classes (Lennar, Fox, Zillow, Alphabet) need the class the row states, matched to the listed security name (LENNAR CORP CL B -> LEN-B), else no ticker; a foreign ISIN still needs the directory listing. Tickers the exact match gives never change, and a loose ticker that another security of the filing already holds is dropped. No wiring change: nportTickers(positions, names, listings) reads the new \u0001 entries of parseSecCompanyNames and parseUsListings

Why

About 560 distinct names in large funds published - because the N-PORT issuer name is abbreviated or ordered differently from the SEC title ("Lowe's Cos" vs "LOWES COMPANIES", TJX, Travelers, Williams, T Rowe Price, Charles Schwab), so Copy Tickers and the Watchlist lost them

Effect on real filings

Every fund of this feed with an N-PORT-P filing (92 filings, 39232 positions), newest filing read with the shared reader, previous block (workspace d7db168) vs this block on the same cached SEC answers and directories of 2026-10-26; nothing written to api/:

TOTAL tickers 8462 -> 8466: 4 gained, 0 lost, 0 moved to another ticker
DON (2026-06-30, 296 positions): +2 tickers
DTD (2026-06-30, 824 positions): +2 tickers
gained (identifier -> ticker, funds):
  BROWN-FORMAN CORP [115637209] -> BF-B (2)
  BROWN-FORMAN CORP [115637100] -> BF-A (2)

Independent check over all 26 N-PORT brands: 199 of the 202 distinct gained identifier/ticker pairs equal OpenFIGI's ticker of that CUSIP or ISIN; the other 3 are former identifiers of the same company (Alight's old Class A CUSIP 01626W101, which OpenFIGI lists only on a European venue as ALIGHT INC - CLASS A; Honeywell's old CUSIP 438516106 and Liberty Global's old Class B CINS G5480U112, unknown to OpenFIGI). No existing ticker was lost or moved (0 lost, 0 moved above); a loose key shared by two companies (First Bancorp NC and Puerto Rico, Independent Bank MA and MI, Tetra Tech and Tetra Technologies) gives no ticker

Checks

  • bun test and bun test with every update-data.config.json control exported: 66 pass 0 fail, exit 0 both
  • bun build --target=bun scripts/update-data.ts --outfile=/dev/null, bun build --target=bun src/main.tsx --outfile=/dev/null, git diff --check, check-readme.ts ., check-scripts.ts .
  • apply-block.ts --check nport-reader .: identical; tc/check.sh .: no new errors (52 lines, before 52)
  • Template tests blocks.test.ts: 17 pass (the new Q35 case: Lowe's, Schwab, Lennar A and B, Alphabet A and C, TrustCo through the directory name, two First Bancorps and a second Chevron CUSIP without a ticker)

Shared nport-reader block (workspace 3d3f574 and f25d869, open item Q35): a common stock the exact SEC name key misses gets a second match on a looser key (abbreviations, slash qualifiers, reordered words) that must name one company in the SEC table or the Nasdaq Trader directories; the stated class picks among listed classes.
@daggerok
daggerok merged commit e4702e3 into main Oct 26, 2026
1 check passed
@daggerok
daggerok deleted the fix/q35-abbreviated-issuer-names branch October 26, 2026 23:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant