24 KiB
Feature Matrix
Taiwan NPO Membership Management System
Last Updated: 2025-11-20
This document provides a comprehensive feature-by-feature breakdown of the system, implementation status, and related files.
Feature Status Legend
- ✅ Complete - Fully implemented and tested
- 🟡 Partial - Partially implemented
- ❌ Not Started - Planned but not yet implemented
- 🔄 In Progress - Currently being developed
1. Member Management
1.1 Public Member Registration
Status: ✅ Complete
Description: Allow public users to self-register as members through a public form.
Features:
- Full registration form with personal details
- Address information
- Emergency contact
- Terms acceptance
- Auto-login after registration
- Welcome email
Related Files:
- Controller:
app/Http/Controllers/PublicMemberRegistrationController.php - View:
resources/views/register/member.blade.php - Model:
app/Models/Member.php,app/Models/User.php - Route:
GET/POST /register/member - Email:
app/Mail/MemberRegistrationWelcomeMail.php
Validation Rules:
- full_name: required, string, max 255
- email: required, unique in users AND members
- password: required, confirmed, strong
- phone, national_id, address: optional
- terms_accepted: required, accepted
1.2 Admin Member Creation
Status: ✅ Complete
Description: Admins can manually create member records.
Features:
- Create member with or without user account
- Import members via CSV
- Export members to CSV/Excel
- Bulk member operations
Related Files:
- Controller:
app/Http/Controllers/AdminMemberController.php - Views:
resources/views/admin/members/{create,edit,index,show}.blade.php - Route:
POST /admin/members
1.3 Member Profile Management
Status: ✅ Complete
Description: View and edit member information.
Features:
- View member details
- Edit personal information
- Update membership type
- View payment history
- View membership status
Related Files:
- Controller:
app/Http/Controllers/AdminMemberController.php - Views:
resources/views/admin/members/{show,edit}.blade.php - Route:
GET/PATCH /admin/members/{id}
1.4 Member Search & Filtering
Status: ✅ Complete
Description: Search and filter members by various criteria.
Features:
- Search by name, email, phone
- Search by national ID (via hash)
- Filter by membership status
- Filter by payment status
- Filter by date range
- Paginated results
Related Files:
- Controller:
app/Http/Controllers/AdminMemberController.php(index method) - View:
resources/views/admin/members/index.blade.php
1.5 National ID Encryption
Status: ✅ Complete
Description: Securely store and search national IDs.
Features:
- AES-256 encryption for storage
- SHA256 hash for searching
- Automatic encryption/decryption via accessors/mutators
- Never expose plain text in logs or responses
Related Files:
- Model:
app/Models/Member.php(getNationalIdAttribute, setNationalIdAttribute) - Migration:
database/migrations/*_create_members_table.php
2. Payment Verification System
2.1 Member Payment Submission
Status: ✅ Complete
Description: Members can submit payment proof for verification.
Features:
- Upload receipt (JPG, PNG, PDF, max 10MB)
- Specify payment method (bank transfer, convenience store, cash, credit card)
- Specify amount, date, reference
- Add optional notes
- Receipt stored in private storage
- Submission confirmation email
Related Files:
- Controller:
app/Http/Controllers/MemberPaymentController.php - View:
resources/views/member/submit-payment.blade.php - Model:
app/Models/MembershipPayment.php - Route:
GET/POST /member/submit-payment - Email:
app/Mail/PaymentSubmittedMail.php
2.2 Three-Tier Payment Verification
Status: ✅ Complete
Description: 3-tier approval workflow for payment verification.
Workflow:
- Tier 1 (Cashier): Verify receipt legitimacy
- Tier 2 (Accountant): Verify financial details
- Tier 3 (Chair): Final approval
Features:
- Sequential approval (must go Tier 1 → 2 → 3)
- Permission-based access control
- Can reject at any tier with reason
- Email notifications at each stage
- Automatic membership activation on Tier 3 approval
- Audit logging for each action
Related Files:
- Controller:
app/Http/Controllers/PaymentVerificationController.php - Views:
resources/views/admin/payment-verifications/{index,show}.blade.php - Model:
app/Models/MembershipPayment.php - Routes:
POST /admin/payment-verifications/{payment}/approve-cashierPOST /admin/payment-verifications/{payment}/approve-accountantPOST /admin/payment-verifications/{payment}/approve-chairPOST /admin/payment-verifications/{payment}/reject
- Emails:
app/Mail/PaymentApprovedByCashierMail.phpapp/Mail/PaymentApprovedByAccountantMail.phpapp/Mail/PaymentFullyApprovedMail.phpapp/Mail/PaymentRejectedMail.php
2.3 Payment Verification Dashboard
Status: ✅ Complete
Description: Centralized dashboard for payment verification queue.
Features:
- Tabbed interface (All, Cashier Queue, Accountant Queue, Chair Queue, Approved, Rejected)
- Queue counts with badges
- Search by member name, email, reference
- Permission-based tab visibility
- Pagination
- Status badges with color coding
Related Files:
- Controller:
app/Http/Controllers/PaymentVerificationController.php(index method) - View:
resources/views/admin/payment-verifications/index.blade.php - Route:
GET /admin/payment-verifications
2.4 Automatic Membership Activation
Status: ✅ Complete
Description: Automatically activate membership when payment fully approved.
Features:
- Triggered on Tier 3 (Chair) approval
- Sets member.membership_status = 'active'
- Sets membership_started_at = today
- Sets membership_expires_at = today + 1 year (or lifetime)
- Sends activation email to member
- Notifies membership managers
- Audits activation event
Related Files:
- Controller:
app/Http/Controllers/PaymentVerificationController.php(approveByChair method) - Email:
app/Mail/MembershipActivatedMail.php
2.5 Payment Rejection Handling
Status: ✅ Complete
Description: Reject payments with reason at any approval tier.
Features:
- Rejection reason required
- Rejection email with reason sent to member
- Member can resubmit
- Audit logging
Related Files:
- Controller:
app/Http/Controllers/PaymentVerificationController.php(reject method) - Email:
app/Mail/PaymentRejectedMail.php
2.6 Receipt Download
Status: ✅ Complete
Description: Download payment receipt files securely.
Features:
- Authentication required
- Permission checking
- Serves from private storage
- Original filename preserved
Related Files:
- Controller:
app/Http/Controllers/PaymentVerificationController.php(downloadReceipt method) - Route:
GET /admin/payment-verifications/{payment}/receipt
3. Issue Tracking System
3.1 Issue Creation & Management
Status: ✅ Complete
Description: Create and manage work items, tasks, and support requests.
Features:
- Auto-generated issue number (ISS-YYYY-NNN)
- Issue types: work_item, project_task, maintenance, member_request
- Priority levels: low, medium, high, urgent
- Status workflow: new → assigned → in_progress → review → closed
- Due date tracking
- Estimated vs actual hours
- Sub-task support (parent_issue_id)
Related Files:
- Controller:
app/Http/Controllers/IssueController.php - Model:
app/Models/Issue.php - Views:
resources/views/admin/issues/{index,create,edit,show}.blade.php - Routes: Standard CRUD routes under
/admin/issues
3.2 Issue Assignment & Workflow
Status: ✅ Complete
Description: Assign issues to users and manage status transitions.
Features:
- Assign to user
- Update status with validation (can't skip statuses)
- Reviewer assignment
- Reopen closed issues
- Assignment notification email
Related Files:
- Controller:
app/Http/Controllers/IssueController.php(assign, updateStatus methods) - Email:
app/Mail/IssueAssignedMail.php - Route:
POST /admin/issues/{issue}/assign,PATCH /admin/issues/{issue}/status
3.3 Issue Comments
Status: ✅ Complete
Description: Add comments to issues for collaboration.
Features:
- Add comments
- Internal vs external comments (is_internal flag hides from members)
- Comment notifications to watchers
- Timestamps
Related Files:
- Controller:
app/Http/Controllers/IssueController.php(addComment method) - Model:
app/Models/IssueComment.php - Email:
app/Mail/IssueCommentedMail.php - Route:
POST /admin/issues/{issue}/comments
3.4 Issue Attachments
Status: ✅ Complete
Description: Upload and manage file attachments on issues.
Features:
- Upload files to issues
- Download attachments
- Delete attachments
- File metadata tracking (size, mime type)
Related Files:
- Controller:
app/Http/Controllers/IssueController.php(uploadAttachment, downloadAttachment, deleteAttachment methods) - Model:
app/Models/IssueAttachment.php - Routes:
POST /admin/issues/{issue}/attachmentsGET /admin/issues/attachments/{attachment}/downloadDELETE /admin/issues/attachments/{attachment}
3.5 Time Logging
Status: ✅ Complete
Description: Log time spent on issues.
Features:
- Log hours worked
- Specify work date
- Optional description
- Automatic summation of total hours
- Compare to estimated hours
Related Files:
- Controller:
app/Http/Controllers/IssueController.php(logTime method) - Model:
app/Models/IssueTimeLog.php,app/Models/Issue.php(getTotalTimeLoggedAttribute) - Route:
POST /admin/issues/{issue}/time-logs
3.6 Issue Watchers
Status: ✅ Complete
Description: Users can watch issues for notifications.
Features:
- Add watchers to issue
- Remove watchers
- Watchers receive email on status changes and comments
Related Files:
- Controller:
app/Http/Controllers/IssueController.php(addWatcher, removeWatcher methods) - Model:
app/Models/Issue.php(watchers relationship) - Routes:
POST /admin/issues/{issue}/watchersDELETE /admin/issues/{issue}/watchers
3.7 Issue Labels
Status: ✅ Complete
Description: Categorize issues with color-coded labels.
Features:
- Create/edit/delete labels
- Assign multiple labels to issues
- Filter issues by label
- Color customization
Related Files:
- Controller:
app/Http/Controllers/IssueLabelController.php - Model:
app/Models/IssueLabel.php - Views:
resources/views/admin/issue-labels/{index,create,edit}.blade.php - Routes: Standard CRUD routes under
/admin/issue-labels - Seeder:
database/seeders/IssueLabelSeeder.php
3.8 Issue Relationships
Status: ✅ Complete
Description: Link related issues.
Features:
- Relationship types: blocks, is_blocked_by, relates_to, duplicates, is_duplicated_by
- Bidirectional linking
- View related issues
Related Files:
- Model:
app/Models/IssueRelationship.php,app/Models/Issue.php(relationships) - Migration:
database/migrations/*_create_issues_table.php
3.9 Issue Reports & Analytics
Status: ✅ Complete
Description: Generate reports and analytics on issue data.
Features:
- Status distribution
- Priority distribution
- Workload analysis
- Overdue issues report
Related Files:
- Controller:
app/Http/Controllers/IssueReportsController.php - Route:
GET /admin/issue-reports
3.10 Overdue Detection
Status: ✅ Complete
Description: Automatically detect and flag overdue issues.
Features:
- Overdue calculation (due_date < today AND status != closed)
- Days until due calculation
- Overdue scope for filtering
- Email reminders (scheduled)
Related Files:
- Model:
app/Models/Issue.php(getIsOverdueAttribute, getDaysUntilDueAttribute, overdue scope) - Email:
app/Mail/IssueOverdueMail.php,app/Mail/IssueDueSoonMail.php
4. Budget Management
4.1 Budget Creation & Management
Status: ✅ Complete
Description: Create and manage annual/quarterly/monthly budgets.
Features:
- Fiscal year selection
- Period type (annual, quarterly, monthly)
- Period date range
- Budget workflow: draft → submitted → approved → active → closed
- Notes support
Related Files:
- Controller:
app/Http/Controllers/BudgetController.php - Model:
app/Models/Budget.php - Views:
resources/views/admin/budgets/{index,create,edit,show}.blade.php - Routes: Standard CRUD routes under
/admin/budgets
4.2 Budget Items
Status: ✅ Complete
Description: Line items within budgets linked to chart of accounts.
Features:
- Link to chart of account
- Set budgeted amount
- Track actual amount (auto-updated from transactions)
- Calculate variance (actual - budgeted)
- Calculate utilization percentage
- Over-budget detection
Related Files:
- Model:
app/Models/BudgetItem.php - Migration:
database/migrations/*_create_budgets_table.php
4.3 Budget Workflow
Status: ✅ Complete
Description: Manage budget lifecycle states.
Features:
- Submit for approval (draft → submitted)
- Approve budget (submitted → approved)
- Activate budget (approved → active)
- Close budget (active → closed)
- Permission-based actions
Related Files:
- Controller:
app/Http/Controllers/BudgetController.php(submit, approve, activate, close methods) - Routes:
POST /admin/budgets/{budget}/submitPOST /admin/budgets/{budget}/approvePOST /admin/budgets/{budget}/activatePOST /admin/budgets/{budget}/close
4.4 Budget Variance Analysis
Status: ✅ Complete
Description: Calculate and display budget vs actual variances.
Features:
- Total budgeted income/expense
- Total actual income/expense
- Variance calculation
- Variance percentage
- Remaining budget
- Over-budget alerts
Related Files:
- Model:
app/Models/BudgetItem.php(variance methods),app/Models/Budget.php(total methods)
5. Financial Management
5.1 Chart of Accounts
Status: ✅ Complete
Description: Hierarchical chart of accounts for financial tracking.
Features:
- Account types: income, expense, asset, liability, net_asset
- Hierarchical parent-child structure
- Account code system
- Chinese and English names
- Category grouping
- Active/inactive status
- Display order
Related Files:
- Model:
app/Models/ChartOfAccount.php - Migration:
database/migrations/*_create_chart_of_accounts_table.php - Seeder:
database/seeders/ChartOfAccountSeeder.php
5.2 Transaction Management
Status: ✅ Complete
Description: Record and track financial transactions.
Features:
- Transaction types: income, expense
- Link to chart of account (required)
- Link to budget item (optional)
- Link to finance document or membership payment (optional)
- Transaction date
- Amount
- Description and reference number
- Notes
- Search and filter
Related Files:
- Controller:
app/Http/Controllers/TransactionController.php - Model:
app/Models/Transaction.php - Views:
resources/views/admin/transactions/{index,create,edit,show}.blade.php - Routes: Standard CRUD routes under
/admin/transactions
5.3 Finance Document Approval
Status: ✅ Complete
Description: 3-tier approval workflow for finance documents.
Features:
- Submit documents with attachments
- 3-tier approval (cashier → accountant → chair)
- Rejection with reason
- Email notifications
- File attachment support
- Same workflow as payment verification
Related Files:
- Controller:
app/Http/Controllers/FinanceDocumentController.php - Model:
app/Models/FinanceDocument.php - Views:
resources/views/admin/finance-documents/{index,create,show}.blade.php - Routes:
POST /admin/finance-documentsPOST /admin/finance-documents/{document}/approvePOST /admin/finance-documents/{document}/reject
- Emails:
app/Mail/FinanceDocument*.php(5 mailables)
5.4 Financial Reports
Status: ✅ Complete
Description: Generate and store financial reports.
Features:
- Report generation
- Report data stored as JSON
- Historical snapshots
- Multiple report types
Related Files:
- Model:
app/Models/FinancialReport.php - Migration:
database/migrations/*_create_budgets_table.php
6. Security & Authorization
6.1 Role-Based Access Control
Status: ✅ Complete
Description: Spatie Permission-based authorization.
Features:
- Multiple roles: admin, staff, cashier, accountant, chair
- Granular permissions
- Role assignment via UI
- Permission inheritance
Related Files:
- Seeders:
database/seeders/RoleSeeder.php,database/seeders/PaymentVerificationRolesSeeder.php - Controller:
app/Http/Controllers/AdminRoleController.php - Views:
resources/views/admin/roles/{index,create,edit,show}.blade.php - Package: Spatie Laravel Permission
6.2 Admin Middleware
Status: ✅ Complete
Description: Protect admin routes.
Features:
- Check is_admin flag OR admin role
- Return 403 if unauthorized
- Applied to /admin route group
Related Files:
- Middleware:
app/Http/Middleware/EnsureUserIsAdmin.php - Route: Applied to
/admingroup inroutes/web.php
6.3 Paid Membership Middleware
Status: ✅ Complete
Description: Verify active paid membership for member-only resources.
Features:
- Check authentication
- Check member record exists
- Check hasPaidMembership() (active status + future expiry)
- Redirect with error if not eligible
Related Files:
- Middleware:
app/Http/Middleware/CheckPaidMembership.php
6.4 Audit Logging
Status: ✅ Complete
Description: Complete audit trail for all significant actions.
Features:
- Log all CRUD operations
- Log workflow transitions
- Store user, action, object type/id, metadata
- Queryable and exportable
- CSV export
Related Files:
- Model:
app/Models/AuditLog.php - Support:
app/Support/AuditLogger.php - Controller:
app/Http/Controllers/AdminAuditLogController.php - Views:
resources/views/admin/audit-logs/index.blade.php - Routes:
GET /admin/audit-logs,GET /admin/audit-logs/export
7. Email Notifications
7.1 Membership Emails
Status: ✅ Complete
Email Count: 8 mailables
| Trigger | |
|---|---|
| MemberRegistrationWelcomeMail | Self-registration |
| PaymentSubmittedMail | Payment submission (2 variants: member + cashier) |
| PaymentApprovedByCashierMail | Tier 1 approval |
| PaymentApprovedByAccountantMail | Tier 2 approval |
| PaymentFullyApprovedMail | Tier 3 approval |
| PaymentRejectedMail | Payment rejection |
| MembershipActivatedMail | Membership activation |
| MembershipExpiryReminderMail | Expiry reminder |
Related Files:
- Mailables:
app/Mail/Member*.php,app/Mail/Payment*.php,app/Mail/Membership*.php - Templates:
resources/views/emails/members/*,resources/views/emails/payments/*
7.2 Finance Emails
Status: ✅ Complete
Email Count: 5 mailables
| Trigger | |
|---|---|
| FinanceDocumentSubmitted | Document submitted |
| FinanceDocumentApprovedByCashier | Tier 1 approval |
| FinanceDocumentApprovedByAccountant | Tier 2 approval |
| FinanceDocumentFullyApproved | Tier 3 approval |
| FinanceDocumentRejected | Document rejection |
Related Files:
- Mailables:
app/Mail/FinanceDocument*.php - Templates:
resources/views/emails/finance-documents/*
7.3 Issue Emails
Status: ✅ Complete
Email Count: 6 mailables
| Trigger | |
|---|---|
| IssueAssignedMail | Issue assignment |
| IssueStatusChangedMail | Status change |
| IssueCommentedMail | New comment |
| IssueDueSoonMail | Due date approaching |
| IssueOverdueMail | Past due date |
| IssueClosedMail | Issue closed |
Related Files:
- Mailables:
app/Mail/Issue*.php - Templates:
resources/views/emails/issues/*
7.4 Queue Integration
Status: ✅ Complete
Features:
- All emails implement ShouldQueue
- Async delivery via queue workers
- Failed jobs table for retry
- Database/Redis queue driver support
Configuration:
- Queue connection in
.env(QUEUE_CONNECTION)
8. User Interface
8.1 Member Dashboard
Status: ✅ Complete
Description: Member-facing dashboard for viewing membership status and submitting payments.
Features:
- Membership status display with badges
- Membership type and expiry date
- Payment history with verification status
- Submit payment button (if eligible)
- Pending payment alert
- Dark mode support
Related Files:
- Controller:
app/Http/Controllers/MemberDashboardController.php - View:
resources/views/member/dashboard.blade.php - Route:
GET /my-membership
8.2 Admin Dashboard
Status: ✅ Complete
Description: Admin dashboard with overview statistics.
Features:
- Key metrics
- Recent activity
- Quick links
Related Files:
- Controller:
app/Http/Controllers/AdminDashboardController.php - Route:
GET /admin/dashboard
8.3 Responsive Design
Status: ✅ Complete
Description: Mobile-friendly responsive design.
Features:
- Tailwind CSS utility classes
- Responsive grid layouts
- Mobile-friendly tables
- Dark mode support
Related Files:
- All Blade templates in
resources/views/ - Tailwind config:
tailwind.config.js
8.4 Dark Mode
Status: ✅ Complete
Description: Dark mode support across all views.
Features:
- Dark mode toggle
- Consistent dark color scheme
- All views support dark mode
Related Files:
- All Blade templates use
dark:*utility classes
9. Data Import/Export
9.1 Member Import (CSV)
Status: ✅ Complete
Description: Bulk import members from CSV.
Related Files:
- Controller:
app/Http/Controllers/AdminMemberController.php(import, importForm methods) - Routes:
GET/POST /admin/members/import
9.2 Member Export (CSV)
Status: ✅ Complete
Description: Export member list to CSV/Excel.
Related Files:
- Controller:
app/Http/Controllers/AdminMemberController.php(export method) - Route:
GET /admin/members/export
9.3 Audit Log Export
Status: ✅ Complete
Description: Export audit logs to CSV.
Related Files:
- Controller:
app/Http/Controllers/AdminAuditLogController.php(export method) - Route:
GET /admin/audit-logs/export
10. Custom Fields & Extensions
10.1 Custom Fields (Polymorphic)
Status: ✅ Complete
Description: Attach custom fields to any model.
Features:
- Field types: text, select, checkbox, date
- JSON storage for values
- Required/optional fields
- Currently used for Issues
Related Files:
- Model:
app/Models/CustomField.php,app/Models/CustomFieldValue.php - Migration:
database/migrations/*_create_issues_table.php
Summary Statistics
Implementation Status
| Status | Count | Percentage |
|---|---|---|
| ✅ Complete | 52 | 100% |
| 🟡 Partial | 0 | 0% |
| 🔄 In Progress | 0 | 0% |
| ❌ Not Started | 0 | 0% |
Feature Categories
| Category | Features | Status |
|---|---|---|
| Member Management | 5 | ✅ Complete |
| Payment Verification | 6 | ✅ Complete |
| Issue Tracking | 10 | ✅ Complete |
| Budget Management | 4 | ✅ Complete |
| Financial Management | 4 | ✅ Complete |
| Security & Authorization | 4 | ✅ Complete |
| Email Notifications | 4 | ✅ Complete |
| User Interface | 4 | ✅ Complete |
| Data Import/Export | 3 | ✅ Complete |
| Custom Fields | 1 | ✅ Complete |
Code Metrics
| Metric | Count |
|---|---|
| Controllers | 14 |
| Models | 20+ |
| Mailables | 19 |
| Migrations | 25+ |
| Seeders | 4 |
| Middleware | 2 |
| Views (Blade) | 50+ |
| Routes | 100+ |
End of Feature Matrix