Project Management
/Financial Management and Project Costing System
Financial Management & Project Costing System
This comprehensive financial calculation system enables project-based businesses to accurately track costs, manage budgets, and analyze profitability across multiple currencies with automatic historical exchange rate conversion.
1. System Overview
The financial management system provides end-to-end calculation and tracking of project costs, from individual employee hours to complete project profitability analysis. All monetary values can be displayed and calculated in any supported currency, with automatic conversion based on historical exchange rates.
What This System Does
- Internal Resource Costing - Calculates the true cost of employee time spent on projects, including base salaries, overhead expenses, and indirect costs
- External Service Tracking - Monitors all external expenses (contractors, materials, services) associated with projects
- Budget Management - Compares actual costs against planned budgets for both internal resources and external services
- Profitability Analysis - Calculates Gross Profit Margin (GPM) by comparing project income against total costs
- Multi-Currency Support - All financial data can be viewed in any currency with automatic historical conversion
- Automated Monthly Updates - System automatically calculates and stores monthly rates for overhead and indirect costs
2. Core Financial Concepts
Understanding how project costs are calculated requires knowledge of several key components that work together to produce accurate financial reports.
Employee Classification
Employees are categorized into two types, which affects how their costs are calculated:
Direct Cost Staff - Employees who work directly on client projects (developers, consultants, project managers). Their time is tracked and charged to specific projects.
Indirect Cost Staff - Employees who support the business but don't charge time to projects (HR, accounting, management). Their costs are distributed across all direct staff.
The Three Components of Hourly Rates
Every hour worked by direct cost staff has three cost components:
Total Hourly Rate = Base Hourly Rate + Overhead Rate + Indirect Cost Rate Where: ├─ Base Hourly Rate = Employee's salary + social security / working hours ├─ Overhead Rate = Infrastructure costs / total working hours / direct staff count └─ Indirect Cost Rate = Indirect staff costs / total working hours / direct staff count
Important: The system supports configurable methodology changes. For example, you can switch from calculating overhead and indirect costs separately to using static rates that include all components. This flexibility allows you to adapt the calculation method as your business processes evolve.
Employee Grades
Employees are assigned grades (e.g., Junior, Mid, Senior, Lead) which determine their base hourly rate. This allows for:
- Standardized pricing across employees of similar experience levels
- Simplified budget planning using grade-based rates
- Historical tracking of rate changes over time
- Flexible rate overrides when needed
3. How Costs Are Calculated - The Complete Flow
The system calculates project costs through a series of interconnected steps. Here's how everything flows together:
Step 1: Foundation - Salary & Expense Data
EXPENSE DATA (stored in configurable categories) │ ├─ Salaries & Social Security (e.g., account codes 9604, 9605) │ ├─ Employee salaries │ ├─ Social security contributions │ ├─ Stored with: amount, currency, date, employee │ └─ Used to calculate: Base hourly rates │ ├─ Infrastructure Overhead (configurable categories, e.g., excluding 602/1, 402/1, 604%, 605%) │ ├─ Office rent │ ├─ Utilities │ ├─ Equipment │ ├─ Software licenses │ └─ Used to calculate: Overhead rate │ └─ External Project Costs ├─ Contractors ├─ Materials ├─ Third-party services └─ Used in: External services cost
Step 2: Calculate Base Hourly Rates for Direct Staff
FOR EACH DIRECT COST EMPLOYEE, FOR EACH MONTH:
1. Get salary expenses (account codes 9604, 9605) for that month
2. Calculate working hours:
Working Hours = (Calendar Days × 8 hours/day)
- Weekends
- Public Holidays
+ Working Saturdays (if configured)
- Vacation Days
× Utilization Factor (optional)
3. Calculate base hourly rate:
Base Hourly Rate = Total Salary Expenses (converted to target currency)
─────────────────────────────────────────────────
Working Hours
4. Group by employee grade and calculate average per grade
Step 3: Calculate Overhead Rate
OVERHEAD CALCULATION (Infrastructure costs distributed across direct staff):
1. Sum all infrastructure expenses for last 12 months (configurable categories)
- Exclude: Salaries, social security, and other configured categories
- Include: Office costs, utilities, equipment, etc.
2. Calculate annual working hours:
Annual Working Hours = (Working days in year) × 8 hours/day
3. Count direct cost staff currently active
4. Calculate overhead rate:
Overhead Rate = Total Infrastructure Expenses (converted to target currency)
─────────────────────────────────────────────────────────
Annual Working Hours × Number of Direct Staff
Note: This distributes infrastructure costs evenly across all direct staff hours
Step 4: Calculate Indirect Cost Rate
INDIRECT COST CALCULATION (Support staff costs distributed to direct staff):
1. For each indirect cost employee in the month:
a) Get salary expenses (account codes 9604, 9605)
b) Calculate working hours (WITHOUT utilization factor):
Working Hours = Calendar Days × 8
- Weekends
- Holidays
- Vacation Days
c) Calculate hourly rate:
Indirect Employee Rate = Salary Expenses / Working Hours
2. Sum all indirect employee costs for the month
3. Get count of direct cost staff
4. Calculate indirect cost rate:
Indirect Cost Rate = Total Indirect Staff Costs (converted to target currency)
────────────────────────────────────────────────────
Number of Direct Staff × Average Working Hours
Note: This distributes support staff costs across billable staff
Step 5: Calculate Final Hourly Rates by Grade
COMPLETE HOURLY RATE PER GRADE: For each employee grade (Junior, Mid, Senior, Lead, etc.): Final Rate = Base Hourly Rate (for that grade) + Overhead Rate + Indirect Cost Rate These rates are: ├─ Calculated monthly ├─ Stored in the database for historical tracking ├─ Used for budget planning └─ Can be overridden manually if needed Rate Priority System: When calculating costs, the system uses rates in this order: 1. Finalized rate for exact month (if exists) 2. Last finalized rate before the target month 3. Calculated rate based on current expenses
Step 6: Calculate Project Internal Costs
PROJECT INTERNAL RESOURCE COST (Actual time worked): For each time tracking entry: 1. Get employee's hourly rate for that month (from stored rates) 2. Convert rate to target currency using transaction date 3. Add overhead rate for that month (if applicable based on methodology) 4. Add indirect cost rate for that month (if applicable based on methodology) 5. Multiply by hours worked Entry Cost = (Hourly Rate + Overhead Rate + Indirect Rate) × Hours Worked Sum all entries for the project = Total Internal Cost
Step 7: Calculate Project Budgets
INTERNAL RESOURCE BUDGET (Planned hours): For each budget line: 1. Get planned hours by grade (e.g., "50 hours of Senior Developer") 2. Get rate for that grade (using priority system: exact month → last finalized → calculated) 3. Convert rate to target currency 4. Calculate budget line: Budget Line = Planned Hours × Grade Rate (converted to target currency) Sum all budget lines = Total Internal Budget EXTERNAL SERVICES BUDGET: Sum all planned external service costs (converted to target currency) = Total External Budget
Step 8: Track External Costs and Income
EXTERNAL SERVICES COST (Actual): Sum all expenses assigned to project (converted to target currency) INCOME: Sum all invoice line items for project (converted to target currency) CONTRACTED AMOUNT: Sum all contract amounts for project (converted to target currency)
Step 9: Calculate Final Project Metrics
COMPLETE PROJECT FINANCIAL STATUS: Total Cost = Internal Cost + External Cost Total Budget = Internal Budget + External Budget Remaining Internal Budget = Internal Budget - Internal Cost Remaining External Budget = External Budget - External Cost Budget Utilization % = (Total Cost / Total Budget) × 100 Gross Profit Margin (GPM) % = ((Income - Total Cost) / Income) × 100
4. Complete System Flow Diagram
Here's how all components connect to produce the final financial reports:
┌─────────────────────────────────────────────────────────────────────────────────┐
│ RAW DATA SOURCES │
└─────────────────────────────────────────────────────────────────────────────────┘
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ SALARY │ │ OVERHEAD │ │ INDIRECT │
│ EXPENSES │ │ EXPENSES │ │ STAFF │
│ (9604/05) │ │ (infra cost)│ │ SALARIES │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ BASE │ │ OVERHEAD │ │ INDIRECT │
│ HOURLY │ │ RATE │ │ COST RATE │
│ RATE │ │ CALCULATION │ │ CALCULATION │
│ │ │ │ │ │
│ Salary/Hrs │ │ Infra/ │ │ Support/ │
│ per employee│ │ (Hrs×Staff) │ │ DirectStaff │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└─────────────────────────┼─────────────────────────┘
│
▼
┌───────────────────────────┐
│ RATES PER GRADE TABLE │
│ │
│ Grade │ Complete Rate │
│─────────┼─────────────────│
│ Junior │ Base+OVE+ICR │
│ Mid │ Base+OVE+ICR │
│ Senior │ Base+OVE+ICR │
│ Lead │ Base+OVE+ICR │
│ │
│ Stored monthly │
│ Can be finalized │
│ Includes currency info │
└───────────────────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ TIME │ │ INTERNAL │ │ EXTERNAL │
│ TRACKING │ │ BUDGET │ │ BUDGET │
│ │ │ │ │ │
│ Hours × Rate│ │ Planned Hrs │ │ Planned $ │
│ + OVE + ICR │ │ × Grade Rate│ │ for external│
│ │ │ │ │ services │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ INTERNAL │ │ INTERNAL │ │ EXTERNAL │
│ ACTUAL │ │ BUDGET │ │ BUDGET │
│ COST │ │ │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
▼
┌───────────────────────────┐
│ │
│ PROJECT FINANCIAL STATUS │
│ │
│ • Total Cost │
│ • Total Budget │
│ • Budget Utilization % │
│ • Income │
│ • Contracted Amount │
│ • Gross Profit Margin % │
│ │
│ All in selected currency │
└───────────────────────────┘
5. Multi-Currency Support
One of the most powerful features of this system is the ability to track and report all financial data in multiple currencies with automatic conversion based on historical exchange rates.
How Currency Conversion Works
Key Principle: All conversions use the exchange rate that was valid on the transaction date, not today's rate. This ensures accurate historical financial reporting.
CURRENCY CONVERSION PROCESS: For each monetary value (expense, salary, invoice, etc.): 1. Original amount is stored with: ├─ Amount (e.g., 1000) ├─ Currency (e.g., EUR) └─ Transaction date (e.g., 2024-06-15) 2. When displaying in target currency (e.g., USD): a) Look up exchange rate for transaction date (2024-06-15) b) Convert: EUR → USD using historical rate c) Display converted amount 3. For fixed exchange rates (e.g., BGN ↔ EUR = 1.95583): Use the fixed rate (Bulgarian Lev is pegged to Euro) 4. For other currencies: Use historical exchange rate table with daily rates
Where Currency Information Is Stored
Every financial record includes currency information:
- Expenses - Each expense has a currency field (e.g., office rent in EUR, contractor in USD)
- Time Tracking - Hourly rates stored with currency (from system settings at time of entry)
- Budgets - Budget lines stored with currency (internal and external)
- Invoices - Invoice amounts stored with currency
- Contracts - Contract amounts stored with currency
- Calculated Rates - Monthly overhead, indirect cost, and grade rates stored with currency
System Currency Setting
A system-wide setting determines the default currency for new entries:
Configuration: project_dashboard_currency setting controls the default currency for time tracking rates, monthly calculated rates, and automated updates.
Viewing Reports in Different Currencies
All financial reports accept a currency parameter, allowing you to view the same data in different currencies:
EXAMPLE: Project Financial Status in Different Currencies View in BGN (Bulgarian Lev): projects_financial_status(currency_id = 1) View in EUR (Euro): projects_financial_status(currency_id = 2) View in USD (US Dollar): projects_financial_status(currency_id = 3) The system automatically converts ALL amounts: ├─ Internal costs (salary-based) ├─ External costs (expenses) ├─ Budgets ├─ Income ├─ Contracted amounts └─ Calculated rates (overhead, indirect) All using historical exchange rates for accuracy.
6. Automated Monthly Processes
The system includes automated tasks that run monthly to keep financial data up-to-date without manual intervention.
Monthly Rate Updates (Recommended: 3rd of each month)
Three automated processes calculate and store rates for the previous month:
1. Overhead Rate Update - Calculates infrastructure cost per hour and stores it for the previous month. Uses the system currency setting.
2. Indirect Cost Rate Update - Calculates support staff cost per direct staff hour and stores it for the previous month. Uses the system currency setting.
3. Grade Rate Generation - Creates next month's rates from configured static rates. Uses the system currency setting.
Staff Snapshot Creation
At the start of each month, the system creates a snapshot of all active staff members, capturing:
- Personal information
- Current grade and classification
- Calculated hourly rate for that month
- Currency of the rate
- Department and manager information
These snapshots provide historical tracking of employee data and rates over time.
Important: All automated monthly updates use the currency specified in the project_dashboard_currency system setting at the time they run.
7. Rate Priority System - How Rates Are Selected
When the system needs a rate for calculations (overhead, indirect cost, or grade rate), it uses a three-tier priority system to ensure the most accurate rate is used:
RATE SELECTION PRIORITY (for any given month): Priority 1: EXACT MONTH FINALIZED RATE ├─ Look for a stored rate for the exact month ├─ Must be marked as "final" (approved/confirmed) ├─ Convert from stored currency to target currency └─ If found: USE THIS RATE ✓ Priority 2: LAST FINALIZED RATE BEFORE TARGET MONTH ├─ If no exact month rate exists ├─ Find the most recent finalized rate before the target month ├─ Convert from stored currency to target currency └─ If found: USE THIS RATE ✓ Priority 3: CALCULATE RATE FROM CURRENT EXPENSES ├─ If no finalized rates exist ├─ Calculate rate based on actual expenses ├─ Use formulas described in Section 3 └─ USE THIS CALCULATED RATE ✓ This ensures: ├─ Finalized rates are always preferred (more stable, approved) ├─ Historical rates are used when exact month isn't finalized └─ System always has a rate even for new months
Example Scenario
Scenario: Calculating internal budget for June 2024 project using Senior Developer grade
Step 1: Check for finalized Senior rate for June 2024 → Not found
Step 2: Check for last finalized Senior rate before June 2024 → Found: May 2024 rate of 45 EUR
Step 3: Convert 45 EUR (stored in May) to target currency using June 1, 2024 exchange rate
Result: Use converted May rate for June budget calculation
8. Configurable Calculation Methodology
The system supports different calculation methodologies to accommodate changing business processes. This allows you to adapt the system as your company evolves.
Methodology Transition Feature
You can configure the system to use different calculation methods for different time periods. For example:
EXAMPLE METHODOLOGY TRANSITION: Before Transition Date (e.g., before March 2022): Hourly Rate = Base Rate + Overhead Rate + Indirect Cost Rate ├─ Calculate all three components separately ├─ Add overhead and indirect costs to base rates └─ Provides detailed cost breakdown After Transition Date (e.g., after March 2022): Hourly Rate = Static All-Inclusive Rate ├─ Use pre-defined rates that include all components ├─ Overhead Rate = 0 (already included in static rate) ├─ Indirect Cost Rate = 0 (already included in static rate) └─ Simplified, more stable pricing The system automatically: ├─ Applies the correct methodology based on transaction date ├─ Returns 0 for overhead/indirect when using static rates └─ Maintains historical accuracy for old data
Configuration Point: This methodology transition is controlled by a date check in the overhead and indirect cost functions. You can configure this date when implementing for a new client, or remove this feature entirely if not needed.
When to Use This Feature
- Switching pricing models - Moving from detailed cost-plus to fixed pricing
- Organizational changes - Restructuring how costs are allocated
- Simplification - Reducing calculation complexity while maintaining historical accuracy
- Compliance requirements - Meeting new accounting or reporting standards
9. Available Financial Reports
The system provides comprehensive reporting capabilities across all financial dimensions:
Main Dashboard: Project Financial Status
The primary financial report showing complete financial overview for all projects or specific projects:
- Internal Resource Budget - Planned cost of employee time
- Internal Resource Cost - Actual cost of employee time worked
- External Services Budget - Planned cost of external expenses
- External Services Cost - Actual external expenses
- Total Cost - Sum of all actual costs
- Total Budget - Sum of all planned costs
- Budget Utilization % - How much of budget has been used
- Income - Revenue from invoices
- Contracted Amount - Total contract value
- Gross Profit Margin % - Profitability percentage
Performance: This report is optimized to load in approximately 4 seconds for systems with 600,000+ time tracking records, using advanced query optimization and currency caching.
Detailed Drilldown Reports
Internal Resource Drilldown - Shows detailed breakdown of all time worked:
- Project code
- Employee name
- Month
- Hours worked
- Hourly rate (base)
- Overhead rate
- Indirect cost rate
- Total rate (sum of all components)
- Total amount (hours × total rate)
- Employee grade
Infrastructure Expense Drilldown - Shows all overhead expenses:
- Recipient (vendor/provider)
- Amount
- Date
- Comment/description
- Project (if assigned)
- Account code
- Expense category
- Paying company
Rate Analysis Reports
Rates per Grade - Shows current average rates by employee grade
Indirect Cost Rate - Shows current indirect cost rate and direct staff count
Employee Salary Reports - Detailed salary breakdowns for direct and indirect staff showing expenses, working hours, and calculated hourly rates
Historical Reports
Rates per Month - Historical view of employee rates over time:
- Employee name and email
- Classification (direct/indirect)
- Grade
- Hourly rate
- Year and month
- All rates shown in selected currency with historical conversion
10. Technical Implementation Guide
This section provides guidance for implementing this financial system for a new client.
System Architecture Overview
The system is built on a layered architecture with clear dependencies:
FUNCTION DEPENDENCY LAYERS: TIER 1: Foundation Functions ├─ Expense aggregation (infrastructure overhead) ├─ Direct staff salary calculations └─ Indirect staff salary calculations TIER 2: Rate Calculations ├─ Overhead rate calculation ├─ Indirect cost rate calculation ├─ Active overhead rate lookup (with priority system) └─ Active indirect cost rate lookup (with priority system) TIER 3: Grade Rates ├─ Active grade rate lookup (with priority system) └─ Grade rate generation for next month TIER 4: Project Calculations ├─ Internal resource drilldown (time × rates) └─ Project internal cost summation TIER 5: Main Financial Reports ├─ Project financial status (complete dashboard) └─ All supporting reports TIER 6: Automated Tasks ├─ Monthly overhead update ├─ Monthly indirect cost update ├─ Monthly grade rate generation └─ Monthly staff snapshot creation
Database Schema Requirements
The following tables require currency columns:
Tables with currency columns:
- expenses - currency field
- time_tracking_financials - currency_ field (set from system setting)
- rates_per_grade - currency_ field
- project_budget_external - currency_ field
- invoices - currency field
- contracts - currency_id_ field
- ove (overhead) - currency_ field
- icr (indirect cost) - currency_ field
- staff_snapshots - currency_ field
Required Master Data Tables
- currency - List of supported currencies with exchange rates
- bnb_currency_history - Historical exchange rates (optional, can use fixed rates)
- grades - Employee grade classifications
- staff - Employee master data with classification (direct/indirect)
- staff_classification - Direct vs. indirect staff types
- expense_categories - Configurable expense categories
- holidays - Public holiday calendar
- settings - System configuration (including default currency)
Key Configuration Parameters
These settings must be configured for each new client:
1. Expense Account Codes
- Salary account codes (e.g., 9604, 9605) - used to identify salary expenses
- Overhead exclusion codes - accounts to exclude from infrastructure overhead calculation
- Categories that should/shouldn't be included in rate calculations
2. System Currency Setting
- project_dashboard_currency in settings table
- Controls default currency for new entries and automated calculations
3. Working Hours Calculation
- Standard working hours per day (typically 8)
- Utilization factor (optional, for direct staff)
- Holiday calendar configuration
4. Methodology Transition
- Date when overhead/indirect calculation method changes (if applicable)
- Or remove this feature if single methodology is used
5. Staff Classification Rules
- Which employees are classified as "direct cost" (classification_id = 1)
- Which employees are classified as "indirect cost" (classification_id ≠ 1)
Implementation Steps
RECOMMENDED IMPLEMENTATION SEQUENCE: Phase 1: Database Preparation 1. Add currency columns to all required tables 2. Populate currency master data 3. Set up expense categories and account codes 4. Configure staff classifications 5. Set default currency in system settings Phase 2: Deploy Foundation Functions (Tier 1) 1. expenses_ipa_infra_last_twelve_months(p_currency) 2. salaries_and_securities_rate_direct_cost_by_date(date, p_currency) 3. salaries_and_securities_rate_indirect_cost_by_date(date, p_currency) → Test each function with sample data Phase 3: Deploy Rate Calculation Functions (Tier 2) 1. overhead_expenses(p_currency) 2. rate_indirect_cost_by_date(date, p_currency) 3. active_ove(date, p_currency) 4. active_icr(date, p_currency) → Test rate calculations for accuracy Phase 4: Deploy Grade Rate Functions (Tier 3) 1. active_rate_per_grade(date, grade, p_currency) 2. Update generate_rates_per_grades() to include currency 3. Update rates_per_grade_custom_bf() trigger → Test with actual employee grades Phase 5: Deploy Project Functions (Tier 4-5) 1. projects_internal_resource_drilldown(p_currency) 2. convert_hours_to_money_by_project(project_id, p_currency) 3. projects_financial_status(p_currency) → Test with real project data, verify performance Phase 6: Deploy Report Functions 1. rate_per_grade(p_currency) 2. rate_indirect_cost_table(p_currency) 3. salaris_and_securities_per_employee_previous_month_direct(p_currency) 4. salaris_and_securities_per_employee_previous_month_indirect(p_currency) 5. expenses_ipa_infra_last_twelve_months_drill_down(p_currency) 6. rates_per_month(p_currency) → Test all reports for correct data display Phase 7: Deploy Automated Tasks 1. icr_monthly_update(rec_id) 2. ove_monthly_update(rec_id) 3. staff_snapshots_monthly_update(rec_id) → Schedule for 3rd of each month → Run manually first to verify Phase 8: Create Database Indexes 1. Add performance indexes on frequently queried columns 2. Index all foreign key relationships 3. Index currency columns 4. Index date columns used in filtering → Test query performance improvements Phase 9: UI Integration 1. Update reports to call functions with currency parameter 2. Add currency selector to UI 3. Update budget entry screens to capture currency 4. Test all user workflows → Verify backward compatibility Phase 10: Data Migration & Validation 1. Populate currency columns for historical data 2. Run historical calculations for validation 3. Compare new vs old reports for accuracy 4. Fix any discrepancies → Get client sign-off on accuracy
Performance Optimization
The system includes several optimizations for handling large datasets:
- Currency Name Caching - Loads all currency names once at query start instead of subquery per row
- Monthly Rate Pre-calculation - Calculates overhead/indirect rates once per month, not per row
- CTE-based Aggregation - Uses Common Table Expressions to batch calculations
- Early Filtering - Filters data at source before expensive calculations
- Strategic Indexing - Indexes on all join columns and frequently filtered fields
Performance Target: With proper indexing, the main financial status report should load in 3-5 seconds for systems with 600,000+ time tracking records.
11. Adapting the System for Different Clients
While the core calculation logic remains consistent, several aspects of the system can and should be customized for each client's specific needs.
Common Customization Points
1. Expense Account Codes
Different companies use different accounting systems and codes. When implementing for a new client:
- Map their salary account codes (instead of hardcoded 9604, 9605)
- Identify which expense categories should be excluded from overhead calculation
- Configure which accounts count toward rate calculations
- Store these mappings in a configuration table or as named constants
2. Employee Grade Structure
Each company has different job levels:
- Some use Junior/Mid/Senior/Lead
- Others use Level 1/2/3/4 or custom titles
- Configure grade names to match client's HR structure
- Ensure grade-based rates align with their compensation model
3. Working Hours Calculation
Working hours calculation varies by country and company policy:
- Standard hours per day (8, 7.5, 9, etc.)
- How weekends and holidays are handled
- Whether to use utilization factors
- Vacation day calculation rules
- Configure based on local labor laws and company policies
4. Currency Configuration
Set up currencies relevant to the client:
- Add all currencies the client works with
- Configure exchange rate sources (fixed rates, API, manual entry)
- Set default currency for the system
- Decide on historical exchange rate strategy
5. Methodology Transition
Decide on calculation methodology:
- Use single methodology throughout (simpler)
- Or support methodology transition on specific date (more flexible)
- Configure transition date if needed
- Or remove date-based logic entirely
6. Report Customization
Some clients may need additional reports or modified calculations:
- Add custom financial metrics (ROI, EBITDA, etc.)
- Create department-specific reports
- Add client-specific KPIs
- Customize report column selection and ordering
Questions to Ask Each New Client
Before implementation, gather this information from the client:
CLIENT DISCOVERY QUESTIONNAIRE: Financial Structure: □ What account codes do you use for salaries and social security? □ What expenses should be considered infrastructure overhead? □ Do you have different cost centers or departments? □ How do you currently calculate project profitability? Currency Requirements: □ What currencies do you operate in? □ What is your primary (home) currency? □ Do you need historical exchange rates or fixed rates? □ How often do you need to see reports in different currencies? Employee Structure: □ How do you classify employees (grades, levels, titles)? □ Which employees work directly on billable projects? □ Which employees are in support/overhead roles? □ How do you calculate working hours? (hours/day, holidays, etc.) □ Do you use utilization factors or target billability? Calculation Methodology: □ How do you currently calculate hourly rates? □ Do you separate overhead and indirect costs or bundle them? □ Have your calculation methods changed over time? □ Do you need to support multiple methodologies for different periods? Reporting Needs: □ What financial reports do you currently use? □ What metrics are most important? (GPM, utilization, etc.) □ Who needs access to which reports? □ How often do you review financial performance? Technical Environment: □ What database system are you using? □ Do you have existing integrations (accounting, HR, etc.)? □ What is your data volume? (number of projects, employees, transactions) □ What are your performance requirements?
Testing Strategy for New Implementation
Thorough testing is critical for financial systems. Follow this testing approach:
1. Unit Testing (Per Function)
- Test each function in isolation with known inputs
- Verify calculations match manual calculations
- Test edge cases (zero values, NULL handling, etc.)
- Test with multiple currencies
2. Integration Testing (Cross-Function)
- Test complete calculation chains from raw data to final reports
- Verify that changes in base data flow through correctly
- Test rate priority system with different scenarios
- Verify currency conversions across the entire flow
3. Data Validation Testing
- Compare new system results with old system (if replacing existing)
- Validate against manually calculated samples
- Check totals and subtotals for reconciliation
- Verify historical data accuracy after migration
4. Performance Testing
- Test with production-scale data volumes
- Measure query execution times
- Identify and optimize slow queries
- Test concurrent user access
12. Best Practices & Recommendations
Data Entry Best Practices
- Currency Consistency - Enter expenses in their original currency, not converted. The system handles conversion automatically.
- Timely Time Tracking - Encourage employees to log time promptly for accurate project costing.
- Expense Categorization - Properly categorize expenses for accurate overhead calculations.
- Budget Updates - Keep project budgets up-to-date as scopes change.
- Rate Finalization - Review and finalize monthly rates promptly (within first week of new month).
Monthly Maintenance Tasks
Monthly Checklist (Recommended: 1st-5th of each month):
- Review automated rate calculations for previous month
- Finalize overhead rate (mark as final in database)
- Finalize indirect cost rate (mark as final in database)
- Review and approve grade rates for current month
- Verify staff snapshot was created
- Check for any anomalies in calculations
- Run project financial reports to identify budget overruns
Security & Access Control
Financial data is sensitive. Implement appropriate access controls:
- Role-Based Access - Different user roles should see different levels of detail
- Project Managers - Can view financial status of their projects only
- Finance Team - Can view all financial data and finalize rates
- Executives - Can view all reports and profitability metrics
- Employees - Should not see cost rates or profitability data
- Audit Trail - Log all changes to rates and financial data
Common Pitfalls to Avoid
⚠️ Warning: Common Mistakes
- Don't change system currency setting mid-month - wait until month start
- Don't manually edit calculated rates without understanding impact
- Don't forget to run monthly automated tasks
- Don't delete historical rate data - you need it for accurate reporting
- Don't change employee classifications retroactively without recalculating rates
- Don't skip the rate finalization step - unfinal rates may change
13. Summary
This financial management system provides a comprehensive solution for project-based businesses to:
- Accurately calculate the true cost of employee time including salaries, overhead, and support staff
- Track and manage project budgets against actual costs
- Analyze project profitability with Gross Profit Margin calculations
- Support multiple currencies with automatic historical conversion
- Generate detailed financial reports at project, employee, and company levels
- Automate monthly rate calculations for consistent and timely updates
- Adapt to different calculation methodologies as business processes evolve
The system is built on a solid technical foundation with:
- Layered architecture for maintainability and extensibility
- Performance optimization for handling large data volumes (600,000+ records in ~4 seconds)
- Flexible configuration to adapt to different clients' needs
- Historical accuracy through date-based exchange rate conversion
- Priority-based rate selection ensuring the most accurate calculations
Key Takeaway: This system transforms raw financial data (salaries, expenses, time tracking) into actionable business intelligence (project profitability, budget utilization, cost trends) while supporting the flexibility needed for different business models and calculation methodologies.
Need Help? For technical support during implementation or questions about adapting this system for your specific needs, contact your system administrator or implementation team.