397 lines
18 KiB
Plaintext
397 lines
18 KiB
Plaintext
---
|
|
description:
|
|
globs:
|
|
alwaysApply: true
|
|
---
|
|
Project Structure
|
|
🏥 RADIOLOGIST APP STRUCTURE
|
|
NeoScan_Radiologist/
|
|
│
|
|
├── app/
|
|
│ ├── modules/ # 🌐 Feature-wise modular architecture
|
|
│ │ ├── Auth/ # 🔐 Authentication Module
|
|
│ │ │ ├── components/
|
|
│ │ │ │ ├── BiometricLogin.tsx
|
|
│ │ │ │ ├── PinInput.tsx
|
|
│ │ │ │ ├── EmergencyAccess.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── screens/
|
|
│ │ │ │ ├── LoginScreen.tsx
|
|
│ │ │ │ ├── SetupBiometricScreen.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── hooks/
|
|
│ │ │ │ ├── useAuth.ts
|
|
│ │ │ │ ├── useBiometric.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── redux/
|
|
│ │ │ │ ├── authSlice.ts
|
|
│ │ │ │ ├── authActions.ts
|
|
│ │ │ │ ├── authSelectors.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── services/
|
|
│ │ │ │ ├── authAPI.ts
|
|
│ │ │ │ ├── biometricService.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── __tests__/
|
|
│ │ │ │ ├── AuthService.test.ts
|
|
│ │ │ │ ├── LoginScreen.test.tsx
|
|
│ │ │ │ └── authSlice.test.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── Dashboard/ # 📊 Dashboard Module
|
|
│ │ │ ├── components/
|
|
│ │ │ │ ├── CaseQueue.tsx
|
|
│ │ │ │ ├── CaseCard.tsx
|
|
│ │ │ │ ├── PriorityIndicator.tsx
|
|
│ │ │ │ ├── StatsPanel.tsx
|
|
│ │ │ │ ├── FilterBar.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── screens/
|
|
│ │ │ │ ├── DashboardScreen.tsx
|
|
│ │ │ │ ├── CaseListScreen.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── hooks/
|
|
│ │ │ │ ├── useCaseQueue.ts
|
|
│ │ │ │ ├── useRealTimeUpdates.ts
|
|
│ │ │ │ ├── useFilterCases.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── redux/
|
|
│ │ │ │ ├── dashboardSlice.ts
|
|
│ │ │ │ ├── caseQueueSlice.ts
|
|
│ │ │ │ ├── dashboardActions.ts
|
|
│ │ │ │ ├── dashboardSelectors.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── services/
|
|
│ │ │ │ ├── caseAPI.ts
|
|
│ │ │ │ ├── websocketService.ts
|
|
│ │ │ │ ├── notificationService.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── __tests__/
|
|
│ │ │ │ ├── CaseQueue.test.tsx
|
|
│ │ │ │ ├── dashboardSlice.test.ts
|
|
│ │ │ │ └── caseAPI.test.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── CaseReview/ # 🔍 Case Review Module
|
|
│ │ │ ├── components/
|
|
│ │ │ │ ├── DICOMViewer.tsx
|
|
│ │ │ │ ├── AIOverlay.tsx
|
|
│ │ │ │ ├── MeasurementTools.tsx
|
|
│ │ │ │ ├── AnnotationTools.tsx
|
|
│ │ │ │ ├── CaseMetadata.tsx
|
|
│ │ │ │ ├── PriorStudyComparison.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── screens/
|
|
│ │ │ │ ├── CaseDetailsScreen.tsx
|
|
│ │ │ │ ├── DICOMViewerScreen.tsx
|
|
│ │ │ │ ├── ComparisonScreen.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── hooks/
|
|
│ │ │ │ ├── useDICOMViewer.ts
|
|
│ │ │ │ ├── useAIOverlay.ts
|
|
│ │ │ │ ├── useMeasurements.ts
|
|
│ │ │ │ ├── useAnnotations.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── redux/
|
|
│ │ │ │ ├── caseReviewSlice.ts
|
|
│ │ │ │ ├── dicomSlice.ts
|
|
│ │ │ │ ├── aiAnalysisSlice.ts
|
|
│ │ │ │ ├── caseReviewActions.ts
|
|
│ │ │ │ ├── caseReviewSelectors.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── services/
|
|
│ │ │ │ ├── dicomAPI.ts
|
|
│ │ │ │ ├── aiAnalysisAPI.ts
|
|
│ │ │ │ ├── dicomParser.ts
|
|
│ │ │ │ ├── imageProcessor.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── __tests__/
|
|
│ │ │ │ ├── DICOMViewer.test.tsx
|
|
│ │ │ │ ├── AIOverlay.test.tsx
|
|
│ │ │ │ ├── dicomParser.test.ts
|
|
│ │ │ │ └── caseReviewSlice.test.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── Reporting/ # 📝 Reporting Module
|
|
│ │ │ ├── components/
|
|
│ │ │ │ ├── VoiceRecorder.tsx
|
|
│ │ │ │ ├── ReportEditor.tsx
|
|
│ │ │ │ ├── ReportTemplate.tsx
|
|
│ │ │ │ ├── QuickReportButtons.tsx
|
|
│ │ │ │ ├── ReportPreview.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── screens/
|
|
│ │ │ │ ├── ReportingScreen.tsx
|
|
│ │ │ │ ├── VoiceReportScreen.tsx
|
|
│ │ │ │ ├── ReportHistoryScreen.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── hooks/
|
|
│ │ │ │ ├── useVoiceRecording.ts
|
|
│ │ │ │ ├── useReportGeneration.ts
|
|
│ │ │ │ ├── useSpeechToText.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── redux/
|
|
│ │ │ │ ├── reportingSlice.ts
|
|
│ │ │ │ ├── voiceRecordingSlice.ts
|
|
│ │ │ │ ├── reportingActions.ts
|
|
│ │ │ │ ├── reportingSelectors.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── services/
|
|
│ │ │ │ ├── reportAPI.ts
|
|
│ │ │ │ ├── voiceToTextAPI.ts
|
|
│ │ │ │ ├── reportTemplateService.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── __tests__/
|
|
│ │ │ │ ├── VoiceRecorder.test.tsx
|
|
│ │ │ │ ├── reportingSlice.test.ts
|
|
│ │ │ │ └── voiceToTextAPI.test.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── Notifications/ # 🔔 Notifications Module
|
|
│ │ │ ├── components/
|
|
│ │ │ │ ├── NotificationPanel.tsx
|
|
│ │ │ │ ├── AlertBanner.tsx
|
|
│ │ │ │ ├── CriticalAlert.tsx
|
|
│ │ │ │ ├── NotificationSettings.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── screens/
|
|
│ │ │ │ ├── NotificationsScreen.tsx
|
|
│ │ │ │ ├── AlertDetailsScreen.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── hooks/
|
|
│ │ │ │ ├── useNotifications.ts
|
|
│ │ │ │ ├── usePushNotifications.ts
|
|
│ │ │ │ ├── useAlertHandling.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── redux/
|
|
│ │ │ │ ├── notificationsSlice.ts
|
|
│ │ │ │ ├── alertsSlice.ts
|
|
│ │ │ │ ├── notificationActions.ts
|
|
│ │ │ │ ├── notificationSelectors.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── services/
|
|
│ │ │ │ ├── pushNotificationService.ts
|
|
│ │ │ │ ├── alertService.ts
|
|
│ │ │ │ ├── notificationAPI.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── __tests__/
|
|
│ │ │ │ ├── NotificationPanel.test.tsx
|
|
│ │ │ │ ├── alertService.test.ts
|
|
│ │ │ │ └── notificationsSlice.test.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── Analytics/ # 📈 Analytics Module
|
|
│ │ │ ├── components/
|
|
│ │ │ │ ├── PerformanceMetrics.tsx
|
|
│ │ │ │ ├── ResponseTimeChart.tsx
|
|
│ │ │ │ ├── ConcordanceStats.tsx
|
|
│ │ │ │ ├── WorkloadAnalysis.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── screens/
|
|
│ │ │ │ ├── AnalyticsScreen.tsx
|
|
│ │ │ │ ├── PerformanceScreen.tsx
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── hooks/
|
|
│ │ │ │ ├── useAnalytics.ts
|
|
│ │ │ │ ├── usePerformanceMetrics.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── redux/
|
|
│ │ │ │ ├── analyticsSlice.ts
|
|
│ │ │ │ ├── analyticsActions.ts
|
|
│ │ │ │ ├── analyticsSelectors.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── services/
|
|
│ │ │ │ ├── analyticsAPI.ts
|
|
│ │ │ │ ├── metricsCollector.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── __tests__/
|
|
│ │ │ │ ├── PerformanceMetrics.test.tsx
|
|
│ │ │ │ ├── analyticsSlice.test.ts
|
|
│ │ │ │ └── metricsCollector.test.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ └── Profile/ # 👤 User Profile Module
|
|
│ │ ├── components/
|
|
│ │ │ ├── ProfileHeader.tsx
|
|
│ │ │ ├── SettingsPanel.tsx
|
|
│ │ │ ├── PreferencesForm.tsx
|
|
│ │ │ ├── SecuritySettings.tsx
|
|
│ │ │ └── index.ts
|
|
│ │ ├── screens/
|
|
│ │ │ ├── ProfileScreen.tsx
|
|
│ │ │ ├── SettingsScreen.tsx
|
|
│ │ │ ├── PreferencesScreen.tsx
|
|
│ │ │ └── index.ts
|
|
│ │ ├── hooks/
|
|
│ │ │ ├── useProfile.ts
|
|
│ │ │ ├── useSettings.ts
|
|
│ │ │ └── index.ts
|
|
│ │ ├── redux/
|
|
│ │ │ ├── profileSlice.ts
|
|
│ │ │ ├── settingsSlice.ts
|
|
│ │ │ ├── profileActions.ts
|
|
│ │ │ ├── profileSelectors.ts
|
|
│ │ │ └── index.ts
|
|
│ │ ├── services/
|
|
│ │ │ ├── profileAPI.ts
|
|
│ │ │ ├── settingsAPI.ts
|
|
│ │ │ └── index.ts
|
|
│ │ ├── __tests__/
|
|
│ │ │ ├── ProfileHeader.test.tsx
|
|
│ │ │ ├── profileSlice.test.ts
|
|
│ │ │ └── profileAPI.test.ts
|
|
│ │ └── index.ts
|
|
│ │
|
|
│ ├── navigation/ # 🧭 Navigation Setup
|
|
│ │ ├── AppNavigator.tsx
|
|
│ │ ├── AuthNavigator.tsx
|
|
│ │ ├── MainNavigator.tsx
|
|
│ │ ├── TabNavigator.tsx
|
|
│ │ ├── ModalNavigator.tsx
|
|
│ │ ├── navigationTypes.ts
|
|
│ │ └── index.ts
|
|
│ │
|
|
│ ├── redux/ # 🗃️ Redux Store Setup
|
|
│ │ ├── store.ts
|
|
│ │ ├── rootReducer.ts
|
|
│ │ ├── middleware.ts
|
|
│ │ ├── persistConfig.ts
|
|
│ │ └── index.ts
|
|
│ │
|
|
│ ├── constants/ # 📋 Global Constants
|
|
│ │ ├── apiEndpoints.ts
|
|
│ │ ├── appConstants.ts
|
|
│ │ ├── errorMessages.ts
|
|
│ │ ├── notificationTypes.ts
|
|
│ │ ├── priorityLevels.ts
|
|
│ │ └── index.ts
|
|
│ │
|
|
│ ├── App.tsx # 🎯 Root Component
|
|
│ └── index.ts # 🚀 App Bootstrap
|
|
│
|
|
├── shared/ # ✅ Shared Components & Utilities
|
|
│ ├── src/
|
|
│ │ ├── components/ # 🎨 Global UI Components
|
|
│ │ │ ├── Button/
|
|
│ │ │ │ ├── Button.tsx
|
|
│ │ │ │ ├── Button.styles.ts
|
|
│ │ │ │ ├── Button.types.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── Input/
|
|
│ │ │ │ ├── TextInput.tsx
|
|
│ │ │ │ ├── SearchInput.tsx
|
|
│ │ │ │ ├── Input.styles.ts
|
|
│ │ │ │ ├── Input.types.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── Modal/
|
|
│ │ │ │ ├── Modal.tsx
|
|
│ │ │ │ ├── ConfirmModal.tsx
|
|
│ │ │ │ ├── AlertModal.tsx
|
|
│ │ │ │ ├── Modal.styles.ts
|
|
│ │ │ │ ├── Modal.types.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── Card/
|
|
│ │ │ │ ├── Card.tsx
|
|
│ │ │ │ ├── InfoCard.tsx
|
|
│ │ │ │ ├── Card.styles.ts
|
|
│ │ │ │ ├── Card.types.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── Loading/
|
|
│ │ │ │ ├── Spinner.tsx
|
|
│ │ │ │ ├── LoadingOverlay.tsx
|
|
│ │ │ │ ├── Loading.styles.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── Icons/
|
|
│ │ │ │ ├── CustomIcon.tsx
|
|
│ │ │ │ ├── IconButton.tsx
|
|
│ │ │ │ ├── Icons.types.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── theme/ # 🎨 Design System
|
|
│ │ │ ├── colors.ts
|
|
│ │ │ ├── spacing.ts
|
|
│ │ │ ├── typography.ts
|
|
│ │ │ ├── shadows.ts
|
|
│ │ │ ├── borderRadius.ts
|
|
│ │ │ ├── animations.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── assets/ # 📁 Static Assets
|
|
│ │ │ ├── icons/
|
|
│ │ │ │ ├── critical-alert.svg
|
|
│ │ │ │ ├── urgent-alert.svg
|
|
│ │ │ │ ├── routine-alert.svg
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── images/
|
|
│ │ │ │ ├── logo.png
|
|
│ │ │ │ ├── placeholder.png
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── fonts/
|
|
│ │ │ │ ├── Roboto-Regular.ttf
|
|
│ │ │ │ ├── Roboto-Bold.ttf
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ └── sounds/
|
|
│ │ │ ├── critical-alert.wav
|
|
│ │ │ ├── urgent-alert.wav
|
|
│ │ │ └── routine-alert.wav
|
|
│ │ │
|
|
│ │ ├── utils/ # 🛠️ Utility Functions
|
|
│ │ │ ├── dateTime/
|
|
│ │ │ │ ├── formatDate.ts
|
|
│ │ │ │ ├── timeAgo.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── validation/
|
|
│ │ │ │ ├── validators.ts
|
|
│ │ │ │ ├── schemas.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── helpers/
|
|
│ │ │ │ ├── debounce.ts
|
|
│ │ │ │ ├── throttle.ts
|
|
│ │ │ │ ├── formatters.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ ├── constants/
|
|
│ │ │ │ ├── regex.ts
|
|
│ │ │ │ ├── formats.ts
|
|
│ │ │ │ └── index.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── hooks/ # 🎣 Shared Custom Hooks
|
|
│ │ │ ├── useTheme.ts
|
|
│ │ │ ├── useDebounce.ts
|
|
│ │ │ ├── useKeyboard.ts
|
|
│ │ │ ├── useNetworkStatus.ts
|
|
│ │ │ ├── useOrientation.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ ├── types/ # 📝 TypeScript Types
|
|
│ │ │ ├── common.ts
|
|
│ │ │ ├── api.ts
|
|
│ │ │ ├── navigation.ts
|
|
│ │ │ ├── theme.ts
|
|
│ │ │ └── index.ts
|
|
│ │ │
|
|
│ │ └── index.ts # 📦 Barrel Export
|
|
│ │
|
|
│ ├── package.json # 📦 Shared Package Config
|
|
│ └── tsconfig.json # ⚙️ TypeScript Config
|
|
│
|
|
├── __tests__/ # 🧪 Global Tests
|
|
│ ├── App.test.tsx
|
|
│ ├── Navigation.test.tsx
|
|
│ ├── Redux.test.tsx
|
|
│ └── Integration.test.tsx
|
|
│
|
|
├── assets/ # 🖼️ App-wide Assets
|
|
│ ├── images/
|
|
│ ├── videos/
|
|
│ └── audio/
|
|
│
|
|
├── android/ # 🤖 Android Native
|
|
├── ios/ # 🍎 iOS Native
|
|
├── index.js # 🎯 RN Entry Point
|
|
├── package.json # 📦 Root Dependencies
|
|
├── tsconfig.json # ⚙️ Base TypeScript Config
|
|
├── metro.config.js # 📦 Metro Bundler Config
|
|
├── babel.config.js # 🔄 Babel Config
|
|
└── .eslintrc.js # 📏 ESLint Config |