Skip to main content

qualia_core_db/specialized_libs/computational_economics/
capabilities.rs

1//! Capability/status matrix for computational economics and finance.
2//!
3//! The matrix is intentionally blunt: it prevents scaffolding from being
4//! counted as implemented math.
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum CapabilityDomain {
8    Statistics,
9    Economics,
10    Finance,
11    Accounting,
12    Compliance,
13    Interface,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq)]
17pub enum CapabilityStatus {
18    ImplementedKernel,
19    PartialKernel,
20    RegistryScaffold,
21    RefusingSafetyStub,
22    Planned,
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq)]
26pub enum AllocationClass {
27    HotZeroHeap,
28    ColdBounded,
29    OwnedConvenience,
30    MetadataOnly,
31}
32
33#[derive(Debug, Clone, Copy, PartialEq, Eq)]
34pub enum SafetyClass {
35    PureComputation,
36    RequiresProvenance,
37    RequiresHumanReview,
38    SimulationOnly,
39    RefusesExternalAction,
40}
41
42#[derive(Debug, Clone, Copy, PartialEq, Eq)]
43pub struct CapabilityRecord {
44    pub id: &'static str,
45    pub domain: CapabilityDomain,
46    pub status: CapabilityStatus,
47    pub allocation: AllocationClass,
48    pub safety: SafetyClass,
49    pub module_path: &'static str,
50    pub notes: &'static str,
51}
52
53pub const COMPUTATIONAL_ECONOMICS_CAPABILITIES: &[CapabilityRecord] = &[
54    CapabilityRecord {
55        id: "statistics.descriptive",
56        domain: CapabilityDomain::Statistics,
57        status: CapabilityStatus::ImplementedKernel,
58        allocation: AllocationClass::HotZeroHeap,
59        safety: SafetyClass::PureComputation,
60        module_path: "solvers::statistics::descriptive",
61        notes: "Slice-only mean/variance/covariance/quantile foundations.",
62    },
63    CapabilityRecord {
64        id: "statistics.robust_owned",
65        domain: CapabilityDomain::Statistics,
66        status: CapabilityStatus::PartialKernel,
67        allocation: AllocationClass::OwnedConvenience,
68        safety: SafetyClass::PureComputation,
69        module_path: "solvers::statistics::robust",
70        notes: "Useful robust estimators, but several allocate internal Vec scratch.",
71    },
72    CapabilityRecord {
73        id: "statistics.distributions_extra",
74        domain: CapabilityDomain::Statistics,
75        status: CapabilityStatus::PartialKernel,
76        allocation: AllocationClass::HotZeroHeap,
77        safety: SafetyClass::PureComputation,
78        module_path: "solvers::statistics::distributions",
79        notes: "Binomial, Poisson, lognormal, exponential, uniform, laplace, gamma, beta, weibull, empirical + more. Full set for 5.1-A.",
80    },
81    CapabilityRecord {
82        id: "statistics.hypothesis_nonparametric",
83        domain: CapabilityDomain::Statistics,
84        status: CapabilityStatus::ImplementedKernel,
85        allocation: AllocationClass::HotZeroHeap,
86        safety: SafetyClass::PureComputation,
87        module_path: "solvers::statistics::hypothesis::nonparametric",
88        notes: "Mann-Whitney U, KS 1-sample, McNemar, Friedman implemented with p-values.",
89    },
90    CapabilityRecord {
91        id: "statistics.time_series_stats",
92        domain: CapabilityDomain::Statistics,
93        status: CapabilityStatus::ImplementedKernel,
94        allocation: AllocationClass::HotZeroHeap,
95        safety: SafetyClass::PureComputation,
96        module_path: "solvers::statistics",
97        notes: "ljung_box, adf_proxy added.",
98    },
99    CapabilityRecord {
100        id: "statistics.resampling_starter",
101        domain: CapabilityDomain::Statistics,
102        status: CapabilityStatus::PartialKernel,
103        allocation: AllocationClass::ColdBounded,
104        safety: SafetyClass::PureComputation,
105        module_path: "solvers::statistics",
106        notes: "Basic bootstrap_means (seeded, caller buffer). Full block/jackknife + CI still needed.",
107    },
108    CapabilityRecord {
109        id: "economics.gbm_seeded",
110        domain: CapabilityDomain::Economics,
111        status: CapabilityStatus::ImplementedKernel,
112        allocation: AllocationClass::HotZeroHeap,
113        safety: SafetyClass::PureComputation,
114        module_path: "domains::financial::economics::stochastic",
115        notes: "Deterministic caller-buffered GBM and Monte Carlo VaR variants.",
116    },
117    CapabilityRecord {
118        id: "economics.input_output",
119        domain: CapabilityDomain::Economics,
120        status: CapabilityStatus::ImplementedKernel,
121        allocation: AllocationClass::HotZeroHeap,
122        safety: SafetyClass::PureComputation,
123        module_path: "domains::financial::economics::input_output",
124        notes: "Bounded Leontief shock propagation over caller buffers.",
125    },
126    CapabilityRecord {
127        id: "finance.portfolio_risk",
128        domain: CapabilityDomain::Finance,
129        status: CapabilityStatus::ImplementedKernel,
130        allocation: AllocationClass::OwnedConvenience,
131        safety: SafetyClass::RequiresProvenance,
132        module_path: "specialized_libs::financial_modeling::portfolio_risk",
133        notes: "Real return-based risk metrics; refuses missing/misaligned histories.",
134    },
135    CapabilityRecord {
136        id: "finance.black_scholes",
137        domain: CapabilityDomain::Finance,
138        status: CapabilityStatus::ImplementedKernel,
139        allocation: AllocationClass::ColdBounded,
140        safety: SafetyClass::PureComputation,
141        module_path: "specialized_libs::financial_modeling::PricingEngine",
142        notes: "European call/put Black-Scholes price and Greeks.",
143    },
144    CapabilityRecord {
145        id: "finance.fixed_income_basic",
146        domain: CapabilityDomain::Finance,
147        status: CapabilityStatus::ImplementedKernel,
148        allocation: AllocationClass::HotZeroHeap,
149        safety: SafetyClass::PureComputation,
150        module_path: "specialized_libs::computational_economics::fixed_income",
151        notes: "Day-count, accrued interest, clean/dirty price, coupon bonds, duration, convexity, DV01.",
152    },
153    CapabilityRecord {
154        id: "finance.yield_curve_basic",
155        domain: CapabilityDomain::Finance,
156        status: CapabilityStatus::ImplementedKernel,
157        allocation: AllocationClass::HotZeroHeap,
158        safety: SafetyClass::PureComputation,
159        module_path: "specialized_libs::computational_economics::yield_curve",
160        notes: "Zero-rate interpolation, discount factors, forwards, par yields, and par-yield bootstrapping.",
161    },
162    CapabilityRecord {
163        id: "finance.market_data_adjustment",
164        domain: CapabilityDomain::Finance,
165        status: CapabilityStatus::ImplementedKernel,
166        allocation: AllocationClass::HotZeroHeap,
167        safety: SafetyClass::RequiresProvenance,
168        module_path: "specialized_libs::computational_economics::market_data",
169        notes: "Supplied-bar adjustment factors, adjusted closes, simple/log returns, and VWAP with provenance checks.",
170    },
171    CapabilityRecord {
172        id: "finance.portfolio_analytics_basic",
173        domain: CapabilityDomain::Finance,
174        status: CapabilityStatus::ImplementedKernel,
175        allocation: AllocationClass::HotZeroHeap,
176        safety: SafetyClass::RequiresProvenance,
177        module_path: "specialized_libs::computational_economics::portfolio",
178        notes: "Flat-matrix portfolio returns, sample covariance, variance, volatility risk contributions, drawdown.",
179    },
180    CapabilityRecord {
181        id: "finance.risk_metrics_basic",
182        domain: CapabilityDomain::Finance,
183        status: CapabilityStatus::ImplementedKernel,
184        allocation: AllocationClass::HotZeroHeap,
185        safety: SafetyClass::RequiresProvenance,
186        module_path: "specialized_libs::computational_economics::risk",
187        notes: "Historical VaR/CVaR, Gaussian VaR, and supplied-scenario losses over caller-provided data.",
188    },
189    CapabilityRecord {
190        id: "finance.derivatives_basic",
191        domain: CapabilityDomain::Finance,
192        status: CapabilityStatus::ImplementedKernel,
193        allocation: AllocationClass::HotZeroHeap,
194        safety: SafetyClass::PureComputation,
195        module_path: "specialized_libs::computational_economics::derivatives",
196        notes: "Black-Scholes-Merton price/Greeks, put-call parity, and CRR binomial European/American pricing.",
197    },
198    CapabilityRecord {
199        id: "accounting.double_entry_basic",
200        domain: CapabilityDomain::Accounting,
201        status: CapabilityStatus::ImplementedKernel,
202        allocation: AllocationClass::HotZeroHeap,
203        safety: SafetyClass::RequiresProvenance,
204        module_path: "specialized_libs::computational_economics::accounting",
205        notes: "Minor-unit double-entry posting validation, account balances, journal-entry checks, trial balance.",
206    },
207    CapabilityRecord {
208        id: "finance.trade_execution",
209        domain: CapabilityDomain::Finance,
210        status: CapabilityStatus::RefusingSafetyStub,
211        allocation: AllocationClass::MetadataOnly,
212        safety: SafetyClass::RefusesExternalAction,
213        module_path: "specialized_libs::financial_modeling::TradingEngine",
214        notes: "Correctly refuses real/fabricated order execution.",
215    },
216    CapabilityRecord {
217        id: "finance.order_settlement_registries",
218        domain: CapabilityDomain::Finance,
219        status: CapabilityStatus::RegistryScaffold,
220        allocation: AllocationClass::OwnedConvenience,
221        safety: SafetyClass::SimulationOnly,
222        module_path: "specialized_libs::financial_modeling",
223        notes: "Order/routing/settlement/reporting types exist, but kernels are not comprehensive.",
224    },
225    CapabilityRecord {
226        id: "accounting.personal_ledger",
227        domain: CapabilityDomain::Accounting,
228        status: CapabilityStatus::ImplementedKernel,
229        allocation: AllocationClass::OwnedConvenience,
230        safety: SafetyClass::RequiresProvenance,
231        module_path: "wellfare_core::finance",
232        notes: "Replay-safe signed minor-unit ledger and derived balances.",
233    },
234    CapabilityRecord {
235        id: "tax.illustrative_clearing",
236        domain: CapabilityDomain::Finance,
237        status: CapabilityStatus::PartialKernel,
238        allocation: AllocationClass::OwnedConvenience,
239        safety: SafetyClass::RequiresHumanReview,
240        module_path: "domains::financial::tax_schema",
241        notes: "Simple AU/EU/US/zero-rated examples; not jurisdiction-complete tax law.",
242    },
243    CapabilityRecord {
244        id: "economics.markov",
245        domain: CapabilityDomain::Economics,
246        status: CapabilityStatus::ImplementedKernel,
247        allocation: AllocationClass::HotZeroHeap,
248        safety: SafetyClass::PureComputation,
249        module_path: "specialized_libs::computational_economics::markov",
250        notes: "Stationary distribution, simulation, mean first passage into caller buffers.",
251    },
252    CapabilityRecord {
253        id: "economics.dynamic_programming",
254        domain: CapabilityDomain::Economics,
255        status: CapabilityStatus::ImplementedKernel,
256        allocation: AllocationClass::HotZeroHeap,
257        safety: SafetyClass::PureComputation,
258        module_path: "specialized_libs::computational_economics::dynamic_programming",
259        notes: "VFI, policy iteration, Bellman, optimal stopping for finite MDPs.",
260    },
261    CapabilityRecord {
262        id: "economics.welfare",
263        domain: CapabilityDomain::Economics,
264        status: CapabilityStatus::ImplementedKernel,
265        allocation: AllocationClass::HotZeroHeap,
266        safety: SafetyClass::RequiresHumanReview,
267        module_path: "specialized_libs::computational_economics::welfare",
268        notes: "Gini, Atkinson, Rawlsian/utilitarian, survival floor allocation.",
269    },
270    CapabilityRecord {
271        id: "economics.agent_based",
272        domain: CapabilityDomain::Economics,
273        status: CapabilityStatus::ImplementedKernel,
274        allocation: AllocationClass::HotZeroHeap,
275        safety: SafetyClass::PureComputation,
276        module_path: "specialized_libs::computational_economics::agent_based",
277        notes: "Fixed-capacity ZI traders, order book, deterministic replayable simulation.",
278    },
279    CapabilityRecord {
280        id: "economics.forensic_nquin",
281        domain: CapabilityDomain::Economics,
282        status: CapabilityStatus::ImplementedKernel,
283        allocation: AllocationClass::HotZeroHeap,
284        safety: SafetyClass::RequiresHumanReview,
285        module_path: "specialized_libs::computational_economics::forensic_economics",
286        notes: "Nquin trajectories, harm accumulation, malfeasance, epistemic negligence, narrative divergence, counterfactuals. Rights-affecting.",
287    },
288    CapabilityRecord {
289        id: "economics.ontology_bridge",
290        domain: CapabilityDomain::Economics,
291        status: CapabilityStatus::ImplementedKernel,
292        allocation: AllocationClass::HotZeroHeap,
293        safety: SafetyClass::PureComputation,
294        module_path: "specialized_libs::computational_economics::ontology_bridge",
295        notes: "NQuin encoders + basic FIBO/SHACL-style validation for econ scalars/vectors.",
296    },
297    CapabilityRecord {
298        id: "finance.paper_trading",
299        domain: CapabilityDomain::Finance,
300        status: CapabilityStatus::ImplementedKernel,
301        allocation: AllocationClass::ColdBounded,
302        safety: SafetyClass::SimulationOnly,
303        module_path: "specialized_libs::computational_economics::paper_trading",
304        notes: "Deterministic paper fills from supplied snapshots only. Explicit no-real-execution guard.",
305    },
306];
307
308pub fn capabilities_by_domain(domain: CapabilityDomain, out: &mut [CapabilityRecord]) -> usize {
309    let mut written = 0usize;
310    for record in COMPUTATIONAL_ECONOMICS_CAPABILITIES {
311        if record.domain == domain {
312            if written >= out.len() {
313                break;
314            }
315            out[written] = *record;
316            written += 1;
317        }
318    }
319    written
320}
321
322#[cfg(test)]
323mod tests {
324    use super::*;
325
326    #[test]
327    fn matrix_has_no_empty_ids() {
328        assert!(COMPUTATIONAL_ECONOMICS_CAPABILITIES
329            .iter()
330            .all(|c| !c.id.is_empty() && !c.module_path.is_empty()));
331    }
332
333    #[test]
334    fn filters_capabilities_by_domain_into_caller_buffer() {
335        let blank = CapabilityRecord {
336            id: "",
337            domain: CapabilityDomain::Finance,
338            status: CapabilityStatus::Planned,
339            allocation: AllocationClass::MetadataOnly,
340            safety: SafetyClass::PureComputation,
341            module_path: "",
342            notes: "",
343        };
344        let mut out = [blank; 4];
345        let n = capabilities_by_domain(CapabilityDomain::Finance, &mut out);
346        assert!(n >= 3);
347        assert!(out[..n]
348            .iter()
349            .all(|r| r.domain == CapabilityDomain::Finance));
350    }
351}