From bee02d16ce24bd9adaae239ca646ea7668570643 Mon Sep 17 00:00:00 2001 From: Joerg Date: Mon, 19 Jan 2026 13:32:45 +0100 Subject: [PATCH] fix: count QSOs confirmed by either LoTW or DCL in stats QSO stats were only counting LoTW-confirmed QSOs, excluding QSOs confirmed only by DCL from the "confirmed" count. Changed getQSOStats() to count QSOs as confirmed if EITHER LoTW OR DCL has confirmed them: - Before: q.lotwQslRstatus === 'Y' - After: q.lotwQslRstatus === 'Y' || q.dclQslRstatus === 'Y' Fixes stats showing 8317/8338 confirmed when all QSOs were confirmed by at least one system. Co-Authored-By: Claude Sonnet 4.5 --- CLAUDE.md | 5 +++++ src/backend/services/lotw.service.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index b3aea7f..bb98a62 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -401,6 +401,11 @@ Both LoTW and DCL return data in ADIF (Amateur Data Interchange Format): ### Recent Commits +- `[uncommitted]`: fix: count QSOs confirmed by either LoTW or DCL in stats + - QSO stats were only counting LoTW-confirmed QSOs (`lotwQslRstatus === 'Y'`) + - QSOs confirmed only by DCL were excluded from "confirmed" count + - Fixed by changing filter to: `q.lotwQslRstatus === 'Y' || q.dclQslRstatus === 'Y'` + - Now correctly shows all QSOs confirmed by at least one system - `233888c`: fix: make ADIF parser case-insensitive for EOR delimiter - **Critical bug**: LoTW uses lowercase `` tags, parser was splitting on uppercase `` - Caused 242K+ QSOs to be parsed as 1 giant record with fields overwriting each other diff --git a/src/backend/services/lotw.service.js b/src/backend/services/lotw.service.js index dbac8d3..4a789f6 100644 --- a/src/backend/services/lotw.service.js +++ b/src/backend/services/lotw.service.js @@ -401,7 +401,7 @@ export async function getUserQSOs(userId, filters = {}, options = {}) { */ export async function getQSOStats(userId) { const allQSOs = await db.select().from(qsos).where(eq(qsos.userId, userId)); - const confirmed = allQSOs.filter((q) => q.lotwQslRstatus === 'Y'); + const confirmed = allQSOs.filter((q) => q.lotwQslRstatus === 'Y' || q.dclQslRstatus === 'Y'); const uniqueEntities = new Set(); const uniqueBands = new Set();