f/reports/xcheck_official/jlpsx.json
Greg Pomerantz e20b2e30cb Double-listing: layout-agnostic invariants, whole-dump sweep, bulk corrections
Yahoo changed the shape of its event feed between downloads: a 2026-08
re-download of CVIX/JLPSX shows it no longer returns capitalGain events at
all (the dividend stream still carries the year-end rows), while stale
tickers now return no events at all. File-specific remove ops therefore
break silently on the next re-download, so the double-listing fix is now
expressed as layout-agnostic invariants applied at bundle assembly
(idempotent, hold for full and incremental builds):

  dedup: [[date, amount]]      keep at most one copy of a same-date/
      same-amount cross-file pair (the capitalGain copy when both present)
  drop_capg_copy: [date]       the capitalGain row on that date is the
      spurious copy of the dividend row

- data.py: apply_invariants() at bundle assembly + pure dedupe_event_rows()
  shared with verify_official and tests (8 new test cases, 22 passing)
- JLPSX/CVSIX corrections rewritten with the invariants (2019-08-08 now
  keeps the dividend amount per the verified same-date pattern)
- scripts/scan_double_listing.py: whole-dump sweep -> reports/double_listing/
  6,421 symbols scanned: 1,218 with same-amount pairs (6,589), 1,631 with
  differing-amount pairs (12,366, reported only - not distinguishable from
  legitimate same-day div+capg without per-fund official data), 83 with
  repeated within-file rows (ingest keep-last already collapses them)
- scripts/apply_dedup_corrections.py: bulk 'dedup' corrections for the
  1,218 same-amount symbols (1,212 new files; the 6 verified funds keep
  their explicit, official-verified corrections)
- scripts/check_corrections.py: integrity check for every correction op
  against the actual (frozen) files - caught a mis-filed CVSIX entry
2026-08-31 21:00:36 -04:00

103 lines
1.6 KiB
JSON

{
"symbol": "jlpsx",
"name": "JPMorgan US Large Cap Core Plus I",
"verdict": "ok",
"class": "Class I",
"mean_rel_err": 0.0007,
"nav_check": null,
"periods": [
{
"period": "fy",
"end": "2025-06-30",
"official": 1.37,
"local": 1.368,
"diff": 0.002,
"ok": true,
"unbounded": false
},
{
"period": "fy",
"end": "2024-06-30",
"official": 2.03,
"local": 2.029,
"diff": 0.001,
"ok": true,
"unbounded": false
},
{
"period": "fy",
"end": "2023-06-30",
"official": 4.86,
"local": 4.859,
"diff": 0.001,
"ok": true,
"unbounded": false
},
{
"period": "fy",
"end": "2022-06-30",
"official": 6.78,
"local": 6.785,
"diff": -0.005,
"ok": true,
"unbounded": false
},
{
"period": "fy",
"end": "2021-06-30",
"official": 6.89,
"local": 32.267,
"diff": -25.377,
"ok": false,
"unbounded": true
}
],
"other_classes": [
"Class A",
"Class C",
"Class I",
"Class L",
"Class A",
"Class C",
"Class I",
"Class A",
"Class C",
"Class I",
"Class A",
"Class C",
"Class I",
"Class A",
"Class C",
"Class I",
"Class A",
"Class C",
"Class I",
"Class A",
"Class C",
"Class I",
"Class A",
"Class C",
"Class I",
"Class L",
"Class A",
"Class C",
"Class I",
"Class A",
"Class C",
"Class A",
"Class I",
"Class A"
],
"filing": {
"accession": "0001193125-25-261051",
"doc": "d43102d497.htm",
"period_end": "2025-11-03",
"display": "JPMorgan Trust I (CIK 0001217286)",
"ciks": [
"0001217286"
],
"score": 8.332236
},
"how": "per-share-data",
"n_bytes": 23648659
}