Version 0.1. One number for how many goals a player adds over a season compared with a replacement-level player at his position, split into offense and defense. Every input is public; every league constant is derived from the season file when the cards are built and printed below; the three assumptions are named as assumptions.
Offense is three pieces added together. Even-strength: the expected goals his team creates per 60 minutes with him on the ice minus what it creates with him off, times his minutes, minus what a replacement-level player would have given. Finishing: his goals minus his expected goals, shrunk toward zero when the shot count is small. Power play: his unit's expected goals per 60 against the league rate, times his power-play minutes.
Defense is three pieces the same way. Even-strength chances against, on minus off, against the replacement level. Penalty kill: the league rate minus his unit's chances against, times his kill minutes. Penalties: drawn minus taken, times what a power play is worth this season.
Net is offense plus defense. The card shows it over the games he played and per 82 games; the percentile ranks the per-82 figure among league forwards or defensemen with 200 or more minutes at 5-on-5. A rank under that floor is withheld.
For a man traded during the season the file arrives already combined, so his off-ice time is estimated as the average of his clubs' 5-on-5 minutes per game times his games; that is an approximation and it is the one place the even-strength terms are not exact.
Goalies get goals saved above expected (MoneyPuck's model) minus what a replacement goalie would have saved in the same minutes.
The property this model borrows from the one it imitates is that a team's ratings should sum to something close to its goal differential. This build: across 32 clubs, the sum of each club's single-club players' ratings correlates with its goal differential at r = 0.632, with a slope of 0.707 goals of differential per rating goal. The average club sums to 78.2 goals above replacement, which is the gap between an NHL roster and one made of call-ups. San Jose summed to 58.3 against a differential of -41.0.
The past line is the same rating computed on every season since 2015-16 from the same public file, so a card and its history share one definition. The forecast walks the last rated value along an aging curve: for every pair of consecutive rated seasons in the history (6358 pairs across 1782 players), next year minus this year, grouped by position and age, ice-time weighted, smoothed over five years of age. The band is the spread of those year-to-year changes, added up year by year, drawn at the 10th and 90th percentiles. The starting point is a weighted mean of up to three recent seasons (weights 0.5, 0.3, 0.2) pulled toward the league mean for his position by half with one season on file, 30 percent with two and 15 percent with three. Those weights are priors. The aging curve is the delta method and carries its known survivorship bias: a man who fell out of the league is not in the next-season pair. Goalies are rated per 60 minutes against a replacement goalie, weighted by games, with their own aging curve and a floor of 10 games.
Market value is quantile matching inside each position group: among rated men on standard contracts, the k-th percentile of rating is paid the k-th percentile of cap hit as a share of the $104M ceiling. No line is fitted, so a handful of outliers cannot tilt it. Every year is priced in 2026-27 dollars because no public primary exists for the ceiling past 2027-28. Positive value is the share of 2,000 simulated futures along the trajectory (the same aging deltas and spread) in which value over the years left on the deal meets the cap hit over the same years. The spread is the year-to-year scatter of measured ratings, which carries measurement noise forward as if it were real change; that pulls every probability toward 50 percent, and a fitted error model that separates the two is the next version. Every verdict here held its side when that spread was tested at 70 and 50 percent of its width.
The contract table was copied by hand from CapWages, credited here, 1459 rows read 2026-09-12; 666 joined to a rated man (650 by exact name and position, 16 by a spelling match audited by name in the build log), 488 entry-level contracts excluded because entry-level pay is set by the collective agreement and not by the market, 305 not joined. A man is not joined when he has no rated season: under the ice-time floor, or absent from the season file (over $8M this season: Aleksander Barkov and Logan Couture). He is priced by his measured rating in the season shown, not by the forecast; the probability uses the forecast.
It is not isolated impact: it does not adjust for teammates, competition or zone starts, because no free public source this site can reach carries those. It is not a forecast. It is not The Athletic's Net Rating, whose values are subscriber-only and do not appear here. It is version 0.1 of a public method with its constants printed, built so it can be checked and replaced.
Sources: MoneyPuck (expected goals and on-ice components, credited under their terms), NHL.com (roster and counting line). Config: data/pine-rating/config-v0.1.json. Updated 2026-09-13.