code wiki / (root) / nx_intake_handler_gate.nx

nx_intake_handler_gate.nx source

↩ module page · 93 lines · 4772 B

1// nx_intake_handler_gate.nx -- R6 GATE: proves a submitted intake form flows into the whole system. A 2// urlencoded POST body -> ih_record -> sv_load round-trips every field -> and the engines run on THOSE 3// numbers: triage = crisis (90), before-you-buy uses the submitted wage, accommodation reads the submitted 4// ADHD flag. Hermetic /tmp prefix. Exits 0 iff ALL pass. license_tier: ORIGINAL 5import "nx_syscalls.nx" 6import "nx_money.nx" 7import "nx_survey.nx" 8import "nx_accommodate.nx" 9import "nx_adhd.nx" 10import "nx_purchase.nx" 11import "nx_intake_handler.nx" 12 13func g_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 14func g_putn(v: i64) -> i64 { 15 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 } 16 var m: i64 = v; if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m } 17 let d: *u8 = sys_mmap(24); var k: i64 = 0 18 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 19 var j: i64 = k - 1 20 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 } 21 return 0 22} 23func chk(name: *u8, got: i64, want: i64, st: *i64) -> i64 { 24 if got == want { st[0] = st[0] + 1; g_puts(" PASS "); g_puts(name); g_puts("\n") } 25 else { st[1] = st[1] + 1; g_puts(" FAIL "); g_puts(name); g_puts(" got="); g_putn(got); g_puts(" want="); g_putn(want); g_puts("\n") } 26 return 0 27} 28 29func main() -> i64 { 30 let st: *i64 = sys_mmap(16) as *i64 31 st[0] = 0; st[1] = 0 32 33 // hermetic prefix "/tmp/intake_<us>-" 34 let pfx: *u8 = sys_mmap(64) 35 var pp: i64 = 0 36 let pre: *u8 = "/tmp/intake_\x00" as *u8 37 while pre[pp] != (0 as u8) { pfx[pp] = pre[pp]; pp = pp + 1 } 38 let us: i64 = sys_now_us() 39 let tmp: *u8 = sys_mmap(32); var m: i64 = us; var kk: i64 = 0 40 if m == 0 { tmp[0] = 0x30 as u8; kk = 1 } 41 while m > 0 { tmp[kk] = (0x30 + (m % 10)) as u8; m = m / 10; kk = kk + 1 } 42 var z: i64 = kk - 1 43 while z >= 0 { pfx[pp] = tmp[z]; pp = pp + 1; z = z - 1 } 44 pfx[pp] = 0x2d as u8; pp = pp + 1; pfx[pp] = 0 as u8 45 46 // a submitted intake form (urlencoded POST body) 47 let body: *u8 = "income_monthly=4000&debt_balance=20000&debt_apr_pct=24&monthly_payment=600&available=500&hourly_wage=25&buffer_goal=1000&behind_mortgage=1&medical_debt=1&job_loss_risk=1&high_interest_debt=1&has_adhd=1&low_energy=0&low_vision=0\x00" as *u8 48 var bn: i64 = 0 49 while body[bn] != (0 as u8) { bn = bn + 1 } 50 51 let cid: *u8 = sys_mmap(96) 52 chk("intake form recorded", ih_record(pfx, "elder\x00" as *u8, body, bn, cid), 0, st) 53 54 let k: *i64 = sys_mmap(8 * 64) as *i64 55 let d: *i64 = sys_mmap(8 * 64) as *i64 56 let nf: i64 = sv_load(pfx, cid, k, d, 64) 57 var lok: i64 = 0 58 if nf > 0 { lok = 1 } 59 chk("profile loads", lok, 1, st) 60 61 // every field round-trips 62 chk("debt_balance = 2000000 ($20,000)", sv_answer(k, d, nf, "debt_balance\x00" as *u8), 2000000, st) 63 chk("hourly_wage = 2500 ($25/hr)", sv_answer(k, d, nf, "hourly_wage\x00" as *u8), 2500, st) 64 chk("income_monthly = 400000 ($4,000, dollars->cents)", sv_answer(k, d, nf, "income_monthly\x00" as *u8), 400000, st) 65 chk("available = 50000 ($500)", sv_answer(k, d, nf, "available\x00" as *u8), 50000, st) 66 chk("has_adhd = 1", sv_answer(k, d, nf, "has_adhd\x00" as *u8), 1, st) 67 chk("low_vision = 0", sv_answer(k, d, nf, "low_vision\x00" as *u8), 0, st) 68 69 // ENGINES RUN ON THE SUBMITTED NUMBERS: 70 // (1) triage from the submitted risk answers -> crisis 71 let wq: *i64 = sys_mmap(8 * 8) as *i64 72 let wt: *i64 = sys_mmap(8 * 8) as *i64 73 wq[0] = "behind_mortgage\x00" as *u8 as i64; wt[0] = 30 74 wq[1] = "medical_debt\x00" as *u8 as i64; wt[1] = 25 75 wq[2] = "job_loss_risk\x00" as *u8 as i64; wt[2] = 20 76 wq[3] = "high_interest_debt\x00" as *u8 as i64; wt[3] = 15 77 chk("triage from THEIR answers = 90 (crisis)", sv_triage(k, d, nf, wq, wt, 4), 90, st) 78 79 // (2) before-you-buy uses THEIR wage: a $200 buy = 8 hours at the submitted $25/hr 80 chk("before-you-buy uses their wage: $200 = 8 hours", pur_hours(20000, sv_answer(k, d, nf, "hourly_wage\x00" as *u8)), 8, st) 81 82 // (3) accommodation reads THEIR ADHD flag -> one step at a time 83 var acc: i64 = 0 84 acc = ac_flag_if(acc, sv_answer(k, d, nf, "has_adhd\x00" as *u8), AC_ADHD) 85 acc = ac_flag_if(acc, sv_answer(k, d, nf, "low_vision\x00" as *u8), AC_LOW_VISION) 86 chk("accommodation from THEIR flag = ADHD (1)", acc, AC_ADHD, st) 87 chk("...so they see ONE step (load budget 1)", ac_load_budget(acc, 2, 6), 1, st) 88 89 g_puts("nx_intake_handler_gate: PASS="); g_putn(st[0]); g_puts(" FAIL="); g_putn(st[1]); g_puts("\n") 90 if st[1] == 0 { g_puts("SITUATION R6 nx_intake_handler: GREEN\n"); return 0 } 91 g_puts("SITUATION R6 nx_intake_handler: RED\n") 92 return 1 93}