REQ-FUN-117
Actual cost capture with cash / non-cash dimension and category taxonomy
What
System SHALL capture actual cost entries against a subject (project / work_package / activity) with fields amount_cents, currency, category, cash_dimension (cash | non_cash), incurred_on (date), recorded_by, recorded_at, source_ref (free text linking to invoice / receipt / log).
Why
established project management guidelines Control Costs depends on Actual Cost (AC) for EVM. The cash vs non-cash split is intentional: AI-agent compute is real cash spend; developer time is non-cash opportunity cost. Lumping the two masks where money actually moves.
How
cost_ledger table FK-bound to project (always) and work_package / activity (optional); category enum from REQ-FUN-121 default taxonomy; amount in decimal cents (REQ-NFR-070). Insert-only at app level; corrections are new offsetting entries with an explicit reverses_ledger_id. Daily aggregation cache materialized for report performance.
Done when
Entries round-trip via REST + MCP; corrections show as offsetting rows; cash_dimension filter on the cost report returns only matching rows; audit row written on every insert.
Out of scope
Accounts-payable workflow; vendor invoicing.
established project management guidelines Mapping
established project management guidelines Control Costs requires Actual Cost (AC) capture - the cost ledger.