1#[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}