HamLogTools

Izboljšave — HamLogTools

Datum pregleda: 2026-06-01 · Različica: v1.13.1

Dokument zajema odprte predloge izboljšav za vsa orodja projekta. Gre samo naprej — brez zgodovine opravljenih popravkov.


1. edi2adif.html

Visoka prioriteta

1.1 Statistični panel Po nalaganju prikaži povzetek: skupaj QSO po pasu/načinu, unikatni klicni znaki, skupna razdalja, najboljši DX, pokritost kvadrantov lokatorja. Brez sprememb podatkovnega modela — vse iz obstoječega _all[].

1.2 Pregled glave EDI Zložljiva plošča z razčlenjenimi polji glave za vsako naloženo datoteko (operator, tekmovanje, klub, antena, moč). Koristno za preverjanje pred izvozom, da je bila izbrana prava datoteka.

Srednja prioriteta

1.3 Razreševanje duplikatov Duplikati so samodejno označeni, a uporabnik ne more izbrati, katero kopijo ohraniti. Pogled »reši duplikate« bi pokazal obe kopiji vzporedno z možnostjo ročne izbire.

1.4 Vizualizacija karte lokatorjev Prikaži delane kvadrante na Maidenhead mreži (Canvas ali SVG). Funkciji locToLatLon in haversine sta implementirani v vhf-logger.html — portabilni brez predelave.

1.5 Vnos iz odložišča Dovoli lepljenje vsebine EDI datoteke neposredno v polje namesto povleci-in-spusti — koristno pri oddaljenih strojih ali kopiranju iz e-pošte.

Nizka prioriteta

1.6 Izvoz za SOTA/POTA Namenski CSV format za SOTA in POTA aktivacijo s specifičnimi zahtevami po poljih.

1.7 Trajne nastavitve Zapomni si jezikovno nastavitev in stanje razvrščanja stolpcev v localStorage med sejami brskalnika.

1.8 Navigacija s tipkovnico Puščične tipke za navigacijo po vrsticah, Enter za preklop izbire, E za sprožitev izvoza.


2. edi-crosscheck.html

Orodje pokriva statistični crosscheck (LOC_MISMATCH, LOC_MISSING, CALL_SIMILAR, CALL_BY_LOC, CALL_UNKNOWN) z možnostjo nastavljanja pragov. Naslednje predloge so razvrščene po potrebnih vhodnih podatkih.

Razred A — razširitve obstoječe statistike (brez novih virov)

A1. Band-aware modus lokatorja (visoka prioriteta) Trenutna agregacija lokatorjev poteka čez vse pasove skupaj. Postaja, fiksna na 2m, je pogosto portable na 6m — to povzroča lažne pozitivne pri LOC_MISMATCH. Rešitev: Map<call → Map<band → {locators, total}>>. Per-band modus kot primarni; agregat čez vse pasove kot fallback, ko je per-band premalo zapisov. Ocena: ~30–50 vrstic JS + razširitev _histDB.

A2. Suffix-aware lokator (visoka prioriteta) /P in /M zveze imajo legitimno drug lokator od fiksnega QTH in povzročajo flood LOC_MISMATCH opozoril. Rešitev: ohrani q.suffix v parserju; za /P//M zniži resnost na info ali preskoči; za /MM lokator sploh ne preverja. V zgodovinski statistiki ločeno beleži fiksne in portable zveze. Ocena: ~20 vrstic.

A3. Self-QSO check (visoka prioriteta) Operator je morda zalogiral samega sebe (testni QSO, tipkarska napaka lastnega znaka). Preberi PCall iz header; če baseCall(q.call) === baseCall(PCall), označi SELF_QSO resnost high. Trivialno, a ujame realne napake. Ocena: ~10 vrstic.

A4. Kronološka validacija (visoka prioriteta) Časi QSO niso preverjeni. TIME_BACKWARDS: če time[i] < time[i-1] − 5 min (toleranca za sočasne zveze) → resnost med. TIME_OUTSIDE_WINDOW: log, ki obsega > 48 ur, je sumljiv za večino VKV tekmovanj. Parser mora prebrati time iz stolpca 1 — trenutno se ne bere. Ocena: ~30 vrstic + razširitev parserja.

A5. Header validacija (visoka prioriteta) PCall, PWWLo, PBand, PSect — vsako manjkajoče pomeni formalno neveljaven log za robota. Validacija:

Prikaži ločen panel »Težave v glavi« nad QSO tabelo — ločeno od QSO crosschecka, ker so to strukturne napake, ne statistične. Ocena: ~40 vrstic.

A6. Razdalja QRB: interna doslednost (srednja prioriteta) EDI stolpec 10 = razdalja v km, ki jo operator deklarira. Izračunaj iz lokatorjev (Maidenhead → haversine; funkciji sta v vhf-logger.html, portabilni brez sprememb). Če |deklarirana − izračunana| > 5 % IN > 5 kmDIST_MISMATCH resnost med; > 20 % → high. Brez zgodovine — samo self-consistency. Ocena: ~50 vrstic + port geo funkcij.

A7. Notranji duplikat check (srednja prioriteta) Identifikacija duplikatov znotraj samega novega loga (call|date|band|mode), ne glede na EDI dupe_flag. Označi DUPE_INTERNAL resnost med. Opozori, kadar EDI flag in interna hevristika nista skladna (EDI trdi dupe, a ni dvojnika, ali obratno). Ocena: ~20 vrstic.

A8. Callsign-aware Levenshtein (srednja prioriteta) Zamenjave 0↔O, 1↔I, 5↔S, 2↔Z, 8↔B so pogoste tipkarske in slušne (CW, SSB fonetika) napake v radiu, a trenutno tehtajo enako kot katerakoli druga zamenjava. Definiraj CONFUSION_PAIRS s substitucijsko težo 0.4 namesto 1.0 — bolj realistični podobni predlogi z manjšim šumom. Ocena: ~25 vrstic.

A9. Outlier filter pred modusom (nizka prioriteta) Enkraten tipkarski lokator v zgodovinski bazi (npr. JN65ab namesto JN65ax v 1 od 100 QSO) se pojavi v chip-listi kot »alternativa« in zmede uporabnika. Pred izračunom modusa odstrani lokatorje z count == 1 AND count/total < 0.02 AND total ≥ 10. Prikaži ločen indikator: »X potencialnih outlierjev odstranjenih«. Ocena: ~15 vrstic.

A10. Time-aware modus z eksponentnim zmanjšanjem teže (nizka prioriteta) Postaje se selijo; stare zveze (5+ let) bi morale tehtati manj. Uteži: weight = 0.85 ^ (currentYear − qsoYear). Faktor nastavljiv. Modus postane »centroid recentnih zapisov«. Zahteva dateDisp v parserju (že delno prisotno). Ocena: ~20 vrstic.

A11. Per-call mode preference (nizka prioriteta) Nekatere postaje so izključno CW (EME, tekmovalne), druge SSB. Razširi entry.modes: Map<mode, count>. Nov check MODE_UNEXPECTED resnost low: historični mode-of-mode ≠ nov mode pri dovolj zaupanja. Manj kritično od lokatorja. Ocena: ~30 vrstic.

A12. RST format check (nizka prioriteta) Stolpca RST_S in RST_R se ne bereta. Pravila: CW = 3 znaki (5NN/599), SSB/FM = 2 znaki (59). Check RST_FORMAT resnost med — formalna napaka, ki jo bo robot ujel. Zahteva razširitev parserja. Ocena: ~25 vrstic.

A13. Konsistentnost lastnega lokatorja (nizka prioriteta) Beleži _histOwnLocators: Map<PCall, Map<PWWLo, count>> pri nalaganju zgodovinskih EDI datotek. Pri novem logu primerja header.PWWLo z modus-om iz preteklih logov. Odkriva pozabljene posodobitve QTH pri nastavljanju loggerja. Ocena: ~20 vrstic.

Razred B — razširitve z interno tabelo (brez zunanjih klicev)

B1. Razdalja plausibility per pas (srednja prioriteta) Interna tabela tipičnih maksimalnih dosegov po pasovih (npr. 2m = 2500 km tropo/MS, 24 GHz = 200 km). Check DIST_IMPLAUSIBLE resnost med (> max) ali high (> 2× max). Hevristika, ne strogo pravilo. Ocena: ~30 vrstic + tabela.

B2. ITU prefiks → DXCC + lokator območje (srednja prioriteta) Minimalna tabela IARU R1 prefiksov z pričakovanimi Maidenhead območji (~80 vnosov: S5→JN65–76, DL→JN/JO/JP, OE→JN77–JO02 …). Check PREFIX_LOC_MISMATCH: DL prefiks z JN65 lokatorjem (Slovenija) → resnost high. Ocena: ~50 vrstic + tabela.

B3. Morski/oceanski lokator (nizka prioriteta) Lokatorji AA00–AA99 so v Atlantiku — neveljavni za fiksne postaje. Filter na IARU R1 »kopenske« grids. Check LOC_OCEAN resnost med. Ocena: ~20 vrstic + tabela območij.

B4. Dovoljene kombinacije (pas, način) (nizka prioriteta) Tabela ALLOWED_BAND_MODE za IARU R1 (npr. FM na 6m ni tekmovalni način v večini sekcij). Check BAND_MODE_INVALID resnost low. Zahteva vzdrževanje tabele ob spremembi pravil. Ocena: ~25 vrstic + tabela.

Znane odprte napake


3. vhf-logger/vhf-logger.html

Visoka prioriteta

3.1 Cabrillo izvoz Cabrillo je zahtevan za nekatere IARU R1 tekmovalne oddaje poleg EDI. Posredni tok je zdaj mogoč: vhf-logger → EDI → edi2adif (ADIF) → adif2cab (Cabrillo), a zahteva tri korake. Direktni izvoz iz loggerja bi bil en klik: vzporedno z ZIP izvozom EDI datotek. Ocena: ~60–80 vrstic + nov gumb v export modalu.

3.2 Iskanje/filter v tabeli QSO Pri večjem številu QSO (300+) je tabela neuporabna brez iskanja. Polje za hitro iskanje po klicnem znaku ali lokatorju — ni potrebna celotna filter infrastruktura iz edi2adif; zadostuje filter() na _current.qsos per band.

3.3 Sprememba pasu obstoječega QSO editQso() ne dovoli spremembe pasu — QSO v napačnem pasu je treba zbrisati in na novo vnesti, pri čemer se izgubi serijska številka. Rešitev: v obrazcu za urejanje dodaj selektor pasu; saveEditedQso() premakne QSO na pravi pas, posodobi nrS in pokliče recalcDupes().

Srednja prioriteta

3.4 Združevanje sej Ni mogoče združiti dveh sej istega tekmovanja (npr. prekinitev + nadaljevanje na drugem računalniku). EDI uvoz delno reši problem, ampak ne za vse primere. Rešitev: funkcija »Spoji z drugo sejo«, ki preveri ujemanje pasu/datuma, vstavi QSO in pokliče recalcDupes().

3.5 Vizualizacija karte lokatorjev Prikaži delane kvadrante na Maidenhead mreži med ali po tekmovanju. Funkciji locToLatLon in haversine sta že v kodi. Koristno za navigacijo po kvadrantih in analizo pokritosti po tekmovanju.

3.6 Statistike: časovni histogram Per-band statistike kažejo skupaj QSO in QRB, ne pa kdaj so bili QSO narejeni. Histogram QSO po uri tekmovanja (0–24 h) bi razkril aktivnostne vzorce in praznine. Koristno za post-contest analizo.

3.7 Interoperabilnost z edi2adif.html edi2adif ne more uvoziti ADIF — le EDI. Tok vhf-logger → EDI → edi2adif deluje; obratni tok (edi2adif → vhf-logger) ne obstaja, ker edi2adif nima EDI izvoza. Možnosti:

Nizka prioriteta

3.8 Opomba per QSO Neformalno polje za opombo (npr. »slabo slišati«, »poslal URE«) — ne gre v EDI, ostane lokalno v localStorage. Lahek dodatek k QSO objektu brez vpliva na izvoz.

3.9 Tiskanje / poročilo Gumb »Natisni dnevnik« generira print-friendly HTML s celotno tabelo QSO brez UI elementov. Brez zunanjih knjižnic — window.print() z @media print CSS.

3.10 Razširjen frekvenčni plan BAND_OPTS ima eno frekvenco per pas. V setup obrazcu dodaj spustni seznam tipičnih frekvenc (SSB segment, CW segment, FM) za lažje nastavljanje brez ročnega vpisa.


4. adif2cab.html

Visoka prioriteta

4.1 IARU R1 VKV tekmovanje Trenutni nabor tekmovanj pokriva HF (CQ WW SSB/CW, IARU HF, ARRL DX) in generični tip. IARU R1 VHF izmenjava je lokator (npr. JN65ar), ne cona — zahteva poseben vnos IARU-VHF z exchRcvdField:'GRIDSQUARE', exchW:6. Ocena: 1 vrstica v polju CONTESTS + anotacija v CLAUDE.md.

4.2 Serijska številka izmenjave Za tekmovanja, kjer je oddana izmenjava serijska številka (npr. generični HF tekmovalni log), bi moralo orodje avtoinkrement-irati exchS po vrstnem redu QSO in omogočiti ponastavitev. Trenutno je to ročni vnos per QSO ali globalna vrednost. Ocena: ~20 vrstic + novo polje v header panelu.

Srednja prioriteta

4.3 Validacija izmenjave CQ cona mora biti 1–40, ITU cona 1–90, STATE ena od 50 kratic ZDA + kanadskih provinc. Vizualna oznaka (rdeča celica) pri neveljavni vrednosti pred izvozom — brez blokade. Ocena: ~30 vrstic + tabele dovoljenih vrednosti.

4.4 Filter po pasu pred izvozom Nekatere tekmovalne kategorije zahtevajo en sam pas. Filter checkbox ali spustni seznam za omejitev izvoza na izbran pas — brez brisanja podatkov iz _all. Ocena: ~15 vrstic.

4.5 Predogled Cabrillo Pokaži prvih 10–20 vrstic izhoda (START-OF-LOG, glava, prvi QSO zapisi) v <pre> bloku pred prenosom. Pomaga ujeti napake v izmenjavi ali poravnavi polj, ne da bi odprli datoteko v urejevalniku. Ocena: ~20 vrstic.

Nizka prioriteta

4.6 Shranjevanje nastavitev glave Callsign, ime, klub, naslov in kategorija so ob vsakem nalaganju prazni. Shranjuj zadnje vrednosti v localStorage (per-key, ne per-contest). Ocena: ~15 vrstic.

4.7 Podpora CQ WPX Izmenjava = prefiks klicnega znaka + serijska številka. Zahteva ekstrakcijo prefiksa (baseCall + regex) in per-QSO serijske oddane izmenjave. Ocena: ~40 vrstic + nov vnos v CONTESTS.


5. adif-qrz-filter.js

5.1 HamQTH kot rezervni vir QRZ.com zahteva plačljiv API ključ ali registracijo. HamQTH ponuja brezplačen XML API s podobnim formatom. Dodaj --source=hamqth parameter ali samodejni fallback ob napaki QRZ avtentikacije.

5.2 Nastavljiv TTL predpomnilnika Predpomnilnik ima trdo kodiran 7-dnevni TTL. Dodaj --cache-ttl=DAYS parameter (privzeto 7). Omogoča daljši TTL za redko spreminjajoče se postaje.

5.3 Ponavljanje ob napaki API Ob omrežni napaki ali rate-limit odgovoru (HTTP 429) orodje ne poskusi znova. Dodaj eksponentni backoff z do 3 ponovitvami pred preskočitvijo klicnega znaka.


6. build-baseline.js

6.1 Primerjava z obstoječim baseline (--diff) Zastavica, ki primerja novo zgrajeni JSON z obstoječim crosscheck-baseline.json in izpiše:

Koristno pred zamenjavo produkcijskega baseline, da se oceni vpliv.

6.2 Eksponentna časovna teža pri gradnji Skripta agregira vse CSV-je z enako težo ne glede na starost tekmovanja. Sinhronizacija z algoritmom A10 iz edi-crosscheck: pri gradnji uteži entry.count z 0.85 ^ (currentYear − contestYear). Starejši lokatorji dobijo manjšo težo pri izračunu modusa že pri gradnji baseline-a, ne šele v orodju.


7. Medorodna opažanja

7.1 Podvojena crosscheck logika baseCall(), levenshtein(), _histDB, applyBaseline() in lookupCall() so skoraj identično implementirani v edi-crosscheck.html in vhf-logger.html. Popravek v enem orodju je treba ročno prenesti v drugega — potencialni vir razsinhronizacije. Ker ohranimo single-file pristop, ob vsaki spremembi crosscheck logike preverimo obe datoteki.

7.2 Geo funkcije samo v vhf-logger locToLatLon, haversine, calcBearing obstajajo samo v vhf-logger.html. Za predloge A6 (razdalja plausibility) in B1 (razdalja per pas) v edi-crosscheck ter 1.4 (karta lokatorjev) v edi2adif jih je treba portirati. Funkcije so samozadostne (~40 vrstic skupaj) in brez odvisnosti.

7.3 Testna pokritost

Orodje Testi Opomba
edi2adif.test.js 122 Dobra — algoritem, izvoz, i18n
edi-crosscheck.test.js 56 Osnovna — pokrita algoritem, render/UI ne
adif-merge.test.js 112 Dobra — razčlenjevanje, dedup, izvoz, i18n
adif-qrz-filter.test.js 48 Dobra za logiko; API mock ni realen
vhf-logger/vhf-logger.test.js 191 Dobra — jedro, backup, EDI uvoz/izvoz, i18n
adif-stats.test.js 133 Dobra — DXCC, statistike, SVG, i18n
adif2cab.test.js 191 Dobra — Cabrillo logika, izmenjave, i18n
edi-validator.test.js 109 Dobra — spec validacija, per-QSO preverbe, i18n

Za vsako novo funkcionalnost iz zgornjih predlogov je treba dodati teste pred integracijo.


Pregled opravil: Claude Sonnet 4.6 · 2026-05-19