code wiki / (root) / nx_money_situation_gate.nx

nx_money_situation_gate.nx source

↩ module page · 60 lines · 3612 B

1// nx_money_situation_gate.nx -- proves the situation model + the priority router on three hand-computed personas: 2// A = healthy saver with debt -> priority ATTACK DEBT (2) 3// B = negative cash flow -> priority CRISIS/RELIEF (0) 4// C = debt-free, funded -> priority INVEST (3) 5// plus the derived metrics (surplus, DTI, net worth, emergency-fund months, max debt paydown). Exit 0 iff all pass. 6// license_tier: ORIGINAL 7import "nx_gate.nx" 8import "nx_money_situation.nx" 9 10func chk(name: *u8, got: i64, want: i64, st: *i64) -> i64 { 11 if got == want { st[0] = st[0] + 1; gw(" PASS " as *u8); gw(name); gw("\n" as *u8) } 12 else { st[1] = st[1] + 1; gw(" FAIL " as *u8); gw(name); gw(" got=" as *u8); gn(got); gw(" want=" as *u8); gn(want); gw("\n" as *u8) } 13 return 0 14} 15 16func main() -> i64 { 17 let st: *i64 = sys_mmap(16) as *i64 18 st[0] = 0; st[1] = 0 19 20 // -- Persona A: gross $6000, net $4800, essentials $2500, discretionary $800, cash $10000, target 3mo; one $5000 @ 6% min $100 debt -- 21 let A: *i64 = sys_mmap(8 * SIT_FIELDS) as *i64 22 A[SIT_INCOME_GROSS] = 600000; A[SIT_INCOME_NET] = 480000; A[SIT_EXPENSES_ESSENTIAL] = 250000 23 A[SIT_SPEND_DISCRETIONARY] = 80000; A[SIT_CASH] = 1000000; A[SIT_EFUND_TARGET_MONTHS] = 3 24 let dA: *i64 = sys_mmap(8 * DS_FIELDS * 2) as *i64 25 dA[0] = 500000; dA[1] = 600; dA[2] = 10000 26 27 chk("A total debt = $5000" as *u8, sit_total_debt(dA, 1), 500000, st) 28 chk("A total minimums = $100" as *u8, sit_total_min(dA, 1), 10000, st) 29 chk("A net worth = $5000" as *u8, sit_net_worth(A, dA, 1), 500000, st) 30 chk("A monthly surplus = $1400" as *u8, sit_monthly_surplus(A, dA, 1), 140000, st) 31 chk("A max debt paydown = $2200" as *u8, sit_max_debt_paydown(A, dA, 1), 220000, st) 32 chk("A DTI = 166 bps (1.66%)" as *u8, sit_dti_bps(A, dA, 1), 166, st) 33 chk("A emergency fund = 400 (4.00 months)" as *u8, sit_efund_months_x100(A), 400, st) 34 chk("A DTI status = 0 (healthy)" as *u8, sit_dti_status(A, dA, 1), 0, st) 35 chk("A priority = 2 (ATTACK DEBT)" as *u8, sit_priority(A, dA, 1), 2, st) 36 37 // -- Persona B: net $2000, essentials $1800, discretionary $300, cash $200; one $10000 @ 25% min $400 -> negative surplus -- 38 let B: *i64 = sys_mmap(8 * SIT_FIELDS) as *i64 39 B[SIT_INCOME_GROSS] = 250000; B[SIT_INCOME_NET] = 200000; B[SIT_EXPENSES_ESSENTIAL] = 180000 40 B[SIT_SPEND_DISCRETIONARY] = 30000; B[SIT_CASH] = 20000; B[SIT_EFUND_TARGET_MONTHS] = 3 41 let dB: *i64 = sys_mmap(8 * DS_FIELDS * 2) as *i64 42 dB[0] = 1000000; dB[1] = 2500; dB[2] = 40000 43 44 chk("B monthly surplus = -$500 (deficit)" as *u8, sit_monthly_surplus(B, dB, 1), 0 - 50000, st) 45 chk("B priority = 0 (CRISIS / RELIEF)" as *u8, sit_priority(B, dB, 1), 0, st) 46 47 // -- Persona C: net $5000, essentials $2000, discretionary $1000, cash $10000, no debt -> invest -- 48 let C: *i64 = sys_mmap(8 * SIT_FIELDS) as *i64 49 C[SIT_INCOME_GROSS] = 600000; C[SIT_INCOME_NET] = 500000; C[SIT_EXPENSES_ESSENTIAL] = 200000 50 C[SIT_SPEND_DISCRETIONARY] = 100000; C[SIT_CASH] = 1000000; C[SIT_EFUND_TARGET_MONTHS] = 3 51 let dC: *i64 = sys_mmap(8 * DS_FIELDS * 2) as *i64 52 53 chk("C emergency fund = 500 (5.00 months)" as *u8, sit_efund_months_x100(C), 500, st) 54 chk("C priority = 3 (INVEST / GROW)" as *u8, sit_priority(C, dC, 0), 3, st) 55 56 gw("nx_money_situation_gate: PASS=" as *u8); gn(st[0]); gw(" FAIL=" as *u8); gn(st[1]); gw("\n" as *u8) 57 if st[1] == 0 { gw("nx_money_situation: GREEN (situation-aware priority router, hand-verified)\n" as *u8); return 0 } 58 gw("nx_money_situation: RED\n" as *u8) 59 return 1 60}