nx_fin_mgmt_grade.nx source
↩ module page · 55 lines · 3717 B
1// nx_fin_mgmt_grade.nx -- R-MKT5 of the MARKETS-INVESTING arc: GRADE THE PEOPLE running a company (operator:
2// "understanding the people who are running companies and if they are good or bad like evaluating a team like
3// betting people do"). A handicapper's scorecard for management STEWARDSHIP -- 8 binary governance/capital-
4// allocation tests, each a real signal you can pull from EDGAR (Form 4 insider trades, the 10-K's ROCE, the
5// DEF 14A proxy's pay + board independence + say-on-pay vote). Grounded in the Nishi researcher's fetched
6// knowledge/fetched/fin_mgmt_*.raw (corporate-governance / agency-cost / ROCE / exec-comp / insider / say-on-pay)
7// + fin_val_* (ROIC vs WACC = value creation). Score 0..8 -> letter grade A..F. EXACT integer (counts +
8// threshold compares, no floats). Thresholds are DATA (#11): edit the constants, not the logic. Like the
9// Z-score, it takes the SIGNALS as inputs -- real per-company data arrives at R-MKT6 (EDGAR/proxy parse).
10// Pure function, no store, no hardware writes. license_tier: ORIGINAL
11import "nx_syscalls.nx"
12
13// letter grades (high = better stewards)
14const MG_F: i64 = 0
15const MG_D: i64 = 1
16const MG_C: i64 = 2
17const MG_B: i64 = 3
18const MG_A: i64 = 4
19
20// DATA thresholds (the handicapper's bar; tune here, no recompile of logic)
21const MG_ROCE_GOOD: i64 = 15 // return on capital employed % that signals real capital efficiency
22const MG_PAY_MAX: i64 = 200 // CEO-to-median-worker pay ratio above which comp is "excessive"
23const MG_INDEP_MIN: i64 = 50 // % of board that must be independent (majority)
24const MG_SAYPAY_MIN: i64 = 50 // % shareholder say-on-pay approval
25const MG_SPREAD_MIN: i64 = 5 // ROIC-minus-WACC spread (pp) signalling disciplined reinvestment
26
27// 8-test stewardship score 0..8 from the governance signals.
28// insider_net : net insider $ (Form 4): >0 = insiders BUYING their own stock (confidence)
29// roce_pct : return on capital employed, whole %
30// roic_pct/wacc_pct: value creation -- ROIC above the cost of capital = the company earns its keep
31// ceo_pay_ratio : CEO pay / median worker pay
32// board_indep_pct : % independent directors
33// sayonpay_pct : % FOR the say-on-pay vote
34// restatements : count of recent financial restatements / fraud flags (0 = clean)
35func mg_score(insider_net: i64, roce_pct: i64, roic_pct: i64, wacc_pct: i64, ceo_pay_ratio: i64, board_indep_pct: i64, sayonpay_pct: i64, restatements: i64) -> i64 {
36 var s: i64 = 0
37 if insider_net > 0 { s = s + 1 } // T1 insiders net BUYING
38 if roce_pct >= MG_ROCE_GOOD { s = s + 1 } // T2 strong capital efficiency
39 if roic_pct > wacc_pct { s = s + 1 } // T3 creates economic value (ROIC > cost of capital)
40 if ceo_pay_ratio <= MG_PAY_MAX { s = s + 1 } // T4 pay not excessive
41 if board_indep_pct >= MG_INDEP_MIN { s = s + 1 } // T5 majority-independent board
42 if sayonpay_pct >= MG_SAYPAY_MIN { s = s + 1 } // T6 shareholders approve pay
43 if restatements == 0 { s = s + 1 } // T7 clean financials (no restatements/fraud)
44 if (roic_pct - wacc_pct) >= MG_SPREAD_MIN { s = s + 1 } // T8 disciplined reinvestment (real spread, not empire-building)
45 return s
46}
47
48// letter grade from a 0..8 stewardship score.
49func mg_grade(score: i64) -> i64 {
50 if score >= 7 { return MG_A } // A: excellent stewards
51 if score >= 5 { return MG_B } // B: good
52 if score >= 3 { return MG_C } // C: mixed
53 if score >= 1 { return MG_D } // D: poor
54 return MG_F // F: value-destroyers / red flags
55}