feat(awards): match on CNTY as it stands, not only keyed to a US state

The award field list offered us_county, which returns STATE,County --
correct for the United States, where Jefferson County exists in several
states, and wrong for every award whose district is already unique. An
RDA reference (RO-19) never matched, and there was no other field to
point an award at.

Adds county, the raw CNTY value, alongside it.
This commit is contained in:
2026-08-23 18:30:10 +02:00
parent ab89611eca
commit 1c4697ecb2
3 changed files with 41 additions and 3 deletions
+8 -1
View File
@@ -344,7 +344,7 @@ func Migrate(defs []Def) ([]Def, bool) {
func Fields() []string {
return []string{
"dxcc", "cqz", "ituz", "prefix", "callsign",
"state", "us_county", "cont", "country", "grid", "grid4",
"state", "county", "us_county", "cont", "country", "grid", "grid4",
"iota", "sota_ref", "pota_ref", "wwff",
"name", "qth", "address", "comment", "note",
}
@@ -1373,6 +1373,13 @@ func fieldRaw(field string, q *qso.QSO) string {
return q.Callsign
case "state":
return q.State
case "county":
// CNTY as it stands, with nothing prepended. us_county below answers a
// different question — it keys the county to its state, because two US
// states each have a Jefferson County. Outside the United States that
// prefixing is wrong: an RDA district (RO-19) and a Japanese city code
// are already unique, and a state is not what qualifies them.
return q.County
case "us_county":
return USCountyKey(q.State, q.County)
case "cont":
+29
View File
@@ -0,0 +1,29 @@
package award
import (
"testing"
"hamlog/internal/qso"
)
// A district lives in CNTY as-is; the US award field keys it to the state
// because county names repeat across states. Confusing the two silently breaks
// whichever award is not American.
func TestCountyFieldIsRawWhileUSCountyIsKeyed(t *testing.T) {
q := &qso.QSO{State: "TX", County: "RO-19"}
if got := fieldRaw("county", q); got != "RO-19" {
t.Fatalf("county = %q, want RO-19", got)
}
if got := fieldRaw("us_county", q); got == "RO-19" {
t.Fatalf("us_county should key the county to its state, got %q", got)
}
var found bool
for _, f := range Fields() {
if f == "county" {
found = true
}
}
if !found {
t.Fatal("county missing from the award field list")
}
}