Accumulative Search, Remote Tab Refresh, and Bug Fixes
added
Accumulative search queries — each search adds a filter chip, results must match ALL terms (AND logic)
added
Removing a single search chip removes just that term and re-runs the search with remaining terms
added
Each search term gets a unique highlight color in the raw message display (amber, blue, green, rose, purple, teal) with matching chip colors
added
Refresh button and F5 shortcut for remote FTP/SFTP tabs to re-download and re-import data
added
Right-click context menu on tabs with Refresh, Close Tab, Close Other Tabs, Close All Tabs options
fixed
File column in MESSAGES DataGrid not updating to reflect the new filename after Save As
fixed
Message row numbers getting visually indented/misaligned after refreshing remote data
Dynamic Encoding Characters, Changelog Viewer, and PHI Fix
improved
HL7 encoding characters (component ^, repetition ~, escape \, subcomponent &) are now dynamically extracted from MSH-2 instead of being hardcoded, allowing proper parsing of messages with non-standard encoding characters
added
Changelog tab in Help > About showing version history with release notes
added
Clickable version list to browse historical changes with color-coded change type indicators
fixed
Raw message display now properly refreshes after PHI removal to show the anonymized message
Fix Self-Update File Lock (Root Cause)
fixed
Self-update was failing because the download file stream was not closed before hash verification
Fix Self-Update File Lock Detection
fixed
Self-update file lock detection now properly captures the locking process during retries, before the lock is released
Preserve Filter Order
improved
Filters are now displayed in the order they were applied (most recent on the right)
Add Include Checked Button & Improved Update Error Messages
added
Include Checked button in Unique Values window — filters to show only messages containing the checked values
improved
Added icons to Include (✓) and Exclude (🚫) buttons in Unique Values window for visual clarity
improved
File lock error messages during self-update now identify which process has the lock (e.g., "Windows Defender (PID 1234)")
Add Include Checked Button & Improved Update Error Messages
added
Include Checked button in Unique Values window — filters to show only messages containing the checked values
improved
Added icons to Include (✓) and Exclude (🚫) buttons in Unique Values window for visual clarity
improved
File lock error messages during self-update now identify which process has the lock (e.g., "Windows Defender (PID 1234)")
Fix Update Download File Lock During Hash Verification
fixed
Update download error when antivirus scanner locks the installer file during SHA256 hash verification — now retries up to 10 times with 500ms delays
Search Highlighting, Filtered Export, and Unique Values Fixes
added
Search match highlighting — yellow highlight overlay on all search match occurrences in raw message display for both "All Messages" and "This Message" search modes, with orange highlight on the current match
added
Theme-aware highlight colors (yellow/orange for light theme, gold/dark orange for dark theme)
fixed
Save and Save As now export only the filtered results when filters are active (search query, message type, field filters, advanced search) instead of exporting all messages
fixed
Tab tooltip now shows the new file path after Save As instead of the original filename
fixed
Unique values now operates only on the currently filtered dataset instead of scanning all messages when filters are active
fixed
Progress bar count now reflects the filtered message count instead of the total unfiltered count
Help System, Stability Improvements, and Certificate Validation
added
Comprehensive help system with 26 searchable topics accessible via F1 or Help > Help Topics
added
Help viewer with tree navigation, search filtering, and markdown rendering
added
Help topics cover importing, searching, viewing, editing, exporting, analysis, settings, shortcuts, and troubleshooting
added
Global error handler catches unhandled exceptions, displays user-friendly error dialog, and logs full stack traces
added
Query timeout protection prevents UI freezes from long-running database queries (2 min normal, 10 min advanced search)
added
Trust server certificate option for FTPS connections with self-signed certificates
improved
FTPS certificate validation now properly validates against system trust store before checking manual trust option
fixed
Update download no longer fails with "file being used by another process" error when previous download left a locked file
fixed
Update check on startup now always shows the update window if an update is available
improved
Once an update is found, the app stops checking for updates for the rest of the session
fixed
Update Available window width increased to prevent text cutoff
Inline Data Types, Sub-Component Parsing, and Repeating Segment Fixes
added
Data type displayed inline next to field values in tree view in muted text (e.g., "CWE - Coded with Exceptions")
added
Sub-component parsing — fields containing & (sub-component separator) are broken down into named child nodes in tree and table views
added
Sub-component names resolved via nHAPI reflection; falls back to HD naming convention for primitive types
added
Unique values and field filters work at the sub-component level
fixed
Find Unique Values now returns values from all instances of repeating segments (e.g., all OBX-3 values, not just the first OBX)
fixed
Field filters now correctly match against all instances of repeating segments
fixed
Submenu popups (Recent Files, Recent Folders) no longer overlap the parent menu
fixed
Update Available window buttons no longer cut off when release notes text is long
fixed
Multiple Update Available windows no longer stack up during long sessions
Filter Chips, Advanced Search Enhancements, and Reliability Improvements
security
SHA256 hash verification for downloaded updates prevents tampering or corruption
security
License signing key is now obfuscated to prevent simple string searches in binary
added
AppLogger for diagnostic logging to %LocalAppData%\HL7Pulse\Logs with auto-cleanup after 7 days
fixed
Silent exception swallowing replaced with proper logging throughout the app
fixed
Thread-safe message cache using ConcurrentDictionary and ConcurrentQueue
fixed
Race condition in resource monitoring when PerformanceCounter is disposed
fixed
Selection debounce timer now properly disposed when document closes
fixed
Null check added for database insert result in TCP receiver
fixed
Process handle leak in resource monitoring (now uses using statement)
fixed
Field index validation prevents negative indices in advanced search
fixed
MSH field separator validation ensures only valid printable ASCII characters are used
fixed
Bounds checking added to substring operations in HL7 parser to prevent index errors
fixed
Large base64 component truncation now validates bounds before slicing
changed
License verification errors are logged and treated as expired trial gracefully
changed
Database initialization errors are logged with full context before re-throwing
added
Advanced search now limits results to 100,000 matches to prevent memory exhaustion
added
Active filters bar with chips below the search bar showing all active filters as removable chips
added
Individual filter removal via chip close buttons and "Clear All" button
added
Multiple field filters can now be stacked with AND logic via right-click
removed
Standalone "Clear" button next to Search replaced by the new filter chips bar
fixed
"Select Unique" now respects active field filters instead of showing all values
changed
"Select Unique" shows a deferred progress bar with field name title for large datasets
fixed
"Select Unique" progress bar now renders during large dataset scans via background thread
added
"Select Unique" now includes a "(blank)" entry for messages where the field is empty
fixed
"Select Unique" percentages now always sum to exactly 100% using largest-remainder rounding
added
"Exclude Checked" button in Select Unique dialog to exclude messages matching checked values
added
Exclusion filter chips with special formatting and individual removal support
added
Immediate 0-100% progress bar with cancel support for applying or removing exclusion filters
changed
Filter chip bar uses DockPanel layout with text trimming to prevent overflow
changed
"Select Unique" values sort intelligently: numeric fields numerically, date fields chronologically, text alphabetically
fixed
Cancel button during exclusion filtering now properly stops and reverts filter state
fixed
"Clear All" button vertical alignment with filter chips in the filter bar
added
"Select from messages..." context menu on Value field to pick actual values from loaded messages
added
Pipe-separated OR matching: select multiple values joined with | to match any of them
added
Saved named searches: save, load, delete, and reorder frequently-used advanced search configurations
added
Saved searches persist to %APPDATA%\HL7Pulse\saved-searches.json across sessions
fixed
Removing one advanced search filter chip now removes only that group instead of clearing all
added
Opening a recent remote folder now auto-connects if a saved profile with password is available
added
"Remember window size and position" setting saves and restores window state across sessions
added
Window position clamped to virtual screen bounds when a previously-used monitor is disconnected
Memory Optimization, HL7 Grammar Improvements, and Auto-Update
changed
Constant-memory import - messages inserted one at a time, preventing memory growth regardless of file size
changed
Commits every 50 messages and triggers GC to release memory promptly
changed
Large messages (>100KB) trigger immediate commit + aggressive GC to prevent memory buildup
changed
Reduced SQLite cache from 50MB to 20MB and changed temp storage for lower RAM footprint
fixed
Progress bar now shows accurate progress during import
changed
Pre-scans files to count actual messages for precise progress
changed
Import and "Preparing messages for searching" phases each show 0-100% independently
changed
Added 50ms debounce for row selection - fast scrolling no longer triggers excessive database loads
changed
Increased parsed message cache from 5 to 10 entries for smoother scrolling
changed
Added memory cleanup when PDF viewer window closes
fixed
Tab tooltip now correctly shows server name and remote path for multi-file downloads
fixed
Segments and fields now appear in the order they occur in actual transactions
fixed
Fields are now properly grouped by segment - no more interleaving
fixed
Segment ordering uses relative position within messages for correct order
added
Clicking a segment in Segment Details scrolls Field Details to that segment
added
Right-click context menu on Segment Details to "Show messages containing this segment"
added
Up/Down arrow buttons added to all scrollbars
added
License window now shows app version in title bar
added
Automatic periodic update checking while app is running (hourly)
changed
Update notifications limited to once per day
changed
Eliminated lag when toggling View > Resources
Field Location Tooltip, Memory Optimization, and Search Improvements
added
Field location tooltip when hovering over raw HL7 message (shows field like OBR-6 or PID-5.2)
added
Recent searches dropdown - click in search box to see recent searches (session-only, up to 10 entries)
added
Setting to toggle recent searches dropdown visibility (Settings > Show recent searches)
added
Max Len column in HL7 Structure window showing maximum observed length for each field
added
Tree/table view now syncs when navigating between matches in "This Message" search
improved
PDFs now render at full resolution (4x scale) for crisp, sharp text
improved
Import progress shows processed count (removed unreliable estimate for gzip files)
improved
Dramatically reduced RAM usage (66% reduction) for files with embedded PDFs
improved
Major performance improvement when parsing messages with large embedded PDFs (1MB+)
improved
Open PDF button moved to its own column in Table View for better visibility
fixed
Open PDF button now appears in Table View for OBX-5 fields (previously only in Tree View)
fixed
Progress bar shows correct percentage during "Preparing messages for searching" phase
fixed
Gzip files now correctly import all messages (fixed streaming issue)
fixed
Cancelling a large file import no longer leaves an empty tab visible
fixed
Filter on this field from unique values now correctly filters messages
fixed
Recent searches dropdown now hides when opening any menu (File, Edit, etc.)
fixed
Next/previous match buttons now correctly highlight text in raw message
fixed
Field location tooltip no longer appears when mouse is over scrollbar
PHI Removal Improvements and Remote File Fixes
improved
FTP download now uses streaming with real-time progress reporting instead of loading entire file into memory
improved
Download progress uses file size from directory listing for accurate progress bar and byte display
improved
Network speed indicator uses smoothed averaging to prevent flickering during brief I/O pauses
improved
Recent remote files now show download progress bar with bytes transferred
changed
Download and Load button is now hidden until a file is selected
fixed
Cancelling a remote file download or import no longer leaves an empty tab
fixed
Cancelling a recent remote file download no longer crashes the app
fixed
Mouse scroll wheel now works in the raw HL7 message panel
improved
PHI removal now uses format-preserving anonymization for all PID fields - only data values are replaced, never field structure
fixed
Phone number (PID-13, PID-14) anonymization now replaces data in correct XTN components
fixed
Email addresses in XTN phone fields are now properly anonymized
fixed
SSN (PID-19) now preserves format (dashes, spaces) - only digits are replaced
fixed
Driver's License (PID-20) preserves alphanumeric pattern and component structure
fixed
Birth Place (PID-23) preserves format (city, state, country structure)
fixed
Patient ID/MRN (PID-3, PID-4) preserves component structure and alphanumeric patterns
fixed
Patient Name (PID-5) preserves case (uppercase/lowercase/title case) and empty components
fixed
Patient Address (PID-11) only replaces components that have data, preserving empty components
improved
All ID fields (policy numbers, account numbers) preserve alphanumeric patterns during PHI removal
added
Installer now detects if HL7 Pulse is running and prompts to close it before installation
Save As Improvements and HL7 Export Fixes
fixed
Saved HL7 files no longer include UTF-8 BOM (EF BB BF) at the start of the file
fixed
MLLP framing characters (VT/FS) are stripped when saving to ensure clean HL7 output
fixed
Save As now properly offers choice between local and remote for local source files
fixed
Save As auto-connect now retrieves password from saved connection profile
changed
When saving a pasted message, the tab title and tooltip path now update to reflect the saved file name
changed
In Remote Save As dialog, selecting a file in the browser now populates the filename field
changed
For remote files, Save As directly opens the FTP browser auto-connected to the original server/directory
Compare Messages, Save/Save As, and Search Improvements
added
Compare Messages feature for side-by-side HL7 message comparison with field-level diff highlighting
added
Save option (Ctrl+S) to save messages back to original location (local or remote FTP/SFTP)
added
Save As option to export all loaded messages to .hl7 files with automatic file splitting for large exports
added
Remote file upload support for FTP and SFTP servers
added
Search This Message mode with highlighting and Prev/Next navigation within current message
added
Recent Folders menu tracking recently accessed local and remote folders
added
Clickable segment names in raw HL7 message text to navigate to that segment in tree/table view
changed
Default view mode is now Table View for new installations
changed
Graph now defaults to showing full date range instead of just the first day
changed
Table view now more compact with 25% reduced cell and header padding
changed
Menu items now use consistent separator spacing
fixed
Tree view now correctly displays first message on initial load
fixed
Tree view no longer collapses after editing a field
fixed
Table view now correctly updates after editing a field value
fixed
Table view selection now highlights only the selected component in fields with repetitions
fixed
Advanced search now correctly finds values in field repetitions
fixed
Advanced search now uses exact match by default; wildcard search only when enabled
fixed
Update Available dialog buttons no longer cut off at bottom of window
Dark Mode, Table View, and Settings Window
added
Dark Mode with full theme support across all windows, dialogs, and controls
added
Table View option for viewing HL7 messages as a flat table with Field, Name, Data Type, and Value columns
added
Settings window (Edit > Settings) with theme selection, view mode, and display options
added
Data type tooltips on Tree View field nodes (e.g., "HD - Hierarchic Designator")
added
Segment descriptions in Tree View (e.g., "MSH - Message Header")
added
Right-click context menu in Table View with Edit, Search, Filter, and Copy options
changed
Eliminated white flash on application startup with smooth dark splash transition
changed
Improved Tree View hierarchy with component indentation and field headers
changed
Remote files in Recent Files menu now show as host:path format
fixed
MSH-2 (Encoding Characters) no longer incorrectly parsed as components
fixed
Settings window title bar now respects dark theme
TCP Receive, Recent Files, and PHI Remover improvements
added
Recent Files submenu showing last 10 opened files with persistence across sessions
added
Receive HL7 messages via TCP (File > Transmission > Receive) with configurable port and ACK responses
added
Disk space monitoring during TCP receive with 30% warning and 10% critical thresholds
fixed
Import License button now visible when network error messages are displayed
changed
License window height auto-adjusts to content with scrolling for overflow
changed
PHI Remover now uses character names from The Matrix and Star Wars
changed
Better progress feedback during PHI removal search index rebuild
Graph date picker fixes and UI improvements
fixed
Date picker calendar popup was hidden/not visible when selecting dates in Graph Window
fixed
Date text was truncated and not fully visible in the date picker controls
changed
Replaced DatePicker controls with custom compact date selectors that display the full date
changed
Calendar icon simplified to a clean design without confusing day number
changed
Close Tab menu item is now hidden when no tabs are open
changed
Close All Tabs menu item is now hidden unless multiple tabs are open
Drag & Drop, ACK Filtering, and EULA
added
Drag and drop support for importing HL7 files and folders
added
HL7 file validation - non-HL7 files are now skipped with notification
added
ACK message detection - option to exclude ACKs during import
added
End User License Agreement (EULA) displayed during installation
fixed
Filter on this value now works correctly after using Show messages from HL7 Structure
changed
Improved HL7 Structure context menu wording for clarity
Resource Monitoring & Filtering
added
Disk I/O speed monitoring in resources view (DISK: shows read/write throughput)
added
Filter on this value option in treeview context menu for quick filtering
changed
Renamed DISK to SPACE USED for database file sizes
fixed
NET resource now only shows actual network traffic
PHI Remover Improvements
fixed
New tab (+) button now properly disabled when empty tabs exist
changed
Improved PHI remover with explicit field targeting
changed
PID-5 patient names now replaced with realistic fake names
changed
PID-3 MRN numbers replaced while preserving ID type codes
changed
PID-8 sex field now swaps M to F and F to M
changed
PID-11 addresses replaced with fake addresses in XAD format
added
PV1-19 visit number now anonymized
License Registration Menu
added
Register menu item under Help for license activation
added
Import License File option for offline activation behind firewalls
Improved Update Experience
added
Feature carousel with fade animation during update download
added
Admin tool to send release notification emails to all users
changed
Improved update dialog with better text visibility and larger fonts
Offline License Activation
added
Offline license activation via Import License File for users behind corporate firewalls
added
License file (.lic) now included as email attachment when license is assigned
changed
Improved error messages when corporate firewall or proxy blocks license verification
Application Icon
added
Application icon with pulse design (blue/purple gradient)
added
Icon displays in taskbar, Start menu, desktop shortcuts, and File Explorer
Licensing System
added
30-day free trial for new users
added
License activation with email and password
added
Machine-based license tracking (up to 2 machines per registration)
added
License status display in Help ? About
added
Trial days remaining indicator
HL7 Structure Component Parsing Fix
fixed
HL7 Structure window incorrectly counting components across field repetitions
fixed
Properly handle repetition separator (~) before splitting components (^)
added
About window with version display
added
Version metadata in application properties
Initial Release
added
Full-text search powered by SQLite FTS5
added
HL7 v2.x message parsing with nHAPI
added
Message structure visualization
added
PHI removal tools for HIPAA compliance
added
MLLP framing and GZip compression support
added
Visual charts and graphs for message analysis