# 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.