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}