// SAR drafts view — review, comment, close, or file SARs. const { useState: useSARState, useEffect: useSAREffect, useMemo: useSARMemo } = React; function formatAmount(n, cur) { const sym = { USD: "$", EUR: "€", GBP: "£", MXN: "MX$" }[cur] || ""; return sym + Number(n || 0).toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 }); } function formatDate(iso) { if (!iso) return "—"; return new Date(iso).toLocaleString(undefined, { month: "short", day: "numeric", year: "numeric", hour: "2-digit", minute: "2-digit" }); } function SARStatusPill({ status }) { const map = { draft: { cls: "pill med", label: "Draft" }, under_review: { cls: "pill high", label: "Under review" }, pending_review: { cls: "pill high", label: "Pending review" }, filed: { cls: "pill ok", label: "Filed" }, acknowledged: { cls: "pill low", label: "Acknowledged" }, closed: { cls: "pill low", label: "Closed" }, dismissed: { cls: "pill low", label: "Dismissed" }, }; const m = map[status] || { cls: "pill", label: status }; return {m.label}; } function SARDetail({ sar, onBack, onRefresh }) { const [note, setNote] = useSARState(""); const [posting, setPosting] = useSARState(false); const [acting, setActing] = useSARState(false); const [message, setMessage] = useSARState(null); const postNote = async () => { if (!note.trim()) return; setPosting(true); try { await window.mossadApi.addSARNote(sar.id, note.trim()); setNote(""); setMessage({ type: "ok", text: "Note added" }); await onRefresh(); } catch (err) { setMessage({ type: "error", text: "Failed to add note: " + err.message }); } finally { setPosting(false); } }; const updateStatus = async (status) => { setActing(true); setMessage(null); try { await window.mossadApi.updateSAR(sar.id, { status }); setMessage({ type: "ok", text: `SAR ${status.replace("_", " ")}` }); await onRefresh(); } catch (err) { setMessage({ type: "error", text: "Failed to update SAR: " + err.message }); } finally { setActing(false); } }; const fileSAR = async () => { setActing(true); setMessage(null); try { const result = await window.mossadApi.fileSAR(sar.id); setMessage({ type: "ok", text: `SAR filed: ${result.filing_reference || result.external_id}` }); await onRefresh(); } catch (err) { setMessage({ type: "error", text: "Failed to file SAR: " + err.message }); } finally { setActing(false); } }; const notes = sar.notes || []; const isFinal = sar.status === "filed" || sar.status === "acknowledged" || sar.status === "closed" || sar.status === "dismissed"; return (
{sar.external_id}

SAR overview

{formatDate(sar.created_at)}
{sar.suspicious_activity_description || "No description."}
Linked case
{sar.case_id}
Total suspicious amount
{formatAmount(sar.total_suspicious_amount, "USD")}
Regulator
{sar.regulator}
Jurisdiction
{sar.jurisdiction}
{sar.filing_reference && ( <>
Filing reference
{sar.filing_reference}
)}

Actions

{message && (
{message.text}
)}

Review notes

{!isFinal && (