fix(dxcc): /MM and /AM belong to no entity

RI1FJL/MM resolved to Franz Josef Land while the expedition was still sailing
there, telling the operator they had worked an entity they had not.

The old behaviour was deliberate — the comment read "strict DXCC says no
entity, but the log should still show the operator's country" — and that is
wrong for exactly this reason. A home country on a maritime mobile is not extra
information; it is a false claim about where the contact happened, and it is
the kind of false claim that gets a QSO submitted for an award it cannot win.

Trailing only. A LEADING "MM" is the Scotland prefix and "AM" is Spain, so
MM0ABC and AM5X keep their entities — getting that wrong would be a far larger
error than the one being fixed. /P, /M and /B are unaffected: a portable
station is still ashore.

In the cluster the column says "Maritime mobile — no DXCC" rather than going
blank, because blank is what an UNRESOLVED spot looks like and the two mean
opposite things — one is "we don't know yet", this is "there is nothing to
know". Display only: the QSO's own Country stays empty, since that field holds
a DXCC entity name and there is none.
This commit is contained in:
2026-08-13 12:25:33 +02:00
parent dc0b00b474
commit 4ba5569ca8
6 changed files with 443 additions and 361 deletions
+10
View File
@@ -17452,6 +17452,16 @@ func (a *App) ClusterSpotStatuses(spots []SpotQuery) []SpotStatus {
if a.dxcc == nil {
continue
}
// Say WHY a maritime/aeronautical mobile has no entity, rather than
// leaving the column blank — blank is what an unresolved spot looks like,
// and the two mean opposite things: one is "we don't know yet", this is
// "there is nothing to know, the station is at sea". Display only: the
// QSO's own Country stays empty, because it is a DXCC entity name and
// there is none.
if dxcc.IsMobileNoEntity(q.Call) {
out[i].Country = "Maritime mobile — no DXCC"
continue
}
m, ok := a.dxcc.Lookup(q.Call)
if !ok || m.Entity == nil {
continue