From f7d62ed247f1836ec5d8139f06ca569454f07fe1 Mon Sep 17 00:00:00 2001 From: Joerg Date: Sat, 17 Jan 2026 11:50:33 +0100 Subject: [PATCH] docs: update CLAUDE.md with DCL parser information - Add ADIF Parser utility section (src/backend/utils/adif-parser.js) - Add DCL Service section with API integration details - Update Confirmation Systems section with DCL information - Add ADIF Format section explaining field format and DCL-specific fields - Update Recent Commits with DCL parser implementation Co-Authored-By: Claude Sonnet 4.5 --- CLAUDE.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index dc05337..5a75f8f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -163,6 +163,20 @@ The award system is JSON-driven and located in `award-definitions/` directory. E - Add new awards by creating JSON definition files - Add filename to `loadAwardDefinitions()` file list in awards.service.js +**ADIF Parser**: `src/backend/utils/adif-parser.js` +- `parseADIF(adifData)`: Parse ADIF format into QSO records +- `parseDCLResponse(response)`: Parse DCL's JSON response format `{ "adif": "..." }` +- `normalizeBand(band)`: Standardize band names (80m, 40m, etc.) +- `normalizeMode(mode)`: Standardize mode names (CW, FT8, SSB, etc.) +- Used by both LoTW and DCL services for consistency + +**DCL Service**: `src/backend/services/dcl.service.js` +- `fetchQSOsFromDCL(dclApiKey, sinceDate)`: Fetch from DCL API +- `parseDCLJSONResponse(jsonResponse)`: Parse example/test payloads +- `syncQSOs(userId, dclApiKey, sinceDate, jobId)`: Sync QSOs to database +- `getLastDCLQSLDate(userId)`: Get last QSL date for incremental sync +- Ready for when DCL publishes their API + ### DLD Award Implementation (COMPLETED) The DLD (Deutschland Diplom) award was recently implemented: @@ -215,15 +229,43 @@ To add a new award: ### Confirmation Systems - **LoTW (Logbook of The World)**: ARRL's confirmation system + - Service: `src/backend/services/lotw.service.js` - Fields: `lotwQslRstatus`, `lotwQslRdate` - Used for DXCC, WAS, VUCC, most awards + - ADIF format with `` delimiters + - Supports incremental sync by date - **DCL (DARC Community Logbook)**: DARC's confirmation system + - Service: `src/backend/services/dcl.service.js` - Fields: `dclQslRstatus`, `dclQslRdate` + - DOK fields: `darcDok` (partner's DOK), `myDarcDok` (user's DOK) - Required for DLD award - German amateur radio specific + - API in development (parser ready) + - Response format: JSON with ADIF string in `adif` field + - Supports DOK (DARC Ortsverband Kennung) data + +### ADIF Format + +Both LoTW and DCL return data in ADIF (Amateur Data Interchange Format): +- Field format: `value` +- Record delimiter: `` (end of record) +- Header ends with: `` (end of header) +- Example: `DK0MU80m20250621` + +**DCL-specific fields**: +- `DCL_QSL_RCVD`: DCL confirmation status (Y/N/?) +- `DCL_QSLRDATE`: DCL confirmation date (YYYYMMDD) +- `DARC_DOK`: QSO partner's DOK +- `MY_DARC_DOK`: User's own DOK +- `STATION_CALLSIGN`: User's callsign ### Recent Commits +- `8a1a580`: feat: implement DCL ADIF parser and service integration + - Add shared ADIF parser utility (src/backend/utils/adif-parser.js) + - Implement DCL service with API integration ready + - Refactor LoTW service to use shared parser + - Tested with example DCL payload (6 QSOs parsed successfully) - `c982dcd`: feat: implement DLD (Deutschland Diplom) award - `322ccaf`: docs: add DLD (Deutschland Diplom) award documentation