You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ARCHITECTURE.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
-
# SNOMED Lookup Architecture
1
+
# Codeagogo Architecture
2
2
3
-
This document describes the technical architecture of SNOMED Lookup, a macOS menu bar application for looking up SNOMED CT concepts.
3
+
This document describes the technical architecture of Codeagogo, a macOS menu bar application for looking up SNOMED CT concepts.
4
4
5
5
## Table of Contents
6
6
@@ -17,7 +17,7 @@ This document describes the technical architecture of SNOMED Lookup, a macOS men
17
17
18
18
## Overview
19
19
20
-
SNOMED Lookup is a lightweight macOS utility that enables users to look up SNOMED CT (Systematized Nomenclature of Medicine - Clinical Terms) concepts from any application using a global hotkey.
20
+
Codeagogo is a lightweight macOS utility that enables users to look up SNOMED CT (Systematized Nomenclature of Medicine - Clinical Terms) concepts from any application using a global hotkey.
21
21
22
22
### Key Characteristics
23
23
@@ -31,7 +31,7 @@ SNOMED Lookup is a lightweight macOS utility that enables users to look up SNOME
Copy file name to clipboardExpand all lines: CHANGELOG.md
+47-4Lines changed: 47 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,18 +1,27 @@
1
1
# Changelog
2
2
3
-
All notable changes to SNOMED Lookup are documented in this file.
3
+
All notable changes to Codeagogo are documented in this file.
4
4
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
7
7
## [Unreleased]
8
8
9
9
### Added
10
+
-**Inserted text remains selected**: After using the replace hotkey or ECL format hotkey, the inserted text is automatically selected, making it easy to undo or further edit. Selection skipped for text > 1000 characters to avoid delays
11
+
-**Inactive concept highlighting**: The popover now prominently displays inactive concepts with an orange warning icon and "INACTIVE" label
12
+
-**"INACTIVE - " prefix option**: New setting (default: on) prefixes inactive concept terms with "INACTIVE - " when using the replace hotkey (e.g., `146066001 | INACTIVE - Some term |`)
13
+
-**Hotkey recorder UI**: Settings now uses a keystroke recorder control for configuring hotkeys. Click "Record" and press your desired key combination instead of selecting from dropdown menus and checkboxes.
14
+
-**Multi-code-system support**: Lookup, replace, and search now work with LOINC, ICD-10, RxNorm, and other code systems in addition to SNOMED CT
15
+
-**Code system picker in search panel**: Switch between SNOMED CT and configured code systems when searching
16
+
-**Code system configuration in Settings**: Add, remove, and enable/disable code systems from the terminology server
17
+
-**SCTID validation**: Uses Verhoeff check digit algorithm to distinguish valid SNOMED CT IDs from other numeric codes
10
18
-**ECL Format hotkey** (Control+Option+E): Toggles selected ECL expressions between pretty-printed and minified formats
11
19
- Full ECL 2.x parser supporting constraint operators, compound expressions, refinements, and filters
12
20
- Settings UI for configuring ECL format hotkey key and modifiers
13
21
-**Progress HUD** for replace hotkey: Shows lookup progress when processing many concepts
14
22
15
23
### Fixed
24
+
-**Inactive concept status**: Fixed issue where inactive concepts were incorrectly displayed as active. The FHIR response parser now correctly handles the `inactive` property when returned as a boolean value.
16
25
-**Replace hotkey reliability**: Fixed issue where some concept IDs weren't being replaced when processing large selections (50+ concepts)
17
26
18
27
### Performance
@@ -35,10 +44,44 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
35
44
3.`385804009` → `385804009 | Diabetic care |` (add again)
36
45
- Mixed selections work: `385804009 | Wrong | and 73211009` updates both
37
46
47
+
### Changed
48
+
-**Lookup hotkey** now automatically detects whether a code is SNOMED CT (via Verhoeff check) or from another code system
49
+
-**Popover view** adapts display based on code system: shows FSN/PT/Edition for SNOMED CT, simpler Code/Display/System for others
50
+
-**Replace hotkey** handles mixed selections with both SNOMED CT and non-SNOMED codes
51
+
38
52
### Technical
53
+
- App now prompts for Accessibility permission on launch via `AXIsProcessTrustedWithOptions` for reliable text selection
54
+
- Extended SystemSelectionReader with Accessibility API methods (`getSelectionRange`, `setSelectionRange`, `pasteAndSelect`) to select inserted text after paste operations
55
+
- Selection fallback uses character-by-character keyboard simulation (Shift+Left Arrow) for precise selection up to 1000 chars
56
+
- Added HotKeyRecorderView.swift for recording keyboard shortcuts via keystroke capture
57
+
- Added KeyCodeFormatter.swift for formatting key codes with macOS modifier symbols (⌃⌥⇧⌘)
58
+
- Refactored hotkey settings to use KeyCodeFormatter for human-readable hotkey display
59
+
- Simplified SettingsView by removing Picker/Toggle-based hotkey configuration
60
+
- Added KeyCodeFormatterTests.swift with comprehensive tests for key formatting
61
+
- Added SCTIDValidator.swift with Verhoeff check digit algorithm for SNOMED CT ID validation
62
+
- Added CodeSystemSettings.swift for managing configured code systems (persisted to UserDefaults)
63
+
- Added AvailableCodeSystem struct for code systems discovered from the server
64
+
- Extended ConceptResult with `system` field and `systemName`/`isSNOMEDCT` computed properties
65
+
- Added `getAvailableCodeSystems()` method to OntoserverClient for fetching non-SNOMED code systems
66
+
- Added `lookupInCodeSystem()` method for looking up codes in specific code systems
67
+
- Added `lookupInConfiguredSystems()` method for parallel search across configured systems
68
+
- Added `searchInCodeSystem()` method for searching within non-SNOMED code systems
69
+
- Extended LookupViewModel with `ExtractedCode` struct and `extractCode()` method for SCTID validation
70
+
- Updated `extractAllConceptIds()` to include `isSCTID` flag in ConceptMatch
71
+
- Extended ConceptLookupClient protocol with `lookupInConfiguredSystems()` method
72
+
- Updated SearchSettings with `selectedCodeSystemURI` for code system selection
73
+
- Updated SearchViewModel to handle non-SNOMED code system searches
74
+
- Updated SearchPanelView with code system picker (edition picker hidden for non-SNOMED)
75
+
- Updated SettingsView with "Additional Code Systems" configuration section
76
+
- Updated PopoverView to show adapted UI for SNOMED CT vs non-SNOMED results
77
+
- Added SCTIDValidatorTests.swift with 20+ tests for Verhoeff validation
78
+
- Added CodeSystemSettingsTests.swift for settings and ConceptResult code system tests
79
+
- Extended OntoserverClientTests.swift with multi-code-system response parsing tests
80
+
- Extended ConceptIdExtractionTests.swift with SCTID validation and ExtractedCode tests
39
81
- Added ProgressHUD.swift for displaying lookup progress near cursor
40
82
- Added `batchLookup(conceptIds:)` method to OntoserverClient using `ValueSet/$expand` for efficient multi-concept lookup
41
-
- Added `BatchLookupResult` struct to hold PT and FSN mappings from batch lookups
83
+
-`BatchLookupResult` includes active status via `property=inactive` parameter (parsed from FHIR R5 property extension)
84
+
- Added `BatchLookupResult` struct to hold PT, FSN, and active status mappings from batch lookups
42
85
- Added ECLToken.swift with token type definitions for ECL syntax elements
Copy file name to clipboardExpand all lines: CLAUDE.md
+7-7Lines changed: 7 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@ When making changes to this codebase, follow these rules:
10
10
11
11
1.**Update CHANGELOG.md** — Add entries under `[Unreleased]` for any user-facing changes
12
12
2.**Add or update tests** — New functionality needs tests; bug fixes need regression tests
13
-
3.**Run tests before committing** — Ensure all 63+ tests pass: `xcodebuild test -scheme "SNOMED Lookup" -destination "platform=macOS"`
13
+
3.**Run tests before committing** — Ensure all 63+ tests pass: `xcodebuild test -scheme "Codeagogo" -destination "platform=macOS"`
14
14
4.**Add docstrings** — Document all new public types, methods, and non-trivial private methods
15
15
5.**Update documentation** — Keep README.md, ARCHITECTURE.md, and other docs in sync with code changes
16
16
6.**Follow existing patterns** — Match the code style and architecture of surrounding code
@@ -72,7 +72,7 @@ Before submitting changes:
72
72
73
73
## Project Overview
74
74
75
-
SNOMED Lookup is a macOS menu bar application that looks up SNOMED CT concepts from any application using a global hotkey. Users select a concept ID, press the hotkey, and see concept details in a popover near the cursor.
75
+
Codeagogo is a macOS menu bar application that looks up SNOMED CT concepts from any application using a global hotkey. Users select a concept ID, press the hotkey, and see concept details in a popover near the cursor.
76
76
77
77
## Tech Stack
78
78
@@ -101,14 +101,14 @@ SNOMED Lookup is a macOS menu bar application that looks up SNOMED CT concepts f
xcodebuild test -scheme "Codeagogo" -destination "platform=macOS" \
111
+
-only-testing:"CodeagogoTests/ConceptCacheTests"
112
112
113
113
# Package for distribution
114
114
./package-zip.sh
@@ -221,7 +221,7 @@ private let maxSize = 100
221
221
222
222
2.**Single Instance** — `enforceSingleInstance()` terminates if another instance is running. This can interfere with debugging if a release build is running.
223
223
224
-
3.**Test Environment** — Tests may fail with "Early unexpected exit" if another instance is running. Kill existing instances first: `pkill -9 "SNOMED Lookup"`
224
+
3.**Test Environment** — Tests may fail with "Early unexpected exit" if another instance is running. Kill existing instances first: `pkill -9 "Codeagogo"`
225
225
226
226
4.**Carbon Modifiers** — NSEvent and Carbon use different modifier flag formats. Always use `HotKeySettings.carbonModifiers(from:)`.
0 commit comments