Deduplikacja treningów przed obliczeniem obciążenia
Obciążenie treningowe liczone jest z listy treningów. Jeśli ten sam trening trafia do listy dwa razy, wynik rośnie bez żadnej zmiany w rzeczywistym wysiłku. Problem pojawiał się, gdy trening zapisany w portalu i ten sam trening zgłoszony w czacie trafiały do bazy osobno.
Problem: ten sam trening liczony dwa razy
Jeden trening mógł mieć dwa wpisy: z portalu jako sesja i z czatu jako zdanie w rozmowie. Oba zapisy były poprawne, ale razem zawyżały obciążenie w tygodniowym oknie ACWR. Liczba wpisów nie odpowiadała liczbie treningów.
Co zrobiłem: reguła pierwszeństwa i identyfikator sesji
- Dodałem regułę: gdy tego samego dnia istnieje wpis z portalu i z czatu, wygrywa portal. Ta sama sesja portalu liczy się raz, niezależnie od liczby zapisów.
- Ujednoliciłem walidację linii treningu. Pole
srcprzyjmuje wartościportalalboczat, a polesesjama od 1 do 64 znaków. Format jest zgodny z modułem panelu floty, dzięki czemu wspólna logika deduplikacji używa tych samych wektorów. - Dodałem komendę
zapisz --json, która zapisuje trening z czatu deterministycznie, bez zgadywania parametrów z tekstu. - Wydałem wersję
dane-sportowe 0.4.0i obsługę zapisu ACWR w jednym miejscu. Zmiany są w commicie0ddbb89, który dotyka dwudziestu plików.
Przy okazji poprawiłem dwa drobiazgi z tego dnia: w 54aadea zmieniłem STALE_DAYS z 1 na 2 zgodnie z dokumentacją, a w c7ce983 doprecyzowałem prompt generatora wpisów, żeby wpis trzymał się danych.
Dlaczego to ważne
Obciążenie to liczba, na której opierają się decyzje o intensywności kolejnych dni. Zawyżona liczba prowadzi do zbyt łagodnego planu, a zaniżona do zbyt ostrego. Deduplikacja przed obliczeniem chroni wynik, a nie interfejs: poprawny wynik jest tam, gdzie liczony jest wzór.
Czego się nauczyłem
- Deduplikację trzeba zrobić przed agregacją. Usunięcie duplikatu po policzeniu sumy nie cofa błędu.
- Kiedy dwa źródła opisują to samo zdarzenie, potrzebna jest jawna reguła pierwszeństwa, nie przypadek kolejności zapisu.
- Walidacja pól źródła (
src,sesja) wcześnie wyłapuje wpisy, które w przeciwnym razie cicho psułyby wynik.