diff --git a/wiki/Awards.md b/wiki/Awards.md index 88e861f..365336a 100644 --- a/wiki/Awards.md +++ b/wiki/Awards.md @@ -23,6 +23,17 @@ Plus a **leading/trailing** strip, a **prefix** prepended to found references, a **dynamic** mode (any value counts, like POTA), and the **fallback searches** described below. +**One QSO can count for several references.** A contact always yields *every* +reference its field holds — the value is split on commas and semicolons, so an +n-fer POTA activation logged as `US-6544,US-0680` credits both parks, and a +grid-line VUCC contact credits each grid. There is no "one reference per QSO" +switch — it was never useful. + +**Match by `code`** looks up each token of the field in the reference list (so a +partial or multi-value field still resolves), while **`exact match`** requires +the whole field to equal the reference. Use exact match when a substring would +cause false hits. + ### The five rules to remember 1. **Every regex is case-insensitive.** Award and per-reference patterns match @@ -72,6 +83,42 @@ A custom province award where the log rarely spells the province out (it names a Now a QSO is resolved by the province **name** if present, else by a **city** regex — first in the QTH, then in the address. First hit wins. +## Why doesn't a QSO count? — Test & Missing refs + +An award that matches nothing is the hardest thing to debug: the column is just +empty, and you can't tell whether the QSO was out of scope, the field was empty, +the rule looked in the wrong place, or the reference isn't on the list. Two tools +answer that. + +### Test a callsign (award editor) + +In the **award editor** there's a **Test** box: type a callsign and OpsLog +replays that award's rules against every QSO you have with that station and shows +what happened, step by step — the exact same code path the real matcher uses, so +what you see is what actually runs. For each contact it reports: + +- whether the QSO is **in scope** (and, if not, *why* — wrong DXCC, band, mode, + emission, or outside the valid-from/to dates); +- each rule in turn (**primary**, then **Fallback 1, 2, …**), the **field value** + it scanned, the **candidates** it produced, which ones were **kept**, and which + were **rejected** (with the reason — e.g. "not on the reference list"); +- rules that were **skipped** because an earlier one already matched; +- any **manual** reference you assigned by hand; +- the final **result** — what the QSO counts for. + +This is the fastest way to fix a rule: if the primary scanned the wrong field, or +a candidate was rejected as unlisted, the trace says so directly. + +### Missing refs (awards panel) + +For an award scoped to a DXCC entity (DDFM, WAS, RAC, WAJA…), the **Missing refs** +view lists contacts that ARE in scope (right DXCC / band / mode / dates) **but +where no reference was found** — so they don't count yet. Sort by a column, tick +the matching contacts, and **assign the reference** to all of them at once (or +click a row to open the QSO and fix the field). Recompute and the fixed contacts +drop off the list. This is how you close the gaps a matcher can't fill on its own +(a French QSO logged without its department, say). + ## Live detection & manual refs - References are detected **live** as you enter a callsign. @@ -89,6 +136,15 @@ regex — first in the QTH, then in the address. First hit wins. or **both**. Award columns are opt-in per the Columns picker ([[Recent QSOs and Filters]]). +## Built-in updates vs your edits + +Built-in awards ship with the app, definition **and** reference list. When a +newer version fixes a shipped award (a better fallback chain, a corrected +reference list), OpsLog offers to apply that update — **unless you've edited that +award yourself**, in which case your version is left alone (your work outranks +ours). Awards you created are never touched by updates. So you can freely tune a +built-in award without fear of a future release overwriting it. + ## Rescan **Rescan** re-pulls the logbook and recomputes — it picks up fresh LoTW / QRZ /