zfin-vestwell/data/model.srf

232 lines
15 KiB
Text

#!srfv1
# Underlying-fund weights for each plan portfolio, by era.
#
# GENERATED by tools/gen_model.py from the Plan Disclosure Booklet. Regenerate
# rather than hand-editing the projected rows; 21 eras is too many to retype
# reliably. Hand edits to the `fitted` rows are fine, but keep them in sync.
#
# These portfolios are unitized fund-of-funds trusts, not mutual funds. The Plan
# Disclosure Booklet is explicit that they "reflect changes in value from income
# and gains and losses on the sale of the Underlying Funds solely by increasing
# or decreasing their Unit Value" -- all income compounds into the unit value and
# nothing is distributed. That is why the reconstruction uses each underlying
# fund's dividend-adjusted (total-return) close, not its raw NAV.
#
# Source of the weights: the Plan Disclosure Booklet allocation tables at
# https://marcom.vestwell.com/program-description/oregon-college.html
# Corroborated for the current era by two live JSON endpoints that agree exactly:
# https://vss-api.vestwell.com/plans/oregon-college/portfolios (array form)
# https://vss-api.vestwell.com/plans/oregon-college (object form)
#
# `era_start` is inclusive: a weight row applies to every trading day >= its
# era_start, until superseded by a later era for the same symbol.
#
# `basis` records how much a row is worth trusting:
# fitted In effect now or in the past, and validated -- the reconstruction
# reproduces every observed anchor to within 0.08% using it.
# projected Not yet in effect. Read off the booklet forward table, so it is
# the plan's published intent, NOT an observed fact. The booklet
# reserves the right to "change the asset allocations ... and change
# the selection of Underlying Funds", so confirm before relying on
# one. `verify` flags any projected era that has become current.
#
# NOTE ON FEES: no fee or drag term appears here, and none is needed. The
# reconstruction pins the series at both ends of every anchor gap and distributes
# the residual geometrically, which absorbs the asset-based fee, cash drag,
# trade-date lag and securities-lending income together. `verify` reports the
# drag each gap implies, as a cross-check against the booklet's published cost
# table ($23.40 per $10,000/yr = 0.234% for ORCBI, $23.91 = 0.239% for ORC42).
# ORCBI -- "Balanced Index", a STATIC portfolio. The booklet: "Static Portfolio
# investments remain fixed, subject to periodic rebalancing". No glidepath, so
# one era covers its whole life. These weights change only by Board action.
symbol::ORCBI,era_start::2018-09-01,basis::fitted,ticker::VSMPX,weight:num:36
symbol::ORCBI,era_start::2018-09-01,basis::fitted,ticker::VTPSX,weight:num:24
symbol::ORCBI,era_start::2018-09-01,basis::fitted,ticker::VBMPX,weight:num:40
# ORC42 -- "College Enrollment Year 2042", a GLIDEPATH portfolio.
#
# The booklet publishes a full cross-section of every enrollment-year portfolio
# as of 2026-07-01. Because all of them follow one glidepath keyed on
# years-to-enrollment, that cross-section IS ORC42's forward path shifted in
# time: ORC42 in calendar year Y holds what enrollment-year row E = 4068 - Y
# holds today. Y=2026 gives E=2042, which matches ORC42's fitted current era, so
# the mapping checks out against observed data at the one point where it can.
#
# Two approximations in the projected rows:
# 1. The booklet table is annual, but the booklet also says allocations step
# QUARTERLY. So each projected era is up to three quarters coarse, and the
# intermediate quarterly steps are not published anywhere.
# 2. Era boundaries sit on 1 January. The current boundary was fitted to
# 2026-01-01 by grid search over quarter boundaries; every candidate from
# 2025-10-01 to 2026-04-01 gives rms <= 0.041%, so the fit cannot resolve
# it better than that.
#
# Neither approximation matters much. Future eras cannot affect a reconstruction
# that stops at today, and once daily feed values are appended to anchors.srf
# every gap is one session, where pinning makes the weights literally inert (see
# the test "weights are inert when anchors are one session apart"). They are
# prefilled so the model degrades gracefully instead of silently using 2026
# weights in 2035 if forward recording ever lapses.
#
# Era 1 is the booklet's max-equity plateau (its 2043/2044/2045 rows). ORC42
# launched 19 years out from enrollment, so it sat on the plateau from
# inception.
symbol::ORC42,era_start::2023-07-01,basis::fitted,ticker::VSMPX,weight:num:54
symbol::ORC42,era_start::2023-07-01,basis::fitted,ticker::VTPSX,weight:num:36
symbol::ORC42,era_start::2023-07-01,basis::fitted,ticker::VIPIX,weight:num:1.67
symbol::ORC42,era_start::2023-07-01,basis::fitted,ticker::VBMPX,weight:num:6.66
symbol::ORC42,era_start::2023-07-01,basis::fitted,ticker::VTIFX,weight:num:1.67
# Era 2 is the booklet current 2042 row. Validated: the reconstruction
# reproduces all nine ORC42 anchors to within 0.06% using it.
symbol::ORC42,era_start::2026-01-01,basis::fitted,ticker::VSMPX,weight:num:52.8
symbol::ORC42,era_start::2026-01-01,basis::fitted,ticker::VTPSX,weight:num:35.2
symbol::ORC42,era_start::2026-01-01,basis::fitted,ticker::VIPIX,weight:num:2
symbol::ORC42,era_start::2026-01-01,basis::fitted,ticker::VBMPX,weight:num:8
symbol::ORC42,era_start::2026-01-01,basis::fitted,ticker::VTIFX,weight:num:2
# Projected: calendar 2027 takes the booklet enrollment-year 2041 row.
symbol::ORC42,era_start::2027-01-01,basis::projected,ticker::VSMPX,weight:num:51.6
symbol::ORC42,era_start::2027-01-01,basis::projected,ticker::VTPSX,weight:num:34.4
symbol::ORC42,era_start::2027-01-01,basis::projected,ticker::VIPIX,weight:num:2.33
symbol::ORC42,era_start::2027-01-01,basis::projected,ticker::VBMPX,weight:num:9.34
symbol::ORC42,era_start::2027-01-01,basis::projected,ticker::VTIFX,weight:num:2.33
# Projected: calendar 2028 takes the booklet enrollment-year 2040 row.
symbol::ORC42,era_start::2028-01-01,basis::projected,ticker::VSMPX,weight:num:49.8
symbol::ORC42,era_start::2028-01-01,basis::projected,ticker::VTPSX,weight:num:33.2
symbol::ORC42,era_start::2028-01-01,basis::projected,ticker::VIPIX,weight:num:2.83
symbol::ORC42,era_start::2028-01-01,basis::projected,ticker::VBMPX,weight:num:11.34
symbol::ORC42,era_start::2028-01-01,basis::projected,ticker::VTIFX,weight:num:2.83
# Projected: calendar 2029 takes the booklet enrollment-year 2039 row.
symbol::ORC42,era_start::2029-01-01,basis::projected,ticker::VSMPX,weight:num:48
symbol::ORC42,era_start::2029-01-01,basis::projected,ticker::VTPSX,weight:num:32
symbol::ORC42,era_start::2029-01-01,basis::projected,ticker::VIPIX,weight:num:3.33
symbol::ORC42,era_start::2029-01-01,basis::projected,ticker::VBMPX,weight:num:13.34
symbol::ORC42,era_start::2029-01-01,basis::projected,ticker::VTIFX,weight:num:3.33
# Projected: calendar 2030 takes the booklet enrollment-year 2038 row.
symbol::ORC42,era_start::2030-01-01,basis::projected,ticker::VSMPX,weight:num:45.6
symbol::ORC42,era_start::2030-01-01,basis::projected,ticker::VTPSX,weight:num:30.4
symbol::ORC42,era_start::2030-01-01,basis::projected,ticker::VIPIX,weight:num:4
symbol::ORC42,era_start::2030-01-01,basis::projected,ticker::VBMPX,weight:num:16
symbol::ORC42,era_start::2030-01-01,basis::projected,ticker::VTIFX,weight:num:4
# Projected: calendar 2031 takes the booklet enrollment-year 2037 row.
symbol::ORC42,era_start::2031-01-01,basis::projected,ticker::VSMPX,weight:num:43.2
symbol::ORC42,era_start::2031-01-01,basis::projected,ticker::VTPSX,weight:num:28.8
symbol::ORC42,era_start::2031-01-01,basis::projected,ticker::VIPIX,weight:num:4.67
symbol::ORC42,era_start::2031-01-01,basis::projected,ticker::VBMPX,weight:num:18.66
symbol::ORC42,era_start::2031-01-01,basis::projected,ticker::VTIFX,weight:num:4.67
# Projected: calendar 2032 takes the booklet enrollment-year 2036 row.
symbol::ORC42,era_start::2032-01-01,basis::projected,ticker::VSMPX,weight:num:41.16
symbol::ORC42,era_start::2032-01-01,basis::projected,ticker::VTPSX,weight:num:27.44
symbol::ORC42,era_start::2032-01-01,basis::projected,ticker::VIPIX,weight:num:5.23
symbol::ORC42,era_start::2032-01-01,basis::projected,ticker::VBMPX,weight:num:20.94
symbol::ORC42,era_start::2032-01-01,basis::projected,ticker::VTIFX,weight:num:5.23
# Projected: calendar 2033 takes the booklet enrollment-year 2035 row.
symbol::ORC42,era_start::2033-01-01,basis::projected,ticker::VSMPX,weight:num:39.12
symbol::ORC42,era_start::2033-01-01,basis::projected,ticker::VTPSX,weight:num:26.08
symbol::ORC42,era_start::2033-01-01,basis::projected,ticker::VIPIX,weight:num:5.8
symbol::ORC42,era_start::2033-01-01,basis::projected,ticker::VBMPX,weight:num:23.2
symbol::ORC42,era_start::2033-01-01,basis::projected,ticker::VTIFX,weight:num:5.8
# Projected: calendar 2034 takes the booklet enrollment-year 2034 row.
symbol::ORC42,era_start::2034-01-01,basis::projected,ticker::VSMPX,weight:num:37.2
symbol::ORC42,era_start::2034-01-01,basis::projected,ticker::VTPSX,weight:num:24.8
symbol::ORC42,era_start::2034-01-01,basis::projected,ticker::VIPIX,weight:num:6.33
symbol::ORC42,era_start::2034-01-01,basis::projected,ticker::VBMPX,weight:num:25.34
symbol::ORC42,era_start::2034-01-01,basis::projected,ticker::VTIFX,weight:num:6.33
# Projected: calendar 2035 takes the booklet enrollment-year 2033 row.
symbol::ORC42,era_start::2035-01-01,basis::projected,ticker::VSMPX,weight:num:34.2
symbol::ORC42,era_start::2035-01-01,basis::projected,ticker::VTPSX,weight:num:22.8
symbol::ORC42,era_start::2035-01-01,basis::projected,ticker::VIPIX,weight:num:7.17
symbol::ORC42,era_start::2035-01-01,basis::projected,ticker::VBMPX,weight:num:28.66
symbol::ORC42,era_start::2035-01-01,basis::projected,ticker::VTIFX,weight:num:7.17
# Projected: calendar 2036 takes the booklet enrollment-year 2032 row.
symbol::ORC42,era_start::2036-01-01,basis::projected,ticker::VSMPX,weight:num:31.2
symbol::ORC42,era_start::2036-01-01,basis::projected,ticker::VTPSX,weight:num:20.8
symbol::ORC42,era_start::2036-01-01,basis::projected,ticker::VIPIX,weight:num:8
symbol::ORC42,era_start::2036-01-01,basis::projected,ticker::VBMPX,weight:num:32
symbol::ORC42,era_start::2036-01-01,basis::projected,ticker::VTIFX,weight:num:8
# Projected: calendar 2037 takes the booklet enrollment-year 2031 row.
symbol::ORC42,era_start::2037-01-01,basis::projected,ticker::VSMPX,weight:num:28.2
symbol::ORC42,era_start::2037-01-01,basis::projected,ticker::VTPSX,weight:num:18.8
symbol::ORC42,era_start::2037-01-01,basis::projected,ticker::VIPIX,weight:num:8.83
symbol::ORC42,era_start::2037-01-01,basis::projected,ticker::VBMPX,weight:num:35.34
symbol::ORC42,era_start::2037-01-01,basis::projected,ticker::VTIFX,weight:num:8.83
# Projected: calendar 2038 takes the booklet enrollment-year 2030 row.
symbol::ORC42,era_start::2038-01-01,basis::projected,ticker::VSMPX,weight:num:24.8
symbol::ORC42,era_start::2038-01-01,basis::projected,ticker::VTPSX,weight:num:16.53
symbol::ORC42,era_start::2038-01-01,basis::projected,ticker::VIPIX,weight:num:7.61
symbol::ORC42,era_start::2038-01-01,basis::projected,ticker::VBMPX,weight:num:30.45
symbol::ORC42,era_start::2038-01-01,basis::projected,ticker::VTIFX,weight:num:7.61
symbol::ORC42,era_start::2038-01-01,basis::projected,ticker::VBIPX,weight:num:7.5
symbol::ORC42,era_start::2038-01-01,basis::projected,ticker::VTSPX,weight:num:5.5
# Projected: calendar 2039 takes the booklet enrollment-year 2029 row.
symbol::ORC42,era_start::2039-01-01,basis::projected,ticker::VSMPX,weight:num:20.3
symbol::ORC42,era_start::2039-01-01,basis::projected,ticker::VTPSX,weight:num:13.53
symbol::ORC42,era_start::2039-01-01,basis::projected,ticker::VIPIX,weight:num:5.78
symbol::ORC42,era_start::2039-01-01,basis::projected,ticker::VBMPX,weight:num:23.11
symbol::ORC42,era_start::2039-01-01,basis::projected,ticker::VTIFX,weight:num:5.78
symbol::ORC42,era_start::2039-01-01,basis::projected,ticker::VBIPX,weight:num:20.5
symbol::ORC42,era_start::2039-01-01,basis::projected,ticker::VTSPX,weight:num:11
# Projected: calendar 2040 takes the booklet enrollment-year 2028 row.
symbol::ORC42,era_start::2040-01-01,basis::projected,ticker::VSMPX,weight:num:15
symbol::ORC42,era_start::2040-01-01,basis::projected,ticker::VTPSX,weight:num:10
symbol::ORC42,era_start::2040-01-01,basis::projected,ticker::VIPIX,weight:num:3.33
symbol::ORC42,era_start::2040-01-01,basis::projected,ticker::VBMPX,weight:num:13.34
symbol::ORC42,era_start::2040-01-01,basis::projected,ticker::VTIFX,weight:num:3.33
symbol::ORC42,era_start::2040-01-01,basis::projected,ticker::VBIPX,weight:num:35
symbol::ORC42,era_start::2040-01-01,basis::projected,ticker::VTSPX,weight:num:20
# Projected: calendar 2041 takes the booklet enrollment-year 2027 row.
symbol::ORC42,era_start::2041-01-01,basis::projected,ticker::VSMPX,weight:num:10.5
symbol::ORC42,era_start::2041-01-01,basis::projected,ticker::VTPSX,weight:num:7
symbol::ORC42,era_start::2041-01-01,basis::projected,ticker::VIPIX,weight:num:0.33
symbol::ORC42,era_start::2041-01-01,basis::projected,ticker::VBMPX,weight:num:1.34
symbol::ORC42,era_start::2041-01-01,basis::projected,ticker::VTIFX,weight:num:0.33
symbol::ORC42,era_start::2041-01-01,basis::projected,ticker::VBIPX,weight:num:50
symbol::ORC42,era_start::2041-01-01,basis::projected,ticker::VTSPX,weight:num:30.5
# Projected: calendar 2042 takes the booklet enrollment-year 2026 row.
symbol::ORC42,era_start::2042-01-01,basis::projected,ticker::VSMPX,weight:num:6
symbol::ORC42,era_start::2042-01-01,basis::projected,ticker::VTPSX,weight:num:4
symbol::ORC42,era_start::2042-01-01,basis::projected,ticker::VBIPX,weight:num:30
symbol::ORC42,era_start::2042-01-01,basis::projected,ticker::VTSPX,weight:num:30
symbol::ORC42,era_start::2042-01-01,basis::projected,ticker::VUSXX,weight:num:30
# Projected: calendar 2043 takes the booklet enrollment-year 2025 row.
symbol::ORC42,era_start::2043-01-01,basis::projected,ticker::VSMPX,weight:num:3
symbol::ORC42,era_start::2043-01-01,basis::projected,ticker::VTPSX,weight:num:2
symbol::ORC42,era_start::2043-01-01,basis::projected,ticker::VBIPX,weight:num:23
symbol::ORC42,era_start::2043-01-01,basis::projected,ticker::VTSPX,weight:num:23
symbol::ORC42,era_start::2043-01-01,basis::projected,ticker::VUSXX,weight:num:49
# Projected: calendar 2044 takes the booklet enrollment-year 2024 row.
symbol::ORC42,era_start::2044-01-01,basis::projected,ticker::VBIPX,weight:num:14.5
symbol::ORC42,era_start::2044-01-01,basis::projected,ticker::VTSPX,weight:num:14.5
symbol::ORC42,era_start::2044-01-01,basis::projected,ticker::VUSXX,weight:num:71
# Projected: calendar 2045 takes the booklet enrollment-year 2023 row.
symbol::ORC42,era_start::2045-01-01,basis::projected,ticker::VBIPX,weight:num:5
symbol::ORC42,era_start::2045-01-01,basis::projected,ticker::VTSPX,weight:num:5
symbol::ORC42,era_start::2045-01-01,basis::projected,ticker::VUSXX,weight:num:90
# Projected: calendar 2046 takes the booklet enrollment-year 2022 row.
symbol::ORC42,era_start::2046-01-01,basis::projected,ticker::VBIPX,weight:num:5
symbol::ORC42,era_start::2046-01-01,basis::projected,ticker::VTSPX,weight:num:5
symbol::ORC42,era_start::2046-01-01,basis::projected,ticker::VUSXX,weight:num:90
# Projected: calendar 2047 takes the booklet enrollment-year 2021 row.
symbol::ORC42,era_start::2047-01-01,basis::projected,ticker::VUSXX,weight:num:100