Domain Layer
Overview
The Domain Layer of the TMT module contains the business logic and rules for the Trail Making Test, independent of UI implementation and data sources. It defines entities, repository interfaces, and use cases that encapsulate the core functionality of the cognitive assessment.
Components
Entities
TmtGameCircle
Represents an individual circle in the test:
Position (Offset) on the test board
Text content (number or letter)
Order within the sequence
Type indicator (isNumber property)
Methods for detecting point containment
First circle status checking
TmtGameVariable
Contains static configuration parameters for the test:
Circle radius and spacing values
Connection distances and tolerances
Board margins and visual parameters
Error duration constants
Default and alternative circle counts (25 or 15)
Methods for calculating optimal parameters based on screen size
Functions for practice mode vs. test mode setup
TmtGameHandUsed
Enum representing which hand was used during the test:
LEFT (“I”)
RIGHT (“D”)
Value mapping for data persistence
Factory method for reconstructing from stored values
TmtGameInitData
Encapsulates initial test configuration:
Reference code identifier
Hand used during the test
Immutable structure for clean data passing
TmtGameResultData
Comprehensive result entity containing all test metrics:
Test configuration data
Timestamps for test parts
Completion times for TMT-A and TMT-B
Error counts (total, part A, part B)
Lift and pause metrics
Pressure and size measurements
Device information
Sectional scores (A1-A5, B1-B5)
Methods for construction from metrics controller
Metrics Entities
TmtMetricsController
Central metrics collection and calculation entity:
Captures all test performance data
Manages test timestamps and transitions
Tracks errors and their distribution
Maintains circle connection metrics
Handles test event callbacks (start, end, pan actions)
Provides copy mechanism for state preservation
Calculates derived metrics and scores
TmtTestTimeMetric
Handles timing-related metrics:
Records test start and end times
Tracks segment completion times
Calculates overall and segment durations
Divides test into five equal sections for analysis
Provides standardized time measurements
TmtTestLiftMetric
Tracks finger lift events:
Counts number of lifts during test
Measures duration of each lift
Calculates average lift duration
Provides insights into test continuity
TmtTestPauseMetric
Analyzes pauses during test execution:
Detects pauses based on position and time threshold
Counts pause occurrences
Measures pause durations
Calculates average pause duration
Provides insights into hesitation patterns
TmtBMetrics
Specialized metrics for TMT-B alternation patterns:
Tracks transitions between numbers and letters
Measures time and rate before letters
Measures time and rate before numbers
Calculates average drawing rates
Analyzes cognitive switching efficiency
TmtCircleMetrics
Analyzes drawing patterns between and inside circles:
Measures time spent between circles
Tracks drawing paths inside circles
Calculates drawing rates and times
Provides insights into motor control and planning
Distinguishes between connection types
TmtPressureSizeMetric
Captures touch pressure and size data (when available):
Records pressure variations during drawing
Tracks touch size measurements
Calculates average pressure and size
Handles devices without pressure/size capabilities
Provides insights into motor control
Use Cases
TmtGameConfigUseCase
Manages test configuration persistence and retrieval:
Saves circle number preference
Retrieves stored configuration
Loads configuration into active test
Handles default values when needed
TmtGameCalculate
Implements geometric calculations for test validation:
Determines if points are inside circles
Validates connection distances
Calculates board boundaries
Computes closest points on circle perimeters
Ensures spatial accuracy of interactions
ReportTmtResultUseCase
Handles test result submission and storage:
Transforms metrics into reportable formats
Submits results to remote server
Handles offline storage for pending results
Manages synchronization attempts
PendingResultUseCase
Manages results when network is unavailable:
Saves pending results locally
Retrieves and processes pending results
Attempts resubmission when network available
Handles successful submission cleanup
TmtResultScreenResponsiveCalculator
Calculates optimal layouts for result presentation:
Determines spacing based on device properties
Calculates card dimensions and margins
Optimizes layouts for different orientations
Ensures consistent presentation across devices
Repositories (Interfaces)
TmtResultRepository
Interface for result data operations:
Defines methods for reporting test results
Abstracts data persistence implementation
Enables dependency inversion
TmtGameConfigRepository
Interface for configuration persistence:
Defines methods for saving circle count preference
Defines methods for retrieving settings
Abstracts storage mechanism
PendingResultRepository
Interface for managing offline results:
Defines methods for saving pending results
Defines methods for retrieving pending results
Defines methods for deleting resolved results
Abstracts synchronization mechanisms
Value Objects and Constants
MetricStaticValues
Contains constants for metric calculations:
Pause threshold duration (100ms)
Position tolerance values
Metric calculation thresholds
Section boundary definitions
Sentinel values for special cases
TmtGameType
Enum for test types:
TMT_TEST_A
TMT_TEST_B
TMT_PRACTICE_A
TMT_PRACTICE_B
TMT_BOTH_PRACTICE
TmtGameCircleTextType
Enum for circle content types:
NUMBER (for TMT-A)
NUMBER_WITH_LETTER (for TMT-B)
Domain Services
RandomGridSampler
Generates spatially distributed points for circle placement:
Creates grid-based distribution algorithm
Ensures minimum distance between points
Adapts to available screen space
Handles fallback strategies when optimal placement fails
Provides deterministic yet apparently random layouts
ReorderCircles
Optimizes circle ordering for valid test sequences:
Reorders circles based on connectable paths
Ensures paths don’t overlap excessively
Optimizes for clean visual presentation
Applies clinical guidelines for test validity
Handles regeneration of problematic placements
GenerateCircleWithData
Creates circle entities with appropriate properties:
Assigns numbers or alternating numbers/letters
Generates correct text representations
Configures circle properties based on test type
Creates complete set of test circles
Benefits of the Domain Layer
Clinical Validity: Ensures the digital implementation follows standardized assessment protocols
Test Integrity: Guarantees consistent test parameters and scoring
Separation of Concerns: Isolates core test logic from presentation details
Enhanced Metrics: Collects detailed metrics impossible in paper-based tests
Algorithmic Purity: Contains complex test generation and validation logic in testable entities
The domain layer provides a robust foundation for a clinically valid digital implementation of the Trail Making Test while enabling enhanced data collection and analysis beyond what traditional paper-based tests can offer.