diff --git a/docs/AWARD-SYSTEM-SPECIFICATION.md b/docs/AWARD-SYSTEM-SPECIFICATION.md index ba955ad..b9d6cfb 100644 --- a/docs/AWARD-SYSTEM-SPECIFICATION.md +++ b/docs/AWARD-SYSTEM-SPECIFICATION.md @@ -71,6 +71,7 @@ Every award definition is a JSON object with the following structure: | `caption` | string | Yes | Detailed explanation of award requirements | | `category` | string | Yes | Grouping category for UI organization (e.g., "dxcc", "darc", "vucc") | | `rules` | object | Yes | Award calculation rules (see Rule Types below) | +| `modeGroups` | object | No | Mode group definitions for award detail view filtering (see Mode Groups below) | --- @@ -456,6 +457,85 @@ This creates: DLD 80m CW (only QSOs on 80m band AND CW mode count). --- +## Mode Groups + +Mode groups allow awards to define convenient multi-mode filters for the award detail view. This feature enables users to filter by multiple modes at once (e.g., all digital modes combined). + +### Structure + +```json +{ + "modeGroups": { + "Group Display Name": ["mode1", "mode2", "mode3"], + "Another Group": ["modeA", "modeB"] + } +} +``` + +### Properties + +| Property | Type | Required | Description | +|----------|------|----------|-------------| +| Key | string | Yes | Display name shown in mode filter dropdown | +| Value | array | Yes | Array of mode strings to include in the group | + +### Behavior + +- **Location**: Defined at award root level (not in `rules`) +- **Optional**: Awards without `modeGroups` work as before (backward compatible) +- **UI Integration**: Creates entries in mode filter dropdown with visual separator +- **Filtering**: Selecting a mode group filter shows QSOs matching ANY mode in the group + +### Example: DXCC with Mode Groups + +```json +{ + "id": "dxcc", + "name": "DXCC", + "description": "Confirm 100 DXCC entities on HF bands", + "caption": "Contact and confirm 100 different DXCC entities on HF bands (160m-10m).", + "category": "dxcc", + "modeGroups": { + "Digi-Modes": ["FT8", "FT4", "MFSK", "PSK31", "RTTY", "JT65", "JT9"], + "Classic Digi-Modes": ["PSK31", "RTTY", "JT65", "JT9"], + "Mixed-Mode w/o WSJT-Modes": ["PSK31", "RTTY", "AM", "SSB", "FM", "CW"], + "Phone-Modes": ["AM", "SSB", "FM"] + }, + "rules": { + "type": "entity", + "entityType": "dxcc", + "target": 100, + "allowed_bands": ["160m", "80m", "60m", "40m", "30m", "20m", "17m", "15m", "12m", "10m"] + } +} +``` + +### UI Display + +In the award detail view, the mode filter dropdown shows: +- Mixed Mode (default - aggregates all modes by band) +- ───── (visual separator) +- Digi-Modes +- Classic Digi-Modes +- Mixed-Mode w/o WSJT-Modes +- Phone-Modes +- ───── (visual separator) +- CW (individual modes) +- FT8 +- SSB +- etc. + +### Common Mode Group Patterns + +| Group Name | Modes | Use Case | +|------------|-------|----------| +| Digi-Modes | FT8, FT4, MFSK, PSK31, RTTY, JT65, JT9 | All digital modes | +| Classic Digi-Modes | PSK31, RTTY, JT65, JT9 | Pre-WSJT digital modes | +| Phone-Modes | AM, SSB, FM | All voice modes | +| Mixed-Mode w/o WSJT | PSK31, RTTY, AM, SSB, FM, CW | Traditional mixed mode award | + +--- + ## QSO Database Schema The award system relies on QSO records with specific fields.