PageSourceSearch

https://rillashield.app/assets/aba-check-BIbZ1uiu.js

js rillashield.app collected 2026-10-09 22:06:08 UTC 7,826 bytes, 1 lines download raw bytes

1import{b as w,p as C,d as A,r as n,t as S,j as e,B as l,L as u,T as c,S as x}from"./index-B9YAmkj4.js";import{u as F}from"./useMutation-5LC_hTGj.js";import{u as B}from"./useServerFn-WmBW-qvm.js";import{A as L}from"./AppShell-Du2bZAa9.js";import{C as d,b as f,c as j,a as p}from"./card-Bx1IMJjz.js";import{B as i}from"./badge-B-sWGsrr.js";import{T}from"./textarea-C_PU8MNm.js";import{F as y}from"./file-check-DHB411kY.js";import{L as E}from"./lock-BnkksBe6.js";import{U as R}from"./upload-Bt4cmRAu.js";import{L as I}from"./loader-circle-B3blom10.js";import{C as P}from"./circle-question-mark-BHQJIFc9.js";import"./useQuery-NWbTSNDM.js";import"./useBaseQuery-WAMHZjp_.js";import"./PaymentTestModeBanner-D0VXV-y2.js";import"./input-DEdw2lON.js";import"./separator-DDKGcfDr.js";import"./sheet-BnxrOuE9.js";import"./dialog-DQh5qHL8.js";import"./index-Dmo9lf8A.js";import"./index-Cg7cmwPf.js";import"./index-D9cUoKrS.js";import"./index-GRUjYCI8.js";import"./index-DaEILd8F.js";import"./index-D2B6laY4.js";import"./index-CUPrRyvR.js";import"./bill-holds.functions-daHgl3Je.js";import"./plug-CwWX3ngN.js";import"./zap-BKLBsgQB.js";import"./sparkles-XIBa3wzO.js";import"./message-square-CJW5bexj.js";import"./radar-Dh-ZHN2Q.js";import"./timer-EmUqTa5s.js";import"./handshake-N0Eiru_O.js";import"./network-CZSpJprV.js";import"./scan-line-DqXEZwlM.js";import"./mail-Z0ITImKM.js";import"./phone-XNTFFgxA.js";import"./bot-C9-Bx43P.js";import"./search-check-Cb6y5zcU.js";import"./history-BgUX77oY.js";import"./users-BOBykjcD.js";import"./badge-check-DFCE7epk.js";import"./message-square-text-taaiEC34.js";import"./file-text-6Nin-sA-.js";import"./target-CEEZ4ebd.js";import"./users-round-B1QQXd1b.js";import"./git-branch-CsmU5f-O.js";import"./brain-CdN1EGr7.js";import"./crosshair-DyPGMWSa.js";import"./scroll-text-BvopymGk.js";import"./layers-DuSGiqG2.js";import"./rocket-sSfqHO4m.js";import"./inbox-Dpu9uJMl.js";import"./star-CQ6AD06k.js";import"./send-DvBiF7wi.js";import"./chart-column-BA6XFywP.js";import"./calculator-ClXBavFq.js";import"./trending-up-BGHzz55t.js";import"./megaphone-BJ1Tndi0.js";import"./wrench-LxC8W6Yt.js";import"./key-round-3CmhokY3.js";import"./search-AoBt01gc.js";import"./life-buoy-5s4_imqG.js";import"./label-D0j28JRH.js";import"./message-square-plus-DeGO8RPs.js";import"./clipboard-Dd4Xxi3Y.js";import"./shield-alert-Gvsg_1wq.js";import"./launch-links-BNNu9XPR.js";import"./bell-BH2ul05Q.js";import"./formatDistanceToNow-CMR9oxM9.js";import"./en-US-BQ62IwJd.js";import"./check-DDcQsdxu.js";import"./trash-2-7eOh0Z-d.js";import"./log-out-lrzVjyB6.js";const U=w({method:"POST"}).middleware([C]).handler(A("03059b26cd99c535e5397cfde2d044ce154a77f7b4f34f0babc2ca5071a0c829")),g=m=>(m/100).toLocaleString("en-AU",{style:"currency",currency:"AUD"}),M={safe:"border-l-4 border-l-emerald-500",verify:"border-l-4 border-l-amber-500",high_risk:"border-l-4 border-l-destructive"};function is(){const m=n.useRef(null),[o,h]=n.useState(""),[N,b]=n.useState(),k=B(U),r=F({mutationFn:s=>k({data:{content:s,filename:N}}),onError:s=>S.error(s instanceof Error?s.message:"Could not read that file")}),t=r.data;async function v(s){const a=await s.text();b(s.name),h(a),r.mutate(a)}return e.jsx(L,{children:e.jsxs("div",{className:"max-w-5xl mx-auto space-y-6",children:[e.jsxs("header",{className:"space-y-2",children:[e.jsxs("h1",{className:"text-2xl font-bold tracking-tight flex items-center gap-2",children:[e.jsx(y,{className:"h-6 w-6 text-primary"})," ABA batch file checker"]}),e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Export the ABA (direct entry) file from Xero, MYOB, QuickBooks or your job system and drop it here",e.jsx("span",{className:"font-medium text-foreground",children:" before"})," you upload it to your bank. Every payee is compared against your Verified Supplier Vault. Nothing is sent anywhere — the file is checked and discarded."]}),e.jsx(l,{asChild:!0,size:"sm",variant:"outline",children:e.jsxs(u,{to:"/vault",children:[e.jsx(E,{className:"h-4 w-4 mr-1"})," Manage supplier vault"]})})]}),e.jsxs(d,{children:[e.jsx(f,{children:e.jsx(j,{className:"text-base",children:"Upload your .aba file"})}),e.jsxs(p,{className:"space-y-3",children:[e.jsx("input",{ref:m,type:"file",accept:".aba,.txt,text/plain",className:"hidden",onChange:s=>{const a=s.target.files?.[0];a&&v(a)}}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(l,{onClick:()=>m.current?.click(),disabled:r.isPending,children:[e.jsx(R,{className:"h-4 w-4 mr-1"})," Choose ABA file"]}),e.jsxs(l,{variant:"outline",disabled:!o.trim()||r.isPending,onClick:()=>r.mutate(o),children:[r.isPending?e.jsx(I,{className:"h-4 w-4 mr-1 animate-spin"}):e.jsx(y,{className:"h-4 w-4 mr-1"}),"Check pasted contents"]})]}),e.jsx(T,{rows:4,placeholder:"…or paste the ABA file contents here",value:o,onChange:s=>h(s.target.value),className:"font-mono text-xs"})]})]}),t&&e.jsxs(e.Fragment,{children:[e.jsxs(d,{children:[e.jsx(f,{children:e.jsx(j,{className:"text-base",children:"Batch summary"})}),e.jsx(p,{className:"space-y-3 text-sm",children:t.parsed.error?e.jsx("p",{className:"text-destructive",children:t.parsed.error}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(i,{variant:"secondary",children:[t.summary.total," payments"]}),e.jsxs(i,{variant:"secondary",children:[g(t.parsed.totals.sumCents)," total"]}),e.jsxs(i,{className:"bg-emerald-600 hover:bg-emerald-600",children:[t.summary.matched," vault verified"]}),t.summary.mismatched>0&&e.jsxs(i,{variant:"destructive",children:[t.summary.mismatched," bank details changed"]}),t.summary.unlocked>0&&e.jsxs(i,{variant:"outline",children:[t.summary.unlocked," not locked"]}),t.summary.unknown>0&&e.jsxs(i,{variant:"outline",children:[t.summary.unknown," unknown payee"]})]}),t.parsed.trailer&&!t.parsed.balanced&&e.jsxs("p",{className:"text-amber-600 flex gap-2 items-start",children:[e.jsx(c,{className:"h-4 w-4 mt-0.5 shrink-0"}),"File totals don't add up to the payment lines — the file may have been edited after export."]}
1),t.summary.mismatched>0?e.jsxs("p",{className:"text-destructive font-medium flex gap-2 items-start",children:[e.jsx(c,{className:"h-4 w-4 mt-0.5 shrink-0"}),"Do not upload this batch. ",t.summary.mismatched," payee(s) have bank details that don't match your vault. Ring the supplier on a number you already have before releasing."]}):e.jsxs("p",{className:"text-emerald-600 font-medium flex gap-2 items-start",children:[e.jsx(x,{className:"h-4 w-4 mt-0.5 shrink-0"}),"No vaulted account changed in this batch."]}),t.parsed.formatWarnings.length>0&&e.jsxs("details",{className:"text-muted-foreground",children:[e.jsxs("summary",{className:"cursor-pointer",children:["Format notes (",t.parsed.formatWarnings.length,")"]}),e.jsx("ul",{className:"list-disc pl-5 pt-1",children:t.parsed.formatWarnings.map((s,a)=>e.jsx("li",{children:s},a))})]})]})})]}),e.jsx("div",{className:"space-y-2",children:t.rows.map(s=>e.jsx(d,{className:M[s.risk],children:e.jsxs(p,{className:"py-3 text-sm space-y-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[s.risk==="high_risk"?e.jsx(c,{className:"h-4 w-4 text-destructive"}):s.risk==="safe"?e.jsx(x,{className:"h-4 w-4 text-emerald-600"}):e.jsx(P,{className:"h-4 w-4 text-amber-600"}),e.jsx("span",{className:"font-medium",children:s.payeeName||"(no payee name)"}),e.jsxs("span",{className:"font-mono text-muted-foreground",children:[s.bsb," ****",s.accountLast4]}),e.jsx("span",{className:"ml-auto font-medium",children:g(s.amountCents)})]}),e.jsx("p",{className:"text-muted-foreground",children:s.reason}),s.supplierId&&e.jsx(u,{to:"/suppliers/$supplierId",params:{supplierId:s.supplierId},className:"text-xs underline text-muted-foreground",children:"View supplier"})]})},s.line))})]})]})})}export{is as component};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.