-- ===================================================================== -- TeeCup — faktisk (beregnet) HCP vs. manuelt satt HCP (migrasjon 030, -- ADR-038) -- ===================================================================== -- To atskilte tall (Beslutning A): `app_user.handicap_index` (uendret, -- manuelt satt, brukes til Course Handicap-beregning som i dag) og en -- NY `computed_handicap_index` (WHS Handicap Index, Rule 5.2, regnet -- automatisk fra beste 8 av de ≤20 nyeste tellende Score Differential- -- ene -- se `handicap_engine.handicap_index_from_differentials`, -- allerede skrevet og testet, bare aldri kalt før nå). -- -- `round_participant.exclude_from_handicap` (Beslutning C) er en -- EKSPLISITT, manuell opt-out -- uavhengig av `counts_for_handicap` -- (den AUTOMATISKE WHS-kvalifiseringen, minimum spilte hull). Endelig -- medregning krever begge: counts_for_handicap AND NOT -- exclude_from_handicap. Kontrolleres av HVER innlogget deltaker for -- sin egen rad (app-lag-autorisasjon, ikke noe denne migrasjonen -- håndhever). -- -- `round.play_format` (Beslutning D) er selvdeklarert -- frittstående -- runder har ingen egen match-motor til å "oppdage" dette selv. -- -- `handicap_history.source` (Beslutning F) skiller manuelle -- profilendringer (eksisterende bruk) fra automatiske beregninger -- -- samme tabell, to kilder, i stedet for en parallell historikk-tabell. -- ===================================================================== \set ON_ERROR_STOP on ALTER TABLE app_user ADD COLUMN computed_handicap_index numeric(4,1); ALTER TABLE app_user ADD COLUMN computed_handicap_index_updated_at timestamptz; ALTER TABLE round_participant ADD COLUMN exclude_from_handicap boolean NOT NULL DEFAULT false; ALTER TABLE round ADD COLUMN play_format text NOT NULL DEFAULT 'stroke' CHECK (play_format IN ('stroke', 'match')); ALTER TABLE handicap_history ADD COLUMN source text NOT NULL DEFAULT 'manual' CHECK (source IN ('manual', 'computed'));