clqms-fe1/CLQMS-CHECKLIST.md
2026-02-08 17:39:53 +07:00

735 lines
22 KiB
Markdown

# CLQMS Frontend Development Checklist
> **Framework:** SvelteKit
> **Key Change:** Value Sets moved to Phase 3 (from Phase 10) - needed for dropdowns in all forms
## Phase 1: Project Setup
- [x] Initialize project with SvelteKit
- [x] Install and configure TypeScript
- [ ] Set up ESLint and Prettier
- [x] Create SvelteKit folder structure (`src/routes/`, `src/lib/components/`, `src/lib/stores/`, `src/lib/server/`)
- [x] Configure SvelteKit adapter (auto/vercel/node for deployment target)
- [x] Set up API client using SvelteKit's fetch or axios wrapper
- [x] Configure handle hook for auth middleware (`src/hooks.server.ts`)
- [x] Set up Svelte stores for state management
- [x] Install UI component library or design system (Skeleton, Flowbite, or custom)
- [x] Create base layout components (`+layout.svelte` with Header, Sidebar, Footer)
- [x] Configure environment variables (`.env`, `.env.local`)
- [x] Set up build scripts (`vite build`, `vite preview`)
- [x] Configure form validation library (Superforms with Zod)
- [ ] Configure CI/CD pipeline (GitHub Actions/GitLab CI)
- [x] Create README with setup instructions
**Acceptance Criteria:**
- [x] Project builds without errors (`npm run build`)
- [ ] Linting and formatting configured
- [ ] API client successfully connects to backend
- [x] SvelteKit file-based routing works
- [x] Handle hook properly intercepts requests
---
## Phase 2: Authentication Module
- [x] Create login page component
- [x] Implement login form with username/password fields
- [x] Add form validation (required fields)
- [ ] Implement login API call to `/api/auth/login`
- [ ] Handle JWT token from HTTP-only cookie
- [ ] Create logout functionality (call `/api/auth/logout`)
- [ ] Implement auth state management (store user data, auth status)
- [ ] Create protected route using SvelteKit `+page.server.ts` load functions or `+layout.server.ts`
- [ ] Implement auth check using SvelteKit hooks (`src/hooks.server.ts`)
- [ ] Handle 401 errors globally (redirect to login)
- [ ] Create password change form (current password, new password)
- [ ] Implement password change API call to `/api/auth/change_pass`
- [ ] Add loading states for auth operations
- [ ] Add error messages for failed login attempts
- [ ] Create registration page (optional, if needed)
**Acceptance Criteria:**
- User can login successfully
- JWT token is stored/managed correctly
- Protected routes redirect unauthenticated users
- Logout clears auth state and token
- Password change works with proper validation
---
## Phase 4: Organization Module
### Accounts
- [ ] Create accounts list page
- [ ] Implement account creation form
- [ ] Implement account edit form
- [ ] Implement account delete with confirmation
- [ ] Add search/filter for accounts
### Sites
- [ ] Create sites list page (filtered by selected account)
- [ ] Implement site creation form (with AccountID)
- [ ] Implement site edit form
- [ ] Implement site delete with confirmation
- [ ] Add site search/filter
### Disciplines
- [ ] Create disciplines list page
- [ ] Implement discipline creation form
- [ ] Implement discipline edit form
- [ ] Implement discipline delete with confirmation
- [ ] Add discipline search/filter
### Departments
- [ ] Create departments list page (filtered by site)
- [ ] Implement department creation form (with SiteID)
- [ ] Implement department edit form
- [ ] Implement department delete with confirmation
- [ ] Add department search/filter
### Workstations
- [ ] Create workstations list page (filtered by department)
- [ ] Implement workstation creation form (with SiteID, DepartmentID)
- [ ] Implement workstation edit form
- [ ] Implement workstation delete with confirmation
- [ ] Add workstation search/filter
### Hierarchy Navigation
- [ ] Create organization tree view component
- [ ] Implement breadcrumb navigation
- [ ] Add filters to cascade (Account → Site → Department → Workstation)
**Acceptance Criteria:**
- All CRUD operations work for each entity
- Filtering and cascading selection works
- Delete operations have confirmation dialogs
- List pages support pagination
---
## Phase 5: Master Data Module
### Locations
- [ ] Create locations list page
- [ ] Implement location creation/edit form
- [ ] Implement location delete with confirmation
- [ ] Add search/filter by location code, name, type
### Contacts
- [ ] Create contacts list page
- [ ] Implement contact creation/edit form
- [ ] Implement contact delete with confirmation
- [ ] Add search/filter by name, type, specialty
### Occupations
- [ ] Create occupations list page
- [ ] Implement occupation creation/edit form
- [ ] Implement occupation delete with confirmation
### Medical Specialties
- [ ] Create medical specialties list page
- [ ] Implement specialty creation/edit form
- [ ] Implement specialty delete with confirmation
### Counters
- [ ] Create counters list page
- [ ] Implement counter creation/edit form
- [ ] Implement counter delete with confirmation
- [ ] Add ability to reset counter value
### Geographical Areas
- [ ] Create provinces list page (API: `/api/areageo/provinces`)
- [ ] Create cities list page (API: `/api/areageo/cities` with province_id filter)
- [ ] Create province → city dropdown components
- [ ] Add caching for geographical data
**Acceptance Criteria:**
- All master data CRUD operations work
- Province/city dropdowns cascade correctly
- Search and filtering works across all entities
- Geographical data is cached appropriately
---
## Phase 6: Patient Management Module
### Patient List & Search
- [ ] Create patients list page
- [ ] Implement search by PatientID or name (API parameter)
- [ ] Add pagination controls
- [ ] Implement patient detail view (click to view)
- [ ] Add quick actions (view, edit, delete)
### Patient Registration
- [ ] Create patient registration form with all fields
- [ ] Implement field validation:
- [ ] PatientID: alphanumeric, max 30 chars, pattern validation
- [ ] Sex: required, dropdown (1=Female, 2=Male)
- [ ] NameFirst: required, 1-60 chars, letters/spaces/periods
- [ ] Birthdate: required, date-time picker
- [ ] Email: format validation
- [ ] Phone/Mobile: regex validation (8-15 digits, optional +)
- [ ] ZIP: numeric only, max 10 chars
- [ ] Add optional fields (NameMiddle, NameMaiden, NameLast, etc.)
- [ ] Add identifier section (IdentifierType, Identifier)
- [ ] Implement patient check existence (API: `/api/patient/check`)
- [ ] Add duplicate patient warning if exists
### Patient Edit
- [ ] Create patient edit form (same as registration)
- [ ] Pre-fill with existing patient data
- [ ] Implement PATCH API call
- [ ] Add save confirmation
### Patient Delete
- [ ] Implement delete confirmation dialog
- [ ] Call DELETE API with PatientID
- [ ] Show success/error feedback
### Patient Visits
- [ ] Create visits list page
- [ ] Filter visits by PatientID
- [ ] Implement visit creation form
- [ ] Implement visit edit form
- [ ] Implement visit delete with confirmation
- [ ] Add visit detail view
### ADT Events
- [ ] Create ADT event form
- [ ] Implement ADT event types:
- [ ] A01: Admit
- [ ] A02: Transfer
- [ ] A03: Discharge
- [ ] A04: Register
- [ ] A08: Update
- [ ] Add validation for ADT events
- [ ] Call `/api/patvisitadt` endpoint
**Acceptance Criteria:**
- Patient CRUD operations work with proper validation
- Search finds patients by ID or name
- Duplicate patient check prevents duplicates
- Visit management works correctly
- ADT events are handled properly
---
## Phase 7: Test Catalog Module
### Test Definitions
- [ ] Create test definitions list page
- [ ] Add filter by TestType (TEST, PARAM, CALC, GROUP, TITLE)
- [ ] Add filter by DisciplineID
- [ ] Add filter by DepartmentID
- [ ] Add pagination
- [ ] Implement test detail view
- [ ] Display test metadata (code, name, unit, formula, specimen type)
### Test Browser
- [ ] Create test browser/search component
- [ ] Add search by TestCode or TestName
- [ ] Add filter by SpecimenType
- [ ] Add multi-select functionality (for ordering)
- [ ] Display test details on hover/click
### Panels & Groups
- [ ] Identify and display test groups (TestType = GROUP)
- [ ] Expand/collapse group functionality
- [ ] Show tests within groups
- [ ] Add section headers (TestType = TITLE)
### Test Mapping
- [ ] Create test mapping view (if needed for admin)
- [ ] Display HostCode ↔ ClientCode mappings
- [ ] Filter by HostType or ClientType
**Acceptance Criteria:**
- Test catalog browsable with filters
- Multi-select works for test ordering
- Groups and panels display correctly
- Search returns relevant results
---
## Phase 8: Specimen Module
### Specimen Management
- [ ] Create specimens list page
- [ ] Add filter by SpecimenStatus
- [ ] Add filter by PatientID
- [ ] Add filter by SpecimenType
- [ ] Implement specimen creation form
- [ ] Implement specimen edit form
- [ ] Implement specimen status update
- [ ] Add specimen detail view
### Container Definitions
- [ ] Create container definitions list page
- [ ] Implement container creation form (code, name, category, size, cap color)
- [ ] Implement container edit form
- [ ] Implement container delete with confirmation
- [ ] Display container metadata in specimen view
### Specimen Preparations
- [ ] Create preparations list page
- [ ] Implement preparation creation form
- [ ] Implement preparation edit form
- [ ] Implement preparation delete
### Specimen Statuses
- [ ] Create specimen statuses list page
- [ ] Implement status creation form
- [ ] Implement status edit form
- [ ] Display status activity labels
### Collection Methods
- [ ] Create collection methods list page
- [ ] Implement method creation form (code, name, method, additive, role)
- [ ] Implement method edit form
- [ ] Display method metadata
### Specimen Tracking
- [ ] Create specimen timeline/status view
- [ ] Visual status indicators (color-coded)
- [ ] History log display (if available)
- [ ] Barcode display (SpecimenID)
**Acceptance Criteria:**
- Specimen CRUD operations work
- Containers, preparations, statuses, methods manageable
- Specimen status tracking is visible
- Filters work correctly
---
## Phase 9: Orders Module
### Orders List
- [ ] Create orders list page
- [ ] Add filter by OrderStatus (pending, in-progress, completed, cancelled)
- [ ] Add filter by PatientID
- [ ] Add filter by date range
- [ ] Add pagination
- [ ] Display order priority (color-coded: stat=red, urgent=orange, routine=gray)
- [ ] Display order status badges
- [ ] Add quick actions (view, edit, delete)
### Order Creation
- [ ] Create order creation form
- [ ] Patient selection (search by PatientID)
- [ ] Visit selection (optional, dropdown)
- [ ] Priority selection (routine, stat, urgent)
- [ ] Site selection (dropdown)
- [ ] Requesting physician (text input)
- [ ] Test selection (multi-select from test catalog)
- [ ] Specimen type selection per test (if needed)
- [ ] Validate required fields (PatientID, Tests)
- [ ] Call POST `/api/ordertest`
### Order Detail View
- [ ] Display order information (OrderID, PatientID, VisitID, Date, Status, Priority)
- [ ] Display ordered tests with specimen types
- [ ] Display current status
- [ ] Add edit button
- [ ] Add delete button
- [ ] Add status change action
### Order Status Update
- [ ] Implement status change dropdown
- [ ] Call POST `/api/ordertest/status` with OrderID and OrderStatus
- [ ] Update local state on success
- [ ] Add confirmation for status changes
### Order Cancellation
- [ ] Add cancel button
- [ ] Show confirmation dialog
- [ ] Update status to 'cancelled'
- [ ] Show success/error feedback
### Order Deletion
- [ ] Implement delete confirmation
- [ ] Call DELETE `/api/ordertest`
- [ ] Show success/error feedback
**Acceptance Criteria:**
- Order creation works with all required fields
- Order list filters work
- Priority and status display correctly
- Status updates work
- Cancellation and deletion work with confirmation
---
## Phase 10: Results Module
### Results List
- [ ] Create results list page
- [ ] Add filter by PatientID
- [ ] Add filter by date range
- [ ] Add pagination
- [ ] Display patient info with results
- [ ] Add click to view details
### Results Detail View
- [ ] Display patient information
- [ ] Display order information
- [ ] Display test results in table format
- [ ] Show result values with units
- [ ] Display flags (H=High, L=Low, N=Normal, A=Abnormal) with color coding
- [ ] Highlight abnormal/critical results
- [ ] Add result reference ranges (if available)
### Results Entry (Manual)
- [ ] Create results entry form
- [ ] Select order (from pending orders)
- [ ] Display tests for order
- [ ] Input result values for each test
- [ ] Validate result values (numeric for quantitative tests)
- [ ] Auto-calculate flags (H/L/N/A) if ranges available
- [ ] Add units display
- [ ] Add remarks/comment field
- [ ] Save results to API
### Results Approval Workflow
- [ ] Add "Review" status for results
- [ ] Add "Approved" status
- [ ] Implement approve/reject actions (if required)
- [ ] Show reviewer info
- [ ] Lock approved results (if needed)
### Critical Results Alerting
- [ ] Identify critical results (flagged as critical)
- [ ] Show prominent alerts/warnings
- [ ] Add "acknowledge" action for critical results
- [ ] Log critical result acknowledgments
### Results Export/Print
- [ ] Add print results button
- [ ] Generate printable report format
- [ ] Add export to PDF
- [ ] Add export to CSV (if needed)
**Acceptance Criteria:**
- Results display correctly with flags
- Abnormal results highlighted
- Manual entry works with validation
- Approval workflow works (if implemented)
- Critical results are prominent
- Print/export functions work
---
## Phase 3: Value Sets Module
### Value Set Definitions
- [ ] Create value sets list page
- [ ] Display VSetCode, VSetName, Description, Category
- [ ] Add search/filter by code or name
- [ ] Add refresh button (call `/api/valueset/refresh`)
- [ ] Show last refresh time
### Value Set Items
- [ ] Create value set items page
- [ ] Filter by VSetID
- [ ] Display items in list/table (VValue, VLabel, VSeq, IsActive)
- [ ] Implement item creation form
- [ ] Implement item edit form
- [ ] Implement item delete with confirmation
- [ ] Add active/inactive toggle
- [ ] Implement sorting by VSeq
### Dynamic Dropdowns
- [ ] Create reusable dropdown component using value sets
- [ ] Load dropdown options from `/api/valueset/items?VSetID=X`
- [ ] Cache dropdown options in store
- [ ] Implement refresh/reload dropdown data
- [ ] Use value sets for:
- [ ] Patient prefixes
- [ ] Patient marital status
- [ ] Specimen types
- [ ] Collection methods
- [ ] Specimen statuses
- [ ] Order priorities
- [ ] Order statuses
- [ ] Test types
- [ ] Any other configurable dropdowns
### Value Set Caching
- [ ] Implement cache strategy for value sets
- [ ] Load value sets on app initialization
- [ ] Refresh cache when `/api/valueset/refresh` called
- [ ] Use stale-while-revalidate pattern for dropdowns
**Acceptance Criteria:**
- Value sets display correctly
- Items CRUD works
- Refresh clears cache and reloads
- Dynamic dropdowns populate from value sets
- Caching reduces API calls
---
## Phase 11: Dashboard Module
### Dashboard Summary Cards
- [ ] Create dashboard page
- [ ] Display pending orders count (API: `/api/dashboard`)
- [ ] Display today's results count
- [ ] Display critical results count
- [ ] Display active patients count
- [ ] Add refresh button
### Orders Trend Chart
- [ ] Create orders over time chart
- [ ] Filter by date range
- [ ] Group by status
- [ ] Use charting library (Chart.js/Recharts/etc.)
### Results Volume Chart
- [ ] Create results volume chart
- [ ] Filter by date range
- [ ] Group by test type or department
- [ ] Use charting library
### Real-time Status Indicators
- [ ] Implement polling or WebSocket for real-time updates
- [ ] Update dashboard metrics automatically
- [ ] Show last update time
- [ ] Add auto-refresh toggle (e.g., every 30 seconds)
### Department Performance
- [ ] Display department-wise metrics
- [ ] Orders processed per department
- [ ] Average turnaround time
- [ ] Results volume per department
**Acceptance Criteria:**
- Dashboard displays all summary metrics
- Charts render correctly
- Real-time updates work
- Filters apply to charts
- Performance metrics are accurate
---
## Phase 12: Edge API Integration
### Instrument Status Monitoring
- [ ] Create instrument status page
- [ ] Display instrument list with status
- [ ] Color-code status (online=green, offline=gray, error=red, maintenance=orange)
- [ ] Implement status polling or WebSocket
- [ ] Display last status update timestamp
- [ ] Display status message (if available)
### Real-time Result Display
- [ ] Implement result streaming (WebSocket or SSE polling)
- [ ] Display incoming results as they arrive
- [ ] Parse EdgeResultRequest format (sample_id, instrument_id, results array)
- [ ] Display results in real-time feed
- [ ] Show test_code, result_value, unit, flags
- [ ] Add sound/notification for new results
### Order Acknowledgment
- [ ] Create edge orders list (API: `/api/edge/orders`)
- [ ] Filter by instrument_id
- [ ] Filter by status (pending, acknowledged)
- [ ] Display orders for instruments
- [ ] Implement acknowledge action (POST `/api/edge/orders/{orderId}/ack`)
- [ ] Update status to acknowledged
- [ ] Show acknowledgment confirmation
### Instrument Status Logging
- [ ] Create status log view
- [ ] Display status history per instrument
- [ ] Show timestamp, status, message
- [ ] Call `/api/edge/status` when receiving status updates
### Result Queue Management
- [ ] Display queued results (EdgeResultResponse: edge_res_id)
- [ ] Show queue status
- [ ] Manual trigger for processing (if needed)
**Acceptance Criteria:**
- Instrument status displays correctly
- Real-time results stream in
- Order acknowledgment works
- Status history is visible
- Result queue is manageable
---
## Phase 13: Testing & QA
### Unit Tests
- [ ] Set up testing framework (Jest, Vitest, etc.)
- [ ] Write unit tests for components
- [ ] Write unit tests for services/API calls
- [ ] Write unit tests for utility functions
- [ ] Write unit tests for state management
- [ ] Achieve >80% code coverage
### Integration Tests
- [ ] Set up API mocking (MSW, Mirage, etc.)
- [ ] Write tests for authentication flow
- [ ] Write tests for patient CRUD operations
- [ ] Write tests for order creation flow
- [ ] Write tests for specimen tracking
- [ ] Write tests for results entry
### E2E Tests (Critical Flows)
- [ ] Set up E2E testing (Cypress, Playwright)
- [ ] Test login → dashboard flow
- [ ] Test patient registration → order creation flow
- [ ] Test order → specimen → results flow
- [ ] Test critical results alerting
- [ ] Test logout
### Form Validation Testing
- [ ] Test all required field validations
- [ ] Test format validations (email, phone, regex)
- [ ] Test duplicate detection
- [ ] Test error message display
### Error Handling Testing
- [ ] Test 401 error handling (redirect to login)
- [ ] Test 404 error handling
- [ ] Test 500 error handling
- [ ] Test network error handling
- [ ] Test timeout handling
### Performance Testing
- [ ] Measure page load times
- [ ] Measure list rendering with large datasets
- [ ] Optimize bundle size (code splitting, lazy loading)
- [ ] Test with slow network (3G)
- [ ] Audit with Lighthouse (score >90)
### Accessibility Audit
- [ ] Test keyboard navigation
- [ ] Test screen reader compatibility
- [ ] Check color contrast ratios
- [ ] Ensure proper ARIA labels
- [ ] Test with accessibility tools (axe, WAVE)
**Acceptance Criteria:**
- All tests pass
- Code coverage >80%
- E2E tests cover critical flows
- Lighthouse score >90
- Accessibility audit passes
---
## Phase 14: Deployment
### Production Build
- [ ] Create production build
- [ ] Optimize assets (minify, compress)
- [ ] Generate source maps
- [ ] Verify build output
- [ ] Check bundle size
### Environment Configuration
- [ ] Set up production environment variables
- [ ] Configure production API base URL
- [ ] Disable development tools
- [ ] Enable error tracking (Sentry, etc.)
- [ ] Configure analytics (if needed)
### API Endpoint Verification
- [ ] Verify all endpoints are accessible
- [ ] Verify CORS configuration
- [ ] Test authentication flow with production backend
- [ ] Test with production data
### Database/Storage (if needed)
- [ ] Configure any client-side storage (IndexedDB, localStorage)
- [ ] Set up data migration scripts (if needed)
- [ ] Test storage operations
### Pre-deployment Checklist
- [ ] Run all tests and ensure they pass
- [ ] Review and merge all PRs
- [ ] Update version number
- [ ] Update CHANGELOG
- [ ] Create release notes
### Deployment
- [ ] Deploy to staging environment
- [ ] Smoke test on staging
- [ ] Deploy to production
- [ ] Verify production deployment
- [ ] Monitor error logs
- [ ] Monitor performance metrics
### Post-deployment
- [ ] Verify critical flows work in production
- [ ] Check user feedback
- [ ] Monitor for errors
- [ ] Rollback plan in case of issues
**Acceptance Criteria:**
- Production build completes without errors
- Application works in production environment
- All critical features verified
- No critical errors in logs
- Performance meets targets
---
## Notes
### API Base URL
- Development: `http://localhost/clqms01/`
- Production: `https://clqms01-api.services-summit.my.id/`
### Authentication
- JWT token stored in HTTP-only cookie
- Bearer token in Authorization header for API calls
- Check auth status on app load
### Common Patterns
- All list pages support pagination
- All forms include validation
- All delete operations require confirmation
- All API calls include error handling
- Loading states for async operations
### Dependencies Between Phases
- Phase 2 (Authentication) must be completed before protected routes
- Phase 3 (Value Sets) needed for dropdowns across all modules - **do this early!**
- Phase 4 (Organization) data needed for filtering in other modules
- Phase 6 (Patients) needed for Phase 9 (Orders)
- Phase 7 (Test Catalog) needed for Phase 9 (Orders)
- Phase 9 (Orders) needed for Phase 10 (Results)
### Testing Priority
- E2E: Login → Dashboard, Patient → Order → Result flow
- Unit: All services, all components with logic
- Integration: API calls, auth flows
---
## Completed Phases Tracker
- [x] Phase 1: Project Setup
- [ ] Phase 2: Authentication Module
- [ ] Phase 3: Value Sets Module
- [ ] Phase 4: Organization Module
- [ ] Phase 5: Master Data Module
- [ ] Phase 6: Patient Management Module
- [ ] Phase 7: Test Catalog Module
- [ ] Phase 8: Specimen Module
- [ ] Phase 9: Orders Module
- [ ] Phase 10: Results Module
- [ ] Phase 11: Dashboard Module
- [ ] Phase 12: Edge API Integration
- [ ] Phase 13: Testing & QA
- [ ] Phase 14: Deployment
---
**Last Updated:** 2026-02-08
**Version:** 1.0.0