code wiki / (root) / nx_medbill_recon_gate.nx

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}