nx_medbill_recon_gate.nx source
↩ module page · 113 lines · 5737 B
1// nx_medbill_recon_gate.nx -- M2 GATE: proves bill/EOB TEXT parses into exact structured claim lines
2// (prose/header lines never qualify), reconciliation flags exactly what the EOB does not support
3// (consuming matcher: the duplicate bill line is NOT-ON-EOB; above-allowed gaps in exact cents), the
4// parsed arrays feed the R5 duplicate audit unchanged, and a fully-supported bill yields ZERO flags
5// (neg-control). Fixtures: knowledge/medbill/sample_bill.txt + sample_eob.txt (run from nxc2).
6// Exits 0 iff ALL pass. license_tier: ORIGINAL
7import "nx_syscalls.nx"
8import "nx_medbill_codes.nx"
9import "nx_medbill_recon.nx"
10import "nx_fin_audit.nx"
11
12func 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 }
13func g_putn(v: i64) -> i64 {
14 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 }
15 var m: i64 = v
16 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
17 let d: *u8 = sys_mmap(24)
18 var k: i64 = 0
19 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
20 let r: *u8 = sys_mmap(24)
21 var i: i64 = 0
22 while k > 0 { k = k - 1; r[i] = d[k]; i = i + 1 }
23 sys_write(1, r, i)
24 return 0
25}
26func chk(name: *u8, got: i64, want: i64, st: *i64) -> i64 {
27 if got == want { st[0] = st[0] + 1; g_puts(" PASS " as *u8); g_puts(name); g_puts("\n" as *u8) }
28 else { st[1] = st[1] + 1; g_puts(" FAIL " as *u8); g_puts(name); g_puts(" got=" as *u8); g_putn(got); g_puts(" want=" as *u8); g_putn(want); g_puts("\n" as *u8) }
29 return 0
30}
31// numeric code string -> i64 (fixture codes are all-digit CPT)
32func code_num(s: *u8) -> i64 {
33 var v: i64 = 0
34 var i: i64 = 0
35 while s[i] != (0 as u8) { if mbr_is_digit(s[i]) == 0 { return 0 - 1 } v = v * 10 + ((s[i] as i64) - 48); i = i + 1 }
36 return v
37}
38
39func main() -> i64 {
40 let st: *i64 = sys_mmap(16) as *i64
41 st[0] = 0
42 st[1] = 0
43
44 // ---- token KATs ----
45 chk("money 2,000.00 with comma = 200000c" as *u8, mbr_tok_money("$2,000.00\x00" as *u8, 0, 9), 200000, st)
46 chk("money 17.60 = 1760c" as *u8, mbr_tok_money("$17.60\x00" as *u8, 0, 6), 1760, st)
47 chk("bare year is NOT money" as *u8, mbr_tok_money("2025\x00" as *u8, 0, 4), 0 - 1, st)
48 chk("date 03/10/2025 = 20250310" as *u8, mbr_tok_date("03/10/2025\x00" as *u8, 0, 10), 20250310, st)
49 chk("date 2025-03-10 = 20250310" as *u8, mbr_tok_date("2025-03-10\x00" as *u8, 0, 10), 20250310, st)
50 chk("units x8 = 8" as *u8, mbr_tok_units("x8\x00" as *u8, 0, 2), 8, st)
51 chk("96413 is code-shaped" as *u8, mbr_tok_code("96413\x00" as *u8, 0, 5), 1, st)
52 chk("J9271 is code-shaped" as *u8, mbr_tok_code("J9271\x00" as *u8, 0, 5), 1, st)
53 chk("ADMIN is NOT code-shaped" as *u8, mbr_tok_code("ADMIN\x00" as *u8, 0, 5), 0, st)
54
55 // ---- parse the REAL fixtures ----
56 let cap: i64 = 65536
57 let btxt: *u8 = sys_mmap(cap)
58 let bn: i64 = mbc_read_all("knowledge/medbill/sample_bill.txt\x00" as *u8, btxt, cap)
59 let etxt: *u8 = sys_mmap(cap)
60 let en: i64 = mbc_read_all("knowledge/medbill/sample_eob.txt\x00" as *u8, etxt, cap)
61 let b: *i64 = mbr_ctx_new(64)
62 let e: *i64 = mbr_ctx_new(64)
63 chk("bill parses 5 claim lines (headers/footers skipped)" as *u8, mbr_parse(btxt, bn, b), 5, st)
64 chk("eob parses 4 claim lines" as *u8, mbr_parse(etxt, en, e), 4, st)
65 chk("bill L0 code == 99214" as *u8, mbr_code_eq(mbr_code_at(b, 0), "99214\x00" as *u8), 1, st)
66 chk("bill L0 date == 20250310" as *u8, mbr_geti(b, 2, 0), 20250310, st)
67 chk("bill L4 units == 8" as *u8, mbr_geti(b, 3, 4), 8, st)
68 chk("bill L1 charge == 200000c" as *u8, mbr_geti(b, 6, 1), 200000, st)
69 chk("eob L0 allowed == 13000c" as *u8, mbr_geti(e, 5, 0), 13000, st)
70 chk("eob L3 patient == 1760c" as *u8, mbr_geti(e, 6, 3), 1760, st)
71
72 // ---- reconcile: exact flags ----
73 let ftyp: *i64 = sys_mmap(8 * 32) as *i64
74 let fidx: *i64 = sys_mmap(8 * 32) as *i64
75 let famt: *i64 = sys_mmap(8 * 32) as *i64
76 let nf: i64 = mbr_recon(b, e, ftyp, fidx, famt)
77 chk("recon finds 5 flags" as *u8, nf, 5, st)
78 chk("L0 above-allowed 27000c" as *u8, famt[0], 27000, st)
79 chk("L0 flag type 3" as *u8, ftyp[0], 3, st)
80 chk("L1 above-allowed 170000c" as *u8, famt[1], 170000, st)
81 chk("duplicate line is NOT-ON-EOB (type 1)" as *u8, ftyp[2], 1, st)
82 chk("duplicate line amount 200000c" as *u8, famt[2], 200000, st)
83 chk("L3 above-allowed 13500c" as *u8, famt[3], 13500, st)
84 chk("L4 above-allowed 71200c" as *u8, famt[4], 71200, st)
85 var tot: i64 = 0
86 var fi: i64 = 0
87 while fi < nf { tot = tot + famt[fi]; fi = fi + 1 }
88 chk("total potential reduction 481700c" as *u8, tot, 481700, st)
89
90 // ---- R5 wire: parsed arrays feed aud_duplicates unchanged ----
91 let ncodes: *i64 = sys_mmap(8 * 16) as *i64
92 var ci: i64 = 0
93 while ci < b[0] { let cv: i64 = code_num(mbr_code_at(b, ci)); ncodes[ci] = cv; ci = ci + 1 }
94 let didx: *i64 = sys_mmap(8 * 16) as *i64
95 let damt: *i64 = sys_mmap(8 * 16) as *i64
96 let doc: *i64 = sys_mmap(8 * 16) as *i64
97 let dup: i64 = aud_duplicates(ncodes, b[2] as *i64, b[6] as *i64, b[0], didx, damt, doc)
98 chk("R5 duplicate audit off parsed lines: 1 dup" as *u8, dup, 1, st)
99 chk("dup overcharge 200000c" as *u8, doc[0], 200000, st)
100
101 // ---- neg-control: a fully-supported bill yields ZERO flags ----
102 let nfz: i64 = mbr_recon(b, b, ftyp, fidx, famt)
103 chk("NEG-CONTROL bill-vs-itself = 0 flags" as *u8, nfz, 0, st)
104
105 g_puts("nx_medbill_recon_gate: PASS=" as *u8)
106 g_putn(st[0])
107 g_puts(" FAIL=" as *u8)
108 g_putn(st[1])
109 g_puts("\n" as *u8)
110 if st[1] == 0 { g_puts("M2 nx_medbill_recon: GREEN\n" as *u8); return 0 }
111 g_puts("M2 nx_medbill_recon: RED\n" as *u8)
112 return 1
113}