Scoring composes rather than branches
Points are positional: 1st place in a category scores 10, down to 2 for 5th, with Player of the Tournament as a 20-point exact match. On top of that sits a strategy-card layer: four cards per player, each usable as a Swap to change a pick mid-season or a Joker to call an exact finishing position for +30. Unused cards are worth 4 points each, so holding onto them still counts for something. One pointsCalculator service folds category results, card effects and per-match points into a single standings array.
A single service that has to be correct for every rule combination, in exchange for scoring rules that live in one readable place.