Dokument dla wnikliwych: wszystkie wzory i kroki potrzebne, by napisać własną, niezależną implementację i uzyskać te same liczby. Wersja reguły: v0.1 z nogą płacową v0.2. Implementacja referencyjna: prototyp/src. Szczegółowa polityka zasilania danymi (konkretne komunikaty urzędów, dni publikacji, kaskady awaryjne, obsługa rewizji i zmian bazy): POLITYKA_danych_v0.1.md.
m — miesiąc kalendarzowy; m₀ — miesiąc bazowy (pierwszy w szeregu); I_c(m) — indeks cen; I_w(m) — indeks płac; A(m) — kotwica miesięczna Talenta; T(d) — wartość dzienna; MA12(x)(m) — średnia arytmetyczna z 12 ostatnich dostępnych wartości x do miesiąca m włącznie (krocząca, wyłącznie wstecz — „przyczynowa").
| Seria | Źródło | Link |
|---|---|---|
| CPI Polska (miesięczny) | GUS / OECD via FRED | POLCPIALLMINMEI; pierwotnie: GUS — wskaźniki cen, Eurostat HICP (prc_hicp_midx, geo=PL) |
| Płace i zatrudnienie PL (sektor przedsiębiorstw, miesięczne) | GUS | Bank Danych Lokalnych + API BDL (przeciętne wynagrodzenie i przeciętne zatrudnienie w sektorze przedsiębiorstw) |
| Kursy walut | NBP | api.nbp.pl (tabela A, od 2002) |
| Testy historyczne USA | FRED (klucz API darmowy: rejestracja) | CPIAUCNS (CPI od 1913), CES3000000008 (płaca godz. przemysł od 1939), A939RC0A052NBEA (PKB/os. od 1929), AHETPI, PAYEMS |
Przykład zapytania FRED (JSON, średnie roczne):
https://api.stlouisfed.org/fred/series/observations?series_id=CPIAUCNS &api_key=TWÓJ_KLUCZ&file_type=json&frequency=a&aggregation_method=avg
I_c(m) = CPI(m) / CPI(m₀) × 100.F(m) = płaca_przeciętna(m) × zatrudnienie(m) (oba z tego samego badania GUS).W(m) = F(m) / MA12(zatrudnienie)(m). Dzięki temu w kryzysie miara spada (fundusz maleje od razu, mianownik „pamięta" pełne zatrudnienie), zamiast sztucznie rosnąć jak przeciętna płaca.I_w(m) = MA12(W)(m), następnie normalizacja do m₀ = 100.A(m) = 100 × √( I_c(m)/I_c(m₀) × I_w(m)/I_w(m₀) )
Środek geometryczny — nie arytmetyczny. Dwa powody: (a) łańcuchowość — wynik nie zależy od daty bazowej ani drogi liczenia; (b) AM≥GM — średnia arytmetyczna dawałaby zawsze wyższą spłatę, systematycznie sprzyjając wierzycielowi.
g = A(m) / A(m−1) T(d_k) = A(m) × g^(k/K) k = 1…K (kolejne dni okna, K = długość okna)
Każda wartosć dzienna jest znana najpóźniej dzień przed obowiązywaniem; strony nigdy nie rozliczają się po kursie, którego nie mogły znać. Raz opublikowane wartości są ostateczne.
Dla okna od roku t do t+h: R = wzrost indeksu testowanego, C = wzrost cen, P = wzrost płac (wszystko jako ilorazy poziomów).
żal_dłużnika = max(0, R/P − 1) żal_wierzyciela = max(0, C/R − 1) żal_okna = max z obu (zero-żal: żal < 2%)
Tożsamość kontrolna: (R/P)×(C/R) = C/P — iloczyn nie zależy od R; minimum maksimum w punkcie równości, stąd R = √(C·P).
| Test | Parametry | Oczekiwany wynik |
|---|---|---|
| USA — stulecie | CPIAUCNS + CES3000000008, lata 1939–2025, horyzonty {3,5,10,20,30}, wszystkie lata startu | Talent: ~88% okien zero-żalu, p95 ≈ 3,5%, max ≈ 6,1% (dłużnik, 1978→2008); nominal: max ≈ 384% |
| USA — z Wielkim Kryzysem | CPIAUCNS + A939RC0A052NBEA, 1929–2025 | Talent: max ≈ 19,7% (wierzyciel, 1929→1932); czyste CPI/dochód: po ≈ 43% |
| Polska — transformacja | CPI PL (od 1989) + przeciętne wynagrodzenie GUS/ZUS, 1989–2024 | Talent: max ≈ 10,4% (wierzyciel, 1989→1994); nominal: max ≈ 10 800% |
| Noga płac v0.2 | AHETPI × PAYEMS / MA12(PAYEMS), miesięcznie | IV 2020: przeciętna +4,2% m/m, v0.2 −8,9%; dryf 2000→2026 różni się o <1 p.p. |
| Kotwica prototypu PL | baza I 1996 = 100, CPI PL + płace roczne interpolowane (prowizorium) | XII 2025: A ≈ 552,7 (I_c ≈ 362, I_w ≈ 843) |
Tolerancja: ±0,5 p.p. na wynikach żalu (drobne różnice wersji danych po rewizjach FRED są normalne; kierunki i rzędy muszą się zgadzać). Uwaga: prototypowa noga płac PL używa danych rocznych GUS/ZUS interpolowanych do miesięcy — docelowa specyfikacja (pkt 3) wymaga miesięcznych danych sektora przedsiębiorstw.
dane = pobierz(CPI_mies, płaca_mies, zatrudnienie_mies) # sekcja 1 I_c = normalizuj(łańcuch_median(CPI_źródła)) # sekcja 2 W = płaca*zatrudnienie / MA12(zatrudnienie) # sekcja 3 I_w = normalizuj(MA12(W)) A = 100 * sqrt(I_c * I_w / (I_c[0]*I_w[0])) # sekcja 4 dla każdego m: publikuj_okno_dzienne(A[m], A[m-1]) # sekcja 5 asercje: wartości kontrolne z sekcji 8
Nie chcesz pisać sam? → gotowy prompt dla agenta-programisty