# Cost Tracking System Gameplan - Issue #88 **Date**: 2025-10-04 **Status**: DESIGN PHASE **Priority**: MEDIUM **Estimated Effort**: 3-4 weeks development ## ๐ŸŽฏ Executive Summary Implement a comprehensive cost tracking and allocation system that: - **Tracks operational costs** (monthly subscriptions, one-time expenses) - **Allocates costs to active issues** in each calculation period - **Maintains financial audit trail** with transaction history - **Calculates issue valuations** based on cost allocation - **Handles historical costs** through Loss Carried Forward mechanism ## ๐Ÿ“‹ Requirements Analysis ### **Business Model** ```yaml Cost Sources: - Monthly Recurring: Server instances, SaaS subscriptions, domains - One-Time Costs: Setup fees, equipment, licenses Cost Allocation: - Target: Active issues (new + modified) in calculation period - Method: Equal distribution across active issues - Historical: Unallocated costs carry forward to next period Financial Tracking: - Ledger-based accounting with double-entry principles - Transaction audit trail for all cost movements - Period-based calculations and reporting ``` ### **Example Cost Items (from issue description)** - **Hosteurope server**: โ‚ฌ10/month - **Bubble.io plan**: โ‚ฌ32/month - **Coulomb.social domain**: โ‚ฌ5/month - **Claude Code plan**: โ‚ฌ20/month - **Gemini plan**: โ‚ฌ20/month - **Total monthly**: โ‚ฌ87/month ## ๐Ÿ—๏ธ Technical Architecture ### **Database Schema** ```sql -- Cost categories and types CREATE TABLE cost_categories ( id INTEGER PRIMARY KEY, name TEXT NOT NULL UNIQUE, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Cost items (recurring and one-time) CREATE TABLE cost_items ( id INTEGER PRIMARY KEY, category_id INTEGER REFERENCES cost_categories(id), name TEXT NOT NULL, description TEXT, cost_type TEXT CHECK (cost_type IN ('monthly', 'one_time')) NOT NULL, amount_eur DECIMAL(10,2) NOT NULL, currency TEXT DEFAULT 'EUR', starting_from_date DATE NOT NULL, ending_date DATE, -- NULL for ongoing monthly costs is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Calculation periods CREATE TABLE cost_periods ( id INTEGER PRIMARY KEY, period_start DATE NOT NULL, period_end DATE NOT NULL, period_type TEXT DEFAULT 'monthly', status TEXT CHECK (status IN ('open', 'calculating', 'closed')) DEFAULT 'open', total_costs DECIMAL(10,2) DEFAULT 0, active_issues_count INTEGER DEFAULT 0, cost_per_issue DECIMAL(10,2) DEFAULT 0, loss_carried_forward DECIMAL(10,2) DEFAULT 0, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Cost transactions (ledger entries) CREATE TABLE cost_transactions ( id INTEGER PRIMARY KEY, period_id INTEGER REFERENCES cost_periods(id), cost_item_id INTEGER REFERENCES cost_items(id), transaction_type TEXT CHECK (transaction_type IN ('cost_incurred', 'cost_allocated', 'loss_forward')) NOT NULL, amount_eur DECIMAL(10,2) NOT NULL, issue_id INTEGER, -- NULL for non-issue transactions transaction_date DATE NOT NULL, description TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Issue cost allocations CREATE TABLE issue_cost_allocations ( id INTEGER PRIMARY KEY, issue_id INTEGER NOT NULL, period_id INTEGER REFERENCES cost_periods(id), allocated_amount DECIMAL(10,2) NOT NULL, allocation_date DATE NOT NULL, transaction_id INTEGER REFERENCES cost_transactions(id), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Issue activity tracking for cost allocation CREATE TABLE issue_activity_log ( id INTEGER PRIMARY KEY, issue_id INTEGER NOT NULL, activity_type TEXT CHECK (activity_type IN ('created', 'modified', 'closed', 'reopened')) NOT NULL, activity_date DATE NOT NULL, period_id INTEGER REFERENCES cost_periods(id), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ### **Core Components** #### **1. Cost Management Module** ```python # markitect/finance/cost_manager.py class CostManager: - register_cost_item(name, type, amount, start_date) - update_cost_item(cost_id, updates) - deactivate_cost_item(cost_id, end_date) - get_active_costs_for_period(period_start, period_end) - calculate_monthly_costs(period) ``` #### **2. Period Management Module** ```python # markitect/finance/period_manager.py class PeriodManager: - create_period(start_date, end_date) - close_period(period_id) - get_active_period() - calculate_period_costs(period_id) - handle_loss_carried_forward(period_id) ``` #### **3. Cost Allocation Engine** ```python # markitect/finance/allocation_engine.py class AllocationEngine: - identify_active_issues(period_start, period_end) - calculate_cost_per_issue(total_costs, active_issue_count) - allocate_costs_to_issues(period_id) - create_allocation_transactions() - update_issue_valuations() ``` #### **4. Financial Reporting Module** ```python # markitect/finance/reports.py class FinancialReports: - cost_summary_report(period_id) - issue_cost_analysis(issue_id) - cost_trend_analysis(start_period, end_period) - budget_variance_report() - export_to_accounting_format() ``` ## ๐Ÿš€ Implementation Plan ### **Phase 1: Core Infrastructure (Week 1-2)** #### **Issue 1: Cost Ledger Database Schema and Models** - Create database tables and migrations - Implement SQLAlchemy/database models - Add basic CRUD operations - Database constraints and relationships #### **Issue 2: Cost Item Management System** - Cost registration and lifecycle management - Support for monthly/one-time cost types - Cost categorization and metadata - CLI commands for cost management #### **Issue 3: Period Management Framework** - Period creation and lifecycle - Automatic period transitions - Status management (open/calculating/closed) - Period-based data aggregation ### **Phase 2: Cost Allocation Logic (Week 2-3)** #### **Issue 4: Issue Activity Tracking** - Monitor issue creation/modification events - Integration with existing issue management - Activity log for cost allocation purposes - Historical activity data migration #### **Issue 5: Cost Allocation Engine** - Implement cost distribution algorithm - Handle edge cases (no active issues, partial periods) - Loss carried forward calculations - Transaction audit trail generation #### **Issue 6: Integration with Issue Management** - Hook into existing issue lifecycle - Automatic activity tracking - Cost allocation triggers - Issue valuation updates ### **Phase 3: Reporting and CLI (Week 3-4)** #### **Issue 7: Financial Reporting System** - Cost summary and trend reports - Issue-specific cost analysis - Period-over-period comparisons - Export capabilities (CSV, JSON) #### **Issue 8: CLI Commands and User Interface** - Cost management commands - Period management commands - Report generation commands - Financial dashboard views #### **Issue 9: Automation and Scheduling** - Automatic period creation - Scheduled cost calculations - Alert system for budget overruns - Integration with external accounting systems ## ๐Ÿ’ฐ **Cost Allocation Algorithm** ### **Monthly Calculation Process** ```python def calculate_monthly_allocation(period_start, period_end): """ 1. Identify all costs for the period 2. Calculate total cost burden 3. Identify active issues 4. Distribute costs equally 5. Handle loss carried forward 6. Create audit transactions """ # Step 1: Gather costs monthly_costs = get_monthly_costs_for_period(period_start, period_end) one_time_costs = get_one_time_costs_for_period(period_start, period_end) carried_forward = get_loss_carried_forward(previous_period) total_costs = monthly_costs + one_time_costs + carried_forward # Step 2: Identify active issues active_issues = get_active_issues(period_start, period_end) if len(active_issues) == 0: # No active issues - carry forward all costs carry_forward_loss(total_costs, next_period) return # Step 3: Calculate allocation cost_per_issue = total_costs / len(active_issues) # Step 4: Allocate to issues for issue in active_issues: allocate_cost_to_issue(issue.id, cost_per_issue, period_id) create_allocation_transaction(issue.id, cost_per_issue, period_id) update_issue_valuation(issue.id, cost_per_issue) ``` ### **Active Issue Definition** ```sql -- Issues are considered "active" if they have any of these activities: -- 1. Created during the period -- 2. Modified/updated during the period -- 3. Had comments added during the period -- 4. Changed status during the period SELECT DISTINCT issue_id FROM issue_activity_log WHERE activity_date BETWEEN period_start AND period_end AND activity_type IN ('created', 'modified', 'commented', 'status_changed') ``` ## ๐Ÿ“Š **Example CLI Commands** ### **Cost Management** ```bash # Register recurring costs markitect cost add "Hosteurope Server" --type=monthly --amount=10.00 --start-date=2025-01-01 # Register one-time costs markitect cost add "SSL Certificate" --type=one_time --amount=50.00 --date=2025-03-15 # List all costs markitect cost list --active markitect cost list --period=2025-03 # Update cost markitect cost update 1 --amount=12.00 --end-date=2025-12-31 ``` ### **Period Management** ```bash # Create new period markitect period create --start=2025-03-01 --end=2025-03-31 # Calculate period costs markitect period calculate 2025-03 # Close period markitect period close 2025-03 # List periods markitect period list --status=open ``` ### **Reports and Analysis** ```bash # Cost summary markitect reports cost-summary --period=2025-03 # Issue cost analysis markitect reports issue-costs --issue=123 # Cost trends markitect reports cost-trends --start=2025-01 --end=2025-03 # Export for accounting markitect reports export --format=csv --output=costs_2025_q1.csv ``` ## ๐Ÿงช **Testing Strategy** ### **Unit Tests** - Cost calculation algorithms - Period management logic - Allocation engine correctness - Database model relationships ### **Integration Tests** - End-to-end cost allocation workflow - Issue activity tracking integration - Report generation accuracy - CLI command functionality ### **Scenario Tests** - No active issues in period - Partial period calculations - Historical cost migration - Multiple cost types in single period ## ๐Ÿ“ˆ **Success Metrics** ### **Functional Requirements** - โœ… Accurate cost tracking and categorization - โœ… Correct allocation to active issues - โœ… Audit trail for all financial transactions - โœ… Historical data preservation and analysis ### **Performance Requirements** - Process monthly calculations in <5 seconds - Support 1000+ cost items and 10,000+ issues - Report generation in <10 seconds - Database queries optimized for financial data ### **User Experience** - Intuitive CLI commands for cost management - Clear financial reports and dashboards - Easy integration with existing workflows - Minimal manual intervention required ## โš ๏ธ **Risk Assessment** ### **Technical Risks** 1. **Data Integrity**: Financial data requires 100% accuracy - **Mitigation**: Comprehensive validation, audit trails, backup procedures 2. **Performance**: Large-scale calculations may be slow - **Mitigation**: Database optimization, caching, incremental calculations 3. **Complexity**: Financial logic can be complex and error-prone - **Mitigation**: Extensive testing, code review, financial validation ### **Business Risks** 1. **Accounting Compliance**: May need integration with formal accounting - **Mitigation**: Export capabilities, audit trail, professional review 2. **Currency Handling**: Multi-currency support may be needed - **Mitigation**: Design for EUR initially, plan for currency expansion 3. **Tax Implications**: Cost allocation may have tax consequences - **Mitigation**: Clear documentation, professional consultation ## ๐ŸŽฏ **Future Enhancements** ### **Phase 2 Features** - Multi-currency support - Budget planning and forecasting - Integration with external accounting systems (QuickBooks, Xero) - Cost optimization recommendations - Team/department-based cost allocation ### **Advanced Analytics** - Cost per feature analysis - ROI calculations for development efforts - Predictive cost modeling - Resource utilization optimization - Financial KPI dashboards ## ๐Ÿ“‹ **Implementation Checklist** ### **Prerequisites** - [ ] Review existing database schema for compatibility - [ ] Identify integration points with issue management - [ ] Define chart of accounts and cost categories - [ ] Plan data migration strategy for historical costs ### **Development** - [ ] Database schema implementation - [ ] Core cost management functionality - [ ] Allocation engine development - [ ] CLI command implementation - [ ] Report generation system ### **Testing** - [ ] Unit test coverage >95% - [ ] Integration test scenarios - [ ] Performance benchmarking - [ ] User acceptance testing - [ ] Financial accuracy validation ### **Deployment** - [ ] Database migration scripts - [ ] Documentation and user guides - [ ] Training materials - [ ] Monitoring and alerting setup - [ ] Backup and recovery procedures This comprehensive cost tracking system will provide MarkiTect with sophisticated financial management capabilities, enabling data-driven decisions about development priorities and resource allocation.