# Warehouse Module Implementation - TODO List **Based on:** Gap Analysis (warehouse-gap-analysis.md) **Document Version:** 1.0 **Created:** 2025-10-29 **Overall Completion:** 13/158 tasks (8.2%) --- ## 📊 Progress Summary | Phase | Status | Completion | Priority | |-------|--------|------------|----------| | Phase 1: Core Operations | 🟡 In Progress | 13/52 (25%) | CRITICAL | | Phase 2: Compliance & Reporting | 🔴 Not Started | 0/45 | HIGH | | Phase 3: Pharmacy Enhancements | 🔴 Not Started | 0/31 | HIGH (if hospital) | | Phase 4: Advanced Features | 🔴 Not Started | 0/30 | MEDIUM | --- ## 🔴 Phase 1: Core Operations (CRITICAL) - 12 weeks ### 1.1 Internal Requisition Module (3 weeks) - 13/16 (81%) #### Backend Development - [x] Create `InternalRequisition` entity in Domain layer - [x] Add properties: RequisitionNumber, RequestDate, RequiredDate, Status, Priority (Normal/Urgent) - [x] Add navigation properties: RequestingDepartment, RequestedByEmployee, ApprovedByEmployee - [x] Add timestamps: SubmittedDate, ApprovedDate - [x] Create `InternalRequisitionLine` entity in Domain layer - [x] Add properties: Item, RequestedQuantity, UnitOfMeasure, ApprovedQuantity - [x] Add notes field for line item remarks - [x] Create `InternalRequisitionStatus` enum - [x] Values: Draft, Submitted, Approved, Rejected, PartiallyFulfilled, Fulfilled, Cancelled - [x] Create `InternalRequisitionPriority` enum - [x] Values: Normal, Urgent - [x] Create EF Core configuration classes - [x] InternalRequisitionConfiguration.cs - [x] InternalRequisitionLineConfiguration.cs - [x] Create and run database migration - [x] Create DTOs in Application layer - [x] InternalRequisitionSummaryDto (for workbench list) - [x] InternalRequisitionDetailDto (for full details) - [x] InternalRequisitionLineDto (for line items) - [x] InternalRequisitionLineUpsertDto (for create/update line items) - [x] CreateInternalRequisitionDto - [x] UpdateInternalRequisitionDto - [x] SubmitInternalRequisitionDto - [x] ApproveInternalRequisitionDto (with optional line-level approvals) - [x] RejectInternalRequisitionDto - [ ] Create `IInternalRequisitionRepository` interface - [ ] Implement `InternalRequisitionRepository` in Infrastructure layer - [ ] Create `IInternalRequisitionService` interface - [ ] Implement `InternalRequisitionService` in Application layer - [ ] CreateRequisition method - [ ] UpdateRequisition method - [ ] SubmitForApproval method - [ ] ApproveRequisition method - [ ] RejectRequisition method - [ ] CreateTransferFromRequisition method (integration with InternalTransferOrder) - [ ] LoadItemsBelowSafetyLevel method - [ ] LoadItemsBelowMaxLevel method - [ ] Create `InternalRequisitionController` in API layer - [ ] GET /api/requisitions/workbench - List requisitions with filtering - [ ] GET /api/requisitions/{id} - Get requisition details - [ ] POST /api/requisitions - Create new requisition - [ ] PUT /api/requisitions/{id} - Update draft requisition - [ ] POST /api/requisitions/{id}/submit - Submit for approval - [ ] POST /api/requisitions/{id}/approve - Approve requisition - [ ] POST /api/requisitions/{id}/reject - Reject requisition - [ ] POST /api/requisitions/{id}/create-transfer - Convert to transfer order - [ ] GET /api/requisitions/items-below-safety - Load items below safety level - [ ] GET /api/requisitions/items-below-max - Load items below max level - [ ] Add document numbering service for requisitions - [ ] Add approval authority/permission configuration - [ ] Write unit tests for InternalRequisitionService - [ ] Write integration tests for InternalRequisitionController #### Frontend Development - [ ] Update `warehouse-requisitions` module (currently mock) - [ ] Create TypeScript models/interfaces - [ ] InternalRequisition interface - [ ] InternalRequisitionLine interface - [ ] InternalRequisitionStatus enum - [ ] Create `InternalRequisitionService` (HTTP client) - [ ] Create requisition workbench component - [ ] Filtering panel (status, date range, department, keyword) - [ ] Data grid with requisitions - [ ] Action buttons (create, view, edit, submit, approve, reject) - [ ] Create requisition form component - [ ] Header section (department, required date, priority, notes) - [ ] Line items grid with add/remove functionality - [ ] Item search and selection - [ ] Load items below safety/max level buttons - [ ] Save draft / Submit for approval buttons - [ ] Create requisition detail view component - [ ] Display requisition header information - [ ] Display line items - [ ] Show approval status and audit trail - [ ] Approve/Reject buttons (for approvers) - [ ] Create transfer button (for fulfilled requisitions) - [ ] Add translation keys to i18n files (en.json, th.json) - [ ] Add routing configuration - [ ] Add navigation menu item #### Integration & Testing - [ ] Test requisition creation workflow - [ ] Test approval workflow - [ ] Test integration with transfer order creation - [ ] Test load items below safety/max level functionality - [ ] Test permissions and authorization - [ ] Test document numbering sequence --- ### 1.2 Stock Issue/Dispense Module (2 weeks) - 0/14 #### Backend Development - [ ] Create `StockIssueNote` entity in Domain layer - [ ] Add properties: IssueNumber, IssueDate, Status, IssuedToLocation, IssuedToDepartment - [ ] Add reference to InternalRequisition (optional) - [ ] Add navigation: IssuedByEmployee, ApprovedByEmployee - [ ] Create `StockIssueNoteLine` entity in Domain layer - [ ] Add properties: Item, RequestedQuantity, IssuedQuantity, UnitOfMeasure - [ ] Add lot and location tracking - [ ] Create `StockIssueStatus` enum (Draft, Approved, Posted, Cancelled) - [ ] Create EF Core configuration classes - [ ] Create and run database migration - [ ] Create DTOs - [ ] StockIssueSummaryDto - [ ] StockIssueDetailDto - [ ] CreateStockIssueDto - [ ] UpdateStockIssueDto - [ ] PostStockIssueDto - [ ] Create `IStockIssueRepository` interface - [ ] Implement `StockIssueRepository` - [ ] Create `IStockIssueService` interface - [ ] Implement `StockIssueService` - [ ] CreateIssue method - [ ] CreateIssueFromRequisition method - [ ] UpdateIssue method - [ ] ApproveIssue method - [ ] PostIssue method (create inventory transactions and reduce stock) - [ ] CancelIssue method - [ ] Create `StockIssueController` - [ ] GET /api/stock-issues/workbench - [ ] GET /api/stock-issues/{id} - [ ] POST /api/stock-issues - [ ] POST /api/stock-issues/from-requisition/{requisitionId} - [ ] PUT /api/stock-issues/{id} - [ ] POST /api/stock-issues/{id}/approve - [ ] POST /api/stock-issues/{id}/post - [ ] POST /api/stock-issues/{id}/cancel - [ ] Add document numbering for issue notes - [ ] Update InventoryTransaction creation on issue posting - [ ] Write unit tests - [ ] Write integration tests #### Frontend Development - [ ] Update `warehouse-issues` module (currently mock) - [ ] Create TypeScript models - [ ] Create `StockIssueService` (HTTP client) - [ ] Create issue workbench component - [ ] Create issue form component - [ ] Header section - [ ] Line items with lot selection - [ ] Quantity adjustment (requested vs issued) - [ ] Submit/approve/post buttons - [ ] Create issue detail view - [ ] Add translation keys - [ ] Add routing and navigation #### Integration & Testing - [ ] Test issue creation from requisition - [ ] Test standalone issue creation - [ ] Test approval and posting workflow - [ ] Test stock deduction on posting - [ ] Test inventory transaction creation - [ ] Test document copy functionality --- ### 1.3 Stock Adjustment Module (2 weeks) - 0/13 #### Backend Development - [ ] Create `StockAdjustment` entity in Domain layer - [ ] Add properties: AdjustmentNumber, AdjustmentDate, Status, AdjustmentType (Increase/Decrease) - [ ] Add navigation: Location, CreatedByEmployee, ApprovedByEmployee - [ ] Create `StockAdjustmentLine` entity - [ ] Add properties: Item, Lot, ExpiryDate, CurrentQuantity, AdjustmentQuantity, NewQuantity - [ ] Add ReasonCode (FK to StockAdjustmentReason) - [ ] Add UnitCost for cost adjustments - [ ] Add notes field - [ ] Create `StockAdjustmentReason` entity (master data) - [ ] Predefined reasons: Internal Use, Damaged, Expired, Stock Count Adjustment, Theft/Loss, Found/Surplus - [ ] Create `StockAdjustmentStatus` enum (Draft, Posted) - [ ] Create EF Core configuration classes - [ ] Create and run database migration - [ ] Seed initial adjustment reasons - [ ] Create DTOs - [ ] StockAdjustmentSummaryDto - [ ] StockAdjustmentDetailDto - [ ] CreateStockAdjustmentDto - [ ] UpdateStockAdjustmentDto - [ ] PostStockAdjustmentDto - [ ] StockAdjustmentReasonDto - [ ] Create `IStockAdjustmentRepository` interface - [ ] Implement `StockAdjustmentRepository` - [ ] Create `IStockAdjustmentService` interface - [ ] Implement `StockAdjustmentService` - [ ] CreateAdjustment method - [ ] UpdateAdjustment method - [ ] PostAdjustment method (create InventoryTransaction, update InventoryBalance) - [ ] GetAdjustmentReasons method - [ ] ManageAdjustmentReasons method (CRUD for reasons) - [ ] Create `StockAdjustmentController` - [ ] GET /api/stock-adjustments/workbench - [ ] GET /api/stock-adjustments/{id} - [ ] POST /api/stock-adjustments - [ ] PUT /api/stock-adjustments/{id} - [ ] POST /api/stock-adjustments/{id}/post - [ ] GET /api/stock-adjustments/reasons - [ ] POST /api/stock-adjustments/reasons (admin only) - [ ] Add permission controls for adjustment creation and posting - [ ] Add approval workflow for large adjustments (configurable threshold) - [ ] Write unit tests - [ ] Write integration tests #### Frontend Development - [ ] Update `warehouse-adjustments` module (currently mock) - [ ] Create TypeScript models - [ ] Create `StockAdjustmentService` (HTTP client) - [ ] Create adjustment workbench component - [ ] Create adjustment form component - [ ] Search and select items from warehouse - [ ] Display current quantity (read-only) - [ ] Lot selection dropdown - [ ] Adjustment type (increase/decrease) - [ ] Adjustment quantity input (with + or - sign) - [ ] Calculated new quantity (display) - [ ] Reason dropdown - [ ] Notes textarea - [ ] Save draft / Post buttons - [ ] Create adjustment detail view - [ ] Create adjustment reasons management UI (admin) - [ ] Add translation keys - [ ] Add routing and navigation #### Integration & Testing - [ ] Test positive adjustment (increase stock) - [ ] Test negative adjustment (decrease stock) - [ ] Test adjustment with different reasons - [ ] Test cost adjustment - [ ] Test approval workflow for large adjustments - [ ] Test inventory transaction creation - [ ] Test balance update - [ ] Test permission controls --- ### 1.4 Sub-Warehouse Receipt Confirmation (2 weeks) - 0/12 #### Backend Development - [ ] Create `SubWarehouseReceiptNote` entity - [ ] Add properties: ReceiptNumber, ReceiptDate, Status - [ ] Add reference to InternalTransferOrder - [ ] Add navigation: ReceivedByEmployee, ReceivingLocation - [ ] Create `SubWarehouseReceiptNoteLine` entity - [ ] Add properties: Item, Lot, ExpectedQuantity, ReceivedQuantity, DiscrepancyReason - [ ] Create `SubWarehouseReceiptStatus` enum (Draft, Posted) - [ ] Create EF Core configuration classes - [ ] Create and run database migration - [ ] Create DTOs - [ ] SubWarehouseReceiptSummaryDto - [ ] SubWarehouseReceiptDetailDto - [ ] PostSubWarehouseReceiptDto - [ ] Create `ISubWarehouseReceiptRepository` interface - [ ] Implement `SubWarehouseReceiptRepository` - [ ] Create `ISubWarehouseReceiptService` interface - [ ] Implement `SubWarehouseReceiptService` - [ ] GetPendingReceipts method (for receiving location) - [ ] CreateReceiptFromTransfer method (auto-create when transfer reaches InTransit) - [ ] UpdateReceivedQuantities method - [ ] PostReceipt method (create inventory transaction, update transfer status to Completed) - [ ] RecordDiscrepancy method - [ ] Update InternalTransferService to auto-create receipt note when status changes to InTransit - [ ] Create `SubWarehouseReceiptController` - [ ] GET /api/sub-warehouse-receipts/pending (for current user's location) - [ ] GET /api/sub-warehouse-receipts/{id} - [ ] PUT /api/sub-warehouse-receipts/{id}/quantities - [ ] POST /api/sub-warehouse-receipts/{id}/post - [ ] Write unit tests - [ ] Write integration tests #### Frontend Development - [ ] Update `warehouse-sub-receipts` module (currently mock) - [ ] Create TypeScript models - [ ] Create `SubWarehouseReceiptService` (HTTP client) - [ ] Create pending receipts queue component - [ ] Show transfers awaiting receipt - [ ] Filter by date, source warehouse - [ ] Action: Open receipt - [ ] Create receipt confirmation component - [ ] Display transfer details (read-only) - [ ] Display expected quantities per item/lot - [ ] Input fields for received quantities - [ ] Discrepancy reason field (if received != expected) - [ ] Post receipt button - [ ] Print receipt document button - [ ] Create receipt detail view (for posted receipts) - [ ] Add translation keys - [ ] Add routing and navigation #### Integration & Testing - [ ] Test auto-creation of receipt note from transfer - [ ] Test receipt confirmation with matching quantities - [ ] Test receipt confirmation with discrepancies - [ ] Test inventory transaction creation - [ ] Test transfer status update to Completed - [ ] Test stock increase in receiving location - [ ] Test pending receipts queue filtering - [ ] Test permissions (only receiving location can post) --- ### 1.5 Essential Reports (Tier 1) (3 weeks) - 0/9 #### Report Infrastructure Setup - [ ] Choose reporting approach (QuestPDF / Crystal Reports / SSRS / Custom) - [ ] Set up report generation service in Application layer - [ ] Create `IReportService` interface - [ ] Implement `ReportService` - [ ] Create `ReportController` in API layer - [ ] Create report templates/layouts - [ ] Add PDF generation capability - [ ] Add Excel export capability - [ ] Add report download endpoints #### Report #1: Stock Balance Report (Current) - [ ] Create StockBalanceReportDto - [ ] Create data query method in repository - [ ] Create report template/layout - [ ] Add filters: warehouse, item category, item, date - [ ] Add grouping: by warehouse, by category - [ ] Add columns: Item Code, Item Name, UOM, Quantity on Hand, Min Level, Max Level, Value - [ ] Add totals and subtotals - [ ] Test report generation - [ ] Create frontend report viewer/downloader #### Report #2: Stock Card Report - [ ] Create StockCardReportDto - [ ] Create data query method (get all transactions for item/location) - [ ] Create report template - [ ] Add filters: item, warehouse, date range - [ ] Add columns: Date, Transaction Type, Document Number, Lot, In Qty, Out Qty, Balance, Unit Cost - [ ] Add running balance calculation - [ ] Test report generation - [ ] Create frontend interface #### Report #3: Goods Receipt Report - [ ] Create GoodsReceiptReportDto - [ ] Create data query method - [ ] Create report template - [ ] Add filters: date range, supplier, warehouse, status - [ ] Add columns: Receipt Number, Date, Supplier, PO Number, Items, Total Qty, Total Value, Status - [ ] Add drill-down to receipt details - [ ] Test report generation - [ ] Create frontend interface #### Report #4: Stock Issue Report - [ ] Create StockIssueReportDto - [ ] Create data query method - [ ] Create report template - [ ] Add filters: date range, issuing warehouse, receiving department - [ ] Add columns: Issue Number, Date, Department, Items, Total Qty, Total Value - [ ] Add grouping by department - [ ] Test report generation - [ ] Create frontend interface #### Report #5: Low Stock Alert Report - [ ] Create LowStockAlertReportDto - [ ] Create data query method (items where quantity < reorder point) - [ ] Create report template - [ ] Add filters: warehouse, category - [ ] Add columns: Item Code, Item Name, Current Qty, Min Level, Reorder Point, Recommended Order Qty - [ ] Add severity indicators (below min, below reorder, approaching min) - [ ] Test report generation - [ ] Create frontend interface #### Report #6: Near-Expiry Report (7 months) - [ ] Create NearExpiryReportDto - [ ] Create data query method (items expiring within X months) - [ ] Create report template - [ ] Add filters: warehouse, expiry within (1, 3, 6, 7, 12 months) - [ ] Add columns: Item Code, Item Name, Lot Number, Expiry Date, Days to Expiry, Quantity, Location - [ ] Add sorting by expiry date (nearest first) - [ ] Add color coding (red <30 days, yellow <90 days, orange <180 days) - [ ] Test report generation - [ ] Create frontend interface #### Frontend Report Module - [ ] Update `warehouse-reports` module (currently mock) - [ ] Create report catalog/menu component - [ ] Create report parameter selection component (filters) - [ ] Create report viewer component (display PDF/Excel) - [ ] Add report scheduling functionality (future enhancement) - [ ] Add favorite reports feature - [ ] Add translation keys - [ ] Add routing and navigation #### Testing - [ ] Test all 6 reports with various filter combinations - [ ] Test report performance with large datasets - [ ] Test PDF and Excel export formats - [ ] Test report permissions (who can view which reports) - [ ] User acceptance testing with stakeholders --- ## 🟡 Phase 2: Compliance & Reporting (HIGH) - 10 weeks ### 2.1 Operational Reports (Tier 2) (4 weeks) - 0/14 #### Report #7: Stock Movement Summary - [ ] Create query aggregating receipts, issues, adjustments, transfers by period - [ ] Create report template with opening balance, receipts, issues, adjustments, closing balance - [ ] Add filters: date range, warehouse, item category - [ ] Test and deploy #### Report #8: Stock Value Report - [ ] Create query calculating total inventory value (quantity × unit cost) - [ ] Create report with breakdown by category and warehouse - [ ] Add comparison with previous period - [ ] Add chart visualization - [ ] Test and deploy #### Report #9: Receipt by Vendor - [ ] Create query grouping receipts by vendor - [ ] Create report template - [ ] Add filters: date range, vendor - [ ] Add columns: Vendor Name, Receipt Count, Total Items, Total Value, Average Lead Time - [ ] Test and deploy #### Report #10: Issue by Department - [ ] Create query grouping issues by department - [ ] Create report template - [ ] Add filters: date range, department, item category - [ ] Add columns: Department, Item Count, Total Qty, Total Value - [ ] Add trend analysis (comparison with previous period) - [ ] Test and deploy #### Report #11: Monthly Stock Report - [ ] Create query for end-of-month snapshots - [ ] Create report template with monthly comparisons - [ ] Add filters: year, warehouse - [ ] Add columns: Month, Opening Stock, Receipts, Issues, Adjustments, Closing Stock, Value - [ ] Add year-over-year comparison - [ ] Test and deploy #### Report #12: Stock at Date Report - [ ] Create query to calculate stock at any historical date - [ ] Create report template - [ ] Add date parameter - [ ] Add warehouse and category filters - [ ] Add columns: Item, Quantity at Date, Value at Date - [ ] Test and deploy #### Report #13: Pending Receipt Report - [ ] Create query for goods in transit (POs not fully received) - [ ] Create report template - [ ] Add filters: date range, vendor, warehouse - [ ] Add columns: PO Number, Vendor, Items, Ordered Qty, Received Qty, Pending Qty, Expected Date - [ ] Add aging analysis (overdue vs on-time) - [ ] Test and deploy #### Report #14: Material Movement Report - [ ] Create detailed transaction log report - [ ] Add filters: date range, item, warehouse, transaction type - [ ] Add columns: Date, Time, Transaction Type, Document Number, Item, Lot, Quantity, Location, Employee - [ ] Add export to Excel for further analysis - [ ] Test and deploy #### Report #15: Inventory by Category and Warehouse - [ ] Create summary report with matrix layout (categories × warehouses) - [ ] Add quantity and value totals - [ ] Add percentage of total inventory - [ ] Add chart visualization - [ ] Test and deploy #### Report #16: Over-Standard Requisition Report - [ ] Create query finding requisitions exceeding standard/budget amounts - [ ] Create report template - [ ] Add filters: date range, department - [ ] Add columns: Requisition Number, Department, Item, Requested Qty, Standard Qty, Over Qty, Approval Status - [ ] Add justification notes - [ ] Test and deploy #### Report #17: Vendor Invoice Receipt Report - [ ] Create reconciliation report (GRN vs Invoice) - [ ] Add filters: date range, vendor - [ ] Add columns: Invoice Number, GRN Number, Invoice Date, Receipt Date, Variance - [ ] Add status: Matched, Partially Matched, Not Matched - [ ] Test and deploy #### Report #18: Receipt Inspection Report - [ ] Create quality inspection tracking report - [ ] Add filters: date range, inspector, status - [ ] Add columns: Receipt Number, Date, Supplier, Items, Inspection Result, Quality Issues - [ ] Test and deploy #### Report #19: Inventory Summary Report - [ ] Create comprehensive summary with key metrics - [ ] Add sections: Stock Value, Turnover Rate, Slow-Moving Items, Stock-Out Items - [ ] Add KPI dashboard style layout - [ ] Add chart visualizations - [ ] Test and deploy #### Report #20: Equipment Inventory and Balance Report - [ ] Create specialized report for equipment/assets - [ ] Add filters: equipment category, location, status - [ ] Add columns: Equipment Code, Name, Category, Location, Quantity, Status, Value - [ ] Test and deploy --- ### 2.2 Document Printing (2 weeks) - 0/8 #### Print Templates - [ ] Create print template for Internal Requisition form - [ ] Company header/logo - [ ] Requisition details section - [ ] Line items table - [ ] Approval signatures section - [ ] Footer with terms/notes - [ ] Create print template for Stock Issue Note - [ ] Issue note header - [ ] Issued to/from information - [ ] Items table with lot numbers - [ ] Receiver signature section - [ ] Create print template for Stock Adjustment Note - [ ] Adjustment header - [ ] Adjustment reason - [ ] Items table with before/after quantities - [ ] Approval signatures - [ ] Create print template for Sub-Warehouse Receipt Note - [ ] Receipt header - [ ] Transfer reference - [ ] Items with expected vs received quantities - [ ] Discrepancy notes - [ ] Receiver signature - [ ] Create print template for Transfer Order - [ ] Transfer details - [ ] Pick list format - [ ] Items with locations - [ ] Picker and receiver signatures - [ ] Create print template for Borrow/Return Slip - [ ] Borrowing party information - [ ] Items borrowed/returned - [ ] Expected return date (for borrow) - [ ] Condition notes - [ ] Signatures - [ ] Create print template for Stock Balance Sheet - [ ] Balance as of date - [ ] Items grouped by category - [ ] Quantity and value columns - [ ] Totals and subtotals - [ ] Create print template for Material Withdrawal Slip - [ ] Withdrawal details - [ ] Purpose/project reference - [ ] Items list - [ ] Approval and receipt signatures #### Barcode/QR Code Labels - [ ] Set up barcode generation library (e.g., ZXing, Barcode.NET) - [ ] Create label template for items (Code128 barcode) - [ ] Item code barcode - [ ] Item name - [ ] Item code (human readable) - [ ] Size: standard label (e.g., 50mm x 30mm) - [ ] Create label template for locations (QR code) - [ ] Location QR code (encodes location ID) - [ ] Location code (human readable) - [ ] Location name - [ ] Size: larger label (e.g., 75mm x 75mm) - [ ] Create label template for lot tracking - [ ] Lot number barcode - [ ] Item code - [ ] Expiry date - [ ] Received date - [ ] Create bulk label printing functionality - [ ] Print labels for multiple items at once - [ ] Print labels for all locations in warehouse - [ ] Configurable label layout and printer settings - [ ] Add API endpoints for label generation - [ ] POST /api/labels/items - Generate item labels - [ ] POST /api/labels/locations - Generate location labels - [ ] POST /api/labels/lots - Generate lot labels - [ ] Create frontend label printing interface - [ ] Select items/locations for label printing - [ ] Preview labels before printing - [ ] Configure printer settings - [ ] Print or download as PDF #### Integration & Testing - [ ] Test all print templates with sample data - [ ] Test printing from different browsers - [ ] Test PDF generation and download - [ ] Test direct printing to network printers - [ ] Test barcode/QR code scanning with actual devices - [ ] User acceptance testing for print layouts --- ### 2.3 Alert System (2 weeks) - 0/12 #### Backend Alert Infrastructure - [ ] Create `WarehouseAlert` entity - [ ] AlertType (LowStock, OutOfStock, NearExpiry, OverStock, etc.) - [ ] Severity (Info, Warning, Critical) - [ ] Item, Location references - [ ] AlertDate, ResolvedDate - [ ] IsResolved flag - [ ] Message, Details - [ ] Create `AlertConfiguration` entity - [ ] AlertType, IsEnabled - [ ] Threshold settings (e.g., alert when stock < X% of reorder point) - [ ] Notification channels (Email, In-App, SMS) - [ ] Recipients (users, roles) - [ ] Create EF Core configuration classes - [ ] Create and run database migration - [ ] Create `IAlertService` interface - [ ] Implement `AlertService` - [ ] CheckLowStockConditions method (runs periodically) - [ ] CheckExpiryDates method - [ ] CheckOverStockConditions method - [ ] GenerateAlert method - [ ] ResolveAlert method - [ ] GetActiveAlerts method - [ ] GetAlertHistory method - [ ] Create background job/scheduled task for alert checking - [ ] Use Hangfire, Quartz.NET, or BackgroundService - [ ] Run daily or configurable interval - [ ] Check all alert conditions - [ ] Generate new alerts as needed - [ ] Create `INotificationService` interface - [ ] Implement `NotificationService` - [ ] SendEmail method - [ ] SendInAppNotification method - [ ] (Future) SendSMS method - [ ] Integrate alert generation with stock transactions - [ ] Trigger alert check on stock update - [ ] Immediate alert for stock-out conditions - [ ] Create `AlertController` - [ ] GET /api/alerts/active - Get current active alerts - [ ] GET /api/alerts/history - Get alert history - [ ] POST /api/alerts/{id}/resolve - Resolve alert - [ ] GET /api/alerts/configuration - Get alert settings - [ ] PUT /api/alerts/configuration - Update alert settings - [ ] Write unit tests - [ ] Write integration tests #### Alert Types Implementation ##### Low Stock Alert - [ ] Define low stock condition (quantity < reorder point) - [ ] Create alert check logic - [ ] Create alert message template - [ ] Add configuration: alert threshold (e.g., 80% of reorder point) - [ ] Test alert generation ##### Out of Stock Alert - [ ] Define out of stock condition (quantity = 0 and item is active) - [ ] Create alert check logic - [ ] Create alert message template (critical severity) - [ ] Test alert generation ##### Near Expiry Alert - [ ] Define near expiry conditions (expiry within 7 months, 3 months, 1 month) - [ ] Create alert check logic for each threshold - [ ] Create alert message templates - [ ] Add configuration: expiry alert thresholds - [ ] Test alert generation ##### Over Stock Alert - [ ] Define over stock condition (quantity > max level) - [ ] Create alert check logic - [ ] Create alert message template - [ ] Add configuration: over stock threshold (e.g., 110% of max level) - [ ] Test alert generation ##### Slow-Moving Item Alert - [ ] Define slow-moving condition (no movement in X days and quantity > 0) - [ ] Create alert check logic - [ ] Create alert message template - [ ] Add configuration: slow-moving threshold (e.g., 90 days, 180 days) - [ ] Test alert generation #### Frontend Alert Features - [ ] Create alert notification component (bell icon in header) - [ ] Badge showing active alert count - [ ] Dropdown showing recent alerts - [ ] Click to view full alert details - [ ] Mark as resolved - [ ] Create alerts dashboard/workbench - [ ] List active alerts grouped by severity - [ ] Filter by alert type, warehouse, date - [ ] Action buttons: resolve, view details, generate report - [ ] Visual indicators (color coding by severity) - [ ] Create alert configuration page (admin) - [ ] Enable/disable alert types - [ ] Configure thresholds - [ ] Configure notification channels - [ ] Configure recipients - [ ] Add alert widgets to warehouse dashboard - [ ] Critical alerts widget (prominent display) - [ ] Alert summary chart (by type) - [ ] Alert trends graph - [ ] Add translation keys - [ ] Test alert UI/UX #### Email Notifications - [ ] Set up email templates for alerts - [ ] Low stock email template - [ ] Out of stock email template - [ ] Near expiry email template - [ ] Daily digest template (summary of all alerts) - [ ] Configure SMTP settings - [ ] Test email delivery - [ ] Add unsubscribe functionality - [ ] Add email scheduling (immediate vs digest) #### Testing - [ ] Test alert generation for each alert type - [ ] Test alert threshold configurations - [ ] Test alert notifications (email, in-app) - [ ] Test alert resolution workflow - [ ] Test alert dashboard and filtering - [ ] Test background job execution - [ ] Load testing for alert checking on large datasets - [ ] User acceptance testing --- ### 2.4 Approval Workflow Engine (2 weeks) - 0/11 #### Backend Workflow Infrastructure - [ ] Create `ApprovalWorkflow` entity - [ ] WorkflowName, DocumentType (Requisition, Adjustment, Issue, etc.) - [ ] IsActive flag - [ ] Approval levels collection - [ ] Create `ApprovalWorkflowLevel` entity - [ ] LevelNumber (1, 2, 3, ...) - [ ] ApprovalType (Role-based, User-specific, Amount-based) - [ ] ApproverRole or ApproverUser - [ ] AmountThreshold (optional, for value-based routing) - [ ] IsParallel flag (multiple approvers at same level) - [ ] RequireAll flag (for parallel approvals) - [ ] Create `ApprovalRequest` entity - [ ] DocumentType, DocumentId - [ ] WorkflowId reference - [ ] CurrentLevel, OverallStatus - [ ] RequestDate, RequestedBy - [ ] Create `ApprovalRequestLevel` entity - [ ] ApprovalRequestId reference - [ ] LevelNumber - [ ] AssignedTo (user) - [ ] Status (Pending, Approved, Rejected, Delegated) - [ ] ActionDate, ActionBy - [ ] Comments - [ ] Create `ApprovalDelegation` entity - [ ] DelegatedFrom, DelegatedTo users - [ ] StartDate, EndDate - [ ] IsActive flag - [ ] Reason - [ ] Create EF Core configuration classes - [ ] Create and run database migration - [ ] Create `IApprovalWorkflowService` interface - [ ] Implement `ApprovalWorkflowService` - [ ] InitiateApproval method (create approval request, assign first level) - [ ] ApproveRequest method - [ ] RejectRequest method - [ ] DelegateApproval method - [ ] GetPendingApprovals method (for user) - [ ] GetApprovalHistory method (for document) - [ ] GetApplicableWorkflow method (determine workflow based on document type and amount) - [ ] Create `IApprovalWorkflowRepository` interface - [ ] Implement `ApprovalWorkflowRepository` - [ ] Create `ApprovalWorkflowController` - [ ] GET /api/approval-workflows - List all workflows (admin) - [ ] POST /api/approval-workflows - Create workflow (admin) - [ ] PUT /api/approval-workflows/{id} - Update workflow (admin) - [ ] DELETE /api/approval-workflows/{id} - Delete workflow (admin) - [ ] GET /api/approval-requests/pending - Get pending approvals for current user - [ ] POST /api/approval-requests/{id}/approve - Approve - [ ] POST /api/approval-requests/{id}/reject - Reject - [ ] POST /api/approval-requests/{id}/delegate - Delegate to another user - [ ] GET /api/approval-requests/{id}/history - Get approval history - [ ] Integrate approval workflow with documents - [ ] Update InternalRequisitionService to initiate approval on submit - [ ] Update StockAdjustmentService to initiate approval (if threshold exceeded) - [ ] Update StockIssueService to initiate approval - [ ] Add approval status checks before allowing further actions - [ ] Add email notifications for approval requests - [ ] Email to approver when approval is assigned - [ ] Email to requester when approved/rejected - [ ] Reminder emails for pending approvals - [ ] Write unit tests - [ ] Write integration tests #### Frontend Workflow Features - [ ] Create approval workflow configuration page (admin) - [ ] List all workflows - [ ] Create new workflow wizard - [ ] Select document type - [ ] Define approval levels - [ ] Assign approvers (roles or users) - [ ] Set amount thresholds - [ ] Configure parallel approvals - [ ] Edit existing workflows - [ ] Activate/deactivate workflows - [ ] Preview workflow diagram - [ ] Create approval delegation page - [ ] Set up delegation (date range, delegatee) - [ ] View active delegations - [ ] Revoke delegation - [ ] Create pending approvals workbench - [ ] List all pending approval requests for current user - [ ] Filter by document type, age, requester - [ ] Sort by date, priority - [ ] Action buttons: approve, reject, view document - [ ] Bulk actions (approve/reject multiple) - [ ] Create approval detail modal/page - [ ] Display document details (read-only) - [ ] Show approval history/audit trail - [ ] Approval action form (approve/reject with comments) - [ ] Delegation option - [ ] Add approval status indicators to document lists - [ ] Status badge (Pending Approval, Approved, Rejected) - [ ] Approval level indicator (e.g., "Level 2 of 3") - [ ] Approver information - [ ] Add approval history section to document detail views - [ ] Timeline view of approval actions - [ ] Approver name, action, date, comments - [ ] Color coding (green for approved, red for rejected) - [ ] Add approval workflow visualization - [ ] Flowchart showing approval levels - [ ] Highlight current level - [ ] Show approvers at each level - [ ] Add translation keys - [ ] Test approval UI/UX #### Testing - [ ] Test single-level approval workflow - [ ] Test multi-level approval workflow - [ ] Test parallel approvals (multiple approvers at same level) - [ ] Test amount-based routing - [ ] Test approval delegation - [ ] Test rejection flow (document returned to requester) - [ ] Test approval notifications - [ ] Test bulk approval actions - [ ] Test approval permissions (only assigned approver can approve) - [ ] User acceptance testing --- ## 🟠 Phase 3: Pharmacy Enhancements (HIGH if hospital) - 12 weeks ### 3.1 Pharmacy Master Data Enhancement (3 weeks) - 0/10 #### Backend Development - [ ] Extend `Item` entity with pharmacy-specific fields - [ ] TradeNameThai, TradeNameEnglish - [ ] GenericName - [ ] GovernmentAccountingCode - [ ] IsControlledSubstance, IsDangerousDrug, IsNarcotic - [ ] DrugCategory (enum or FK to category table) - [ ] DosageForm (Tablet, Capsule, Injection, Syrup, etc.) - [ ] Strength (e.g., "500mg", "10mg/ml") - [ ] RouteOfAdministration (Oral, IV, IM, Topical, etc.) - [ ] PharmacologicalCategory, SubCategory, SubMinorCategory - [ ] StorageCondition (Room temp, Refrigerated, Frozen, etc.) - [ ] RequiresPrescription flag - [ ] Create `DrugPriceScheme` entity - [ ] SchemeName (OPD, IPD, Employee, Central Drug Price, Cash) - [ ] EffectiveDate, ExpiryDate - [ ] IsActive flag - [ ] Create `DrugPrice` entity - [ ] ItemId (FK to Item) - [ ] PriceSchemeId (FK to DrugPriceScheme) - [ ] UnitPrice - [ ] MarkupPercentage - [ ] EffectiveDate - [ ] Create `InsuranceScheme` entity - [ ] SchemeCode, SchemeName - [ ] CoverageType - [ ] ReimbursementRate - [ ] Create `DrugInsuranceCoverage` entity (many-to-many: Drug × Insurance) - [ ] ItemId, InsuranceSchemeId - [ ] IsCovered, CoverageLimit - [ ] RequiresPriorAuthorization - [ ] Create `PharmacologicalCategory` entity (hierarchical) - [ ] Code, Name, Level (Category, SubCategory, SubMinor) - [ ] ParentCategoryId (self-referencing for hierarchy) - [ ] Create `ControlledSubstanceLog` entity (for narcotic tracking) - [ ] ItemId, TransactionType - [ ] Quantity, Date, Time - [ ] PatientId (if applicable), PrescriptionId - [ ] RecordedBy, ApprovedBy - [ ] SpecialRemarks - [ ] Create EF Core configuration classes for all new entities - [ ] Create and run database migration - [ ] Create DTOs for pharmacy master data - [ ] MedicalItemDto (with all pharmacy fields) - [ ] DrugPriceSchemeDto - [ ] DrugPriceDto - [ ] InsuranceSchemeDto - [ ] PharmacologicalCategoryDto - [ ] Create `IMedicalItemService` interface (extends base item service) - [ ] Implement `MedicalItemService` - [ ] CreateMedicalItem method - [ ] UpdateMedicalItem method - [ ] GetMedicalItemWithPrices method - [ ] GetPriceByScheme method - [ ] ManageDrugPrices method - [ ] CheckControlledSubstance method - [ ] Create `IPharmacyCategoryService` interface - [ ] Implement `PharmacyCategoryService` (CRUD for categories) - [ ] Create `MedicalItemController` - [ ] GET /api/medical-items - List with pharmacy-specific filters - [ ] GET /api/medical-items/{id} - Get full details including prices - [ ] POST /api/medical-items - Create medical item - [ ] PUT /api/medical-items/{id} - Update medical item - [ ] GET /api/medical-items/{id}/prices - Get all price schemes for item - [ ] PUT /api/medical-items/{id}/prices - Update prices - [ ] GET /api/medical-items/controlled-substances - List controlled substances - [ ] Create `PharmacyCategoryController` - [ ] GET /api/pharmacy-categories/tree - Get category hierarchy - [ ] POST /api/pharmacy-categories - Create category - [ ] PUT /api/pharmacy-categories/{id} - Update category - [ ] Seed initial data - [ ] Common dosage forms - [ ] Routes of administration - [ ] Pharmacological categories (based on ATC classification or similar) - [ ] Default price schemes (OPD, IPD, etc.) - [ ] Write unit tests - [ ] Write integration tests #### Frontend Development - [ ] Create medical item master form (enhanced item form) - [ ] Basic item information section - [ ] Pharmacy-specific fields section - [ ] Trade names (Thai, English) - [ ] Generic name - [ ] Government accounting code - [ ] Checkboxes: Controlled substance, Dangerous drug, Narcotic, Requires prescription - [ ] Drug properties section - [ ] Dosage form dropdown - [ ] Strength input - [ ] Route of administration - [ ] Storage condition - [ ] Classification section - [ ] Pharmacological category tree selector - [ ] Pricing section - [ ] Grid for multiple price schemes - [ ] Columns: Scheme, Unit Price, Markup %, Effective Date, Actions - [ ] Add/remove price rows - [ ] Insurance coverage section - [ ] Checkboxes for covered schemes - [ ] Coverage limits - [ ] Save and validation - [ ] Create pharmacological category management UI - [ ] Tree view of categories - [ ] Add/edit/delete categories - [ ] Drag-and-drop to reorganize - [ ] Create drug price scheme management UI - [ ] List all schemes - [ ] Create new scheme - [ ] Activate/deactivate schemes - [ ] Set effective dates - [ ] Create controlled substance registry UI - [ ] List all controlled substances - [ ] Filter by category (narcotic, dangerous drug, etc.) - [ ] Quick view of quantity on hand - [ ] Link to transaction log - [ ] Update medical item inquiry with pharmacy filters - [ ] Filter by trade name, generic name - [ ] Filter by pharmacological category - [ ] Filter by controlled substance status - [ ] Filter by price scheme - [ ] Display pharmacy-specific columns in results - [ ] Add translation keys (Thai and English medical terminology) - [ ] Add routing and navigation #### Testing - [ ] Test medical item creation with all pharmacy fields - [ ] Test drug pricing by scheme - [ ] Test category hierarchy - [ ] Test controlled substance flagging - [ ] Test insurance coverage configuration - [ ] Test validation (e.g., controlled substances must have special tracking) - [ ] User acceptance testing with pharmacists --- ### 3.2 Pharmacy Workflows (3 weeks) - 0/11 #### Pharmacy Requisition (different from general requisition) - [ ] Create `PharmacyRequisition` entity (extends or separate from InternalRequisition) - [ ] Add pharmacy-specific fields - [ ] PrescribingPhysician (for patient-specific requests) - [ ] PatientId (if applicable) - [ ] DepartmentType (Outpatient, Inpatient, Emergency, etc.) - [ ] UrgencyLevel (Routine, Urgent, Stat) - [ ] RequiresPharmacistReview flag - [ ] Add controlled substance approval requirement - [ ] Narcotic requisitions require dual approval - [ ] Special approval form for controlled substances - [ ] Create `IPharmacyRequisitionService` interface - [ ] Implement `PharmacyRequisitionService` - [ ] CheckControlledSubstanceLimits method - [ ] RequireDualApproval method - [ ] ValidatePrescription method (if linked to prescription) - [ ] Create `PharmacyRequisitionController` - [ ] Pharmacy-specific endpoints - [ ] Controlled substance requisition workflow - [ ] Update approval workflow to handle dual approvals for narcotics - [ ] Add controlled substance quantity limits check - [ ] Add prescription validation (if integrated with HIS) - [ ] Create frontend pharmacy requisition form - [ ] Add pharmacy-specific fields - [ ] Warning indicators for controlled substances - [ ] Prescription attachment (future) - [ ] Dual approval status display - [ ] Test pharmacy requisition workflow - [ ] Test controlled substance requisition and dual approval - [ ] User acceptance testing with pharmacy staff #### Pharmacy Issue with Prescription Tracking - [ ] Create `PharmacyDispensing` entity (extends or separate from StockIssue) - [ ] PrescriptionId (link to HIS or internal prescription system) - [ ] PatientId - [ ] PrescribingPhysician - [ ] DispensedBy (pharmacist) - [ ] VerifiedBy (second pharmacist for controlled substances) - [ ] DispenseDate, DispenseTime - [ ] DispensingInstructions - [ ] PatientCounseling (notes from pharmacist) - [ ] Create `IPharmacyDispensingService` interface - [ ] Implement `PharmacyDispensingService` - [ ] DispenseFromPrescription method - [ ] RequireSecondCheck method (for high-alert drugs) - [ ] RecordCounseling method - [ ] LogControlledSubstanceDispensing method - [ ] Integrate with ControlledSubstanceLog for narcotic dispensing - [ ] Add second pharmacist verification for controlled substances - [ ] Require signature/approval from second pharmacist - [ ] Record both pharmacists in transaction - [ ] Add patient counseling documentation - [ ] Free text field for counseling notes - [ ] Standard counseling points checklist - [ ] Create `PharmacyDispensingController` - [ ] GET /api/pharmacy/dispensing/pending-prescriptions - [ ] POST /api/pharmacy/dispensing/dispense - [ ] POST /api/pharmacy/dispensing/{id}/verify (second check) - [ ] GET /api/pharmacy/dispensing/history (patient drug history) - [ ] Create frontend pharmacy dispensing interface - [ ] Prescription queue (pending dispensing) - [ ] Dispense form with prescription details - [ ] Drug interaction checker (placeholder for future) - [ ] Patient counseling form - [ ] Second pharmacist verification interface - [ ] Print prescription label - [ ] Test pharmacy dispensing workflow - [ ] Test controlled substance double-check - [ ] Test patient counseling documentation - [ ] User acceptance testing #### Controlled Substance Tracking - [ ] Implement controlled substance transaction logging - [ ] Auto-log all receipt, issue, adjustment of controlled substances - [ ] Include all required details (date, time, quantity, patient, physician, pharmacists) - [ ] Create controlled substance reconciliation report - [ ] Daily balance verification - [ ] Compare physical count vs system balance - [ ] Require dual signature on reconciliation - [ ] Create controlled substance register/logbook - [ ] Traditional logbook format (required by regulations) - [ ] Printable format with all transactions - [ ] Running balance - [ ] Signature columns - [ ] Add special approval workflow for controlled substance orders - [ ] Require authorization from director/chief pharmacist - [ ] Document approval reason - [ ] Implement quantity limits for controlled substance dispensing - [ ] Daily limits per patient - [ ] Monthly limits per patient - [ ] Alert when limits exceeded - [ ] Override mechanism with justification - [ ] Create `ControlledSubstanceController` - [ ] GET /api/controlled-substances/transactions - [ ] GET /api/controlled-substances/balance - [ ] POST /api/controlled-substances/reconcile - [ ] GET /api/controlled-substances/register (logbook view) - [ ] Create frontend controlled substance management - [ ] Transaction log viewer - [ ] Daily reconciliation interface - [ ] Register/logbook view and print - [ ] Discrepancy reporting - [ ] Test controlled substance logging - [ ] Test reconciliation workflow - [ ] Test quantity limits and alerts - [ ] Compliance review with pharmacy regulations - [ ] User acceptance testing --- ### 3.3 Pharmacy Alerts and Compliance (2 weeks) - 0/6 #### Near-Expiry Alerts for Pharmacy - [ ] Create pharmacy-specific expiry alert thresholds - [ ] 12 months (for long-lead items) - [ ] 7 months (standard alert) - [ ] 3 months (urgent action required) - [ ] 1 month (critical, consider disposal) - [ ] Enhance near-expiry alert service for pharmacy - [ ] Group by urgency level - [ ] Calculate potential loss value - [ ] Suggest return to supplier options - [ ] Create near-expiry action tracking - [ ] Record actions taken (returned to vendor, transferred, used in campaigns, disposed) - [ ] Track outcome (recovered value, loss) - [ ] Add near-expiry dashboard widget for pharmacy - [ ] Summary by urgency level - [ ] Chart showing items by expiry month - [ ] Quick actions (return, transfer, dispose) - [ ] Test pharmacy expiry alerts - [ ] User acceptance testing #### Narcotic/Controlled Substance Reporting - [ ] Create monthly controlled substance usage report - [ ] Summary of receipts, dispensing, balance by controlled substance - [ ] Comparison with previous months - [ ] Variance analysis - [ ] Create controlled substance audit trail report - [ ] Detailed transaction log for audit - [ ] Filter by date range, substance, transaction type - [ ] Include all regulatory required fields - [ ] Create discrepancy report - [ ] List any discrepancies found during reconciliation - [ ] Investigation notes - [ ] Resolution status - [ ] Create controlled substance disposal report - [ ] Items disposed (expired, damaged, recalled) - [ ] Disposal method, date, witnesses - [ ] Regulatory compliance documentation - [ ] Add export to PDF/Excel for submission to authorities - [ ] Test all controlled substance reports - [ ] Compliance review with regulations - [ ] User acceptance testing #### Dangerous Drug Storage Tracking - [ ] Create `DangerousGoodStorageLocation` entity - [ ] SpecialStorageType (Controlled temp, Flammable, Refrigerated, etc.) - [ ] TemperatureLog (if applicable) - [ ] AccessControl (who can access) - [ ] ComplianceChecklist - [ ] Add storage compliance checking - [ ] Verify dangerous drugs stored in approved locations only - [ ] Alert if dangerous drug in non-compliant location - [ ] Create temperature monitoring for refrigerated drugs - [ ] Log temperature readings - [ ] Alert if temperature out of range - [ ] Integrate with IoT temperature sensors (future) - [ ] Create storage compliance report - [ ] List all dangerous drugs and their storage locations - [ ] Compliance status - [ ] Temperature logs for refrigerated items - [ ] Test storage tracking - [ ] Compliance review - [ ] User acceptance testing --- ### 3.4 Pharmacy Reports (3 weeks) - 0/14 #### Implement all pharmacy-specific reports from requirements 3.9.7 ##### Report P1: Drug/Medical Receipt-Issue Inspection Report - [ ] Create query combining receipts and issues for pharmacy - [ ] Create report template with details for audit - [ ] Add filters: date range, item, lot - [ ] Test and deploy ##### Report P2: Near-Expiry Drug Report (Enhanced) - [ ] Extend existing near-expiry report with pharmacy-specific fields - [ ] Add columns: Trade name, Generic name, Dosage form, Strength - [ ] Add suggested actions column - [ ] Add potential loss value calculation - [ ] Test and deploy ##### Report P3: Drug Receipt Report - [ ] Create query for pharmacy goods receipts - [ ] Add pharmacy-specific columns - [ ] Add grouping by vendor and drug category - [ ] Test and deploy ##### Report P4: Pending Receipt Report (Pharmacy) - [ ] Create pharmacy-specific pending receipt report - [ ] Add critical drug indicators - [ ] Add stock-out risk analysis - [ ] Test and deploy ##### Report P5: Vendor Invoice Report - [ ] Create invoice matching report - [ ] Add price variance analysis - [ ] Add drug-specific columns - [ ] Test and deploy ##### Report P6: Drug/Medical Inventory Summary - [ ] Create comprehensive inventory summary for pharmacy - [ ] Add sections: by category, by storage location, controlled substances - [ ] Add value breakdown by price scheme (OPD, IPD, etc.) - [ ] Add KPIs: turnover rate, days of supply, stock-out rate - [ ] Test and deploy ##### Report P7: Drug Receipt to Warehouse Report - [ ] Create detailed receipt transaction report - [ ] Add columns: Receipt number, Date, Vendor, PO reference, Items, Quantities, Costs - [ ] Add lot and expiry tracking - [ ] Test and deploy ##### Report P8: Medical Supplies Pending Delivery Report - [ ] Create report showing items in transit - [ ] Add expected delivery dates - [ ] Add aging analysis (overdue deliveries) - [ ] Test and deploy ##### Report P9: Purchase Requisition Forms (Pharmacy) - [ ] Create pharmacy-formatted purchase requisition - [ ] Add drug-specific fields (trade name, generic name, dosage form) - [ ] Add regulatory information - [ ] Add approval signature sections - [ ] Test and deploy ##### Report P10: Purchase Order Form (Pharmacy) - [ ] Create pharmacy-formatted PO - [ ] Add vendor drug license verification - [ ] Add special handling instructions - [ ] Add storage requirements - [ ] Test and deploy ##### Report P11: Receipt Memo and Accounting Record - [ ] Create accounting format receipt document - [ ] Add GL account information - [ ] Add cost center allocation - [ ] Add authorization signatures - [ ] Test and deploy ##### Report P12: Controlled Substance Register (Logbook) - [ ] Create traditional logbook format report - [ ] Add all regulatory required columns - [ ] Add running balance - [ ] Add signature sections - [ ] Ensure printable format matches regulatory requirements - [ ] Test and deploy ##### Report P13: Pharmacy KPI Dashboard Report - [ ] Create executive summary report - [ ] Add KPIs: Stock value, Turnover rate, Near-expiry items, Controlled substance balance - [ ] Add trend charts - [ ] Add comparison with targets - [ ] Test and deploy ##### Report P14: Drug Utilization Report - [ ] Create report showing usage patterns by drug - [ ] Add analysis by department, diagnosis (if available from HIS) - [ ] Add ABC analysis - [ ] Add cost analysis - [ ] Test and deploy --- ### 3.5 HIS Integration (3 weeks) - 0/5 #### Integration Architecture - [ ] Design integration approach (API, Message Queue, Database sync) - [ ] Create `IHISIntegrationService` interface - [ ] Implement authentication/authorization for HIS API - [ ] Create data mapping between PIAM and HIS models - [ ] Implement error handling and retry logic - [ ] Create integration logging and monitoring - [ ] Write integration tests with HIS sandbox/test environment #### Prescription Orders Integration - [ ] Create `Prescription` entity (or sync from HIS) - [ ] PrescriptionId, PatientId, PhysicianId - [ ] PrescriptionDate, Items - [ ] Status (New, Filled, PartiallyFilled, Cancelled) - [ ] Implement ReceivePrescription method - [ ] Receive prescription orders from HIS - [ ] Validate drug availability - [ ] Create pharmacy dispensing task - [ ] Send acknowledgment to HIS - [ ] Implement GetPendingPrescriptions method - [ ] Query HIS for new prescriptions - [ ] Sync to PIAM pharmacy queue - [ ] Implement UpdatePrescriptionStatus method - [ ] Notify HIS when prescription filled - [ ] Send dispensed quantity and pharmacist information - [ ] Test prescription order flow end-to-end #### Dispensing Records Integration - [ ] Implement SendDispensingRecord method - [ ] Send dispensing details to HIS - [ ] Include drug, quantity, pharmacist, counseling notes - [ ] Update patient medication administration record (MAR) - [ ] Implement GetDispenseHistory method - [ ] Retrieve patient's medication history from HIS - [ ] Display in PIAM for drug interaction checking - [ ] Display for refill validation - [ ] Test dispensing record synchronization #### Patient Drug History Integration - [ ] Implement GetPatientDrugHistory method - [ ] Retrieve patient's complete drug history from HIS - [ ] Display allergies, adverse reactions - [ ] Display current medications - [ ] Implement drug interaction checking (basic) - [ ] Check current prescription against patient history - [ ] Alert for potential interactions - [ ] Alert for duplicate therapy - [ ] Alert for allergies - [ ] Create patient drug history viewer in frontend - [ ] Test patient history retrieval and display #### Stock Level Integration (Bi-directional) - [ ] Implement SendStockLevel method - [ ] Send pharmacy stock levels to HIS - [ ] Real-time or scheduled sync - [ ] Implement ReceiveStockLevelRequest method - [ ] HIS queries PIAM for drug availability - [ ] Return current quantity on hand - [ ] Test stock level synchronization #### Testing & Go-Live - [ ] Integration testing with HIS test environment - [ ] End-to-end testing (prescription → dispensing → patient record) - [ ] Performance testing (throughput, latency) - [ ] Failover testing (handle HIS downtime gracefully) - [ ] Security and compliance testing - [ ] User acceptance testing - [ ] Production deployment coordination with HIS team - [ ] Post-go-live monitoring and support --- ## 🟢 Phase 4: Advanced Features (MEDIUM) - 10 weeks ### 4.1 General Warehouse Enhancements (2 weeks) - 0/8 #### Stock Level Alerting Enhancements - [ ] Add reorder point automatic calculation - [ ] Based on historical usage - [ ] Lead time consideration - [ ] Safety stock calculation - [ ] Add seasonal adjustment for reorder points - [ ] Add demand forecasting (simple moving average or exponential smoothing) - [ ] Add automated purchase requisition generation - [ ] Auto-create PR when stock below reorder point - [ ] Suggest order quantity (EOQ formula) - [ ] Test automated reorder functionality #### Return Receipt Flows - [ ] Implement receipt return from departments - [ ] Create `DepartmentReturn` document type - [ ] Link to original issue - [ ] Capture return reason - [ ] Return to stock or quarantine - [ ] Implement inter-warehouse return flow - [ ] Create reverse transfer - [ ] Track return reasons - [ ] Add return authorization workflow - [ ] Require approval for returns - [ ] Quality check before returning to stock - [ ] Create return receipt frontend - [ ] Test return workflows --- ### 4.2 Budget & Accounting Integration (3 weeks) - 0/11 #### GL Account Mapping - [ ] Create `WarehouseGLMapping` entity - [ ] Map Warehouse + ItemCategory → GL Accounts - [ ] InventoryAccount (asset), CostOfGoodsAccount (expense), VarianceAccount, ReturnAccount - [ ] Create `IGLIntegrationService` interface - [ ] Implement `GLIntegrationService` - [ ] GetGLAccountForTransaction method - [ ] GenerateGLEntry method - [ ] PostToGL method (integration with accounting system) - [ ] Create GL mapping configuration UI - [ ] Test GL account mapping #### Accounting Voucher Generation - [ ] Implement voucher generation on inventory transactions - [ ] Receipt: Debit Inventory, Credit Accounts Payable - [ ] Issue: Debit COGS, Credit Inventory - [ ] Adjustment: Debit/Credit Variance Account and Inventory - [ ] Transfer: No GL impact (inter-account transfer) - [ ] Create `AccountingVoucher` entity (or integrate with existing accounting module) - [ ] Create voucher batch processing - [ ] Daily batch job to generate vouchers - [ ] Manual trigger for immediate posting - [ ] Create voucher review and approval workflow - [ ] Test voucher generation for all transaction types #### Budget Tracking - [ ] Create `BudgetAllocation` entity - [ ] By ItemCategory or Item, By Department, By Fiscal year - [ ] AllocatedAmount, CommittedAmount, ActualAmount, AvailableAmount - [ ] Create `IBudgetService` interface - [ ] Implement `BudgetService` - [ ] CheckBudgetAvailability method - [ ] CommitBudget method (on requisition approval) - [ ] PostBudget method (on goods receipt or issue) - [ ] ReleaseBudget method (on requisition cancellation) - [ ] GetBudgetUtilization method - [ ] Integrate budget checking into requisition approval - [ ] Reject requisition if budget insufficient - [ ] Allow override with special approval - [ ] Create budget allocation configuration UI - [ ] Set up budgets by department, category, fiscal year - [ ] Import budget from Excel - [ ] Adjust budgets (with approval) - [ ] Create budget utilization dashboard - [ ] Show allocated vs committed vs actual - [ ] Show available budget - [ ] Alert when approaching limit (e.g., 80% utilized) - [ ] Test budget checking and commitment workflow #### Cost Accounting Reports - [ ] Create Cost of Goods Issued report - [ ] Calculate COGS by department, category, time period - [ ] Create Inventory Valuation report - [ ] Total inventory value by warehouse, category - [ ] Aging analysis - [ ] Comparison with previous period - [ ] Create Budget vs Actual report - [ ] Compare budget allocation, committed, actual - [ ] Variance analysis - [ ] Forecast year-end position - [ ] Create Variance Analysis report - [ ] Price variance (PO price vs actual receipt price) - [ ] Quantity variance (ordered vs received) - [ ] Usage variance (expected vs actual consumption) - [ ] Test all cost accounting reports --- ### 4.3 ASN (Advanced Ship Notice) (2 weeks) - 0/8 #### Backend Development - [ ] Create `AdvancedShipNotice` entity - [ ] ASN Number, ASN Date, Expected Arrival Date - [ ] Link to PurchaseOrder - [ ] VendorReference, Carrier, TrackingNumber - [ ] Status (Sent, In Transit, Arrived, Received, Closed) - [ ] Lines collection - [ ] Create `AdvancedShipNoticeLine` entity - [ ] Item, OrderedQuantity, ShippedQuantity - [ ] Lot numbers, Expiry dates (from vendor) - [ ] Box/Pallet information (packaging details) - [ ] Weight, Dimensions - [ ] Create EF Core configuration classes - [ ] Create and run database migration - [ ] Create DTOs - [ ] Create `IASNService` interface - [ ] Implement `ASNService` - [ ] ImportASN method (EDI, API, manual entry) - [ ] CreateGoodsReceiptFromASN method - [ ] CompareASNvsActual method (discrepancy detection) - [ ] CloseASN method - [ ] Create `ASNController` - [ ] GET /api/asn - List ASNs - [ ] POST /api/asn/import - Import ASN - [ ] GET /api/asn/{id} - Get ASN details - [ ] POST /api/asn/{id}/create-grn - Create GRN from ASN - [ ] Implement EDI integration for ASN (if vendor supports) - [ ] Parse EDI 856 Advance Ship Notice - [ ] Map to ASN entity - [ ] Implement email parsing for ASN - [ ] Parse vendor shipping notification emails - [ ] Extract ASN data - [ ] Write unit tests - [ ] Write integration tests #### Frontend Development - [ ] Update `warehouse-asn` module (currently mock) - [ ] Create TypeScript models - [ ] Create `ASNService` (HTTP client) - [ ] Create ASN import page - [ ] Manual entry form - [ ] File upload (EDI, Excel) - [ ] Email integration (future) - [ ] Create ASN workbench - [ ] List all ASNs with status - [ ] Filter by date, vendor, status - [ ] Action: Create GRN from ASN - [ ] Create ASN detail view - [ ] Display ASN header and lines - [ ] Show expected vs actual quantities (for closed ASNs) - [ ] Discrepancy highlights - [ ] Create ASN-to-GRN wizard - [ ] Pre-populate GRN form with ASN data - [ ] Allow adjustments - [ ] Quick receive workflow - [ ] Add translation keys - [ ] Add routing and navigation #### Testing - [ ] Test ASN import (manual, EDI, file) - [ ] Test GRN creation from ASN - [ ] Test discrepancy detection - [ ] Test ASN status workflow - [ ] Test with sample vendor ASN data - [ ] User acceptance testing --- ### 4.4 Tier 3-4 Reports & Analytics (3 weeks) - 0/8 #### Tier 3: Compliance and Audit Reports ##### Report A1: Receipt Inspection Report (Enhanced) - [ ] Add quality inspection details - [ ] Add acceptance/rejection criteria - [ ] Add inspector signatures - [ ] Add photos/attachments support (future) - [ ] Test and deploy ##### Report A2: Adjustment Report with Reasons - [ ] Create detailed adjustment report - [ ] Group by reason code - [ ] Add value impact analysis - [ ] Add approver information - [ ] Add trend analysis (frequent adjustments by item/location) - [ ] Test and deploy ##### Report A3: Cycle Count Results (Enhanced) - [ ] Extend existing cycle count report - [ ] Add variance analysis by employee, location, item - [ ] Add accuracy metrics - [ ] Add trend over time - [ ] Test and deploy ##### Report A4: Item Master Change Log - [ ] Create audit trail report for item master changes - [ ] Add columns: Date, User, Field Changed, Old Value, New Value, Reason - [ ] Add filters: date range, item, user, field - [ ] Test and deploy ##### Report A5: Transaction Audit Trail - [ ] Create comprehensive transaction log report - [ ] Add columns: Date, Time, Transaction Type, Document, User, Item, Quantity, Location, Before/After values - [ ] Add filters for forensic analysis - [ ] Test and deploy #### Tier 4: Analytics Reports ##### Report A6: ABC Analysis - [ ] Create ABC classification report - [ ] Classify items by value (A: top 80%, B: next 15%, C: remaining 5%) - [ ] Classify items by quantity - [ ] Classify items by movement frequency - [ ] Add visualization (Pareto chart) - [ ] Add recommendations (e.g., "Focus cycle counting on Class A items") - [ ] Test and deploy ##### Report A7: Slow-Moving and Non-Moving Items - [ ] Create query for items with no movement in X days (configurable: 90, 180, 365 days) - [ ] Calculate carrying cost for slow-moving inventory - [ ] Add recommendations (dispose, discount, return to vendor) - [ ] Test and deploy ##### Report A8: Stock Turnover Report - [ ] Calculate turnover rate by item, category, warehouse - [ ] Turnover Rate = COGS / Average Inventory Value - [ ] Days of Supply = Average Inventory / Average Daily Usage - [ ] Add trend analysis - [ ] Add comparison with target turnover rates - [ ] Add benchmarking (industry standards) - [ ] Test and deploy ##### Report A9: Demand Forecasting Report - [ ] Implement simple forecasting model (moving average or exponential smoothing) - [ ] Generate forecast for next 1, 3, 6, 12 months - [ ] Add confidence intervals - [ ] Add comparison with actual demand (forecast accuracy) - [ ] Add seasonal adjustment - [ ] Test and deploy ##### Report A10: Price Comparison Report - [ ] Compare prices across vendors for same items - [ ] Show price history over time - [ ] Identify best price opportunities - [ ] Add cost savings analysis (if switched vendors) - [ ] Test and deploy #### Analytics Dashboard - [ ] Create warehouse analytics dashboard - [ ] KPI widgets (stock value, turnover rate, accuracy, fill rate) - [ ] Charts (inventory trend, ABC distribution, movement analysis) - [ ] Top lists (top moving items, top value items, top discrepancies) - [ ] Alerts summary - [ ] Add drill-down capabilities (click widget to see detailed report) - [ ] Add date range selector - [ ] Add export to PDF/PowerPoint - [ ] Test dashboard with real data - [ ] User acceptance testing --- ### 4.5 Configuration Management UI (2 weeks) - 0/5 #### Warehouse Settings Management - [ ] Create `WarehouseSettings` entity - [ ] Document numbering formats (patterns and sequences) - [ ] Default warehouses for user roles - [ ] Auto-approval thresholds (by document type and amount) - [ ] Alert configurations (thresholds, channels, recipients) - [ ] Email notification settings (SMTP config, templates) - [ ] Reporting settings (logo, headers, footers) - [ ] Integration settings (HIS endpoints, credentials) - [ ] Create `ISettingsService` interface - [ ] Implement `SettingsService` (CRUD for settings) - [ ] Create `SettingsController` - [ ] Create settings management UI (admin panel) - [ ] Tabs for different setting categories - [ ] Document numbering configuration - [ ] Define patterns with placeholders (e.g., REQ-{YYYY}-{MM}-{####}) - [ ] Set current sequence numbers - [ ] Reset sequences - [ ] Default values configuration - [ ] Auto-approval thresholds - [ ] Alert configuration (link to existing alert config from Phase 2) - [ ] Email settings - [ ] Report customization (logo upload, header/footer text) - [ ] Save and validate settings - [ ] Test settings management - [ ] User acceptance testing #### Master Data Management UIs ##### Adjustment Reasons - [ ] Create CRUD UI for adjustment reasons - [ ] List all reasons with active/inactive status - [ ] Add/edit/delete reasons - [ ] Set default reason - [ ] Test and deploy ##### Transfer Types - [ ] Create `TransferType` enum or entity (if not exists) - [ ] StandardTransfer, BorrowOut, BorrowReturn, Emergency, Replenishment, Redistribution - [ ] Create CRUD UI for transfer types - [ ] Associate transfer types with workflow rules (e.g., borrow requires return date) - [ ] Test and deploy ##### Document Types - [ ] Create master list of document types (if not already exists) - [ ] Create CRUD UI for document type configuration - [ ] Define numbering pattern per document type - [ ] Define required approvals per document type - [ ] Define permissions per document type - [ ] Test and deploy ##### Storage Location Types - [ ] Create CRUD UI for location types - [ ] List all location types (Warehouse, Sub-Store, Bin, Quarantine, etc.) - [ ] Add/edit/delete location types - [ ] Associate location types with properties (e.g., requires temperature control) - [ ] Test and deploy ##### Unit of Measure (UOM) - [ ] Create CRUD UI for UOM management - [ ] List all UOMs with conversion factors - [ ] Add/edit/delete UOMs - [ ] Define base UOM per item - [ ] Test UOM conversions #### User Role Management (Warehouse-Specific) - [ ] Extend existing user/role management with warehouse-specific permissions - [ ] Create warehouse permission matrix - [ ] Permissions: View Stock, Receive Goods, Issue Stock, Adjust Stock, Approve Requisitions, Manage Settings, etc. - [ ] Roles: Warehouse Manager, Warehouse Clerk, Pharmacist, Department Requester, etc. - [ ] Create role assignment UI - [ ] Assign users to warehouse roles - [ ] Assign users to specific warehouses (location-based access control) - [ ] Test role-based access control - [ ] User acceptance testing --- ## 📋 Additional Tasks (Ongoing) ### Documentation - 0/8 - [ ] Write user manuals for all new modules - [ ] Write administrator guides (settings, master data, workflows) - [ ] Create video tutorials for key workflows - [ ] Document API endpoints (Swagger/OpenAPI) - [ ] Create database schema documentation - [ ] Write deployment and configuration guides - [ ] Create troubleshooting guides - [ ] Maintain change log ### Testing - 0/6 - [ ] Conduct security testing (penetration testing, vulnerability scanning) - [ ] Conduct performance testing (load testing, stress testing) - [ ] Conduct usability testing with end users - [ ] Conduct accessibility testing (WCAG compliance) - [ ] Conduct browser compatibility testing - [ ] Conduct mobile responsiveness testing ### Training - 0/4 - [ ] Develop training materials - [ ] Conduct train-the-trainer sessions - [ ] Conduct end-user training sessions - [ ] Create training assessment and certification ### Deployment - 0/5 - [ ] Set up production environment - [ ] Conduct data migration (if needed) - [ ] Perform production deployment - [ ] Conduct post-deployment verification - [ ] Provide hypercare support (1-2 weeks post-deployment) --- ## Priority Matrix Quick Reference ### 🔴 CRITICAL (Implement Immediately) 1. Internal Requisition Module 2. Stock Issue/Dispense Module 3. Stock Adjustment Module 4. Essential Reports (Tier 1) ### 🟡 HIGH (Implement Soon) 1. Operational Reports (Tier 2) 2. Document Printing & Labels 3. Alert System 4. Approval Workflow Engine 5. Pharmacy Enhancements (if hospital) ### 🟠 MEDIUM (Implement Later) 1. Budget & Accounting Integration 2. Configuration Management UI 3. Tier 3-4 Reports & Analytics ### 🟢 LOW (Enhancement/Optimization) 1. ASN Implementation 2. Transfer Order Creation UI 3. Cycle Count Enhancements --- **End of TODO List**