A comprehensive enterprise expense management system built on the Workday platform for Avo.ai. ClaimGuard follows a multi-tier workflow design for submitting, tracking, and processing employee expense reimbursements.
ClaimGuard is a full-stack expense reporting system that provides:
- Multi-tier Workflow: Complete expense submission and approval process
- Financial Controls: Multi-dimensional expense allocation using cost centers, funds, and worktags
- Audit Compliance: Required fields and receipt thresholds ensure regulatory compliance
- User-Friendly Interface: Clean, intuitive design with progressive disclosure
- Real-Time Validation: Automated checks for receipt requirements and financial coding
- Personalized welcome interface
- Inbox widget with pending tasks and notifications
- Quick-access application launcher with tiles (Favorites, Career, Payroll, Absence, Purchases, Expenses, Benefits)
- Avo.ai institutional branding
- Actions: Create/Edit Expense Reports and Spend Authorizations
- Views: Access to all reports, authorizations, and payment preferences
- Recent Activity: Historical expense reports with status tracking
- Comprehensive expense report form with real-time totals
- Required fields validation (Business Purpose, Memo, Receipts for $75+)
- Support for multiple expense lines
- Draft saving capability
- Tab-based interface for expense lines and attachments
- Granular expense item tracking with automatic calculations
- Mileage calculation with standard IRS rates ($0.545/mile)
- Financial allocation with cost centers, funds, and worktags
- Receipt attachment support (file upload)
- Business reason documentation
- Node.js with Express - REST API server
- TypeScript - Type-safe backend code
- MongoDB with Mongoose - Data persistence (optional)
- JWT - Authentication tokens
- Multer - File upload handling
- React with TypeScript - Component-based UI
- React Hooks - State management
- CSS Modules - Component styling
- Responsive Design - Mobile and desktop support
See SETUP.md for detailed installation instructions.
# Backend
cd backend
npm install
npm run dev
# Frontend (in another terminal)
cd frontend
npm install
npm startVisit http://localhost:3000 to access the application.
┌─────────────────────────────────────────────────────────────┐
│ Frontend (React) │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Dashboard │ │ Expense Hub │ │ Expense Reports │ │
│ └─────────────┘ └──────────────┘ └──────────────────┘ │
└────────────────────────────┬────────────────────────────────┘
│ REST API
┌────────────────────────────┴────────────────────────────────┐
│ Backend (Node.js) │
│ ┌──────────────┐ ┌───────────────┐ ┌─────────────────┐ │
│ │ Controllers │ │ Routes │ │ Middleware │ │
│ └──────────────┘ └───────────────┘ └─────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Models (Mongoose) │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────────┬────────────────────────────────┘
│
┌────────────────────────────┴────────────────────────────────┐
│ Database (MongoDB) │
│ Expense Reports • Spend Authorizations • Users │
└─────────────────────────────────────────────────────────────┘
- Business purpose is mandatory
- Memo is mandatory for all reports
- Receipts required for expenses over $75
- All expense lines must have valid financial coding
- Cost Center (required) - Department or unit identifier
- Fund (required) - Funding source classification
- Worktags (required) - Additional program/project allocation
- Grant, Designee, Detail Code, Student Organization (optional)
- Draft - Initial state, editable by employee
- Submitted - Sent for approval, locked for editing
- Approved - Manager approved, ready for payment
- Rejected - Denied with reason, can be revised
- Paid - Payment processed
POST /api/expenses/reports
Content-Type: application/json
{
"userId": "user_id",
"employeeName": "John Doe",
"reportDate": "2024-01-15",
"businessPurpose": "Conference",
"reimbursementPaymentType": "check",
"memo": "Annual tech conference",
"expenseLines": [...]
}POST /api/expenses/reports/:id/submitSimilar endpoints for spend authorizations at /api/spend/authorizations/*
- Rate Limiting: API endpoints protected with configurable rate limits
- General API: 100 requests per 15 minutes
- Write operations: 20 requests per 15 minutes
- Authentication: 5 attempts per 15 minutes
- Input Validation: Server-side validation for all data inputs
- Receipt Enforcement: Mandatory receipts for expenses over $75
- Audit Trail: Complete logging of all state changes
- Financial Validation: Multi-dimensional expense allocation checks
- Secure File Uploads: Type validation and secure storage handling
ClaimGuard/
├── backend/ # Node.js backend
│ ├── src/
│ │ ├── models/ # Mongoose schemas
│ │ ├── controllers/ # Business logic
│ │ ├── routes/ # API endpoints
│ │ └── utils/ # Helper functions
│ └── package.json
├── frontend/ # React frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── types/ # TypeScript definitions
│ │ └── App.tsx # Main application
│ └── package.json
├── README.md
└── SETUP.md
- TypeScript strict mode enabled
- ESLint for code quality
- Functional React components with hooks
- RESTful API design patterns
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is part of the ClaimGuard expense management system.
For issues and questions:
- Create an issue in the repository
- Contact the development team
- Refer to SETUP.md for troubleshooting
Built for Avo.ai based on Workday expense management workflows.