1 line
No EOL
53 KiB
JSON
1 line
No EOL
53 KiB
JSON
{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Overview","text":"<p>N\u00f8kken (or Nokken) is a medical tracking application built with Flutter. It is designed to work on mobile platforms (iOS / Android) with a strong focus on user privacy.</p>"},{"location":"#open-source-transparency","title":"Open Source Transparency","text":"<p>N\u00f8kken is fully open source, providing transparency into how your sensitive health data is handled. This approach ensures:</p> <ul> <li>Full visibility into all application code</li> <li>Community verification of privacy and security practices</li> <li>The ability to modify, extend, or replace components as needed</li> <li>Long-term sustainability independent of any single developer or organization</li> </ul>"},{"location":"#uncompromising-privacy","title":"Uncompromising Privacy","text":"<p>N\u00f8kken embraces a strict privacy-first approach:</p> <ul> <li>No data collection: Your health information never leaves your device</li> <li>No cloud storage: All data is stored locally on your device</li> <li>No tracking: No analytics, telemetry, or usage statistics are collected</li> <li>No network requirements: Functions fully offline with no dependency on external services</li> <li>No account creation or registration required</li> </ul>"},{"location":"architecture/","title":"Architecture","text":"<p>N\u00f8kken follows a feature-first architecture with clear separation of concerns.</p>"},{"location":"architecture/#project-structure","title":"Project Structure","text":"<pre><code>lib/\n\u251c\u2500\u2500 main.dart # Application entry point\n\u251c\u2500\u2500 src/\n \u251c\u2500\u2500 app.dart # App configuration and theme setup\n \u251c\u2500\u2500 core/ # Core functionality shared across features\n \u2502 \u251c\u2500\u2500 constants/ # App-wide constants\n \u2502 \u251c\u2500\u2500 screens/ # Core screens (main container)\n \u2502 \u251c\u2500\u2500 services/ # Shared services (database, navigation, etc.)\n \u2502 \u251c\u2500\u2500 theme/ # Theming system\n \u2502 \u2514\u2500\u2500 utils/ # Utility functions\n \u251c\u2500\u2500 features/ # Feature modules\n \u251c\u2500\u2500 medication_tracker/ # Medication tracking feature\n \u251c\u2500\u2500 bloodwork_tracker/ # Bloodwork tracking feature\n \u251c\u2500\u2500 mood_tracker/ # Mood tracking feature\n \u251c\u2500\u2500 stats/ # Statistics / Analysis\n \u251c\u2500\u2500 scheduler/ # Daily tracker and calendar\n \u2514\u2500\u2500 settings/ # Settings and preferences\n</code></pre>"},{"location":"architecture/#dependency-flow","title":"Dependency Flow","text":"<ul> <li>Features may depend on core services, but never on other features</li> <li>Core services are designed to be independent and modular</li> <li>Data flows from the database through state providers to UI components</li> </ul>"},{"location":"architecture/#state-management","title":"State Management","text":"<p>Nokken uses Riverpod for state management.</p>"},{"location":"core/","title":"Core Services","text":"<p>Nokken's architecture is built around several core services that provide foundational functionality to the application. These services follow a singleton pattern for efficient resource usage and are designed with clear separation of concerns.</p>"},{"location":"core/#structure","title":"Structure","text":"<pre><code>lib/src/\n\u251c\u2500\u2500 app.dart # App configuration and theme setup\n\u251c\u2500\u2500 core/ # Core functionality shared across features\n\u2502 \u251c\u2500\u2500 constants/ # App-wide constants\n\u2502 \u251c\u2500\u2500 screens/ # Core screens (main container)\n\u2502 \u251c\u2500\u2500 services/ # Shared services\n\u2502 \u251c\u2500\u2500 theme/ # Theming system\n\u2502 \u2514\u2500\u2500 utils/ # Utility functions\n\u251c\u2500\u2500 features/ # Feature modules (medication, bloodwork, etc.)\n</code></pre>"},{"location":"core/database/","title":"Database Service","text":"<p>The DatabaseService is the heart of Nokken's data persistence layer, providing a structured interface to the SQLite database.</p>"},{"location":"core/database/#key-responsibilities","title":"Key Responsibilities","text":"<ul> <li>Managing the SQLite database schema and versioning</li> <li>Providing CRUD operations for all entity types</li> <li>Abstracting database operations from the rest of the application</li> <li>Handling error management through a custom <code>DatabaseException</code> class</li> </ul>"},{"location":"core/database/#interactions-with-other-services","title":"Interactions with Other Services","text":"<ul> <li>Feature modules: All feature modules interact with the database service to store and retrieve data</li> <li>State providers: Riverpod state providers use the database service to fetch data</li> <li><code>ValidationService</code>: Database operations use validation to ensure data integrity</li> </ul>"},{"location":"core/database/#database-schema","title":"Database Schema","text":"<p>The database consists of several tables:</p> <ul> <li><code>medications</code>: Stores medication information</li> <li><code>taken_medications</code>: Records which medications have been taken</li> <li><code>bloodwork</code>: Stores lab results and appointment information</li> <li><code>mood_entries</code>: Stores daily mood and wellness metrics</li> </ul>"},{"location":"core/health_analytics/","title":"Health Analytics Service","text":"<p>The Health Analytics Service provides advanced statistical analysis capabilities for health-related data. It's designed to identify patterns, correlations, and insights in health metrics through a high-performance native C++ implementation with a Dart interface.</p> <p>This service leverages Foreign Function Interface (FFI) to bridge Dart applications with the C++ analytics engine, enabling complex health data analysis with minimal computational overhead in Flutter applications.</p> <p>Key capabilities include statistical computations, correlation identification, time series analysis, anomaly detection, clustering, and health-specific analyses like medication impact and hormone level monitoring.</p>"},{"location":"core/health_analytics/#table-of-contents","title":"Table of Contents","text":"<ul> <li>Core Features</li> <li>API Reference</li> <li>Basic Statistics</li> <li>Trend Analysis</li> <li>Correlation Analysis</li> <li>Multivariate Analysis</li> <li>Cluster Analysis</li> <li>Time Series Forecasting</li> <li>Anomaly Detection</li> <li>Factor Impact Analysis</li> <li>Date Pattern Analysis</li> <li>Cycle Analysis</li> <li>Medication Impact Analysis</li> <li>Hormone Analysis</li> <li>Comprehensive Analysis</li> <li>Data Models</li> <li>Example Usage</li> <li>Performance Considerations</li> <li>Troubleshooting</li> </ul>"},{"location":"core/health_analytics/#core-features","title":"Core Features","text":"<p>The Health Analytics Service provides the following core functionalities:</p> <ul> <li>Statistical Analysis: Calculate mean, median, variance, standard deviation, quartiles, skewness, and kurtosis for health metrics.</li> <li>Trend Detection: Identify increasing, decreasing, cyclic, or variable trends in time series data.</li> <li>Correlation Analysis: Find relationships between various health factors and determine their significance.</li> <li>Multivariate Analysis: Explore complex relationships between multiple health variables.</li> <li>Clustering: Group similar health patterns together to identify natural categories.</li> <li>Time Series Forecasting: Predict future values of health metrics based on historical data.</li> <li>Anomaly Detection: Identify unusual patterns or outliers in health data.</li> <li>Factor Impact Analysis: Determine which factors have the strongest influence on target health metrics.</li> <li>Temporal Pattern Analysis: Discover cyclical patterns and date-related trends (e.g., weekly patterns).</li> <li>Medication Impact Analysis: Assess how medications affect various health metrics.</li> <li>Hormone Analysis: Evaluate hormone levels and their impact on health factors.</li> <li>Comprehensive Analysis: Integrate multiple analysis techniques for holistic health insights.</li> </ul>"},{"location":"core/health_analytics/#api-reference","title":"API Reference","text":""},{"location":"core/health_analytics/#basic-statistics","title":"Basic Statistics","text":"<p>Calculate fundamental statistics for a health metric:</p> <pre><code>HealthStatistics stats = analyticsService.calculateStatistics(values);\n</code></pre> <p>The <code>HealthStatistics</code> object provides:</p> <ul> <li>mean</li> <li>median </li> <li>min/max values</li> <li>standard deviation</li> <li>variance</li> <li>skewness</li> <li>kurtosis</li> <li>quartiles (Q1, Q3)</li> <li>interquartile range (IQR)</li> </ul>"},{"location":"core/health_analytics/#trend-analysis","title":"Trend Analysis","text":"<p>Detect trends in time series data:</p> <pre><code>TrendAnalysis trend = analyticsService.detectTrend(values);\n</code></pre> <p>This returns a <code>TrendAnalysis</code> with:</p> <ul> <li>trend type (increasing, decreasing, cyclic, variable, or none)</li> <li>strength (0-1 scale)</li> <li>description of the detected trend</li> </ul>"},{"location":"core/health_analytics/#correlation-analysis","title":"Correlation Analysis","text":"<p>Find correlations between a target variable and multiple factors:</p> <pre><code>List<FactorCorrelation> correlations = analyticsService.findCorrelations(\n targetValues,\n factorData,\n);\n</code></pre> <p>Where:</p> <ul> <li><code>targetValues</code> is a list of double values for the target metric</li> <li><code>factorData</code> is a map of factor names to lists of double values</li> </ul> <p>Returns a list of <code>FactorCorrelation</code> objects with:</p> <ul> <li>factor name</li> <li>correlation coefficient (-1 to 1)</li> <li>p-value</li> <li>confidence level</li> </ul>"},{"location":"core/health_analytics/#multivariate-analysis","title":"Multivariate Analysis","text":"<p>Find complex relationships between multiple factors:</p> <pre><code>List<MultivariateRelationship> relationships = analyticsService.findMultivariateCorrelations(\n factorData,\n);\n</code></pre> <p>This identifies various relationship types (direct correlation, mediation, network effects) between three or more factors.</p>"},{"location":"core/health_analytics/#cluster-analysis","title":"Cluster Analysis","text":"<p>Group similar data points based on multiple factors:</p> <pre><code>List<ClusterPattern> clusters = analyticsService.performClusterAnalysis(\n factorData,\n maxClusters,\n);\n</code></pre> <p>This identifies natural groupings in the data, returning:</p> <ul> <li>cluster ID and name</li> <li>number of points in each cluster</li> <li>significance score</li> <li>key factors defining each cluster</li> <li>detailed description</li> </ul>"},{"location":"core/health_analytics/#time-series-forecasting","title":"Time Series Forecasting","text":"<p>Predict future values of a health metric:</p> <pre><code>TimeSeriesPrediction forecast = analyticsService.predictTimeSeries(\n factorName,\n timeSeriesData,\n stepsAhead,\n);\n</code></pre> <p>Returns predictions with confidence intervals and seasonality information.</p>"},{"location":"core/health_analytics/#anomaly-detection","title":"Anomaly Detection","text":"<p>Identify unusual patterns or outliers in health data:</p> <pre><code>List<AnomalyResult> anomalies = analyticsService.detectAnomalies(\n factorName,\n timeSeriesData,\n dates,\n threshold,\n);\n</code></pre> <p>Detects statistical outliers, contextual anomalies, and trend changes.</p>"},{"location":"core/health_analytics/#factor-impact-analysis","title":"Factor Impact Analysis","text":"<p>Determine which factors have the strongest influence on a target metric:</p> <pre><code>List<FactorImpact> impacts = analyticsService.rankFactorImpacts(\n factorData,\n targetData,\n);\n</code></pre> <p>This analyzes both direct and indirect effects of factors, returning:</p> <ul> <li>impact score</li> <li>direct effect</li> <li>indirect effect (through other factors)</li> <li>confidence level</li> <li>mechanism description</li> </ul>"},{"location":"core/health_analytics/#date-pattern-analysis","title":"Date Pattern Analysis","text":"<p>Discover patterns related to specific times (day of week, month, etc.):</p> <pre><code>List<DatePattern> patterns = analyticsService.analyzeDatePatterns(\n factorName,\n values,\n dates,\n);\n</code></pre> <p>Identifies weekly, monthly, or custom periodicity patterns.</p>"},{"location":"core/health_analytics/#cycle-analysis","title":"Cycle Analysis","text":"<p>Analyze cyclical patterns in health data:</p> <pre><code>CycleAnalysis cycles = analyticsService.analyzeCycles(\n factorName,\n values,\n dates,\n);\n</code></pre> <p>Returns information about:</p> <ul> <li>cycle length</li> <li>amplitude</li> <li>phase shift</li> <li>confidence level</li> <li>variance in cycle length</li> </ul>"},{"location":"core/health_analytics/#medication-impact-analysis","title":"Medication Impact Analysis","text":"<p>Assess how medications affect health metrics:</p> <pre><code>MedicationImpactResult impact = analyticsService.analyzeMedicationImpact(\n medicationName,\n factorName,\n beforeData,\n afterData,\n);\n</code></pre> <p>Compares health metrics before and after medication, providing:</p> <ul> <li>mean values before and after</li> <li>magnitude and significance of changes</li> <li>overall impact score</li> <li>estimated days to effect</li> </ul>"},{"location":"core/health_analytics/#hormone-analysis","title":"Hormone Analysis","text":"<p>Evaluate hormone levels and their impact on health factors:</p> <pre><code>HormoneImpactResult hormoneImpact = analyticsService.analyzeHormoneImpact(\n hormoneName,\n hormoneLevels,\n factorData,\n minOptimalLevel,\n maxOptimalLevel,\n);\n</code></pre> <p>Provides information about:</p> <ul> <li>current vs. optimal hormone levels</li> <li>deviation from optimal range</li> <li>impact on mood and energy</li> <li>correlations with other health factors</li> </ul>"},{"location":"core/health_analytics/#comprehensive-analysis","title":"Comprehensive Analysis","text":"<p>Generate a holistic analysis combining multiple techniques:</p> <pre><code>ComprehensiveHealthAnalysis analysis = await analyticsService.generateComprehensiveAnalysis(\n moodEntries: moodEntries,\n medications: medications,\n takenMedications: takenMedications,\n bloodworkEntries: bloodworkEntries,\n timeframe: \"3 months\",\n);\n</code></pre> <p>This integrates all analysis methods to provide a complete health overview.</p>"},{"location":"core/health_analytics/#data-models","title":"Data Models","text":"<p>The service uses the following core data models:</p>"},{"location":"core/health_analytics/#health-statistics","title":"Health Statistics","text":"<pre><code>class HealthStatistics {\n final double mean;\n final double median;\n final double min;\n final double max;\n final double stdDev;\n final double variance;\n final double skewness;\n final double kurtosis;\n final double q1;\n final double q3;\n final double iqr;\n}\n</code></pre>"},{"location":"core/health_analytics/#trend-analysis_1","title":"Trend Analysis","text":"<pre><code>class TrendAnalysis {\n final TrendType type; // enum: none, increasing, decreasing, cyclic, variable\n final double strength;\n final String description;\n}\n</code></pre>"},{"location":"core/health_analytics/#factor-correlation","title":"Factor Correlation","text":"<pre><code>class FactorCorrelation {\n final String factorName;\n final double correlation;\n final double pValue;\n final double confidence;\n}\n</code></pre>"},{"location":"core/health_analytics/#multivariate-relationship","title":"Multivariate Relationship","text":"<pre><code>class MultivariateRelationship {\n final List<String> factorNames;\n final double correlationStrength;\n final String description;\n final double confidence;\n final List<double> factorWeights;\n final RelationshipType relationshipType;\n}\n</code></pre>"},{"location":"core/health_analytics/#cluster-pattern","title":"Cluster Pattern","text":"<pre><code>class ClusterPattern {\n final int id;\n final String name;\n final String description;\n final int pointCount;\n final double significance;\n final List<String> keyFactors;\n final List<double> factorImportance;\n}\n</code></pre>"},{"location":"core/health_analytics/#time-series-prediction","title":"Time Series Prediction","text":"<pre><code>class TimeSeriesPrediction {\n final String factorName;\n final List<double> predictions;\n final List<List<double>> confidenceIntervals;\n final double confidence;\n final int seasonalityPeriod;\n final TimeUnit timeUnit;\n}\n</code></pre>"},{"location":"core/health_analytics/#anomaly-result","title":"Anomaly Result","text":"<pre><code>class AnomalyResult {\n final String factorName;\n final int dataPointIndex;\n final double anomalyScore;\n final String description;\n final double originalValue;\n final double expectedValue;\n final DateTime? date;\n final double confidence;\n final AnomalyType anomalyType;\n}\n</code></pre>"},{"location":"core/health_analytics/#factor-impact","title":"Factor Impact","text":"<pre><code>class FactorImpact {\n final String factorName;\n final double impactScore;\n final double directEffect;\n final double indirectEffect;\n final double confidence;\n final String mechanism;\n}\n</code></pre>"},{"location":"core/health_analytics/#date-pattern","title":"Date Pattern","text":"<pre><code>class DatePattern {\n final PatternType type;\n final int periodicity;\n final double strength;\n final String description;\n final List<double> peakValues;\n final int peakDayOfWeek;\n final int peakDayOfMonth;\n final int peakMonth;\n}\n</code></pre>"},{"location":"core/health_analytics/#cycle-analysis_1","title":"Cycle Analysis","text":"<pre><code>class CycleAnalysis {\n final double cycleLength;\n final double cycleLengthVariance;\n final double amplitude;\n final double phaseShift;\n final double confidence;\n final String description;\n}\n</code></pre>"},{"location":"core/health_analytics/#medication-impact-result","title":"Medication Impact Result","text":"<pre><code>class MedicationImpactResult {\n final String medicationName;\n final String factorName;\n final double beforeMean;\n final double afterMean;\n final double changeMagnitude;\n final double changeSignificance;\n final double overallImpact;\n final int daysToEffect;\n final String description;\n}\n</code></pre>"},{"location":"core/health_analytics/#hormone-impact-result","title":"Hormone Impact Result","text":"<pre><code>class HormoneImpactResult {\n final String hormoneName;\n final double currentLevel;\n final double optimalLevel;\n final double optimalRangeLower;\n final double optimalRangeUpper;\n final double deviation;\n final double impactOnMood;\n final double impactOnEnergy;\n final Map<String, double> factorImpacts;\n final String description;\n}\n</code></pre>"},{"location":"core/health_analytics/#comprehensive-health-analysis","title":"Comprehensive Health Analysis","text":"<pre><code>class ComprehensiveHealthAnalysis {\n final TrendAnalysis moodTrend;\n final List<MultivariateRelationship> factorCorrelations;\n final List<ClusterPattern> clusters;\n final List<AnomalyResult> anomalies;\n final List<FactorImpact> factorImpacts;\n final List<TimeSeriesPrediction> predictions;\n final List<DatePattern> datePatterns;\n final List<CycleAnalysis> cycleAnalyses;\n final List<HormoneImpactResult> hormoneImpacts;\n final List<MedicationImpactResult> medicationImpacts;\n final DateTime analysisDate;\n final String timeframe;\n}\n</code></pre>"},{"location":"core/health_analytics/#example-usage","title":"Example Usage","text":"<pre><code>import 'package:nokken/src/features/health_analytics/health_analytics_service.dart';\nimport 'package:nokken/src/features/mood_tracker/models/mood_entry.dart';\nimport 'package:nokken/src/features/medication_tracker/models/medication.dart';\nimport 'package:nokken/src/features/bloodwork_tracker/models/bloodwork.dart';\n\nFuture<void> generateHealthInsights(\n List<MoodEntry> moodEntries,\n List<Medication> medications,\n List<Bloodwork> bloodworkEntries,\n) async {\n final analyticsService = HealthAnalyticsService();\n await analyticsService.initialize();\n\n if (!analyticsService.isInitialized) {\n print('Failed to initialize analytics service');\n return;\n }\n\n // Determine which medications the user is currently taking\n final takenMedications = medications\n .where((med) => med.isActive)\n .map((med) => med.id)\n .toSet();\n\n // Generate comprehensive analysis\n final analysis = await analyticsService.generateComprehensiveAnalysis(\n moodEntries: moodEntries,\n medications: medications,\n takenMedications: takenMedications,\n bloodworkEntries: bloodworkEntries,\n timeframe: '3 months',\n );\n\n // Present key insights\n print('=== HEALTH INSIGHTS ===');\n print('Analysis date: ${analysis.analysisDate}');\n print('Timeframe: ${analysis.timeframe}');\n\n // Mood trend\n print('\\n== Mood Trend ==');\n print(analysis.moodTrend.description);\n\n // Key correlations\n print('\\n== Key Correlations ==');\n for (final correlation in analysis.factorCorrelations.take(3)) {\n print(correlation.description);\n }\n\n // Anomalies\n print('\\n== Anomalies Detected ==');\n for (final anomaly in analysis.anomalies.take(5)) {\n print('${anomaly.factorName}: ${anomaly.description}');\n if (anomaly.date != null) {\n print('Date: ${anomaly.date}');\n }\n }\n\n // Medication impacts\n print('\\n== Medication Impacts ==');\n for (final impact in analysis.medicationImpacts) {\n print('${impact.medicationName} \u2192 ${impact.factorName}: ${impact.description}');\n }\n\n // Predictions\n print('\\n== Predictions ==');\n for (final prediction in analysis.predictions.take(3)) {\n print('${prediction.factorName} next week: ${prediction.predictions.first.toStringAsFixed(1)} (confidence: ${(prediction.confidence * 100).toStringAsFixed(1)}%)');\n }\n}\n</code></pre>"},{"location":"core/health_analytics/#performance-considerations","title":"Performance Considerations","text":"<p>The Health Analytics Service uses a high-performance C++ implementation for computation-intensive operations, but there are still important considerations for optimal usage:</p> <ol> <li> <p>Data Volume: The service performs well with typical health tracking data volumes (hundreds to thousands of data points), but very large datasets may require batching or sampling.</p> </li> <li> <p>Memory Management: The service handles memory allocation and deallocation for native resources, but be mindful of large data structures in Dart code.</p> </li> <li> <p>Initialization Cost: The first call to <code>initialize()</code> has a one-time overhead for loading the native library.</p> </li> <li> <p>Operation Complexity: Operations like cluster analysis and multivariate correlation have higher computational complexity.</p> </li> <li> <p>Platform Differences: Performance may vary across platforms. iOS and Android have different native code optimization levels.</p> </li> </ol>"},{"location":"core/health_analytics/#troubleshooting","title":"Troubleshooting","text":""},{"location":"core/health_analytics/#common-issues","title":"Common Issues","text":""},{"location":"core/health_analytics/#native-library-loading-failures","title":"Native Library Loading Failures","text":"<p>If you encounter issues loading the native library:</p> <ol> <li>Verify the native libraries are correctly placed in platform-specific directories</li> <li>Check that library names match expected platform conventions:</li> </ol> Platform Library Android <code>libhealth_analytics.so</code> iOS Framework or dynamic library Linux <code>libhealth_analytics.so</code> <ol> <li>For Android, ensure the correct ABIs are supported in your <code>build.gradle</code>:</li> </ol> <pre><code>android {\n defaultConfig {\n ndk {\n abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'\n }\n }\n}\n</code></pre>"},{"location":"core/health_analytics/#insufficient-data-errors","title":"Insufficient Data Errors","text":"<p>Many analysis methods require minimum data points:</p> <ul> <li>Basic statistics: at least 1 data point</li> <li>Trend analysis: at least 3 data points</li> <li>Correlation analysis: at least 3 matched pairs</li> <li>Cycle analysis: at least 20 data points</li> <li>Cluster analysis: at least 5 data points</li> </ul> <p>Always check data volumes before calling analysis methods and provide appropriate fallbacks or messages when data is insufficient.</p>"},{"location":"core/navigation/","title":"Navigation Service","text":"<p>Nokken uses a centralized navigation system to handle screen transitions.</p>"},{"location":"core/navigation/#key-components","title":"Key Components","text":"<ul> <li><code>NavigationService</code>: Provides methods for navigating between screens</li> <li><code>AppRouter</code>: Generates routes based on route names and arguments</li> <li><code>RouteNames</code>: Constants for all route paths</li> <li><code>RouteArguments</code>: Type-safe argument passing between screens</li> </ul>"},{"location":"core/navigation/#interactions-with-other-services","title":"Interactions with Other Services","text":"<ul> <li>Feature modules: All screens use the navigation service to navigate between screens</li> <li>Core screens: The main container screen uses navigation to switch between feature tabs</li> <li><code>DialogService</code>: Uses the navigation service for dialog-related navigation</li> </ul>"},{"location":"core/notifications/","title":"Notification Service","text":"<p>The <code>NotificationService</code> handles push notifications for medication reminders and refill alerts using the <code>flutter_local_notifications</code> package.</p>"},{"location":"core/notifications/#key-features","title":"Key Features","text":"<ul> <li>Platform-aware implementation (only initializes on mobile platforms)</li> <li>Scheduling of medication reminders based on time of day</li> <li>Support for refill reminders</li> <li>Permission handling</li> </ul>"},{"location":"core/notifications/#interactions-with-other-services","title":"Interactions with Other Services","text":"<ul> <li>Medication Tracker: Uses the service to schedule medication reminders</li> <li>Time-based features: Interacts with any feature that requires time-based notifications</li> </ul>"},{"location":"core/ui/","title":"UI Components","text":"<p>Nokken includes several shared UI components for consistency:</p>"},{"location":"core/ui/#theming-system","title":"Theming System","text":""},{"location":"core/ui/#key-components","title":"Key Components","text":"<ul> <li><code>AppTheme</code>: Base theme definitions and spacing/padding constants</li> <li><code>AppColors</code>: Theme-aware color values</li> <li><code>AppTextStyles</code>: Theme-aware text styles</li> <li><code>AppIcons</code>: Centralized icon management</li> </ul>"},{"location":"core/ui/#theme-management","title":"Theme Management","text":"<ul> <li>Theme state is managed through Riverpod with the <code>themeProvider</code></li> <li><code>ThemeUtils</code> provides utility functions for theme management</li> <li>Settings Screen: User preferences for theme are stored and managed by the settings feature</li> </ul> <pre><code>// Provider for the theme mode\nfinal themeProvider = StateProvider<ThemeMode>((ref) => ThemeMode.dark);\n\n// Utility functions for theme management\nclass ThemeUtils {\n static void toggleTheme(WidgetRef ref) {...}\n static void setTheme(WidgetRef ref, ThemeMode mode) {...}\n}\n</code></pre>"},{"location":"core/ui/#widgets","title":"Widgets","text":""},{"location":"core/ui/#sharedwidgets","title":"SharedWidgets","text":"<p>The <code>SharedWidgets</code> class provides reusable UI components throughout the app</p>"},{"location":"core/ui/#dialog-service","title":"Dialog Service","text":"<p>The <code>DialogService</code> provides centralized management of dialogs and alerts.</p>"},{"location":"core/ui/#features","title":"Features","text":"<ul> <li>Standard save/discard changes dialog</li> <li>Delete confirmation dialog</li> <li>Generic back button handler with unsaved changes check</li> </ul>"},{"location":"core/utilities/","title":"Utilities","text":"<p>Nokken includes several utility classes that provide shared functionality:</p>"},{"location":"core/utilities/#datetimeformatter","title":"DateTimeFormatter","text":"<p>Provides methods for consistent date and time formatting throughout the app.</p>"},{"location":"core/utilities/#features","title":"Features","text":"<ul> <li>Date formatting with special handling for today/yesterday/tomorrow</li> <li>Time formatting and parsing between different formats</li> <li>Day of week formatting</li> <li>Medication-specific time-related formatting</li> <li>Time icon selection based on time of day</li> </ul>"},{"location":"core/utilities/#geticonscolors","title":"GetIconsColors","text":"<p>Functions for returning appropriate Icon/Color for medication/appointment types.</p>"},{"location":"core/utilities/#features_1","title":"Features","text":"<ul> <li>Icon selection based on medication type</li> <li>Color selection based on medication type</li> <li>Combined icon and color selection for consistent UI</li> <li>Icon selection for appointment types</li> </ul>"},{"location":"core/utilities/#getlabels","title":"GetLabels","text":"<p>Functions for returning appropriate text labels for medication/appointment types.</p>"},{"location":"core/utilities/#features_2","title":"Features","text":"<ul> <li>Text descriptions for medication types and subtypes</li> <li>Text for injection subtypes</li> <li>Formatted dosage text based on medication type</li> <li>Text for medication status (taken/not taken)</li> <li>Text for appointment types</li> </ul>"},{"location":"core/utilities/#list-extensions","title":"List Extensions","text":"<p>Additional functionality for lists, currently only the <code>firstWhereOrNull</code> method.</p>"},{"location":"core/validation/","title":"Validation Service","text":"<p>The <code>ValidationService</code> provides centralized validation logic for form inputs, ensuring consistent validation throughout the app.</p>"},{"location":"core/validation/#key-features","title":"Key Features","text":"<ul> <li>Returns <code>ValidationResult</code> objects with success status and error messages</li> <li>Provides validators for all data types in the application</li> <li>Integration with Flutter's form validation system</li> <li>Composition of validation rules for complex validations</li> </ul>"},{"location":"core/validation/#interactions-with-other-services","title":"Interactions with Other Services","text":"<ul> <li><code>DatabaseService</code>: Validates data before persistence</li> <li>Feature modules: Form screens use validation for user input</li> <li>Model classes: Constructors validate data during object creation</li> </ul>"},{"location":"features/","title":"Feature Modules","text":"<p>Nokken features multiple modules for tracking different aspects of health management. The application follows a feature-first architecture with clear separation of concerns.</p> <ul> <li>Medication Tracker: Track medications, schedules, and adherence</li> <li>Bloodwork Tracker: Manage lab results, medical appointments, and visualize hormone data</li> <li>Mood Tracker: Track daily mood and wellness metrics</li> <li>Scheduler: Integrated calendar and daily tracker for all medical events</li> <li>Statistics: Analytics dashboards for mood and health trends</li> <li>Settings: Application preferences and configuration</li> </ul>"},{"location":"features/bloodwork-tracker/","title":"Bloodwork Tracker","text":"<p>The bloodwork tracker feature helps users manage their lab results, medical appointments, and visualize trends in hormone levels over time.</p>"},{"location":"features/bloodwork-tracker/#models","title":"Models","text":"<ul> <li><code>Bloodwork</code>: Primary model for lab tests and medical appointments. <pre><code>class Bloodwork {\n final String id;\n final DateTime date;\n final AppointmentType appointmentType;\n final List<HormoneReading> hormoneReadings;\n final String? location;\n final String? doctor;\n final String? notes;\n}\n</code></pre></li> <li><code>HormoneReading</code>: Represents an individual hormone measurement with value and unit. <pre><code>class HormoneReading {\n final String name;\n final double value;\n final String unit;\n\n // Serialization methods\n Map<String, dynamic> toJson() {...}\n factory HormoneReading.fromJson(Map<String, dynamic> json) {...}\n}\n</code></pre></li> <li><code>AppointmentType</code>: Enumeration for different types of medical appointments (bloodwork, appointment, surgery).</li> <li><code>HormoneTypes</code>: Contains predefined hormone types with their default units.</li> </ul>"},{"location":"features/bloodwork-tracker/#providers","title":"Providers","text":"<ul> <li><code>bloodworkStateProvider</code>: Manages bloodwork CRUD operations</li> <li>Various derived providers: </li> </ul> <pre><code>// Main state providers\nfinal bloodworkStateProvider = StateNotifierProvider<BloodworkNotifier, BloodworkState>\n\n// Derived providers\nfinal bloodworkRecordsProvider = Provider<List<Bloodwork>>\nfinal bloodworkLoadingProvider = Provider<bool>\nfinal bloodworkErrorProvider = Provider<String?>\nfinal sortedBloodworkProvider = Provider<List<Bloodwork>>\nfinal bloodworkTypeRecordsProvider = Provider<List<Bloodwork>>\nfinal bloodworkDatesProvider = Provider<Set<DateTime>>\nfinal groupedBloodworkProvider = Provider<Map<String, List<Bloodwork>>>\nfinal hormoneTypesProvider = Provider<List<String>>\nfinal hormoneRecordsProvider = Provider.family<List<MapEntry<DateTime, double>>, String>\nfinal latestHormoneValueProvider = Provider.family<double?, String>\n</code></pre>"},{"location":"features/bloodwork-tracker/#state-notifier","title":"State Notifier","text":"<pre><code>class BloodworkNotifier extends StateNotifier<BloodworkState> {\n // Notifier methods\n Future<void> loadBloodwork() async {...}\n Future<void> addBloodwork(Bloodwork bloodwork) async {...}\n Future<void> updateBloodwork(Bloodwork bloodwork) async {...}\n Future<void> deleteBloodwork(String id) async {...}\n}\n</code></pre>"},{"location":"features/bloodwork-tracker/#screens","title":"Screens","text":"<ul> <li><code>BloodworkListScreen</code>: List of all appointments organized by upcoming/past/today.</li> <li><code>AddEditBloodworkScreen</code>: Form for adding and editing appointments and lab results.</li> <li><code>BloodLevelListScreen</code>: Overview display of all tracked hormone levels with mini graphs.</li> <li><code>BloodworkGraphScreen</code>: Visualizations of hormone levels over time with reference ranges.</li> </ul>"},{"location":"features/bloodwork-tracker/#interactions","title":"Interactions","text":"<ul> <li>Uses <code>DatabaseService</code> for persistent storage of bloodwork data</li> <li>Interacts with Scheduler feature to display appointments on calendar and daily views</li> <li>Uses <code>ValidationService</code> for data validation</li> </ul>"},{"location":"features/medication-tracker/","title":"Medication Tracker","text":"<p>The medication tracker feature allows users to manage their medications, track adherence, and receive refill alerts.</p>"},{"location":"features/medication-tracker/#models","title":"Models","text":"<ul> <li><code>Medication</code>: Core model representing a medication with properties for name, dosage, schedule, inventory, and type-specific details.</li> <li><code>MedicationDose</code>: Represents a specific instance of a medication taken at a particular date and time slot. <pre><code>class MedicationDose {\n final String medicationId;\n final DateTime date;\n final String timeSlot;\n\n // Methods for generating unique keys\n String toKey() {...}\n static MedicationDose fromKey(String key) {...}\n}\n</code></pre></li> <li><code>InjectionDetails</code>: Extends medication information with injection-specific details like needle types, site rotation, and supplies tracking.</li> <li><code>InjectionSite</code>: Manages individual injection locations on the body.</li> <li><code>InjectionSiteRotation</code>: Handles the automatic rotation of injection sites.</li> </ul>"},{"location":"features/medication-tracker/#providers","title":"Providers","text":"<ul> <li><code>medicationStateProvider</code>: Manages medication CRUD operations with the database.</li> <li><code>medicationTakenProvider</code>: Tracks which medications have been taken on specific dates.</li> <li>Various derived providers:</li> </ul> <pre><code>// Main state providers\nfinal medicationStateProvider = StateNotifierProvider<MedicationNotifier, MedicationState>\nfinal medicationTakenProvider = StateNotifierProvider<MedicationTakenNotifier, Set<String>>\n\n// Derived providers\nfinal medicationsProvider = Provider<List<Medication>>\nfinal medicationsLoadingProvider = Provider<bool>\nfinal medicationsErrorProvider = Provider<String?>\nfinal medicationsByNeedRefillProvider = Provider<List<Medication>>\nfinal sortedMedicationsProvider = Provider<List<Medication>>\nfinal groupedMedicationTypeProvider = Provider<Map<String, List<Medication>>>\n</code></pre>"},{"location":"features/medication-tracker/#state-notifiers","title":"State Notifiers","text":"<p><pre><code>class MedicationNotifier extends StateNotifier<MedicationState> {\n // Notifier methods\n Future<void> loadMedications() async {...}\n Future<void> addMedication(Medication medication) async {...}\n Future<void> updateMedication(Medication medication) async {...}\n Future<void> updateMedicationQuantity(Medication medication, bool taken) async {...}\n Future<void> deleteMedication(String id) async {...}\n}\n</code></pre> <pre><code>class MedicationTakenNotifier extends StateNotifier<Set<String>> {\n // Notifier methods\n Future<void> loadTakenMedicationsForDate(DateTime date) async {...}\n Future<void> setMedicationTaken(MedicationDose dose, bool taken, {String? customKey}) async {...}\n Future<void> clearOldData(int olderThanDays) async {...}\n}\n</code></pre></p>"},{"location":"features/medication-tracker/#screens","title":"Screens","text":"<ul> <li><code>MedicationListScreen</code>: Displays all medications with grouping by type and refill alerts.</li> <li><code>MedicationDetailScreen</code>: Detailed view of medication information with adherence tracking.</li> <li><code>AddEditMedicationScreen</code>: Form for adding and editing medications with type-specific fields.</li> <li><code>InjectionSiteTrackerScreen</code>: Interface for managing and visualizing injection site rotation.</li> <li><code>InjectionSiteViewerScreen</code>: Visualization of the current injection site on a body diagram.</li> </ul>"},{"location":"features/medication-tracker/#interactions","title":"Interactions","text":"<ul> <li>Uses <code>DatabaseService</code> for persistent storage of medication data</li> <li>Uses <code>NotificationService</code> for medication reminders</li> <li>Interacts with Scheduler feature to display medications on calendar and daily views</li> <li>Uses <code>ValidationService</code> to ensure data integrity</li> </ul>"},{"location":"features/mood-tracker/","title":"Mood Tracker","text":"<p>The mood tracker feature allows users to record their daily moods and track various wellness metrics over time, helping users identify patterns and correlations in their wellbeing.</p>"},{"location":"features/mood-tracker/#models","title":"Models","text":"<ul> <li><code>MoodEntry</code>: Primary model for daily mood records with emotional and health metrics.</li> <li><code>MoodRating</code>: Enumeration of mood levels (great, good, okay, meh, bad) with display names, emojis, and descriptions.</li> <li><code>Emotion</code>: Various emotional states that can be selected (excited, relaxed, happy, etc.) with display names and emojis.</li> <li>Health Categories: Multiple enums tracking various wellness metrics: <code>SleepQuality</code>, <code>EnergyLevel</code>, <code>LibidoLevel</code>, <code>AppetiteLevel</code>, <code>FocusLevel</code>, <code>DysphoriaLevel</code>, <code>ExerciseLevel</code></li> </ul>"},{"location":"features/mood-tracker/#providers","title":"Providers","text":"<ul> <li><code>moodStateProvider</code>: Manages mood entry CRUD operations</li> <li><code>moodEntryForDateProvider</code>: Retrieves mood entries for specific dates</li> <li><code>moodColorsProvider</code>: Defines the color scheme for different mood ratings</li> <li><code>moodEntriesProvider</code>: Provides access to the full list of mood entries</li> <li><code>moodEntriesLoadingProvider</code>: Indicates when mood entries are loading</li> <li><code>moodEntriesErrorProvider</code>: Provides access to any error messages</li> </ul>"},{"location":"features/mood-tracker/#screens","title":"Screens","text":"<ul> <li><code>MoodTrackerScreen</code>: Form for recording detailed mood and wellness data</li> <li><code>MoodQuickSelector</code>: Compact widget for quickly selecting mood from the daily tracker.</li> </ul>"},{"location":"features/mood-tracker/#widgets","title":"Widgets","text":"<ul> <li><code>MoodFieldChips</code>: Displays mood and wellness data as visual indicator chips.</li> </ul>"},{"location":"features/mood-tracker/#utilities","title":"Utilities","text":"<ul> <li><code>MoodUtils</code>: Helper functions for mood-related UI elements:</li> <li>Color mapping for all mood ratings and health categories</li> <li>Emoji and display name access</li> <li>Collections of enum values for UI rendering</li> </ul>"},{"location":"features/mood-tracker/#interactions","title":"Interactions","text":"<ul> <li>Uses <code>DatabaseService</code> for persistent storage of mood data</li> <li>Uses <code>NavigationService</code> for screen transitions</li> <li>Interacts with <code>Scheduler</code> to display mood indicators on calendar</li> <li>Provides data to <code>Stats</code> module for analytics and visualizations</li> </ul>"},{"location":"features/scheduler/","title":"Scheduler","text":"<p>The scheduler module provides calendar-based visualization and management of health events, including medications, medical appointments, and mood tracking. It offers multiple time-scale views (day/month/year).</p>"},{"location":"features/scheduler/#screens","title":"Screens","text":"<ul> <li><code>DailyTrackerScreen</code>: Daily view combining medications, appointments, and mood tracking</li> <li><code>CalendarScreen</code>: Monthly calendar view with visual indicators for all health events</li> <li><code>YearScreen</code>: An annual overview showing all 365 days simultaneously with color-coded days indicating medical events or mood entries</li> </ul>"},{"location":"features/scheduler/#view-modes","title":"View Modes","text":"<ul> <li><code>Medical Mode</code>: Shows medication schedules and medical appointments</li> <li><code>Mood Mode</code>: Displays mood tracking data with emotion-based color coding</li> </ul>"},{"location":"features/scheduler/#providers","title":"Providers","text":""},{"location":"features/scheduler/#core-providers","title":"Core Providers","text":"<pre><code>// Tracks the currently selected date (used in DailyTrackerScreen)\nfinal selectedDateProvider = StateProvider<DateTime>((ref) => DateTime.now());\n\n// Controls animation direction for day changes\nfinal slideDirectionProvider = StateProvider<bool>((ref) => true);\n\n// Tracks the calendar view mode (medical or mood)\nfinal calendarViewModeProvider = StateProvider<CalendarViewMode>((ref) => CalendarViewMode.medical);\n</code></pre>"},{"location":"features/scheduler/#derived-data-providers","title":"Derived Data Providers","text":"<pre><code>// Gets bloodwork records for a specific date\nfinal bloodworkForSelectedDateProvider = Provider.family<List<Bloodwork>, DateTime>((ref, date) { ... });\n\n// Processes medication doses with indexes for uniqueness\nfinal uniqueMedicationDosesProvider = Provider.family<List<(MedicationDose, int, Medication)>, DateTime>((ref, date) { ... });\n\n// Checks if a specific medication dose is marked as taken\nfinal isUniqueDoseTakenProvider = Provider.family<bool, (MedicationDose, int)>((ref, params) { ... });\n\n// Checks if there's a mood entry for a specific date\nfinal moodEntryExistsProvider = Provider.family<bool, DateTime>((ref, date) { ... });\n</code></pre>"},{"location":"features/scheduler/#integration","title":"Integration","text":"<p>The scheduler module integrates data from: - <code>MedicationTracker</code> for medication schedules - <code>BloodworkTracker</code> for appointments - <code>MoodTracker</code> for mood entries</p>"},{"location":"features/settings/","title":"Settings","text":"<p>The settings feature allows users to customize application preferences.</p>"},{"location":"features/settings/#screens","title":"Screens","text":"<ul> <li><code>SettingsScreen</code>: Interface for changing application settings:</li> <li>Theme mode toggle (dark/light)</li> <li>Version information</li> </ul>"},{"location":"features/settings/#providers","title":"Providers","text":"<ul> <li><code>themeProvider</code>: Controls dark/light mode settings</li> </ul>"},{"location":"features/settings/#interactions","title":"Interactions","text":"<ul> <li>Uses <code>ThemeUtils</code> for theme management</li> </ul>"},{"location":"features/statistics/","title":"Statistics","text":"<p>The statistics feature provides statistical analysis and visualization of user health data. It processes information from multiple sources (mood entries, medications, bloodwork, etc.) and uses the <code>HealthAnalyticsService</code> to generate insights, identify patterns, detect correlations, and predict trends.</p>"},{"location":"features/statistics/#architecture","title":"Architecture","text":"<pre><code>lib/src/features/stats/\n\u251c\u2500\u2500 charts/ # Chart widgets for data visualization\n\u251c\u2500\u2500 models/ # Data models for statistical analysis\n\u251c\u2500\u2500 providers/ # Riverpod providers for state management\n\u251c\u2500\u2500 screens/ # UI screens for displaying analytics\n\u251c\u2500\u2500 tabs/ # Tab components for the main stats screen\n\u251c\u2500\u2500 utils/ # Utility functions for analysis and formatting\n\u2514\u2500\u2500 widgets/ # Reusable UI components\n</code></pre>"},{"location":"features/statistics/#components","title":"Components","text":""},{"location":"features/statistics/#models","title":"Models","text":"<p>The analytics feature uses a large set of models to represent different types of statistical insights:</p> <ul> <li><code>ComprehensiveAnalysis</code>: Container for all types of analytics data</li> <li><code>StatisticalInsight</code>: Basic statistical findings</li> <li><code>FactorRelationship</code>: Relationships between different health factors</li> <li><code>HealthPattern</code>: Detected patterns in health data</li> <li><code>HealthPrediction</code>: Forecasts of future health metrics</li> <li><code>HealthAnomaly</code>: Unusual data points</li> <li><code>FactorImpactRanking</code>: Impacts of factors on a target variable</li> <li><code>WeekdayAnalysis</code>: Metrics across days of the week</li> <li><code>HealthStreak</code>: Consistent periods for health metrics</li> <li><code>HormoneAnalysis</code>: Hormone level analysis</li> <li><code>MedicationImpact</code>: Effects of medications on health metrics</li> </ul>"},{"location":"features/statistics/#providers","title":"Providers","text":"<pre><code>// Basic statistical insights\nfinal statisticsInsightsProvider = FutureProvider.autoDispose\n .family<List<StatisticalInsight>, String>((ref, timeframe) async { ... });\n\n// Comprehensive analysis (More detailed/resource extensive)\nfinal comprehensiveAnalysisProvider = FutureProvider.autoDispose\n .family<ComprehensiveAnalysis, String>((ref, timeframe) async { ... });\n\n// Factor-specific analysis\nfinal factorAnalysisProvider = FutureProvider.autoDispose\n .family<Map<String, dynamic>, FactorAnalysisParams>((ref, params) async { ... });\n</code></pre>"},{"location":"features/statistics/#services","title":"Services","text":"<p>The analytics functionality relies on the <code>HealthAnalyticsService</code></p>"},{"location":"features/statistics/#charts","title":"Charts","text":"<ul> <li><code>CorrelationsChart</code>: Displays relationships between factors</li> <li><code>ImpactChart</code>: Shows impact ranking of factors</li> <li><code>WeekdayChart</code>: Visualizes metrics by day of week</li> <li>And other specialized charts</li> </ul>"},{"location":"features/statistics/#ui-organization","title":"UI Organization","text":"<p>The main Stats screen is organized into tabs: - <code>Overview</code>: Summary of health insights and key metrics - <code>Correlations</code>: Relationships between different health factors - <code>Patterns</code>: Detected trends and cyclical patterns - <code>Factors</code>: Analysis of what factors affect health metrics - <code>Predictions</code>: Forecasts of future health values</p>"},{"location":"features/statistics/#factor-analysis","title":"Factor Analysis","text":"<p>The feature supports detailed analysis of specific factors with the <code>FactorAnalysisScreen</code>, which provides:</p> <ul> <li>Basic statistics (mean, median, min, max)</li> <li>Related factors and correlations</li> <li>Detected patterns</li> <li>Historical timeline</li> <li>Health impacts</li> </ul>"},{"location":"features/statistics/#data-sources","title":"Data Sources","text":"<p>The Health Analytics feature consumes data from multiple sources: - Mood Tracker: Emotional state, energy levels, sleep quality, etc. - Medication Tracker: Medication adherence and effects - Bloodwork Tracker: Lab results and hormone levels</p>"},{"location":"features/statistics/#usage-examples","title":"Usage Examples","text":"<p>To access the comprehensive analysis: <pre><code>// Watch for analysis data with a specific timeframe\nfinal analysisAsync = ref.watch(comprehensiveAnalysisProvider('Last Month'));\n\n// Use the data when available\nanalysisAsync.when(\n data: (analysis) {\n // Access insights, relationships, patterns, etc.\n final relationships = analysis.relationships;\n final patterns = analysis.patterns;\n final predictions = analysis.predictions;\n\n // Build UI with the data\n return ListView(\n children: [\n // Display insights\n ],\n );\n },\n loading: () => const LoadingView(),\n error: (error, stack) => ErrorView(error: error),\n);\n</code></pre></p> <p>To analyze a specific factor: <pre><code>// Watch for factor-specific analysis\nfinal factorAsync = ref.watch(\n factorAnalysisProvider(\n FactorAnalysisParams(\n factorName: 'Mood',\n timeframe: 'All Time',\n ),\n ),\n);\n\n// Use the data when available\nfactorAsync.when(\n data: (factorAnalysis) {\n // Access factor-specific data\n final relationships = factorAnalysis['relationships'];\n final patterns = factorAnalysis['patterns'];\n\n // Build UI with the data\n },\n loading: () => const LoadingView(),\n error: (error, stack) => ErrorView(error: error),\n);\n</code></pre></p>"},{"location":"features/statistics/#implementation-details","title":"Implementation Details","text":""},{"location":"features/statistics/#correlation-analysis","title":"Correlation Analysis","text":"<p>The service calculates Pearson correlation coefficients between different health factors to identify relationships. For example, it can detect correlations between:</p> <ul> <li>Sleep quality and mood</li> <li>Energy levels and exercise</li> <li>Hormone levels and emotions</li> </ul>"},{"location":"features/statistics/#pattern-detection","title":"Pattern Detection","text":"<p>Patterns are identified through statistical analysis of time series data, including:</p> <ul> <li>Trends: Directional changes over time</li> <li>Cyclical Patterns: Repeating patterns (e.g., weekly sleep cycles)</li> <li>Clusters: Groupings of related factors</li> <li>Thresholds: Significant crossover points</li> </ul>"},{"location":"features/statistics/#anomaly-detection","title":"Anomaly Detection","text":"<p>The service identifies unusual data points using z-score analysis, which detects values that deviate significantly from normal patterns.</p>"},{"location":"features/statistics/#prediction-algorithm","title":"Prediction Algorithm","text":"<p>Predictions are generated using a combination of:</p> <ul> <li>Linear trend extrapolation</li> <li>Moving averages</li> <li>Pattern-based forecasting</li> </ul>"},{"location":"getting-started/","title":"Getting Started","text":""},{"location":"getting-started/#prerequisites","title":"Prerequisites","text":"<ul> <li>Flutter (2.10.0 or higher)</li> <li>Dart (2.16.0 or higher)</li> <li>Android Studio / VS Code</li> <li>iOS simulator / Android emulator</li> </ul>"},{"location":"getting-started/#installation","title":"Installation","text":"<pre><code># Clone the repository\ngit clone https://github.com/nokken-io/nokkenapp.git\n\n# Navigate to project directory\ncd nokken\n\n# Install dependencies\nflutter pub get\n\n# Run the app\nflutter run\n</code></pre>"}]} |