code wiki / (root) / nx_fin_dispute_gate.nx

nx_fin_dispute_gate.nx source

↩ module page · 113 lines · 6370 B

1// nx_fin_dispute_gate.nx -- R8 GATE: proves the audit findings (R5) flow into a correct, complete medical- 2// bill DISPUTE LETTER (R8). Runs the real audit on the cancer-treatment bill, takes the three NON- 3// OVERLAPPING structural findings (duplicate chemo $2,000 + unbundled blood draw $150 + over-units lab 4// $500 = $2,650, each line disputed once so the total does not double-count), renders the letter, prints 5// it, and asserts it cites the codes, dates, exact amounts, honest total, and the legal grounds. Fail-safe 6// by construction: disp_build only writes to a buffer -- it cannot send anything. Exits 0 iff ALL pass. 7// license_tier: ORIGINAL 8import "nx_syscalls.nx" 9import "nx_money.nx" 10import "nx_fin_audit.nx" 11import "nx_fin_dispute.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} 28func gfind(hay: *u8, n: i64, needle: *u8) -> i64 { 29 var nl: i64 = 0; while needle[nl] != (0 as u8) { nl = nl + 1 } 30 if nl == 0 { return 0 } 31 var i: i64 = 0 32 while i + nl <= n { 33 var j: i64 = 0; var ok: i64 = 1 34 while j < nl { if hay[i + j] != needle[j] { ok = 0; j = nl } else { j = j + 1 } } 35 if ok == 1 { return i } 36 i = i + 1 37 } 38 return 0 - 1 39} 40func has(hay: *u8, n: i64, needle: *u8) -> i64 { if gfind(hay, n, needle) >= 0 { return 1 } return 0 } 41func seti(a: *i64, i: i64, v: i64) -> i64 { a[i] = v; return 0 } 42 43func main() -> i64 { 44 let st: *i64 = sys_mmap(16) as *i64 45 st[0] = 0; st[1] = 0 46 47 // the cancer-treatment bill (same vector as R5) 48 let codes: *i64 = sys_mmap(8 * 8) as *i64 49 let dates: *i64 = sys_mmap(8 * 8) as *i64 50 let units: *i64 = sys_mmap(8 * 8) as *i64 51 let billed: *i64 = sys_mmap(8 * 8) as *i64 52 seti(codes,0,99214); seti(dates,0,20250310); seti(units,0,1); seti(billed,0,40000) 53 seti(codes,1,96413); seti(dates,1,20250310); seti(units,1,1); seti(billed,1,200000) 54 seti(codes,2,96413); seti(dates,2,20250310); seti(units,2,1); seti(billed,2,200000) 55 seti(codes,3,36415); seti(dates,3,20250310); seti(units,3,1); seti(billed,3,15000) 56 seti(codes,4,85025); seti(dates,4,20250310); seti(units,4,8); seti(billed,4,80000) 57 let nlines: i64 = 5 58 let pairA: *i64 = sys_mmap(8 * 4) as *i64; let pairB: *i64 = sys_mmap(8 * 4) as *i64 59 seti(pairA,0,96413); seti(pairB,0,36415) 60 let mcode: *i64 = sys_mmap(8 * 4) as *i64; let mmax: *i64 = sys_mmap(8 * 4) as *i64 61 seti(mcode,0,85025); seti(mmax,0,3) 62 63 let idx: *i64 = sys_mmap(8 * 16) as *i64 64 let amt: *i64 = sys_mmap(8 * 16) as *i64 65 let oc: *i64 = sys_mmap(16) as *i64 66 67 // assemble the non-overlapping structural findings from the live audit 68 let reasons: *i64 = sys_mmap(8 * 8) as *i64 69 let cpts: *i64 = sys_mmap(8 * 8) as *i64 70 let fdates: *i64 = sys_mmap(8 * 8) as *i64 71 let amounts: *i64 = sys_mmap(8 * 8) as *i64 72 var nf: i64 = 0 73 74 let dc: i64 = aud_duplicates(codes, dates, billed, nlines, idx, amt, oc) 75 if dc >= 1 { let li: i64 = idx[0]; reasons[nf] = 1; cpts[nf] = codes[li]; fdates[nf] = dates[li]; amounts[nf] = amt[0]; nf = nf + 1 } 76 let uc: i64 = aud_unbundle(codes, nlines, pairA, pairB, 1, billed, idx, amt, oc) 77 if uc >= 1 { let li: i64 = idx[0]; reasons[nf] = 2; cpts[nf] = codes[li]; fdates[nf] = dates[li]; amounts[nf] = amt[0]; nf = nf + 1 } 78 let mc: i64 = aud_mue(codes, units, billed, nlines, mcode, mmax, 1, idx, amt, oc) 79 if mc >= 1 { let li: i64 = idx[0]; reasons[nf] = 3; cpts[nf] = codes[li]; fdates[nf] = dates[li]; amounts[nf] = amt[0]; nf = nf + 1 } 80 81 chk("audit produced 3 structural findings", nf, 3, st) 82 83 let letter: *u8 = sys_mmap(16384) 84 let ln: i64 = disp_build("Jane Doe\x00" as *u8, "Memorial Hospital\x00" as *u8, "ACCT-12345\x00" as *u8, reasons, cpts, fdates, amounts, nf, letter) 85 86 g_puts("\n----- generated dispute letter -----\n") 87 g_puts(letter) 88 g_puts("----- end letter (len="); g_putn(ln); g_puts(") -----\n\n") 89 90 chk("letter cites duplicate chemo CPT 96413", has(letter, ln, "96413\x00" as *u8), 1, st) 91 chk("letter cites unbundled CPT 36415", has(letter, ln, "36415\x00" as *u8), 1, st) 92 chk("letter cites over-units CPT 85025", has(letter, ln, "85025\x00" as *u8), 1, st) 93 chk("letter cites date of service 2025-03-10", has(letter, ln, "2025-03-10\x00" as *u8), 1, st) 94 chk("letter shows duplicate adjustment $2000.00", has(letter, ln, "$2000.00\x00" as *u8), 1, st) 95 chk("letter shows unbundle adjustment $150.00", has(letter, ln, "$150.00\x00" as *u8), 1, st) 96 chk("letter shows MUE adjustment $500.00", has(letter, ln, "$500.00\x00" as *u8), 1, st) 97 chk("letter shows HONEST total $2650.00 (no double-count)", has(letter, ln, "Total requested adjustment: $2650.00\x00" as *u8), 1, st) 98 chk("letter invokes the No Surprises Act", has(letter, ln, "No Surprises Act\x00" as *u8), 1, st) 99 chk("letter invokes the Fair Debt Collection Practices Act", has(letter, ln, "Fair Debt Collection Practices Act\x00" as *u8), 1, st) 100 chk("letter frames it as a good-faith dispute", has(letter, ln, "good-faith dispute\x00" as *u8), 1, st) 101 chk("letter explains the duplicate ground", has(letter, ln, "duplicate an identical charge\x00" as *u8), 1, st) 102 var lok: i64 = 0 103 if ln > 800 { lok = 1 } 104 chk("letter is a complete document (>800 bytes)", lok, 1, st) 105 var term: i64 = 0 106 if letter[ln] == (0 as u8) { term = 1 } 107 chk("letter is NUL-terminated", term, 1, st) 108 109 g_puts("nx_fin_dispute_gate: PASS="); g_putn(st[0]); g_puts(" FAIL="); g_putn(st[1]); g_puts("\n") 110 if st[1] == 0 { g_puts("R8 nx_fin_dispute: GREEN\n"); return 0 } 111 g_puts("R8 nx_fin_dispute: RED\n") 112 return 1 113}