Add real KPM to historical detail table and fix kills per match labels

This commit is contained in:
devRaGonSa
2026-06-11 12:52:53 +02:00
parent a9a7e88411
commit e30e28d397
8 changed files with 203 additions and 16 deletions

View File

@@ -0,0 +1,87 @@
# TASK-248 - Add real KPM to public tables and fix kills per match labels
## Summary
This task extends the already validated real historical KPM to the main player table in `historico-partida.html` and removes misleading public `KPM` labels that were actually rendering `kills_per_match`.
It does not change the real KPM formula already validated in production.
## Files Read First
- `frontend/historico-partida.html`
- `frontend/assets/js/historico-partida.js`
- `frontend/assets/css/historico.css`
- `frontend/historico.html`
- `frontend/assets/js/historico.js`
- `frontend/stats.html`
- `frontend/assets/js/stats.js`
- `frontend/ranking.html`
- `frontend/assets/js/ranking.js`
- `backend/app/rcon_historical_read_model.py`
- `docs/HISTORICAL_MATCH_KILLS_PER_MINUTE_ANALYSIS.md`
## Problem
The repository already exposed real KPM at player level in `/api/historical/matches/detail`, but the public UI still had two problems:
1. `historico-partida` only showed real KPM in the expanded player panel, not in the main table.
2. Several public surfaces were calling `kills_per_match` by the visible label `KPM`, which is incorrect.
## Decision
Keep the validated real KPM model unchanged:
- only `kpm_status = ready` renders a visible value
- no total-match-duration fallback
- no `event_span_fallback` as ready KPM
Apply two UI rules:
- historical match detail main table gets a real `KPM` column
- any visible `kills_per_match` label becomes `Kills/partida`
Do not add public aggregated weekly/monthly/annual real KPM yet. That would need a separate backend and snapshot coverage contract so mixed datasets do not produce misleading results.
## Implementation
### Historical match detail
- Added a sortable `KPM` option in the player table.
- Added a `KPM` column in the main player list.
- The cell stays empty unless `kpm_status == "ready"`.
- The expanded panel keeps its existing real KPM chip.
### Historical weekly/monthly tables
- Renamed the last leaderboard metric from `KPM` to `Kills/partida`.
- Kept the underlying `kills_per_match` meaning unchanged.
### Stats and ranking
- Annual stats table now labels `kills_per_match` as `Kills/partida`.
- Weekly/monthly comparison cards now label the same metric as `Kills/partida semanal` and `Kills/partida mensual`.
- Ranking already used `Kills/partida`, so no semantic rename was needed there.
## Validation
Executed:
- `node --check frontend/assets/js/historico-partida.js`
- `node --check frontend/assets/js/historico.js`
- `node --check frontend/assets/js/stats.js`
- `node --check frontend/assets/js/ranking.js`
Static validation performed:
- confirmed `historico-partida.html` main table now shows `KPM`
- confirmed expanded player panel still shows real KPM
- confirmed rows with `insufficient_active_time` keep the main table cell empty
- confirmed historical weekly/monthly tables no longer show `KPM` for `kills_per_match`
- confirmed annual stats no longer show `KPM` for `kills_per_match`
- confirmed ranking still uses `Kills/partida`
## Notes
- No backend changes were required for this task.
- No scheduler, RCON or server configuration changes were made.
- Public aggregated real KPM for weekly/monthly/annual remains pending a dedicated coverage-safe snapshot design.