@mindbill/react 0.50.0 → 0.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +47 -1
- package/dist/index.js +977 -767
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bill-courtesy-copy-form.tsx","../src/appearance.ts","../src/billing-profile-options.ts","../src/index.tsx","../src/native-bill-review.tsx","../src/bill-read-only-form.tsx","../src/bill-submission-form.tsx","../src/send-route-dialog.tsx","../src/claims-administrator-directory-dialog.tsx","../src/billing-catalog.ts","../src/billing-dashboard.tsx","../src/status-aging-matrix.tsx","../src/bill-tasks-dashboard.tsx","../src/bill-submissions-ribbon.tsx","../src/report-bill-status-dialog.tsx","../src/organization-onboarding.tsx","../src/tax-id-input.tsx","../src/w9-upload.tsx","../src/payment-review.tsx","../src/billing-operations-client.ts","../src/notification-settings.tsx","../src/connected-bill-status.tsx","../src/bill-lifecycle-surfaces.tsx","../src/connected-bill-lifecycle.tsx","../src/second-review-form.tsx","../src/second-review-corrections.ts","../src/connected-billing-workspace.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport type { BillCourtesyCopyInput, BillCourtesyCopyPreview, BillCourtesyCopyResult } from \"@mindbill/browser\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\n/** Host-provided suggestions only: never selected, saved, or emailed automatically. */\nexport type CourtesyCopyRecipientOption = { email: string; name?: string };\n\nexport function courtesyCopyRecipientOptions(options: readonly CourtesyCopyRecipientOption[]): CourtesyCopyRecipientOption[] {\n const seen = new Set<string>();\n return options.flatMap((option) => {\n const email = option.email.trim();\n const key = email.toLowerCase();\n // Convenience filtering only. The server remains authoritative for recipients.\n if (!/^[^\\s@,;<>]+@[^\\s@,;<>]+\\.[^\\s@,;<>]+$/.test(email) || seen.has(key)) return [];\n seen.add(key);\n const name = option.name?.trim();\n return [{ email, ...(name ? { name } : {}) }];\n });\n}\n\nexport type BillCourtesyCopyFormProps = {\n documents: { id: string; filename: string }[];\n recipientOptions?: readonly CourtesyCopyRecipientOption[];\n subject?: string;\n environment: \"sandbox\" | \"live\";\n appearance?: MindBillReactAppearance;\n onPreview: (input: BillCourtesyCopyInput) => Promise<BillCourtesyCopyPreview>;\n onSend: (input: BillCourtesyCopyInput & { packetHash: string }, idempotencyKey: string) => Promise<BillCourtesyCopyResult>;\n onSent?: (result: BillCourtesyCopyResult) => void;\n};\n\n/** A courtesy copy is never a payer submission. Preview and recipient confirmation are explicit. */\nexport function BillCourtesyCopyForm({ documents, recipientOptions = [], subject: initialSubject = \"Courtesy copy — bill packet\", environment, appearance, onPreview, onSend, onSent }: BillCourtesyCopyFormProps) {\n const [to, setTo] = useState(\"\");\n const [cc, setCc] = useState(\"\");\n const [subject, setSubject] = useState(initialSubject);\n const [bodyText, setBodyText] = useState(\"This is a courtesy copy of the bill and report for your records. No payment is being requested from your office.\");\n const [documentIds, setDocumentIds] = useState(documents.map((document) => document.id));\n const [includeCms1500, setIncludeCms1500] = useState(true);\n const [preview, setPreview] = useState<BillCourtesyCopyPreview | null>(null);\n const [pdfUrl, setPdfUrl] = useState(\"\");\n const [confirmed, setConfirmed] = useState(false);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(\"\");\n const [result, setResult] = useState<BillCourtesyCopyResult | null>(null);\n const retryKey = useRef(\"\");\n const addresses = (value: string) => value.split(/[,;\\n]/).map((email) => email.trim()).filter(Boolean);\n const input: BillCourtesyCopyInput = { to: addresses(to), cc: addresses(cc), subject, bodyText, documentIds, includeCms1500 };\n const choices = courtesyCopyRecipientOptions(recipientOptions);\n const selected = new Set([...input.to, ...(input.cc ?? [])].map((email) => email.toLowerCase()));\n const recipientPicker = (field: \"To\" | \"CC\", value: string, update: (value: string) => void) => choices.length ?\n <label>Add saved contact to {field}<select value=\"\" onChange={(event) => {\n const email = event.target.value;\n if (email && !selected.has(email.toLowerCase())) update([...addresses(value), email].join(\", \"));\n }}><option value=\"\">Choose a contact…</option>{choices.map((option) => <option key={option.email.toLowerCase()} value={option.email} disabled={selected.has(option.email.toLowerCase())}>{option.name ? `${option.name} — ${option.email}` : option.email}</option>)}</select></label> : null;\n const fingerprint = JSON.stringify(input);\n useEffect(() => { setPreview(null); setConfirmed(false); retryKey.current = \"\"; setResult(null); }, [fingerprint]);\n useEffect(() => {\n if (!preview) { setPdfUrl(\"\"); return; }\n const bytes = Uint8Array.from(atob(preview.pdfBase64), (character) => character.charCodeAt(0));\n const url = URL.createObjectURL(new Blob([bytes], { type: \"application/pdf\" }));\n setPdfUrl(url);\n return () => URL.revokeObjectURL(url);\n }, [preview]);\n const submit = async () => {\n setBusy(true); setError(\"\");\n try {\n if (!preview) { setPreview(await onPreview(input)); setConfirmed(false); }\n else {\n retryKey.current ||= crypto.randomUUID();\n const sent = await onSend({ ...input, packetHash: preview.packetHash }, retryKey.current);\n setResult(sent); onSent?.(sent);\n }\n } catch (cause) { setError(cause instanceof Error ? cause.message : \"The courtesy copy could not be completed.\"); }\n finally { setBusy(false); }\n };\n return <section className=\"mb-courtesy\" style={mindBillAppearanceStyle(appearance)}>\n <style>{COURTESY_STYLES}</style>\n <p>Email one combined PDF for the recipient’s records. This does not submit the bill or change its status.</p>\n {environment === \"sandbox\" ? <p role=\"status\" className=\"mb-courtesy-notice\">Sandbox preview — no email will be delivered.</p> : null}\n <form onSubmit={(event) => { event.preventDefault(); void submit(); }}>\n <fieldset disabled={busy || Boolean(result) || Boolean(error && retryKey.current)}>\n <div className=\"mb-courtesy-grid\"><div>\n <label>To<input required value={to} onChange={(event) => setTo(event.target.value)} placeholder=\"recipient@example.com\" autoComplete=\"off\" /></label>\n {recipientPicker(\"To\", to, setTo)}\n <label>CC <span>(optional)</span><input value={cc} onChange={(event) => setCc(event.target.value)} autoComplete=\"off\" /></label>\n {recipientPicker(\"CC\", cc, setCc)}\n <small>Separate multiple email addresses with commas. Replies return to the workspace inbox.</small>\n </div><div className=\"mb-courtesy-documents\"><h3>Combined PDF packet</h3>\n <label><input type=\"checkbox\" checked disabled />Proof of submission cover sheet — first page</label>\n <label><input type=\"checkbox\" checked={includeCms1500} onChange={(event) => setIncludeCms1500(event.target.checked)} />CMS-1500 bill</label>\n {documents.map((document) => <label key={document.id}><input type=\"checkbox\" checked={documentIds.includes(document.id)} onChange={(event) => setDocumentIds((ids) => event.target.checked ? [...ids, document.id] : ids.filter((id) => id !== document.id))} />{document.filename}</label>)}\n </div></div>\n <label>Subject<input required maxLength={200} value={subject} onChange={(event) => setSubject(event.target.value)} /></label>\n <label>Message<textarea required maxLength={10000} rows={4} value={bodyText} onChange={(event) => setBodyText(event.target.value)} /></label>\n </fieldset>\n {preview && pdfUrl ? <div className=\"mb-courtesy-preview\"><a href={pdfUrl} target=\"_blank\" rel=\"noreferrer\">Review combined PDF ({preview.documentCount} documents)</a><iframe title=\"Courtesy copy PDF preview\" src={pdfUrl} /><label><input type=\"checkbox\" checked={confirmed} disabled={busy || Boolean(result)} onChange={(event) => setConfirmed(event.target.checked)} />I reviewed the packet and verified all recipients may receive these records.</label></div> : null}\n {error ? <p role=\"alert\">{error} {retryKey.current ? \"Delivery may have completed. Retry here uses the same request; do not start a new copy or reopen this form until the delivery is confirmed.\" : \"No email was requested. Check the details and try the preview again.\"}</p> : null}\n {result ? <p role=\"status\">{result.sent ? \"Courtesy copy sent.\" : result.simulated ? \"Sandbox simulation complete. No email was sent.\" : \"Email delivery is disabled. No email was sent.\"}</p> : <button type=\"submit\" disabled={busy || Boolean(preview && !confirmed)}>{busy ? \"Preparing…\" : !preview ? \"Preview packet\" : environment === \"sandbox\" ? \"Simulate courtesy copy\" : \"Send courtesy copy\"}</button>}\n </form>\n </section>;\n}\n\nconst COURTESY_STYLES = `\n.mb-courtesy select{font:inherit;color:inherit;width:100%;min-width:0;max-width:100%;background:var(--mb-surface,#fff);border:1px solid var(--mb-border,#d7dfdd);border-radius:var(--mb-control-radius,8px);padding:10px 12px}.mb-courtesy select:focus-visible{outline:2px solid var(--mb-accent,#215b5c);outline-offset:3px}\n.mb-courtesy{color:var(--mb-text,#243f47);font:inherit;max-width:100%;min-width:0}.mb-courtesy *{box-sizing:border-box}.mb-courtesy p{line-height:1.5;color:var(--mb-muted,#61747b)}.mb-courtesy fieldset{border:0;padding:0;margin:0;min-width:0}.mb-courtesy label{display:grid;gap:8px;margin:16px 0;font-weight:600}.mb-courtesy input:not([type=checkbox]),.mb-courtesy textarea{font:inherit;color:inherit;width:100%;min-width:0;background:var(--mb-surface,#fff);border:1px solid var(--mb-border,#d7dfdd);border-radius:var(--mb-control-radius,8px);padding:10px 12px}.mb-courtesy input[type=checkbox]{accent-color:var(--mb-accent,#215b5c);width:16px;height:16px;flex:0 0 auto}.mb-courtesy input:focus-visible,.mb-courtesy textarea:focus-visible,.mb-courtesy button:focus-visible{outline:2px solid var(--mb-accent,#215b5c);outline-offset:3px}.mb-courtesy-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.mb-courtesy h3{font-size:16px}.mb-courtesy-documents label,.mb-courtesy-preview label{display:flex;align-items:flex-start;gap:10px;overflow-wrap:anywhere;font-weight:400}.mb-courtesy small,.mb-courtesy label span{font-weight:400;color:var(--mb-muted,#61747b)}.mb-courtesy-notice{background:var(--mb-soft,#f4f6f4);padding:12px;border-radius:8px}.mb-courtesy-preview{padding:16px 0}.mb-courtesy-preview a{color:var(--mb-accent,#215b5c)}.mb-courtesy-preview iframe{display:block;width:100%;height:300px;border:1px solid var(--mb-border,#d7dfdd);margin-top:12px}.mb-courtesy button{font:inherit;background:var(--mb-accent,#215b5c);color:var(--mb-accent-contrast,#fff);border:0;border-radius:var(--mb-control-radius,8px);padding:11px 18px;cursor:pointer}.mb-courtesy button:disabled{opacity:.55;cursor:default}@media(max-width:640px){.mb-courtesy-grid{grid-template-columns:1fr;gap:8px}}\n`;\n","import type { CSSProperties } from \"react\";\nimport type { MindBillAppearance } from \"@mindbill/embed\";\n\nexport type MindBillThemePreset =\n | \"mindbill\"\n | \"qme-companion\"\n | \"calm-clinical\"\n | \"orange-bright\"\n | \"clinical-blue\"\n | \"midnight-cyan\";\n\nexport type MindBillReactAppearance = MindBillAppearance & {\n /** A complete starting point. Individual tokens below always win. */\n preset?: MindBillThemePreset;\n accentTextColor?: string;\n inputBackgroundColor?: string;\n controlRadius?: string;\n shadow?: string;\n dangerColor?: string;\n successColor?: string;\n warningColor?: string;\n /** Dashboard-only overrides. Omitted values follow the selected brand palette. */\n dashboard?: {\n borderColor?: string;\n borderWidth?: string;\n borderRadius?: string;\n sectionGap?: string;\n rowMinHeight?: string;\n linkColor?: string;\n /** Small status markers, not full-card border colors. */\n sectionColors?: Partial<Record<\"violet\" | \"red\" | \"blue\" | \"green\" | \"amber\" | \"neutral\", string>>;\n /** Backgrounds in bucket order; omitted entries use progressively stronger accent tints. */\n agingColors?: readonly string[];\n agingTextColor?: string;\n agingRadius?: string;\n };\n};\n\nexport const mindBillThemePresets = {\n mindbill: {\n accentColor: \"#238dbd\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#f3f8fa\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#203743\",\n mutedColor: \"#657982\",\n borderColor: \"#dbe6ea\",\n borderRadius: \"14px\",\n controlRadius: \"8px\",\n shadow: \"0 8px 24px rgba(28,58,72,.04)\",\n dangerColor: \"#b63d35\",\n successColor: \"#217449\",\n warningColor: \"#8a5c17\",\n },\n \"qme-companion\": {\n accentColor: \"#53b5dc\",\n accentTextColor: \"#173542\",\n backgroundColor: \"#f2f8fb\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#1d3440\",\n mutedColor: \"#617783\",\n borderColor: \"#d7e5eb\",\n borderRadius: \"12px\",\n controlRadius: \"8px\",\n shadow: \"0 1px 2px rgba(29,52,64,.05)\",\n dangerColor: \"#b83f3a\",\n successColor: \"#21835d\",\n warningColor: \"#9a6418\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"calm-clinical\": {\n accentColor: \"#52b4d7\",\n accentTextColor: \"#173542\",\n backgroundColor: \"#f2f8fb\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#20323c\",\n mutedColor: \"#687b84\",\n borderColor: \"#d8e4e9\",\n borderRadius: \"12px\",\n controlRadius: \"8px\",\n shadow: \"0 1px 2px rgba(32,50,60,.05)\",\n dangerColor: \"#b83f3a\",\n successColor: \"#21835d\",\n warningColor: \"#9a6418\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"orange-bright\": {\n accentColor: \"#f4510b\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#fffaf6\",\n surfaceColor: \"#fffefd\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#090f1f\",\n mutedColor: \"#626a73\",\n borderColor: \"#e7e1da\",\n borderRadius: \"16px\",\n controlRadius: \"10px\",\n shadow: \"0 12px 36px rgba(244,81,11,.08), 0 1px 2px rgba(9,15,31,.05)\",\n dangerColor: \"#c4322b\",\n successColor: \"#16835b\",\n warningColor: \"#a65f00\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"clinical-blue\": {\n accentColor: \"#1677ff\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#f5f7fa\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#1f2d3d\",\n mutedColor: \"#66788a\",\n borderColor: \"#d9e2ec\",\n borderRadius: \"8px\",\n controlRadius: \"6px\",\n shadow: \"0 2px 8px rgba(31,45,61,.06)\",\n dangerColor: \"#d4380d\",\n successColor: \"#389e0d\",\n warningColor: \"#d48806\",\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif\",\n },\n \"midnight-cyan\": {\n accentColor: \"#05092e\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#edf6ff\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#05092e\",\n mutedColor: \"#596078\",\n borderColor: \"#d9dae1\",\n borderRadius: \"10px\",\n controlRadius: \"6px\",\n shadow: \"0 1px 2px rgba(5,9,46,.04)\",\n dangerColor: \"#b42318\",\n successColor: \"#167a58\",\n warningColor: \"#9a6418\",\n fontFamily: \"Geist, Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n} as const satisfies Record<MindBillThemePreset, MindBillReactAppearance>;\n\nexport function resolveMindBillAppearance(\n appearance: MindBillReactAppearance | undefined,\n): MindBillReactAppearance {\n const preset = appearance?.preset ?? \"mindbill\";\n return { ...mindBillThemePresets[preset], ...appearance, preset };\n}\n\nexport function mindBillAppearanceStyle(\n appearance: MindBillReactAppearance | undefined,\n style?: CSSProperties,\n): CSSProperties {\n const resolved = resolveMindBillAppearance(appearance);\n const dashboard = resolved.dashboard;\n return {\n \"--mb-accent\": resolved.accentColor,\n \"--mb-accent-contrast\": resolved.accentTextColor,\n \"--mb-text\": resolved.textColor,\n \"--mb-muted\": resolved.mutedColor,\n \"--mb-border\": resolved.borderColor,\n \"--mb-soft\": resolved.backgroundColor,\n \"--mb-surface\": resolved.surfaceColor,\n \"--mb-input\": resolved.inputBackgroundColor,\n \"--mb-font\": resolved.fontFamily,\n \"--mb-radius\": resolved.borderRadius,\n \"--mb-control-radius\": resolved.controlRadius,\n \"--mb-shadow\": resolved.shadow,\n \"--mb-danger\": resolved.dangerColor,\n \"--mb-success\": resolved.successColor,\n \"--mb-warning\": resolved.warningColor,\n \"--mbtk-border\": dashboard?.borderColor ?? \"var(--mb-border)\",\n \"--mbtk-border-width\": dashboard?.borderWidth ?? \"1px\",\n \"--mbtk-radius\": dashboard?.borderRadius ?? \"var(--mb-radius)\",\n \"--mbtk-section-gap\": dashboard?.sectionGap ?? \"16px\",\n \"--mbtk-row-height\": dashboard?.rowMinHeight ?? \"44px\",\n // Brand accents can be intentionally pale. Counts remain legible on a surface.\n \"--mbtk-link\": dashboard?.linkColor ?? \"var(--mb-text)\",\n \"--mbtk-violet\": dashboard?.sectionColors?.violet ?? \"var(--mb-accent)\",\n \"--mbtk-red\": dashboard?.sectionColors?.red ?? \"var(--mb-danger)\",\n \"--mbtk-blue\": dashboard?.sectionColors?.blue ?? \"var(--mb-accent)\",\n \"--mbtk-green\": dashboard?.sectionColors?.green ?? \"var(--mb-success)\",\n \"--mbtk-amber\": dashboard?.sectionColors?.amber ?? \"var(--mb-warning)\",\n \"--mbtk-neutral\": dashboard?.sectionColors?.neutral ?? \"var(--mb-muted)\",\n \"--mbtk-aging-text\": dashboard?.agingTextColor ?? \"var(--mb-text)\",\n \"--mbtk-aging-radius\": dashboard?.agingRadius ?? \"var(--mb-control-radius)\",\n ...Object.fromEntries(Array.from({ length: 5 }, (_, index) => [\n `--mbtk-aging-${index + 1}`,\n dashboard?.agingColors?.[index] ?? `color-mix(in srgb,var(${index === 4 ? \"--mb-danger\" : \"--mb-accent\"}) ${[5, 8, 12, 16, 12][index]}%,var(--mb-surface))`,\n ])),\n ...style,\n } as CSSProperties;\n}\n","import type { OrganizationProfileData } from \"@mindbill/browser\";\nimport type { BillSubmissionInput } from \"./bill-submission-form\";\n\nexport type BillSubmissionProfileOption<K extends \"billingProvider\" | \"renderingProvider\" | \"serviceLocation\"> = {\n id: string;\n label: string;\n value: NonNullable<BillSubmissionInput[K]>;\n};\n\n/** Supply host-owned snapshots or convert a MindBill organization profile. SSNs use server-resolved references. */\nexport type BillSubmissionProfileOptions = {\n billingProviders?: readonly BillSubmissionProfileOption<\"billingProvider\">[];\n renderingProviders?: readonly BillSubmissionProfileOption<\"renderingProvider\">[];\n serviceLocations?: readonly BillSubmissionProfileOption<\"serviceLocation\">[];\n};\n\n/** Explicit adapter: does not fetch, auto-select, persist, or mutate existing bills. */\nexport function organizationProfileOptions(profile: OrganizationProfileData): BillSubmissionProfileOptions {\n return {\n billingProviders: profile.billingProviders.map((provider) => ({\n id: provider.id, label: provider.name,\n value: { name: provider.name,\n ...(provider.taxIdType === \"SSN\" ? { savedProviderId: provider.id, taxIdType: \"SSN\" as const, taxIdLast4: provider.taxIdLast4 ?? \"\" } : { taxId: provider.taxId ?? \"\", taxIdType: \"EIN\" as const }),\n npi: provider.npi, ...(provider.phone !== undefined ? { phone: provider.phone } : {}),\n address: { line1: provider.billingStreet ?? \"\", city: provider.billingCity ?? \"\", state: provider.billingState ?? \"\", postalCode: provider.billingZip ?? \"\" } },\n })),\n renderingProviders: (profile.renderingProviders ?? []).filter((provider) => provider.active !== false).map((provider) => ({\n id: provider.id, label: provider.name,\n value: { name: provider.name, npi: provider.npi,\n ...(provider.specialty !== undefined ? { specialty: provider.specialty } : {}),\n ...(provider.taxonomy !== undefined ? { taxonomy: provider.taxonomy } : {}),\n ...(provider.licenseNumber !== undefined ? { licenseNumber: provider.licenseNumber } : {}),\n ...(provider.licenseState !== undefined ? { licenseState: provider.licenseState } : {}),\n ...(provider.isQME !== undefined ? { isQme: provider.isQME } : {}),\n ...(provider.isAME !== undefined ? { isAme: provider.isAME } : {}) },\n })),\n serviceLocations: profile.locations.filter((location) => location.active !== false).map((location) => ({\n id: location.id, label: location.nickname || location.name,\n value: { name: location.name, placeOfServiceCode: location.posCode ?? \"\",\n address: { line1: location.street, city: location.city, state: location.state, postalCode: location.zip } },\n })),\n };\n}\n","\"use client\";\n\nexport { BillCourtesyCopyForm } from \"./bill-courtesy-copy-form\";\nexport type { BillCourtesyCopyFormProps, CourtesyCopyRecipientOption } from \"./bill-courtesy-copy-form\";\nexport type { BillCourtesyCopyInput, BillCourtesyCopyPreview, BillCourtesyCopyResult, BillTeamNote } from \"@mindbill/browser\";\nexport { organizationProfileOptions } from \"./billing-profile-options\";\nexport type { BillSubmissionProfileOptions, BillSubmissionProfileOption } from \"./billing-profile-options\";\n\nimport \"@mindbill/embed\";\nimport type { CSSProperties, ReactElement } from \"react\";\nimport { createElement, useEffect, useRef } from \"react\";\nimport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport type MindBillWidgetProps = {\n sessionToken: string;\n embedUrl: string;\n appearance?: MindBillAppearance;\n className?: string;\n style?: CSSProperties;\n onMindBill?: (event: CustomEvent<MindBillEventDetail>) => void;\n onMindBillError?: (event: CustomEvent<MindBillErrorDetail>) => void;\n};\n\nfunction widget(tagName: string, props: MindBillWidgetProps): ReactElement {\n const ref = useRef<HTMLElement | null>(null);\n const { onMindBill, onMindBillError } = props;\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n const handleEvent = (event: Event) =>\n onMindBill?.(event as CustomEvent<MindBillEventDetail>);\n const handleError = (event: Event) =>\n onMindBillError?.(event as CustomEvent<MindBillErrorDetail>);\n element.addEventListener(\"mindbill\", handleEvent);\n element.addEventListener(\"mindbill-error\", handleError);\n return () => {\n element.removeEventListener(\"mindbill\", handleEvent);\n element.removeEventListener(\"mindbill-error\", handleError);\n };\n }, [onMindBill, onMindBillError]);\n\n return createElement(tagName, {\n ref,\n \"session-token\": props.sessionToken,\n \"embed-url\": props.embedUrl,\n theme: props.appearance?.theme,\n \"accent-color\": props.appearance?.accentColor,\n \"background-color\": props.appearance?.backgroundColor,\n \"surface-color\": props.appearance?.surfaceColor,\n \"text-color\": props.appearance?.textColor,\n \"muted-color\": props.appearance?.mutedColor,\n \"border-color\": props.appearance?.borderColor,\n \"font-family\": props.appearance?.fontFamily,\n \"border-radius\": props.appearance?.borderRadius,\n locale: props.appearance?.locale,\n class: props.className,\n style: props.style,\n });\n}\n\nexport function MindBillBillTimeline(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-bill-timeline\", props);\n}\nexport function MindBillBillReview(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-bill-review\", props);\n}\n\n\nexport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport {\n mindBillAppearanceStyle,\n mindBillThemePresets,\n resolveMindBillAppearance,\n} from \"./appearance\";\nexport type {\n MindBillReactAppearance,\n MindBillThemePreset,\n} from \"./appearance\";\n\nexport {\n BillReviewForm,\n BillStatusSummary,\n buildBillReviewSaveInput,\n ensureTrailingProcedureLine,\n} from \"./native-bill-review\";\n\nexport { BillReadOnlyForm } from \"./bill-read-only-form\";\nexport type { BillReadOnlyFormProps } from \"./bill-read-only-form\";\n\nexport {\n applyBillSubmissionEvaluationDiagnoses,\n applyBillSubmissionEvaluationModifiers,\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BILL_SUBMISSION_REPORT_TYPES,\n BILL_SUBMISSION_REQUIRED_FIELDS,\n BillSubmissionActions,\n BillSubmissionAttachmentsSection,\n BillSubmissionClaimSection,\n BillSubmissionForm,\n BillSubmissionHeader,\n BillSubmissionPatientSection,\n BillSubmissionProvidersSection,\n BillSubmissionServiceLinesSection,\n chooseClaimsAdministrator,\n ensureTrailingBillSubmissionLine,\n exactClaimsAdministratorMatch,\n formatBillSubmissionDate,\n claimsAdministratorRecommendations,\n MED_LEGAL_REPORT_TYPE_CODE,\n normalizeClaimsAdministratorName,\n parseBillSubmissionDate,\n prepareBillSubmissionDocuments,\n PSYCH_QME_DEFAULT_DIAGNOSIS,\n submittedClaimsAdministrator,\n validateBillSubmission,\n} from \"./bill-submission-form\";\nexport type {\n BillSubmissionAddress,\n BillSubmissionAttachmentReportTypeMode,\n BillSubmissionDiagnosisOption,\n BillSubmissionDocumentType,\n BillSubmissionEvaluationType,\n BillSubmissionFormProps,\n BillSubmissionFormValue,\n BillSubmissionInput,\n BillSubmissionModifierOption,\n BillSubmissionPostalPlace,\n BillSubmissionProcedureOption,\n BillSubmissionReportTypeOption,\n BillSubmissionSectionId,\n BillSubmissionSourceAttachment,\n BillSubmissionTaxonomyOption,\n BillSubmissionUpload,\n BillSubmissionValidation,\n} from \"./bill-submission-form\";\nexport { extractSendRouteEmail, formatSendRouteFax, SendRouteDialog } from \"./send-route-dialog\";\nexport type { SendRouteDialogProps, SendRouteSubmission } from \"./send-route-dialog\";\n\nexport {\n BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS,\n calculateBillSubmissionAllowedAmount,\n DEFAULT_BILL_SUBMISSION_MODIFIERS,\n DEFAULT_BILL_SUBMISSION_PROCEDURES,\n DEFAULT_BILL_SUBMISSION_TAXONOMIES,\n} from \"./billing-catalog\";\nexport type {\n BillReviewAttachment,\n BillReviewBillingProvider,\n BillReviewClinician,\n BillReviewData,\n BillReviewDocumentType,\n BillReviewDraft,\n BillReviewFormProps,\n BillReviewFeatures,\n BillReviewLineItem,\n BillReviewLocation,\n BillReviewPayer,\n BillReviewSaveInput,\n BillStatusSummaryProps,\n BillStatusAction,\n BillSubmissionRoute,\n} from \"./native-bill-review\";\n\nexport {\n BillAgingSummary,\n BillingDashboard,\n BillingReport,\n BillList,\n billAgingBucket,\n billAgingDays,\n buildBillingReportCsv,\n buildBillingReportRows,\n summarizeBillingDashboard,\n} from \"./billing-dashboard\";\nexport type {\n BillAgingBucket,\n BillAgingBucketId,\n BillAgingSummaryProps,\n BillingComponentProps,\n BillingDashboardBill,\n BillingDashboardProps,\n BillingDashboardSummary,\n BillingReportDimension,\n BillingReportProps,\n BillingReportRow,\n BillListProps,\n} from \"./billing-dashboard\";\n\nexport {\n BILL_STATUS_AGING_BUCKETS,\n BillStatusAgingMatrix,\n buildBillStatusAgingCsv,\n buildBillStatusAgingMatrix,\n} from \"./status-aging-matrix\";\nexport type {\n BillStatusAgingCell,\n BillStatusAgingMatrixData,\n BillStatusAgingMatrixProps,\n BillStatusAgingRow,\n} from \"./status-aging-matrix\";\n\nexport {\n BILL_TASKS_AGING_BUCKETS,\n BillTasksDashboard,\n billTasksAgingBucketIndex,\n buildBillTasksDashboard,\n} from \"./bill-tasks-dashboard\";\nexport type {\n BillTasksAgingBucket,\n BillTasksDashboardCell,\n BillTasksDashboardData,\n BillTasksDashboardItem,\n BillTasksDashboardProps,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardSectionInput,\n BillTasksDashboardTone,\n} from \"./bill-tasks-dashboard\";\n\nexport {\n BillSubmissionsRibbon,\n billSubmissionsRibbonDeliveryLabel,\n billSubmissionsRibbonFromHistory,\n} from \"./bill-submissions-ribbon\";\nexport type {\n BillSubmissionRibbonItem,\n BillSubmissionsRibbonProps,\n} from \"./bill-submissions-ribbon\";\n\nexport {\n REPORT_BILL_STATUS_OPTIONS,\n ReportBillStatusDialog,\n} from \"./report-bill-status-dialog\";\nexport type {\n ReportBillStatusDialogProps,\n ReportBillStatusId,\n ReportBillStatusInput,\n} from \"./report-bill-status-dialog\";\n\nexport { BillingSettings, OrganizationOnboarding } from \"./organization-onboarding\";\nexport { W9Upload } from \"./w9-upload\";\nexport type { W9UploadProps, W9ExtractionStatus } from \"./w9-upload\";\nexport { ConnectedPaymentReview } from \"./payment-review\";\nexport type { ConnectedPaymentReviewProps, PaymentReviewRange } from \"./payment-review\";\nexport type { PaymentReviewItem, PaymentReviewQuery, PaymentReviewResult } from \"./billing-operations-client\";\nexport type { OrganizationOnboardingProps } from \"./organization-onboarding\";\n\nexport { ConnectedNotificationSettings, NotificationSettings } from \"./notification-settings\";\nexport type {\n NotificationAgingDay,\n NotificationPreferences,\n NotificationSettingsAdapter,\n NotificationSettingsProps,\n NotificationSettingsSnapshot,\n NotificationSettingsUpdate,\n} from \"./notification-settings\";\n\nexport {\n ConnectedBillStatus,\n createBillStatusClient,\n useBillStatus,\n} from \"./connected-bill-status\";\nexport type {\n BillClaimsAdministratorSource,\n BillReviewPayerOption,\n BillReviewPayerSuggestion,\n BrowserBillSubmissionResult,\n} from \"@mindbill/browser\";\n\nexport {\n BillActivityTimeline,\n BillExplanationOfReview,\n BillHistoryTable,\n BillLifecycleActions,\n BillLifecycleProgress,\n BillRejectionNotice,\n BillPaymentLedger,\n BillPayerContactCard,\n BillRemittanceCard,\n BillSnapshotSummary,\n billActivityEventLabel,\n billLifecycleDisplayLabel,\n billLifecycleStage,\n isBillLifecycleDraft,\n visibleBillLifecycleActions,\n} from \"./bill-lifecycle-surfaces\";\nexport type {\n BillActivityEvent,\n BillActivityTimelineProps,\n BillHistoryTableProps,\n BillExplanationOfReviewProps,\n BillLifecycleActionsProps,\n BillLifecycleProgressProps,\n BillLifecycleProgressStepsOptions,\n BillRejectionNoticeProps,\n BillLifecycleStage,\n BillPaymentLedgerProps,\n BillPayerContactCardProps,\n BillRemittanceCardProps,\n BillSnapshotSummaryProps,\n} from \"./bill-lifecycle-surfaces\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n reportBillStatusContacts,\n SECOND_REVIEW_REASON_TEMPLATE,\n SECOND_REVIEW_WINDOW_DAYS,\n secondReviewDeadline,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport { ClaimsAdministratorDirectoryDialog } from \"./claims-administrator-directory-dialog\";\nexport type { ClaimsAdministratorDirectoryDialogProps } from \"./claims-administrator-directory-dialog\";\nexport { SECOND_REVIEW_REASON_TEMPLATES, SecondReviewForm } from \"./second-review-form\";\nexport type { SecondReviewFormProps } from \"./second-review-form\";\nexport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPayer,\n BillClaimsAdministratorPattern,\n BillEorDocument,\n BillActivityRecord,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillSubmissionDetail,\n HistoricalBillReviewData,\n BillLifecycleDelivery,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n BillPaymentRecord,\n BillRemittanceSummary,\n BillRejection,\n CloseBillInput,\n ConnectedBillLifecycleProps,\n PostBillPaymentInput,\n ReopenBillInput,\n ReportBillStatusContacts,\n SecondReviewDeadline,\n SendDuplicateBillInput,\n SubmitSecondReviewInput,\n UseBillLifecycleOptions,\n UseBillLifecycleResult,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillStatusClient,\n BillStatusClientOptions,\n BillStatusData,\n BillStatusSession,\n BillStatusSessionProvider,\n BillStatusSessionRequest,\n ConnectedBillStatusProps,\n UseBillStatusOptions,\n UseBillStatusResult,\n} from \"./connected-bill-status\";\n\nexport {\n ConnectedBillingWorkspace,\n ConnectedBillSearch,\n ConnectedBillTasksDashboard,\n ConnectedProductivityReport,\n ConnectedServiceLineItemsReport,\n} from \"./connected-billing-workspace\";\nexport type {\n ConnectedBillingWorkspaceProps,\n ConnectedBillSearchProps,\n ConnectedBillTasksDashboardProps,\n} from \"./connected-billing-workspace\";\nexport { createBillingOperationsClient } from \"./billing-operations-client\";\nexport type {\n BillingOperationsClient,\n BillingOperationsClientOptions,\n BillRegistryAge,\n BillRegistryItem,\n BillRegistryQuery,\n BillRegistryResult,\n BillRegistrySort,\n BillRegistryStatus,\n BillTasksResult,\n ProductivityReport,\n ServiceLineItemsReport,\n} from \"./billing-operations-client\";\n","\"use client\";\n\nimport { sanitizeBillReviewSaveInput } from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\nimport type { CSSProperties, FormEvent, KeyboardEvent, ReactElement } from \"react\";\nimport { useEffect, useId, useMemo, useRef, useState } from \"react\";\n\nexport type BillReviewDocumentType =\n | \"final_report\"\n | \"letter_of_attestation\"\n | \"proof_of_service\"\n | \"form_122\"\n | \"return_to_work_voucher\"\n | \"w9\"\n | \"medical_records\"\n | \"appeal\"\n | \"other\";\n\nexport type BillReviewBillingProvider = {\n name: string;\n taxId: string;\n taxIdType?: \"EIN\" | \"SSN\";\n taxIdConfigured?: boolean;\n taxIdLast4?: string;\n npi: string;\n billType: \"Professional\" | \"Institutional\";\n phone?: string;\n billingStreet?: string;\n billingCity?: string;\n billingState?: string;\n billingZip?: string;\n};\n\nexport type BillReviewClinician = {\n name: string;\n specialty: string;\n npi: string;\n taxonomy?: string;\n licenseNumber?: string;\n licenseState?: string;\n signaturePng?: string;\n signatureKey?: string;\n isQME?: boolean;\n isAME?: boolean;\n email?: string;\n active?: boolean;\n};\n\nexport type BillReviewLocation = {\n billingProviderId?: string;\n name: string;\n nickname?: string;\n street: string;\n city: string;\n state: string;\n zip: string;\n county?: string;\n posCode?: string;\n isPrimary?: boolean;\n active?: boolean;\n};\n\nexport type BillReviewLineItem = {\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge: number;\n feeSchedule?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n};\n\nconst EMPTY_PROCEDURE_LINE: BillReviewLineItem = {\n code: \"\",\n modifiers: [],\n units: 1,\n charge: 0,\n};\n\nfunction isEmptyProcedureLine(line: BillReviewLineItem): boolean {\n return !line.code.trim() && line.modifiers.length === 0 && line.units === 1 && !line.serviceDate && !line.serviceDateEnd && !line.charge && !(line.diagnosisPointers?.length);\n}\n\n/** Keeps completed/partial lines plus one keyboard-ready empty row. */\nexport function ensureTrailingProcedureLine(\n lines: readonly BillReviewLineItem[],\n): BillReviewLineItem[] {\n const entered = lines\n .filter((line) => !isEmptyProcedureLine(line))\n .map((line) => ({ ...line, modifiers: [...line.modifiers] }));\n\n return entered.length < 50\n ? [...entered, { ...EMPTY_PROCEDURE_LINE, modifiers: [] }]\n : entered;\n}\n\nexport type BillReviewAttachment = {\n id: string;\n filename: string;\n description?: string | null;\n documentType: string;\n reportType?: string | null;\n source?: string;\n addedAt?: string;\n contentUrl?: string;\n};\n\nexport type BillReviewPayer = {\n id: string;\n name: string;\n hasElectronic?: boolean;\n states?: string[];\n confidence?: \"high\" | \"medium\" | \"directory\";\n recommended?: boolean;\n signals?: Array<{\n kind: \"name\" | \"claim_number\";\n state: \"match\" | \"warning\";\n label: string;\n }>;\n /** True when a bill for this claims administrator must name one of `payers`. */\n payerSelectionRequired?: boolean;\n /** Selectable payers (subpayors) under this claims administrator. */\n payers?: Array<{ id: string; label: string; default?: boolean }>;\n};\n\nexport type BillReviewFeatures = {\n authorizationNumber?: boolean;\n serviceDateRange?: boolean;\n wcabNumber?: boolean;\n codingPresets?: boolean;\n};\n\nexport type BillReviewClaimPatternStatus = {\n state: \"match\" | \"warning\" | \"unknown\";\n label: string;\n detail?: string;\n suggestion?: string;\n};\n\nexport type BillReviewData = {\n bill: {\n id: string;\n billingMode: \"med_legal\" | \"professional\";\n billNumber: string | number;\n status: string;\n transmissionState?: string;\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingSnapshot?: {\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n } | null;\n lineItems: BillReviewLineItem[];\n attachments: BillReviewAttachment[];\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n };\n patient: {\n name: string;\n firstName?: string;\n middleName?: string;\n lastName?: string;\n dob?: string;\n };\n injury: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n injuryEndDate?: string;\n cumulativeTrauma?: boolean;\n adjNumber?: string;\n claimsAdminId?: string;\n claimsAdminName?: string;\n claimPatternStatus?: BillReviewClaimPatternStatus;\n };\n};\n\nexport type BillReviewSaveInput = {\n claimsAdminId: string;\n /** The chosen payer (subpayor) when the claims administrator requires payer selection. */\n payerId?: string;\n patientOverrides?: {\n firstName: string;\n middleName?: string;\n lastName: string;\n dob?: string;\n };\n injuryOverrides?: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n injuryEndDate?: string;\n cumulativeTrauma?: boolean;\n adjNumber?: string;\n };\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n }>;\n};\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\n\nexport type BillDeliveryOption = {\n route: BillSubmissionRoute;\n label: string;\n detail: string;\n fallback: boolean;\n confidence: string;\n payerName: string;\n target?: string;\n chKey?: string;\n payerId?: string;\n printAndMail?: boolean;\n costUsd?: number;\n};\n\nexport type BillDeliveryOptions = {\n payerName: string;\n recommended: BillDeliveryOption;\n options: BillDeliveryOption[];\n contacts: {\n faxNumber?: string | null;\n claimsEmail?: string | null;\n portalUrl?: string | null;\n mailingAddress?: string | null;\n };\n};\n\nexport type BillSubmissionInput = {\n route: BillSubmissionRoute;\n destination?: {\n faxNumber?: string;\n email?: string;\n mailingAddress?: string;\n };\n attention?: string;\n subject?: string;\n note?: string;\n};\n\nexport type BillReviewFormProps = {\n data: BillReviewData;\n mode?: \"review\" | \"submission\";\n initialSubmission?: BillSubmissionInput;\n onSave?: (input: BillReviewSaveInput) => Promise<BillReviewData | void>;\n onSubmit: (\n input: BillReviewSaveInput,\n submission: BillSubmissionInput,\n ) => Promise<void>;\n onGetDeliveryOptions?: () => Promise<BillDeliveryOptions>;\n onAddAttachment: (\n file: File,\n documentType: BillReviewDocumentType,\n description?: string,\n ) => Promise<void>;\n onRemoveAttachment: (attachmentId: string) => Promise<void>;\n onOpenAttachment?: (attachment: BillReviewAttachment) => void;\n onSearchClaimsAdministrators?: (\n query: string,\n claimNumber?: string,\n ) => Promise<BillReviewPayer[]>;\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillReactAppearance;\n features?: BillReviewFeatures;\n disabled?: boolean;\n};\n\nexport type BillReviewDraft = {\n claimsAdminId: string;\n claimsAdminName: string;\n patientFirstName: string;\n patientMiddleName: string;\n patientLastName: string;\n patientDob: string;\n claimNumber: string;\n employer: string;\n doi: string;\n injuryEndDate: string;\n cumulativeTrauma: boolean;\n adjNumber: string;\n dos: string;\n dosEnd: string;\n authorizationNumber: string;\n billingProvider: BillReviewBillingProvider;\n clinician: BillReviewClinician;\n location: BillReviewLocation;\n lineItems: BillReviewLineItem[];\n};\n\nconst EMPTY_BILLING_PROVIDER: BillReviewBillingProvider = {\n name: \"\",\n taxId: \"\",\n npi: \"\",\n billType: \"Professional\",\n};\nconst EMPTY_CLINICIAN: BillReviewClinician = {\n name: \"\",\n specialty: \"\",\n npi: \"\",\n};\nconst EMPTY_LOCATION: BillReviewLocation = {\n name: \"\",\n street: \"\",\n city: \"\",\n state: \"\",\n zip: \"\",\n posCode: \"11\",\n};\n\nconst DOCUMENT_LABELS: Record<BillReviewDocumentType, string> = {\n final_report: \"Final medical-legal report\",\n letter_of_attestation: \"Letter of attestation\",\n proof_of_service: \"Proof of service\",\n form_122: \"DWC Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\",\n w9: \"W-9\",\n medical_records: \"Medical records\",\n appeal: \"Appeal or review support\",\n other: \"Other supporting document\",\n};\n\nconst US_STATES = [\"AL\",\"AK\",\"AZ\",\"AR\",\"CA\",\"CO\",\"CT\",\"DE\",\"FL\",\"GA\",\"HI\",\"ID\",\"IL\",\"IN\",\"IA\",\"KS\",\"KY\",\"LA\",\"ME\",\"MD\",\"MA\",\"MI\",\"MN\",\"MS\",\"MO\",\"MT\",\"NE\",\"NV\",\"NH\",\"NJ\",\"NM\",\"NY\",\"NC\",\"ND\",\"OH\",\"OK\",\"OR\",\"PA\",\"RI\",\"SC\",\"SD\",\"TN\",\"TX\",\"UT\",\"VT\",\"VA\",\"WA\",\"WV\",\"WI\",\"WY\",\"DC\"];\nconst PROCEDURES = [\n [\"ML200\", \"Missed med-legal appointment\"],\n [\"ML201\", \"Comprehensive med-legal evaluation\"],\n [\"ML202\", \"Follow-up med-legal evaluation\"],\n [\"ML203\", \"Supplemental med-legal evaluation\"],\n [\"ML204\", \"Medical-legal testimony\"],\n [\"ML205\", \"Sub rosa recording review\"],\n [\"MLPRR\", \"Medical record review\"],\n] as const;\nconst MODIFIERS = [\n [\"92\", \"Primary treating physician\"], [\"93\", \"Interpreter required\"],\n [\"94\", \"Agreed medical evaluator (AME)\"], [\"95\", \"Qualified medical evaluator (QME)\"],\n [\"96\", \"Psychiatric or psychological evaluation\"], [\"97\", \"Toxicology evaluation\"],\n [\"98\", \"Oncology evaluation\"],\n] as const;\ntype CodingPreset = \"qme\" | \"ame\" | \"psych_qme\";\nconst MANAGED_EVALUATOR_MODIFIERS = new Set([\"94\", \"95\", \"96\"]);\nconst MODIFIER_CODES: Record<string, readonly string[]> = {\n \"92\": [\"ML201\", \"ML202\", \"ML203\"],\n \"93\": [\"ML201\", \"ML202\"],\n \"94\": [\"ML201\", \"ML202\", \"ML203\"],\n \"95\": [\"ML200\", \"ML201\", \"ML202\", \"ML203\", \"MLPRR\"],\n \"96\": [\"ML201\", \"ML202\", \"ML203\"],\n \"97\": [\"ML201\", \"ML202\", \"ML203\"],\n \"98\": [\"ML201\", \"ML202\", \"ML203\"],\n};\n\nfunction toDraft(data: BillReviewData): BillReviewDraft {\n const snapshot = data.bill.billingSnapshot;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n return {\n claimsAdminId: data.injury.claimsAdminId || \"\",\n claimsAdminName: data.injury.claimsAdminName || \"\",\n patientFirstName: data.patient.firstName || nameParts[0] || \"\",\n patientMiddleName: data.patient.middleName || (nameParts.length > 2 ? nameParts.slice(1, -1).join(\" \") : \"\"),\n patientLastName: data.patient.lastName || (nameParts.length > 1 ? (nameParts.at(-1) || \"\") : \"\"),\n patientDob: data.patient.dob || \"\",\n claimNumber: data.injury.claimNumber || \"\",\n employer: data.injury.employer || \"\",\n doi: data.injury.doi || \"\",\n injuryEndDate: data.injury.injuryEndDate || \"\",\n cumulativeTrauma: Boolean(data.injury.cumulativeTrauma),\n adjNumber: data.injury.adjNumber || \"\",\n dos: data.bill.dos || \"\",\n dosEnd: data.bill.dosEnd || \"\",\n authorizationNumber: data.bill.authorizationNumber || \"\",\n billingProvider: {\n ...EMPTY_BILLING_PROVIDER,\n ...(snapshot?.billingProvider ?? {}),\n },\n clinician: { ...EMPTY_CLINICIAN, ...(snapshot?.renderingProvider ?? {}) },\n location: { ...EMPTY_LOCATION, ...(snapshot?.placeOfService ?? {}) },\n lineItems: ensureTrailingProcedureLine(data.bill.lineItems),\n };\n}\n\nexport function buildBillReviewSaveInput(\n draft: BillReviewDraft,\n): BillReviewSaveInput {\n return sanitizeBillReviewSaveInput({\n claimsAdminId: draft.claimsAdminId,\n patientOverrides: {\n firstName: draft.patientFirstName.trim(),\n ...(draft.patientMiddleName.trim() ? { middleName: draft.patientMiddleName.trim() } : {}),\n lastName: draft.patientLastName.trim(),\n ...(draft.patientDob ? { dob: draft.patientDob } : {}),\n },\n injuryOverrides: {\n ...(draft.claimNumber.trim() ? { claimNumber: draft.claimNumber.trim() } : {}),\n ...(draft.employer.trim() ? { employer: draft.employer.trim() } : {}),\n ...(draft.doi ? { doi: draft.doi } : {}),\n ...(draft.injuryEndDate ? { injuryEndDate: draft.injuryEndDate } : {}),\n cumulativeTrauma: draft.cumulativeTrauma,\n ...(draft.adjNumber.trim() ? { adjNumber: draft.adjNumber.trim().toUpperCase().replace(/\\s+/g, \"\") } : {}),\n },\n dos: draft.dos,\n dosEnd: draft.dosEnd || null,\n authorizationNumber: draft.authorizationNumber.trim() || null,\n billingProvider: { ...draft.billingProvider },\n renderingProvider: { ...draft.clinician },\n placeOfService: { ...draft.location },\n lineItems: draft.lineItems.filter((line) => line.code.trim()).map(({ id, code, modifiers, units, charge, serviceDate, serviceDateEnd, diagnosisPointers }) => ({\n ...(id ? { id } : {}),\n code: code.trim().toUpperCase(),\n modifiers,\n units,\n ...(charge ? { charge } : {}),\n ...(serviceDate ? { serviceDate } : {}),\n ...(serviceDateEnd ? { serviceDateEnd } : {}),\n ...(diagnosisPointers?.length ? { diagnosisPointers } : {}),\n })),\n });\n}\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(value);\n}\n\nfunction Field({\n label,\n value,\n onChange,\n type = \"text\",\n optional,\n required,\n disabled,\n hint,\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n type?: string;\n optional?: boolean;\n required?: boolean;\n disabled?: boolean;\n hint?: string;\n}): ReactElement {\n return (\n <label className=\"mb-native-field\">\n <span>\n {label}{required ? <span className=\"mb-native-required\" aria-hidden=\"true\"> *</span> : null}{optional ? <> <small>Optional</small></> : null}\n </span>\n <input\n type={type}\n value={value}\n required={required}\n disabled={disabled}\n autoComplete=\"off\"\n onChange={(event) => onChange(event.target.value)}\n />\n {hint ? <small className=\"mb-native-hint\">{hint}</small> : null}\n </label>\n );\n}\n\ntype ComboOption = {\n value: string;\n label: string;\n detail?: string;\n badge?: string;\n};\n\nfunction Combobox({ label, value, options, onChange, placeholder, required, disabled, name }: {\n label: string;\n value: string;\n options: ComboOption[];\n onChange: (value: string, option?: ComboOption) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n}): ReactElement {\n const listId = useId();\n const root = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [active, setActive] = useState(0);\n const filtered = useMemo(() => {\n const query = value.trim().toLowerCase();\n return options.filter((option) => !query || option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query)).slice(0, 40);\n }, [options, value]);\n useEffect(() => {\n const close = (event: MouseEvent) => {\n if (!root.current?.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", close);\n return () => document.removeEventListener(\"mousedown\", close);\n }, []);\n const select = (option: ComboOption) => {\n onChange(option.value, option);\n setOpen(false);\n setActive(0);\n };\n const keyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") { event.preventDefault(); setOpen(true); setActive((value) => Math.min(value + 1, filtered.length - 1)); }\n if (event.key === \"ArrowUp\") { event.preventDefault(); setActive((value) => Math.max(value - 1, 0)); }\n if (event.key === \"Enter\" && open && filtered[active]) { event.preventDefault(); select(filtered[active]); }\n if (event.key === \"Escape\") setOpen(false);\n };\n return <div className=\"mb-native-combo\" ref={root}>\n <label className=\"mb-native-field\">\n <span>{label}{required ? <span className=\"mb-native-required\" aria-hidden=\"true\"> *</span> : null}</span>\n <input\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-controls={listId}\n aria-expanded={open && filtered.length > 0}\n aria-activedescendant={open && filtered[active] ? `${listId}-${active}` : undefined}\n name={name || \"mindbill-search-value\"}\n autoComplete=\"new-password\"\n data-1p-ignore=\"true\"\n data-lpignore=\"true\"\n value={value}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n onFocus={() => setOpen(true)}\n onKeyDown={keyDown}\n onChange={(event) => { onChange(event.target.value); setOpen(true); setActive(0); }}\n />\n </label>\n {open && filtered.length ? <ul id={listId} role=\"listbox\" className=\"mb-native-combo-list\">\n {filtered.map((option, index) => <li id={`${listId}-${index}`} role=\"option\" aria-selected={index === active} key={`${option.value}-${index}`}>\n <button type=\"button\" className={index === active ? \"active\" : \"\"} onMouseDown={(event) => event.preventDefault()} onClick={() => select(option)}>\n <span className=\"mb-native-combo-title\"><strong>{option.label}</strong>{option.badge ? <em>{option.badge}</em> : null}</span>{option.detail ? <span>{option.detail}</span> : null}\n </button>\n </li>)}\n </ul> : null}\n </div>;\n}\n\nfunction StateCombobox({ label, value, onChange, required, disabled }: { label: string; value: string; onChange: (value: string) => void; required?: boolean; disabled?: boolean }): ReactElement {\n return <Combobox\n label={label}\n value={value}\n onChange={(next) => onChange(next.toUpperCase().slice(0, 2))}\n options={US_STATES.map((state) => ({ value: state, label: state }))}\n {...(required === undefined ? {} : { required })}\n {...(disabled === undefined ? {} : { disabled })}\n name=\"mindbill-state-value\"\n />;\n}\n\nfunction inferPreset(lines: BillReviewLineItem[]): CodingPreset {\n const modifiers = new Set(lines.flatMap((line) => line.modifiers));\n return modifiers.has(\"94\") ? \"ame\" : modifiers.has(\"96\") ? \"psych_qme\" : \"qme\";\n}\n\nfunction presetModifiersForCode(preset: CodingPreset, code: string): string[] {\n if (code === \"MLPRR\") return [\"95\"];\n if (preset === \"qme\" && [\"ML200\", \"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"95\"];\n if (preset === \"ame\" && [\"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"94\"];\n if (preset === \"psych_qme\") {\n if (code === \"ML200\") return [\"95\"];\n if ([\"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"96\"];\n }\n return [];\n}\n\nfunction modifierAppliesToCode(modifier: string, code: string): boolean {\n return !code || (MODIFIER_CODES[modifier]?.includes(code) ?? true);\n}\n\nfunction applyPreset(lines: BillReviewLineItem[], preset: CodingPreset): BillReviewLineItem[] {\n return lines.map((line) => {\n const preserved = line.modifiers.filter(\n (value) => !MANAGED_EVALUATOR_MODIFIERS.has(value) && modifierAppliesToCode(value, line.code),\n );\n return {\n ...line,\n modifiers: [...new Set([...presetModifiersForCode(preset, line.code), ...preserved])],\n };\n });\n}\n\nexport function BillReviewForm({\n data,\n mode = \"review\",\n initialSubmission = { route: \"ebill\" },\n onSave,\n onSubmit,\n onGetDeliveryOptions,\n onAddAttachment,\n onRemoveAttachment,\n onOpenAttachment,\n onSearchClaimsAdministrators,\n className,\n style,\n appearance,\n features,\n disabled = false,\n}: BillReviewFormProps): ReactElement {\n const [draft, setDraft] = useState(() => toDraft(data));\n const [payerQuery, setPayerQuery] = useState(\n () => data.injury.claimsAdminName || \"\",\n );\n const [payerResults, setPayerResults] = useState<BillReviewPayer[]>([]);\n const [payerBusy, setPayerBusy] = useState(false);\n const [deliveryOptions, setDeliveryOptions] = useState<BillDeliveryOptions | null>(null);\n const [submission, setSubmission] = useState<BillSubmissionInput>(initialSubmission);\n const [showSubmit, setShowSubmit] = useState(false);\n const [deliveryBusy, setDeliveryBusy] = useState(false);\n const [file, setFile] = useState<File | null>(null);\n const [documentType, setDocumentType] =\n useState<BillReviewDocumentType>(\"other\");\n const [busy, setBusy] = useState<\"save\" | \"submit\" | \"attachment\" | \"\">(\"\");\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n const editable = (mode === \"submission\" || data.bill.status === \"incomplete\") && !disabled;\n\n useEffect(() => {\n setDraft(toDraft(data));\n setPayerQuery(data.injury.claimsAdminName || \"\");\n }, [data]);\n\n useEffect(() => {\n const query = payerQuery.trim();\n const claimNumber = draft.claimNumber.trim();\n if (\n !onSearchClaimsAdministrators ||\n (query.length < 2 && claimNumber.length < 4)\n ) {\n setPayerResults([]);\n setPayerBusy(false);\n return;\n }\n let current = true;\n const timer = window.setTimeout(() => {\n setPayerBusy(true);\n void onSearchClaimsAdministrators(query, claimNumber)\n .then((results) => {\n if (!current) return;\n setPayerResults(results);\n const recommendation = results.find(\n (payer) => payer.recommended && payer.confidence === \"high\",\n );\n if (!draft.claimsAdminId && recommendation) {\n setDraft((currentDraft) => ({\n ...currentDraft,\n claimsAdminId: recommendation.id,\n claimsAdminName: recommendation.name,\n }));\n setPayerQuery(recommendation.name);\n setNotice(\n \"Claims administrator matched from the case data. Review and save to keep it on this bill.\",\n );\n }\n })\n .catch((cause) => {\n if (current) {\n setPayerResults([]);\n setError(\n cause instanceof Error\n ? cause.message\n : \"Claims administrator search is unavailable.\",\n );\n }\n })\n .finally(() => {\n if (current) setPayerBusy(false);\n });\n }, 200);\n return () => {\n current = false;\n window.clearTimeout(timer);\n };\n }, [\n draft.claimNumber,\n draft.claimsAdminId,\n onSearchClaimsAdministrators,\n payerQuery,\n ]);\n\n const selectedPayer = payerResults.find(\n (payer) => payer.id === draft.claimsAdminId,\n );\n\n const adjFormatValid =\n !draft.adjNumber ||\n /^ADJ\\d{7,}$/i.test(draft.adjNumber.replace(/[\\s-]/g, \"\"));\n const blockers = useMemo(() => {\n const result: string[] = [];\n if (!draft.patientFirstName.trim() || !draft.patientLastName.trim()) result.push(\"Patient name\");\n if (!draft.claimsAdminId) result.push(\"Claims administrator\");\n if (!draft.claimNumber.trim()) result.push(\"Claim number\");\n if (!draft.doi) result.push(\"Date of injury\");\n if (!adjFormatValid) result.push(\"Valid WCAB / ADJ number\");\n if (data.bill.billingMode === \"med_legal\" && !draft.dos) result.push(\"Date of service\");\n if (!draft.billingProvider.name.trim()) result.push(\"Practice name\");\n if (!draft.billingProvider.taxId.trim() && !(draft.billingProvider.taxIdType === \"SSN\" && draft.billingProvider.taxIdConfigured)) result.push(\"Tax ID\");\n if (!draft.billingProvider.npi.trim()) result.push(\"Billing NPI\");\n if (!draft.clinician.name.trim() || !draft.clinician.npi.trim()) result.push(\"Clinician and NPI\");\n if (![draft.location.name, draft.location.street, draft.location.city, draft.location.state, draft.location.zip].every((value) => value.trim())) result.push(\"Service location\");\n const completedLines = draft.lineItems.filter((line) => line.code.trim());\n if (!completedLines.length || completedLines.some((line) => line.units <= 0)) result.push(\"Valid procedure line\");\n if (data.bill.billingMode === \"professional\" && completedLines.some((line) => !line.serviceDate || line.charge <= 0)) {\n result.push(\"Service date and charge on every procedure line\");\n }\n return result;\n }, [adjFormatValid, data.bill.billingMode, draft]);\n const canSubmit = blockers.length === 0;\n\n const updateBillingProvider = <K extends keyof BillReviewBillingProvider>(\n key: K,\n value: BillReviewBillingProvider[K],\n ) =>\n setDraft((current) => ({\n ...current,\n billingProvider: { ...current.billingProvider, [key]: value },\n }));\n const updateClinician = <K extends keyof BillReviewClinician>(\n key: K,\n value: BillReviewClinician[K],\n ) =>\n setDraft((current) => ({\n ...current,\n clinician: { ...current.clinician, [key]: value },\n }));\n const updateLocation = <K extends keyof BillReviewLocation>(\n key: K,\n value: BillReviewLocation[K],\n ) =>\n setDraft((current) => ({\n ...current,\n location: { ...current.location, [key]: value },\n }));\n\n async function run(action: \"save\" | \"submit\", task: () => Promise<void>) {\n setBusy(action);\n setError(\"\");\n setNotice(\"\");\n try {\n await task();\n setNotice(action === \"save\" ? \"Changes saved.\" : \"Bill submitted.\");\n } catch (cause) {\n setError(\n cause instanceof Error\n ? cause.message\n : \"The billing request could not be completed.\",\n );\n } finally {\n setBusy(\"\");\n }\n }\n\n const handleSave = (event: FormEvent) => {\n event.preventDefault();\n if (mode === \"submission\") {\n if (!canSubmit) return;\n void run(\"submit\", () => onSubmit(buildBillReviewSaveInput(draft), initialSubmission));\n return;\n }\n if (!onSave) return;\n void run(\"save\", async () => {\n const updated = await onSave(buildBillReviewSaveInput(draft));\n if (updated) setDraft(toDraft(updated));\n });\n };\n\n const openSubmit = async () => {\n if (!onGetDeliveryOptions) return;\n setDeliveryBusy(true);\n setError(\"\");\n try {\n const next = await onGetDeliveryOptions();\n setDeliveryOptions(next);\n const recommended = next.recommended ?? next.options[0];\n if (!recommended) throw new Error(\"No delivery route is available for this payer.\");\n setSubmission({ route: recommended.route });\n setShowSubmit(true);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Delivery routes could not be loaded.\");\n } finally {\n setDeliveryBusy(false);\n }\n };\n\n const selectedDelivery = deliveryOptions?.options.find((option) => option.route === submission.route);\n const destinationLabel = submission.route === \"fax\"\n ? \"Fax number\"\n : submission.route === \"email\"\n ? \"Email address\"\n : submission.route === \"mail\"\n ? \"Mailing address\"\n : \"\";\n const destinationValue = submission.route === \"fax\"\n ? submission.destination?.faxNumber ?? selectedDelivery?.target ?? deliveryOptions?.contacts.faxNumber ?? \"\"\n : submission.route === \"email\"\n ? submission.destination?.email ?? selectedDelivery?.target ?? deliveryOptions?.contacts.claimsEmail ?? \"\"\n : submission.route === \"mail\"\n ? submission.destination?.mailingAddress ?? selectedDelivery?.target ?? deliveryOptions?.contacts.mailingAddress ?? \"\"\n : \"\";\n const setDestination = (value: string) => setSubmission((current) => {\n const destination = current.route === \"fax\"\n ? { faxNumber: value }\n : current.route === \"email\"\n ? { email: value }\n : { mailingAddress: value };\n return { ...current, destination };\n });\n const handleSubmit = () => run(\"submit\", async () => {\n await onSubmit(buildBillReviewSaveInput(draft), submission);\n setShowSubmit(false);\n });\n\n const attach = async () => {\n if (!file) return;\n setBusy(\"attachment\");\n setError(\"\");\n try {\n await onAddAttachment(file, documentType, DOCUMENT_LABELS[documentType]);\n setFile(null);\n setDocumentType(\"other\");\n setNotice(\"Document added to the payer packet.\");\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Document could not be attached.\");\n } finally {\n setBusy(\"\");\n }\n };\n\n const sectionClass = \"mb-native-section\";\n return (\n <form\n className={[\"mb-native-review\", className].filter(Boolean).join(\" \")}\n style={mindBillAppearanceStyle(appearance, style)}\n onSubmit={handleSave}\n >\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <style>{NATIVE_THEME_OVERRIDE_STYLES}</style>\n <style>{NATIVE_SUBMISSION_DIALOG_STYLES}</style>\n {mode === \"review\" ? <><header className=\"mb-native-heading\">\n <div>\n <span className=\"mb-native-eyebrow\">Billing review</span>\n <h2>Bill #{data.bill.billNumber}</h2>\n <p>Review the prefilled claim and payer packet, then submit.</p>\n </div>\n <div className=\"mb-native-total\">\n <span>{data.bill.status}</span>\n <strong>{money(data.bill.totalCharge)}</strong>\n </div>\n </header>\n\n <dl className=\"mb-native-summary\">\n <div><dt>Patient</dt><dd>{[draft.patientFirstName, draft.patientMiddleName, draft.patientLastName].filter(Boolean).join(\" \") || \"—\"}</dd></div>\n <div><dt>Claim</dt><dd>{draft.claimNumber || \"—\"}</dd></div>\n <div><dt>Employer</dt><dd>{draft.employer || \"—\"}</dd></div>\n <div><dt>Date of injury</dt><dd>{draft.doi || \"—\"}</dd></div>\n </dl></> : null}\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\">\n <div>\n <h3>Claims administrator</h3>\n <p>Select the carrier or administrator that should receive this bill.</p>\n </div>\n </div>\n <div className=\"mb-native-payer-picker\">\n <Combobox\n label=\"Insurance company or claims administrator\"\n required\n value={payerQuery}\n disabled={!editable}\n placeholder=\"Search by payer or administrator name\"\n name=\"mindbill-payer-query\"\n options={payerResults.map((payer) => ({\n value: payer.id,\n label: payer.name,\n ...(payer.recommended\n ? { badge: \"Recommended\" }\n : payer.confidence === \"medium\"\n ? { badge: \"Claim match\" }\n : {}),\n detail: [\n ...(payer.signals ?? []).map((signal) => signal.label),\n payer.hasElectronic\n ? \"Electronic billing available.\"\n : \"Billing route confirmed after review.\",\n ].join(\" \"),\n }))}\n onChange={(value, option) => {\n if (option) {\n setDraft((current) => ({ ...current, claimsAdminId: option.value, claimsAdminName: option.label }));\n setPayerQuery(option.label);\n setNotice(\"Claims administrator selected. Save changes to keep it on this bill.\");\n } else {\n setPayerQuery(value);\n setDraft((current) => value === current.claimsAdminName ? current : { ...current, claimsAdminId: \"\", claimsAdminName: \"\" });\n }\n }}\n />\n {payerBusy ? <span className=\"mb-native-payer-help\">Searching…</span> : null}\n {!payerBusy && payerQuery.trim().length > 1 && payerResults.length === 0 && !draft.claimsAdminId ? (\n <span className=\"mb-native-payer-help\">No matching administrator selected yet.</span>\n ) : null}\n {selectedPayer?.signals?.length ? (\n <div className=\"mb-native-payer-insight\" role=\"status\">\n {selectedPayer.signals.map((signal) => (\n <span className={signal.state} key={`${signal.kind}-${signal.label}`}>\n {signal.label}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Patient and claim</h3><p>Review the case details that will print on this bill.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Patient first name\" required disabled={!editable} value={draft.patientFirstName} onChange={(patientFirstName) => setDraft((current) => ({ ...current, patientFirstName }))} />\n <Field label=\"Middle name\" optional disabled={!editable} value={draft.patientMiddleName} onChange={(patientMiddleName) => setDraft((current) => ({ ...current, patientMiddleName }))} />\n <Field label=\"Patient last name\" required disabled={!editable} value={draft.patientLastName} onChange={(patientLastName) => setDraft((current) => ({ ...current, patientLastName }))} />\n <Field label=\"Date of birth\" type=\"date\" required disabled={!editable} value={draft.patientDob} onChange={(patientDob) => setDraft((current) => ({ ...current, patientDob }))} />\n <Field label=\"Claim number\" required disabled={!editable} value={draft.claimNumber} onChange={(claimNumber) => setDraft((current) => ({ ...current, claimNumber }))} {...((data.injury.claimPatternStatus?.detail || data.injury.claimPatternStatus?.label) ? { hint: data.injury.claimPatternStatus?.detail || data.injury.claimPatternStatus?.label || \"\" } : {})} />\n <Field label=\"Employer\" disabled={!editable} value={draft.employer} onChange={(employer) => setDraft((current) => ({ ...current, employer }))} />\n <Field label=\"Date of injury\" type=\"date\" required disabled={!editable} value={draft.doi} onChange={(doi) => setDraft((current) => ({ ...current, doi }))} />\n {draft.cumulativeTrauma ? <Field label=\"Cumulative trauma end date\" type=\"date\" required disabled={!editable} value={draft.injuryEndDate} onChange={(injuryEndDate) => setDraft((current) => ({ ...current, injuryEndDate }))} /> : null}\n {features?.wcabNumber === false ? null : <Field label=\"WCAB / ADJ number\" optional disabled={!editable} value={draft.adjNumber} onChange={(adjNumber) => setDraft((current) => ({ ...current, adjNumber }))} hint={adjFormatValid ? \"Use the EAMS case number shown as ADJ followed by digits.\" : \"Expected format: ADJ followed by at least 7 digits.\"} />}\n </div>\n {features?.wcabNumber === false ? null : <p className=\"mb-native-eams\">EAMS lookup requires California DWC verification. <a href=\"https://eams.dwc.ca.gov/WebEnhancement/\" target=\"_blank\" rel=\"noreferrer\">Verify in EAMS</a>.</p>}\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Service</h3><p>The service date and optional payer authorization printed on this bill.</p></div></div>\n <div className={`mb-native-grid ${features?.serviceDateRange || features?.authorizationNumber !== false ? \"three\" : \"one\"}`}>\n <Field label=\"Date of service\" type=\"date\" required disabled={!editable} value={draft.dos} onChange={(dos) => setDraft((current) => ({ ...current, dos }))} />\n {features?.serviceDateRange ? <Field label=\"Service end date\" type=\"date\" optional disabled={!editable} value={draft.dosEnd} onChange={(dosEnd) => setDraft((current) => ({ ...current, dosEnd }))} /> : null}\n {features?.authorizationNumber === false ? null : <Field label=\"Authorization number\" optional disabled={!editable} value={draft.authorizationNumber} onChange={(authorizationNumber) => setDraft((current) => ({ ...current, authorizationNumber }))} />}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Billing practice</h3><p>Payee identity and billing address for this claim.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Practice name\" required disabled={!editable} value={draft.billingProvider.name} onChange={(value) => updateBillingProvider(\"name\", value)} />\n <label className=\"mb-native-field\"><span>Tax ID type</span><select disabled={!editable} value={draft.billingProvider.taxIdType ?? \"EIN\"} onChange={(event) => setDraft((current) => ({ ...current, billingProvider: { ...current.billingProvider, taxIdType: event.target.value as \"EIN\" | \"SSN\", taxId: \"\", taxIdConfigured: false, taxIdLast4: \"\" } }))}><option value=\"EIN\">EIN (business)</option><option value=\"SSN\">SSN (individual)</option></select></label>\n <Field label=\"Tax ID\" type={draft.billingProvider.taxIdType === \"SSN\" ? \"password\" : \"text\"} required={!(draft.billingProvider.taxIdType === \"SSN\" && draft.billingProvider.taxIdConfigured)} disabled={!editable} value={draft.billingProvider.taxId} {...(draft.billingProvider.taxIdType === \"SSN\" && draft.billingProvider.taxIdConfigured ? { hint: `Saved SSN ending in ${draft.billingProvider.taxIdLast4 ?? \"••••\"}. Leave blank to keep this bill's saved number.` } : {})} onChange={(value) => updateBillingProvider(\"taxId\", value)} />\n <Field label=\"Billing NPI\" required disabled={!editable} value={draft.billingProvider.npi} onChange={(value) => updateBillingProvider(\"npi\", value)} />\n <Field label=\"Phone\" optional disabled={!editable} value={draft.billingProvider.phone || \"\"} onChange={(value) => updateBillingProvider(\"phone\", value)} />\n <Field label=\"Billing street\" required disabled={!editable} value={draft.billingProvider.billingStreet || \"\"} onChange={(value) => updateBillingProvider(\"billingStreet\", value)} />\n <Field label=\"City\" required disabled={!editable} value={draft.billingProvider.billingCity || \"\"} onChange={(value) => updateBillingProvider(\"billingCity\", value)} />\n <StateCombobox label=\"State\" required disabled={!editable} value={draft.billingProvider.billingState || \"\"} onChange={(value) => updateBillingProvider(\"billingState\", value)} />\n <Field label=\"ZIP\" required disabled={!editable} value={draft.billingProvider.billingZip || \"\"} onChange={(value) => updateBillingProvider(\"billingZip\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Clinician</h3><p>Provider identity printed on the claim.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Clinician name\" required disabled={!editable} value={draft.clinician.name} onChange={(value) => updateClinician(\"name\", value)} />\n <Field label=\"Specialty\" disabled={!editable} value={draft.clinician.specialty} onChange={(value) => updateClinician(\"specialty\", value)} />\n <Field label=\"NPI\" required disabled={!editable} value={draft.clinician.npi} onChange={(value) => updateClinician(\"npi\", value)} />\n <Field label=\"Taxonomy\" optional disabled={!editable} value={draft.clinician.taxonomy || \"\"} onChange={(value) => updateClinician(\"taxonomy\", value)} />\n <Field label=\"License number\" optional disabled={!editable} value={draft.clinician.licenseNumber || \"\"} onChange={(value) => updateClinician(\"licenseNumber\", value)} />\n <StateCombobox label=\"License state (optional)\" disabled={!editable} value={draft.clinician.licenseState || \"\"} onChange={(value) => updateClinician(\"licenseState\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Service location</h3><p>The exact place of service for this bill.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Location name\" required disabled={!editable} value={draft.location.name} onChange={(value) => updateLocation(\"name\", value)} />\n <Field label=\"Street\" required disabled={!editable} value={draft.location.street} onChange={(value) => updateLocation(\"street\", value)} />\n <Field label=\"City\" required disabled={!editable} value={draft.location.city} onChange={(value) => updateLocation(\"city\", value)} />\n <StateCombobox label=\"State\" required disabled={!editable} value={draft.location.state} onChange={(value) => updateLocation(\"state\", value)} />\n <Field label=\"ZIP\" required disabled={!editable} value={draft.location.zip} onChange={(value) => updateLocation(\"zip\", value)} />\n <Field label=\"Place of service code\" required disabled={!editable} value={draft.location.posCode || \"11\"} onChange={(value) => updateLocation(\"posCode\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Procedure lines</h3><p>{data.bill.billingMode === \"professional\" ? \"Enter the professional services billed. Each line may carry its own date, charge, and diagnosis pointers.\" : \"Choose a billing profile, then review the codes and modifiers.\"} A new row appears as you type.</p></div></div>\n {data.bill.billingMode === \"professional\" || features?.codingPresets === false ? null : <div className=\"mb-native-presets\" role=\"group\" aria-label=\"Evaluation billing profile\">\n {([['qme','QME'],['ame','AME'],['psych_qme','Psych QME']] as const).map(([value,label]) => <button type=\"button\" key={value} className={inferPreset(draft.lineItems) === value ? \"active\" : \"\"} disabled={!editable} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(applyPreset(current.lineItems, value)) }))}>{label}</button>)}\n <span>Sets evaluator modifiers across med-legal lines. You can still edit each line.</span>\n </div>}\n <div className=\"mb-native-lines\">\n {draft.lineItems.map((line, index) => (\n <div className={`mb-native-line ${data.bill.billingMode === \"professional\" ? \"professional\" : \"\"}`} key={line.id || index}>\n <label className=\"mb-native-field\"><span>Procedure<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span>{data.bill.billingMode === \"professional\" ? <input disabled={!editable} placeholder=\"CPT / HCPCS code\" value={line.code} onChange={(event) => {\n const code = event.target.value.toUpperCase();\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, code } : item)) }));\n }} /> : <select disabled={!editable} value={line.code} onChange={(event) => {\n const code = event.target.value;\n setDraft((current) => {\n const lineItems = current.lineItems.map((item, itemIndex) => {\n if (itemIndex !== index) return item;\n const presetLine = applyPreset([{ ...item, code }], inferPreset(current.lineItems))[0];\n return { ...item, code, modifiers: presetLine?.modifiers || [] };\n });\n return { ...current, lineItems: ensureTrailingProcedureLine(lineItems) };\n });\n }}><option value=\"\">Select code…</option>{PROCEDURES.map(([code,label]) => <option value={code} key={code}>{code} — {label}</option>)}</select>}{data.bill.billingMode === \"med_legal\" && line.code ? <small>{PROCEDURES.find(([code]) => code === line.code)?.[1]}</small> : null}</label>\n <div className=\"mb-native-modifiers\">{data.bill.billingMode === \"professional\" ? <label className=\"mb-native-field\"><span>Modifiers</span><input disabled={!editable} placeholder=\"e.g. 25, 59\" value={line.modifiers.join(\", \")} onChange={(event) => {\n const modifiers = event.target.value.toUpperCase().split(/[ ,]+/).map((value) => value.replace(/^-/, \"\")).filter(Boolean);\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers } : item)) }));\n }} /></label> : <label className=\"mb-native-field\"><span>Modifiers</span><select disabled={!editable} value=\"\" onChange={(event) => {\n const modifier = event.target.value;\n if (!modifier) return;\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: [...new Set([...item.modifiers, modifier])] } : item)) }));\n }}><option value=\"\">Add modifier…</option>{MODIFIERS.filter(([value]) => !line.modifiers.includes(value) && modifierAppliesToCode(value, line.code)).map(([value,label]) => <option value={value} key={value}>-{value} — {label}</option>)}</select></label>}<div className=\"mb-native-chips\">{data.bill.billingMode === \"med_legal\" ? line.modifiers.map((modifier) => <button type=\"button\" disabled={!editable} key={modifier} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: item.modifiers.filter((value) => value !== modifier) } : item)) }))}>-{modifier} ×</button>) : null}</div></div>\n <label className=\"mb-native-field\"><span>Units<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"number\" min=\"1\" required disabled={!editable} value={line.units} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, units: Number(event.target.value) } : item)) }))} /></label>\n {data.bill.billingMode === \"professional\" ? <>\n <label className=\"mb-native-field\"><span>Service date<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"date\" required={Boolean(line.code)} disabled={!editable} value={line.serviceDate || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, serviceDate: event.target.value } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>End date <small>Optional</small></span><input type=\"date\" disabled={!editable} value={line.serviceDateEnd || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, serviceDateEnd: event.target.value } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>Charge<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"number\" min=\"0.01\" step=\"0.01\" required={Boolean(line.code)} disabled={!editable} value={line.charge || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, charge: Number(event.target.value) } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>Diagnosis pointers <small>1–12</small></span><input inputMode=\"numeric\" disabled={!editable} value={(line.diagnosisPointers || []).join(\", \")} onChange={(event) => { const diagnosisPointers = event.target.value.split(/[ ,]+/).map(Number).filter((value) => Number.isInteger(value) && value >= 1 && value <= 12); setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, diagnosisPointers } : item)) })); }} /></label>\n </> : null}\n <div className=\"mb-native-allowed\"><span>Allowed</span><strong>{money(line.charge)}</strong></div>\n <button type=\"button\" className=\"mb-native-remove\" aria-label={`Remove ${line.code || \"procedure\"}`} disabled={!editable} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.filter((_, itemIndex) => itemIndex !== index)) }))}>×</button>\n </div>\n ))}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Payer billing packet</h3><p>Review exactly what will be sent with this bill.</p></div></div>\n <div className=\"mb-native-note\"><strong>Separate from attorney report service.</strong> Final reports, proof of service, and required billing forms may be preselected. Medical records are never silently attached.</div>\n <ul className=\"mb-native-documents\">\n {data.bill.attachments.map((attachment) => (\n <li key={attachment.id}>\n <span className=\"mb-native-file\">PDF</span>\n <div><strong>{attachment.filename}</strong><span>{DOCUMENT_LABELS[attachment.documentType as BillReviewDocumentType] || attachment.description || \"Supporting document\"}</span></div>\n {onOpenAttachment ? <button type=\"button\" className=\"mb-native-button quiet\" onClick={() => onOpenAttachment(attachment)}>View</button> : null}\n <button type=\"button\" className=\"mb-native-remove\" disabled={!editable || busy === \"attachment\"} aria-label={`Remove ${attachment.filename}`} onClick={() => void onRemoveAttachment(attachment.id).catch((cause) => setError(cause instanceof Error ? cause.message : \"Document could not be removed.\"))}>×</button>\n </li>\n ))}\n </ul>\n <div className=\"mb-native-attach\">\n <div><strong>Add supporting PDF</strong><span>Choose any additional document intentionally. Up to 25 MB.</span></div>\n <select aria-label=\"Document type\" value={documentType} disabled={!editable} onChange={(event) => setDocumentType(event.target.value as BillReviewDocumentType)}>{Object.entries(DOCUMENT_LABELS).map(([value, label]) => <option key={value} value={value}>{label}</option>)}</select>\n <input aria-label=\"Choose supporting PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={!editable} onChange={(event) => setFile(event.target.files?.[0] || null)} />\n <button className=\"mb-native-button secondary\" type=\"button\" disabled={!editable || !file || busy === \"attachment\"} onClick={() => void attach()}>{busy === \"attachment\" ? \"Attaching…\" : \"Attach document\"}</button>\n </div>\n </section>\n\n <section className=\"mb-native-submit\">\n <div><h3>Submit bill</h3><p>Submitting creates the bill as an immutable snapshot of the information and documents above.</p></div>\n {error ? <div className=\"mb-native-message error\" role=\"alert\">{error}</div> : null}\n {notice ? <div className=\"mb-native-message success\" role=\"status\">{notice}</div> : null}\n {!canSubmit ? <div className=\"mb-native-blockers\" role=\"status\"><strong>Before you can submit:</strong><span>{blockers.join(\" · \")}</span></div> : null}\n <div className=\"mb-native-actions\">\n {mode === \"submission\" ? <button className=\"mb-native-button primary\" type=\"submit\" disabled={!editable || !canSubmit || busy !== \"\"}>{busy === \"submit\" ? \"Submitting…\" : \"Submit bill\"}</button> : <>\n <button className=\"mb-native-button secondary\" type=\"submit\" disabled={!editable || busy !== \"\"}>{busy === \"save\" ? \"Saving…\" : \"Save changes\"}</button>\n <button className=\"mb-native-button primary\" type=\"button\" disabled={!editable || !canSubmit || busy !== \"\" || deliveryBusy} onClick={() => void openSubmit()}>{deliveryBusy ? \"Loading delivery…\" : \"Review delivery\"}</button>\n </>}\n </div>\n </section>\n {showSubmit && deliveryOptions ? <div className=\"mb-native-modal-backdrop\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget && busy !== \"submit\") setShowSubmit(false); }}>\n <section className=\"mb-native-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mb-native-submit-title\">\n <header><div><span className=\"mb-native-eyebrow\">Send bill</span><h3 id=\"mb-native-submit-title\">Choose a delivery route</h3><p>{deliveryOptions.payerName || \"Claims administrator\"}</p></div><button type=\"button\" className=\"mb-native-close\" aria-label=\"Close\" disabled={busy === \"submit\"} onClick={() => setShowSubmit(false)}>×</button></header>\n <fieldset className=\"mb-native-delivery-options\"><legend>Available delivery routes</legend>{deliveryOptions.options.map((option) => <label className={submission.route === option.route ? \"selected\" : \"\"} key={`${option.route}-${option.target || \"default\"}`}><input type=\"radio\" name=\"mindbill-delivery-route\" checked={submission.route === option.route} onChange={() => setSubmission({ route: option.route })} /><span><strong>{option.label}</strong><small>{option.detail}</small>{option.target ? <code>{option.target}</code> : null}</span>{deliveryOptions.recommended?.route === option.route ? <em>Recommended</em> : null}</label>)}</fieldset>\n {submission.route !== \"ebill\" ? <div className=\"mb-native-grid two\"><Field label={destinationLabel} required value={destinationValue} onChange={setDestination} hint=\"You can override the payer directory value for this submission.\" /><Field label=\"Attention\" optional value={submission.attention || \"\"} onChange={(attention) => setSubmission((current) => ({ ...current, attention }))} />{submission.route === \"email\" ? <Field label=\"Subject\" optional value={submission.subject || \"\"} onChange={(subject) => setSubmission((current) => ({ ...current, subject }))} /> : null}</div> : null}\n <Field label=\"Delivery note\" optional value={submission.note || \"\"} onChange={(note) => setSubmission((current) => ({ ...current, note }))} />\n <footer><button className=\"mb-native-button secondary\" type=\"button\" disabled={busy === \"submit\"} onClick={() => setShowSubmit(false)}>Cancel</button><button className=\"mb-native-button primary\" type=\"button\" disabled={busy === \"submit\" || (submission.route !== \"ebill\" && !destinationValue.trim())} onClick={() => void handleSubmit()}>{busy === \"submit\" ? \"Submitting…\" : `Send via ${selectedDelivery?.label || submission.route}`}</button></footer>\n </section>\n </div> : null}\n </form>\n );\n}\n\nexport type BillStatusSummaryProps = {\n status: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n updatedAt?: string | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n actions?: BillStatusAction[];\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillReactAppearance;\n};\n\nexport type BillStatusAction = {\n id: string;\n label: string;\n onClick: () => void;\n primary?: boolean;\n disabled?: boolean;\n};\n\nexport function BillStatusSummary({ status, submittedAt, agingDays, updatedAt, totalCharge, totalPaid, balanceDue, actions = [], className, style, appearance }: BillStatusSummaryProps): ReactElement {\n return <section className={[\"mb-native-status\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)}>\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <style>{NATIVE_THEME_OVERRIDE_STYLES}</style>\n <div className=\"mb-native-status-copy\"><span className=\"mb-native-eyebrow\">Bill status</span><h3>{status.replaceAll(\"_\", \" \")}</h3><p>{submittedAt ? `Submitted ${new Date(submittedAt).toLocaleDateString()}` : \"Not submitted\"}{agingDays == null ? \"\" : ` · ${agingDays} day${agingDays === 1 ? \"\" : \"s\"} old`}{updatedAt ? ` · Updated ${new Date(updatedAt).toLocaleDateString()}` : \"\"}</p></div>\n <dl><div><dt>Charged</dt><dd>{money(totalCharge)}</dd></div><div><dt>Paid</dt><dd>{money(totalPaid)}</dd></div><div><dt>Balance</dt><dd>{money(balanceDue)}</dd></div></dl>\n {actions.length ? <div className=\"mb-native-status-actions\">{actions.map((action) => <button key={action.id} type=\"button\" className={`mb-native-button ${action.primary ? \"primary\" : \"secondary\"}`} disabled={action.disabled} onClick={action.onClick}>{action.label}</button>)}</div> : null}\n </section>;\n}\n\nconst NATIVE_SUBMISSION_DIALOG_STYLES = `\n.mb-native-field select{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 12px}\n.mb-native-field select:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}\n.mb-native-line.professional{grid-template-columns:minmax(140px,1fr) minmax(140px,1fr) 86px 150px 150px 120px minmax(130px,1fr) 120px 28px;overflow-x:auto}\n.mb-native-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}\n.mb-native-modal-backdrop{position:fixed;z-index:9999;inset:0;display:grid;place-items:center;padding:20px;background:rgba(20,38,46,.55);backdrop-filter:blur(3px)}\n.mb-native-modal{display:grid;gap:18px;width:min(720px,100%);max-height:min(820px,calc(100vh - 40px));overflow:auto;padding:22px;border:1px solid var(--mb-border);border-radius:16px;background:#fff;box-shadow:0 28px 80px rgba(14,35,44,.3)}\n.mb-native-modal>header,.mb-native-modal>footer{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-native-modal>footer{justify-content:flex-end}.mb-native-modal h3{margin:3px 0;font-size:22px}.mb-native-modal p{margin:0;color:var(--mb-muted)}\n.mb-native-close{border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font-size:23px;line-height:1;padding:8px 12px}\n.mb-native-delivery-options{display:grid;gap:9px;margin:0;padding:0;border:0}.mb-native-delivery-options legend{margin-bottom:8px;font-weight:800}.mb-native-delivery-options label{display:grid;grid-template-columns:auto 1fr auto;align-items:start;gap:12px;padding:14px;border:1px solid var(--mb-border);border-radius:10px;cursor:pointer}.mb-native-delivery-options label.selected{border-color:var(--mb-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--mb-accent) 14%,transparent)}.mb-native-delivery-options label>span{display:grid;gap:2px}.mb-native-delivery-options small{color:var(--mb-muted)}.mb-native-delivery-options code{margin-top:4px;color:var(--mb-text);font:12px/1.4 ui-monospace,SFMono-Regular,monospace}.mb-native-delivery-options em{border-radius:999px;background:var(--mb-soft);color:var(--mb-accent-dark);font-size:10px;font-style:normal;font-weight:800;padding:5px 8px;text-transform:uppercase}\n@media(max-width:1100px){.mb-native-line.professional{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-line.professional .mb-native-allowed{text-align:left}}\n@media(max-width:620px){.mb-native-grid.two,.mb-native-line.professional{grid-template-columns:1fr}.mb-native-modal-backdrop{padding:0}.mb-native-modal{width:100%;max-height:100vh;border-radius:0;padding:18px}.mb-native-delivery-options label{grid-template-columns:auto 1fr}.mb-native-delivery-options em{grid-column:2}}\n`;\n\nconst NATIVE_BILL_REVIEW_STYLES = `\n.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review,.mb-native-status{--mb-accent:#238dbd;--mb-accent-dark:#176f98;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;color:var(--mb-text);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}.mb-native-review *,.mb-native-status *{box-sizing:border-box}.mb-native-review{display:grid;gap:16px}.mb-native-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:6px 2px}.mb-native-heading h2,.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{margin:3px 0 2px;line-height:1.2}.mb-native-heading h2{font-size:25px}.mb-native-heading p,.mb-native-section p,.mb-native-submit p,.mb-native-status p{margin:0;color:var(--mb-muted)}.mb-native-eyebrow{color:#59727d;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.mb-native-total{display:flex;align-items:center;gap:18px}.mb-native-total span,.mb-native-section-head>span{border-radius:999px;background:var(--mb-soft);color:#58717c;font-size:11px;font-weight:800;padding:6px 10px;text-transform:capitalize}.mb-native-total strong{font-size:24px}.mb-native-summary{display:grid;grid-template-columns:repeat(4,1fr);margin:0;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);overflow:hidden}.mb-native-summary div{padding:17px 20px;border-right:1px solid var(--mb-border)}.mb-native-summary div:last-child{border:0}.mb-native-summary dt,.mb-native-allowed span{color:#647982;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mb-native-summary dd{margin:5px 0 0;font-weight:750}.mb-native-section{padding:20px;border:1px solid var(--mb-border);border-radius:14px;background:var(--mb-surface);box-shadow:0 8px 24px rgba(28,58,72,.04)}.mb-native-section-head{display:flex;align-items:start;justify-content:space-between;gap:16px;margin-bottom:17px}.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{font-size:19px}.mb-native-grid{display:grid;gap:14px}.mb-native-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.mb-native-field{display:grid;gap:6px;min-width:0;color:var(--mb-text);font-size:12px;font-weight:750}.mb-native-required{color:#c5352e}.mb-native-field small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-native-field input,.mb-native-attach select,.mb-native-attach input{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 12px}.mb-native-field input:focus,.mb-native-attach select:focus,.mb-native-attach input:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}.mb-native-lines{display:grid;gap:10px}.mb-native-line{display:grid;grid-template-columns:1.1fr 1.1fr 110px 120px 28px;align-items:end;gap:12px;padding:13px;background:var(--mb-soft);border:1px solid #e3edf0;border-radius:10px}.mb-native-allowed{display:grid;gap:5px;padding:0 8px 11px;text-align:right}.mb-native-allowed strong{font-size:16px}.mb-native-remove{border:0;background:transparent;color:#667d86;cursor:pointer;font-size:20px;padding:7px}.mb-native-note{padding:13px 15px;border:1px solid #bdd9e4;border-radius:9px;background:#f2f9fc;color:#526d78}.mb-native-note strong{color:var(--mb-text);margin-right:12px}.mb-native-documents{list-style:none;margin:14px 0;padding:0}.mb-native-documents li{display:grid;grid-template-columns:42px 1fr auto 28px;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--mb-border)}.mb-native-documents li>div{display:grid}.mb-native-documents li span{color:var(--mb-muted);font-size:12px}.mb-native-file{display:grid;place-items:center;width:40px;height:40px;border-radius:8px;background:#eaf5f9;color:var(--mb-accent)!important;font-size:11px!important;font-weight:850}.mb-native-attach{display:grid;grid-template-columns:1fr 230px minmax(220px,1fr) auto;align-items:end;gap:12px;padding:15px;border-radius:10px;background:var(--mb-soft)}.mb-native-attach>div{display:grid;gap:3px}.mb-native-attach span{color:var(--mb-muted);font-size:12px}.mb-native-button{min-height:40px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-native-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-button.primary:hover{background:var(--mb-accent-dark)}.mb-native-button.secondary{background:#fff}.mb-native-button.quiet{min-height:auto;background:var(--mb-soft);padding:7px 11px}.mb-native-button:disabled,.mb-native-remove:disabled{cursor:not-allowed;opacity:.5}.mb-native-submit{display:grid;grid-template-columns:1fr auto;align-items:end;gap:18px;padding:22px;border:1px solid #bcd8e2;border-radius:14px;background:linear-gradient(135deg,#f3fafc,#eaf6fa)}.mb-native-submit fieldset{display:flex;gap:6px;margin:0;padding:0;border:0}.mb-native-submit legend{position:absolute;width:1px;height:1px;overflow:hidden}.mb-native-submit fieldset label{display:flex;align-items:center;gap:6px;padding:9px 11px;border:1px solid #c9dce3;border-radius:8px;background:#fff;font-weight:700}.mb-native-actions{display:flex;justify-content:flex-end;gap:10px;grid-column:1/-1}.mb-native-message{grid-column:1/-1;padding:10px 12px;border-radius:8px}.mb-native-message.error{background:#fff0ef;color:#9d3029}.mb-native-message.success{background:#edf9f2;color:#217449}.mb-native-status{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px;border:1px solid var(--mb-border);border-radius:12px;background:#fff}.mb-native-status h3{text-transform:capitalize}.mb-native-status dl{display:flex;margin:0}.mb-native-status dl div{min-width:110px;padding:0 18px;border-left:1px solid var(--mb-border)}.mb-native-status dt{color:var(--mb-muted);font-size:11px}.mb-native-status dd{margin:4px 0 0;font-size:17px;font-weight:800}@media(max-width:900px){.mb-native-grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-summary{grid-template-columns:repeat(2,1fr)}.mb-native-summary div:nth-child(2){border-right:0}.mb-native-summary div:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mb-native-line{grid-template-columns:1fr 1fr 90px}.mb-native-allowed{align-self:center}.mb-native-attach{grid-template-columns:1fr 1fr}.mb-native-submit{grid-template-columns:1fr}.mb-native-submit fieldset,.mb-native-actions{grid-column:1}.mb-native-actions{justify-content:start}}@media(max-width:620px){.mb-native-heading,.mb-native-total,.mb-native-status{align-items:start;flex-direction:column}.mb-native-grid.three,.mb-native-summary,.mb-native-line,.mb-native-attach{grid-template-columns:1fr}.mb-native-summary div,.mb-native-summary div:nth-child(2){border-right:0;border-bottom:1px solid var(--mb-border)}.mb-native-line{align-items:stretch}.mb-native-allowed{text-align:left}.mb-native-submit fieldset{display:grid;grid-template-columns:1fr 1fr}.mb-native-status dl{width:100%}.mb-native-status dl div{min-width:0;flex:1;padding:0 10px}.mb-native-status dl div:first-child{padding-left:0;border-left:0}}\n.mb-native-status-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.mb-native-status-copy{min-width:150px}.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review{padding:clamp(16px,2vw,24px)}\n.mb-native-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}\n.mb-native-payer-picker{position:relative;max-width:760px}\n.mb-native-payer-help{display:block;margin-top:7px;color:var(--mb-muted);font-size:12px}\n.mb-native-payer-results{position:absolute;z-index:5;top:calc(100% + 6px);right:0;left:0;max-height:280px;overflow:auto;list-style:none;margin:0;padding:6px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);box-shadow:0 16px 40px rgba(28,58,72,.16)}\n.mb-native-payer-results li{margin:0;padding:0}\n.mb-native-payer-results button{display:grid;width:100%;gap:2px;padding:11px 12px;border:0;border-radius:7px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}\n.mb-native-payer-results button:hover,.mb-native-payer-results button:focus{background:var(--mb-soft);outline:0}\n.mb-native-payer-results span{color:var(--mb-muted);font-size:12px}\n.mb-native-grid.one{grid-template-columns:minmax(0,1fr)}\n.mb-native-field select{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 36px 10px 12px}\n.mb-native-field select:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}\n.mb-native-field input:disabled,.mb-native-field select:disabled{cursor:not-allowed;background:#f6f8f9;color:#667982}\n.mb-native-hint{color:var(--mb-muted);font-size:12px;font-weight:500}\n.mb-native-combo{position:relative;min-width:0}\n.mb-native-combo-list{position:absolute;z-index:20;top:calc(100% + 6px);right:0;left:0;max-height:300px;overflow:auto;list-style:none;margin:0;padding:6px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);box-shadow:0 18px 42px rgba(28,58,72,.18)}\n.mb-native-combo-list li{margin:0;padding:0}.mb-native-combo-list button{display:grid;width:100%;gap:4px;padding:11px 12px;border:0;border-radius:7px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}.mb-native-combo-list button:hover,.mb-native-combo-list button.active{background:var(--mb-soft);outline:0}.mb-native-combo-list button>span{color:var(--mb-muted);font-size:12px;font-weight:500}.mb-native-combo-list .mb-native-combo-title{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--mb-text);font-size:14px}.mb-native-combo-title em{border-radius:999px;background:#e9f6f3;color:#24725f;font-size:10px;font-style:normal;font-weight:800;letter-spacing:.03em;padding:3px 7px;text-transform:uppercase}\n.mb-native-payer-insight{display:grid;gap:5px;margin-top:10px;padding:11px 13px;border:1px solid #c9dfe7;border-radius:9px;background:#f4fafc}.mb-native-payer-insight span{color:#426570;font-size:12px}.mb-native-payer-insight span.warning{color:#8a5c17}\n.mb-native-presets{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:-2px 0 14px}.mb-native-presets button{min-height:36px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:7px 13px}.mb-native-presets button.active{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-presets span{margin-left:5px;color:var(--mb-muted);font-size:12px}\n.mb-native-modifiers{display:grid;gap:7px}.mb-native-chips{display:flex;flex-wrap:wrap;gap:5px}.mb-native-chips button{border:1px solid #c9dce3;border-radius:999px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-size:11px;font-weight:750;padding:4px 8px}\n.mb-native-blockers{grid-column:1/-1;display:grid;gap:2px;padding:11px 13px;border:1px solid #e8cf9a;border-radius:8px;background:#fff9ea;color:#74531b}.mb-native-blockers span{font-size:12px}\n.mb-native-eams{margin-top:13px!important;font-size:12px}.mb-native-eams a{color:var(--mb-accent);font-weight:750}\n@media(max-width:620px){.mb-native-review{padding:12px}.mb-native-grid.two{grid-template-columns:1fr}}\n`;\n\nconst NATIVE_THEME_OVERRIDE_STYLES = `\n.mb-native-review,.mb-native-status{color:var(--mb-text);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review{background:var(--mb-soft)}\n.mb-native-heading>div:first-child>p,.mb-native-section>header p,.mb-native-total span,.mb-native-status-copy p,.mb-native-status dt{color:var(--mb-muted)}\n.mb-native-summary,.mb-native-section,.mb-native-status{border-color:var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n.mb-native-field input,.mb-native-field select,.mb-native-field textarea,.mb-native-attachment-form input,.mb-native-attachment-form select{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-native-line,.mb-native-note,.mb-native-file,.mb-native-attachment-form,.mb-native-payer-insight,.mb-native-blockers,.mb-native-message{border-radius:var(--mb-control-radius)}\n.mb-native-line,.mb-native-note,.mb-native-attachment-form,.mb-native-payer-insight{border-color:var(--mb-border);background:var(--mb-soft)}\n.mb-native-file{border-color:var(--mb-border);background:var(--mb-surface)}\n.mb-native-button.primary,.mb-native-presets button.active{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mb-native-button.primary:hover,.mb-native-presets button.active:hover{filter:brightness(.96)}\n.mb-native-button.secondary,.mb-native-presets button,.mb-native-chips button{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-native-message.error{background:color-mix(in srgb,var(--mb-danger) 10%,white);color:var(--mb-danger)}\n.mb-native-message.success{background:color-mix(in srgb,var(--mb-success) 10%,white);color:var(--mb-success)}\n.mb-native-blockers{border-color:color-mix(in srgb,var(--mb-warning) 35%,white);background:color-mix(in srgb,var(--mb-warning) 8%,white);color:var(--mb-warning)}\n.mb-native-combo-list{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n`;\n","\"use client\";\n\nimport { useEffect, useState, type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPattern,\n BillLifecycleDelivery,\n BillReviewAttachment,\n HistoricalBillReviewData,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\n\nexport type BillReadOnlyFormProps = {\n data: HistoricalBillReviewData & { delivery?: BillLifecycleDelivery };\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n onOpenAttachment?: (attachment: BillReviewAttachment) => void | Promise<void>;\n};\n\nfunction money(value: number | null): string {\n if (value == null) return \"Not recorded\";\n return new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nfunction date(value?: string | null): string {\n if (!value) return \"—\";\n const parsed = new Date(`${value.slice(0, 10)}T12:00:00`);\n return Number.isNaN(parsed.getTime()) ? value : new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" }).format(parsed);\n}\n\nfunction Value({ label, children, wide = false }: { label: string; children?: ReactNode; wide?: boolean }): ReactElement {\n return <div className={wide ? \"mb-read-value is-wide\" : \"mb-read-value\"}><dt>{label}</dt><dd>{children || \"—\"}</dd></div>;\n}\n\ntype PayerTab = \"main\" | \"bill-review\" | \"authorization\" | \"mailing\" | \"patterns\";\n\nconst PAYER_TABS: ReadonlyArray<readonly [PayerTab, string]> = [\n [\"main\", \"Main\"],\n [\"bill-review\", \"Bill Review\"],\n [\"authorization\", \"Authorization Info\"],\n [\"mailing\", \"Mailing Address\"],\n [\"patterns\", \"Claim Number Pattern\"],\n];\n\nfunction DirectoryEmpty({ children }: { children: ReactNode }): ReactElement {\n return <p className=\"mb-read-directory-empty\">{children}</p>;\n}\n\nfunction ContactTable({ contacts, empty }: { contacts: readonly BillClaimsAdministratorContact[]; empty: string }): ReactElement {\n if (!contacts.length) return <DirectoryEmpty>{empty}</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Name</th><th>Telephone</th><th>Portal / email</th><th>Fax</th><th>Address</th></tr></thead><tbody>{contacts.map((contact, index) => <tr key={`${contact.name || \"contact\"}-${index}`}><td>{contact.name || \"—\"}{contact.note ? <small>{contact.note}</small> : null}</td><td>{contact.phone || \"—\"}</td><td>{contact.portalUrl ? <a href={contact.portalUrl} target=\"_blank\" rel=\"noopener noreferrer\">Open portal</a> : contact.email || \"—\"}</td><td>{contact.fax || \"—\"}</td><td>{contact.address || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nfunction MailingTable({ addresses }: { addresses: readonly BillClaimsAdministratorMailingAddress[] }): ReactElement {\n if (!addresses.length) return <DirectoryEmpty>No mailing addresses are available for this directory entry.</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Company</th><th>Address</th><th>Notes</th><th>Submission types</th></tr></thead><tbody>{addresses.map((entry, index) => <tr key={`${entry.address}-${index}`}><td>{entry.company || \"—\"}</td><td>{entry.address}</td><td>{entry.notes || \"—\"}</td><td>{entry.submissionTypes?.join(\", \") || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nfunction PatternTable({ patterns }: { patterns: readonly BillClaimsAdministratorPattern[] }): ReactElement {\n if (!patterns.length) return <DirectoryEmpty>No claim-number pattern is available for this directory entry.</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Status</th><th>Length</th><th>Pattern</th><th>Example</th></tr></thead><tbody>{patterns.map((entry, index) => <tr key={`${entry.pattern}-${index}`}><td>{entry.matches === true ? <span className=\"mb-read-match is-match\">✓ Matches this claim</span> : entry.matches === false ? <span className=\"mb-read-match is-warning\">Review format</span> : \"Advisory\"}</td><td>{entry.length ?? \"—\"}</td><td>{entry.pattern}</td><td>{entry.example || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nexport function BillReadOnlyForm({ data, appearance, className, style, onOpenAttachment }: BillReadOnlyFormProps): ReactElement {\n const [payerOpen, setPayerOpen] = useState(false);\n const [payerTab, setPayerTab] = useState<PayerTab>(\"main\");\n const { bill, patient, injury } = data;\n const diagnoses = injury.diagnoses?.length\n ? injury.diagnoses\n : (injury.diagnosisCodes ?? []).map((code) => ({ code, description: \"\" }));\n const provider = bill.billingSnapshot?.billingProvider;\n const clinician = bill.billingSnapshot?.renderingProvider;\n const location = bill.billingSnapshot?.placeOfService;\n const address = patient.address;\n const patientAddress = [address?.line1, address?.city, address?.state, address?.postalCode].filter(Boolean).join(\", \");\n const billingAddress = provider ? [provider.billingStreet, provider.billingCity, provider.billingState, provider.billingZip].filter(Boolean).join(\", \") : \"\";\n const locationAddress = location ? [location.street, location.city, location.state, location.zip].filter(Boolean).join(\", \") : \"\";\n const payerName = data.delivery?.payerName || injury.claimsAdminName || \"—\";\n const contacts = data.delivery?.contacts;\n const directory = data.delivery?.directory;\n const fallbackContacts: readonly BillClaimsAdministratorContact[] = contacts && Object.values(contacts).some(Boolean) ? [{\n name: contacts.adjusterName || \"Claims contact\",\n ...(contacts.adjusterPhone ? { phone: contacts.adjusterPhone } : {}),\n ...(contacts.adjusterEmail || contacts.claimsEmail ? { email: contacts.adjusterEmail || contacts.claimsEmail } : {}),\n ...(contacts.faxNumber ? { fax: contacts.faxNumber } : {}),\n ...(contacts.portalUrl ? { portalUrl: contacts.portalUrl } : {}),\n ...(contacts.mailingAddress ? { address: contacts.mailingAddress } : {}),\n }] : [];\n const billReview = directory?.billReview?.length ? directory.billReview : fallbackContacts;\n const mailingAddresses: readonly BillClaimsAdministratorMailingAddress[] = directory?.mailingAddresses?.length\n ? directory.mailingAddresses\n : contacts?.mailingAddress ? [{ company: payerName, address: contacts.mailingAddress }] : [];\n useEffect(() => {\n if (!payerOpen) return;\n const close = (event: KeyboardEvent) => { if (event.key === \"Escape\") setPayerOpen(false); };\n window.addEventListener(\"keydown\", close);\n return () => window.removeEventListener(\"keydown\", close);\n }, [payerOpen]);\n\n return <section className={[\"mb-readonly-bill\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill details\">\n <style>{READ_ONLY_STYLES}</style>\n <header className=\"mb-readonly-heading\"><h2>Bill details</h2><strong>{money(bill.totalCharge)}</strong></header>\n\n <section className=\"mb-read-card\"><h3>Patient</h3><dl className=\"mb-read-grid\">\n <Value label=\"Name\">{patient.name || [patient.firstName, patient.middleName, patient.lastName].filter(Boolean).join(\" \")}</Value>\n <Value label=\"Date of birth\">{date(patient.dob)}</Value>\n <Value label=\"Phone\">{patient.phone}</Value>\n <Value label=\"Address\" wide>{patientAddress}</Value>\n </dl></section>\n\n <section className=\"mb-read-card\"><h3>Claim & injury</h3><dl className=\"mb-read-grid\">\n <Value label=\"Claim number\">{injury.claimNumber}</Value>\n <Value label=\"WCAB / ADJ number\">{injury.adjNumber}</Value>\n <Value label=\"Claims administrator\"><button type=\"button\" className=\"mb-read-payer\" onClick={() => { setPayerTab(\"main\"); setPayerOpen(true); }}>{payerName}</button></Value>\n <Value label=\"Employer\">{injury.employer}</Value>\n <Value label=\"Date of injury\">{date(injury.doi)}</Value>\n <Value label=\"Date of service\">{bill.dosEnd ? `${date(bill.dos)} – ${date(bill.dosEnd)}` : date(bill.dos)}</Value>\n <Value label=\"Injury description\" wide>{injury.injuryDescription}</Value>\n </dl>{diagnoses.length ? <div className=\"mb-read-diagnoses\" aria-label=\"Diagnoses\">{diagnoses.map((diagnosis) => <div key={diagnosis.code}><strong>{diagnosis.code}</strong>{diagnosis.description ? <span>{diagnosis.description}</span> : null}</div>)}</div> : null}</section>\n\n <section className=\"mb-read-card\"><h3>Providers & location</h3><dl className=\"mb-read-grid\">\n <Value label=\"Billing provider\">{provider?.name}</Value>\n <Value label=\"Billing NPI\">{provider?.npi}</Value>\n <Value label=\"Billing tax ID\">{provider?.taxId}</Value>\n <Value label=\"Billing phone\">{provider?.phone}</Value>\n <Value label=\"Billing address\" wide>{billingAddress}</Value>\n <Value label=\"Rendering provider\">{clinician?.name}</Value>\n <Value label=\"Rendering NPI\">{clinician?.npi}</Value>\n <Value label=\"Rendering taxonomy\">{clinician?.taxonomy}</Value>\n <Value label=\"Place of service code\">{location?.posCode}</Value>\n <Value label=\"Service address\" wide>{locationAddress}</Value>\n </dl></section>\n\n <section className=\"mb-read-card\"><h3>Service lines</h3><div className=\"mb-read-lines\" role=\"table\" aria-label=\"Service lines\">\n <div className=\"mb-read-line-header\" role=\"row\"><span>Procedure</span><span>Modifiers</span><span>Units</span><span>Charge</span></div>\n {bill.lineItems.map((line, index) => <div className=\"mb-read-line\" role=\"row\" key={line.id ?? `${line.code}-${index}`}>\n <strong>{line.code}</strong><div className=\"mb-read-chips\">{line.modifiers.length ? line.modifiers.map((modifier) => <span key={modifier}>{modifier}</span>) : \"—\"}</div><span>{line.units}</span><strong>{money(line.charge)}</strong>\n </div>)}\n <div className=\"mb-read-total\"><span>Paid {money(bill.totalPaid)}</span><strong>Balance {money(bill.balanceDue)}</strong></div>\n </div></section>\n\n <section className=\"mb-read-card\"><h3>Attachments</h3>{bill.attachments.length ? <ul className=\"mb-read-documents\">{bill.attachments.map((attachment) => <li key={attachment.id}><div><strong>{attachment.filename}</strong><span>{attachment.description || attachment.documentType.replace(/_/g, \" \")}</span></div>{onOpenAttachment ? <button type=\"button\" onClick={() => void onOpenAttachment(attachment)}>Preview</button> : null}</li>)}</ul> : <p className=\"mb-read-empty\">No attachments.</p>}</section>\n {payerOpen ? <div className=\"mb-read-dialog-backdrop\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget) setPayerOpen(false); }}><section className=\"mb-read-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mb-read-payer-title\"><header><div><h3 id=\"mb-read-payer-title\">{payerName}</h3><span>Claims administrator</span></div><button type=\"button\" aria-label=\"Close claims administrator details\" onClick={() => setPayerOpen(false)}>×</button></header>\n <label className=\"mb-read-dialog-mobile-nav\"><span>Information section</span><select aria-label=\"Claims administrator information section\" value={payerTab} onChange={(event) => setPayerTab(event.target.value as PayerTab)}>{PAYER_TABS.map(([id, label]) => <option value={id} key={id}>{label}</option>)}</select></label>\n <div className=\"mb-read-dialog-tabs\" role=\"tablist\" aria-label=\"Claims administrator information\">\n {PAYER_TABS.map(([id, label]) => <button type=\"button\" role=\"tab\" aria-selected={payerTab === id} key={id} onClick={() => setPayerTab(id)}>{label}</button>)}\n </div>\n <div className=\"mb-read-dialog-panel\" role=\"tabpanel\">\n {payerTab === \"main\" ? <dl className=\"mb-read-directory-main\"><Value label=\"Name\">{payerName}</Value><Value label=\"Type\">{directory?.type}</Value><Value label=\"Description\" wide>{directory?.description}</Value><Value label=\"Website\">{directory?.website ? <a href={directory.website} target=\"_blank\" rel=\"noopener noreferrer\">{directory.website}</a> : \"—\"}</Value><Value label=\"Hours of operation\">{directory?.hours}</Value><Value label=\"Also known as\" wide>{directory?.aliases?.join(\", \")}</Value><Value label=\"Affiliated entities\" wide>{directory?.affiliatedEntities?.join(\", \")}</Value></dl> : null}\n {payerTab === \"bill-review\" ? <ContactTable contacts={billReview} empty=\"No bill-review contacts are available for this directory entry.\" /> : null}\n {payerTab === \"authorization\" ? <ContactTable contacts={directory?.authorization ?? []} empty=\"No authorization contacts are available for this directory entry.\" /> : null}\n {payerTab === \"mailing\" ? <MailingTable addresses={mailingAddresses} /> : null}\n {payerTab === \"patterns\" ? <PatternTable patterns={directory?.claimNumberPatterns ?? []} /> : null}\n </div>\n </section></div> : null}\n </section>;\n}\n\nconst READ_ONLY_STYLES = `\n.mb-read-diagnoses{display:grid;gap:8px;margin-top:16px}.mb-read-diagnoses>div{display:grid;grid-template-columns:minmax(64px,max-content) 1fr;gap:12px;align-items:baseline;border:1px solid var(--mb-border);border-radius:9px;background:#f7f9f8;padding:9px 12px}.mb-read-diagnoses span{color:var(--mb-muted)}\n.mb-readonly-bill{--mb-accent:#176c70;--mb-border:#d7e0df;--mb-surface:#fff;--mb-muted:#607176;color:var(--mb-text,#17282d);font:inherit;display:grid;gap:16px}.mb-readonly-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.mb-readonly-heading h2,.mb-read-card h3{margin:0}.mb-readonly-heading>strong{font-size:1.35rem}.mb-read-card{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);padding:20px;box-shadow:0 1px 2px rgba(15,40,45,.04)}.mb-read-card h3{font-size:1.05rem;margin-bottom:16px}.mb-read-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px 28px;margin:0}.mb-read-value{min-width:0}.mb-read-value.is-wide{grid-column:1/-1}.mb-read-value dt{color:var(--mb-muted);font-size:.75rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.mb-read-value dd{font-weight:600;margin:5px 0 0;overflow-wrap:anywhere}.mb-read-payer{border:0;border-bottom:1px dotted currentColor;background:transparent;color:inherit;padding:0;font:inherit;font-weight:inherit;text-align:left;cursor:pointer}.mb-read-payer:hover{color:var(--mb-accent)}.mb-read-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}.mb-read-chips span{border:1px solid var(--mb-border);border-radius:999px;padding:3px 9px;font-size:.82rem;background:#f7f9f8}.mb-read-lines{border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}.mb-read-line-header,.mb-read-line{display:grid;grid-template-columns:1.2fr 1.5fr .45fr .7fr;gap:16px;align-items:center;padding:12px 14px}.mb-read-line-header{background:#f6f8f7;color:var(--mb-muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.mb-read-line{border-top:1px solid var(--mb-border)}.mb-read-line .mb-read-chips{margin:0}.mb-read-line>span:last-child,.mb-read-line>strong:last-child{text-align:right}.mb-read-total{display:flex;justify-content:flex-end;gap:24px;border-top:1px solid var(--mb-border);padding:13px 14px}.mb-read-documents{list-style:none;padding:0;margin:0;display:grid}.mb-read-documents li{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 0;border-top:1px solid var(--mb-border)}.mb-read-documents li:first-child{border-top:0;padding-top:0}.mb-read-documents li:last-child{padding-bottom:0}.mb-read-documents div{display:grid;gap:3px;min-width:0}.mb-read-documents strong{overflow-wrap:anywhere}.mb-read-documents span,.mb-read-empty{color:var(--mb-muted)}.mb-read-documents button{border:1px solid var(--mb-border);border-radius:8px;background:transparent;color:inherit;padding:8px 13px;font:inherit;font-weight:650;cursor:pointer}.mb-read-documents button:hover{border-color:var(--mb-accent);color:var(--mb-accent)}.mb-read-dialog-backdrop{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;background:rgba(11,28,32,.46);padding:20px}.mb-read-dialog{width:min(1040px,100%);min-height:min(620px,calc(100dvh - 40px));max-height:calc(100dvh - 40px);overflow:auto;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface);padding:22px;box-shadow:0 22px 70px rgba(8,25,29,.24)}.mb-read-dialog header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}.mb-read-dialog header span{display:block;margin-top:4px;color:var(--mb-muted);font-size:.78rem}.mb-read-dialog h3{margin:0;font-size:1.35rem}.mb-read-dialog header button{display:grid;place-items:center;width:44px;height:44px;border:0;background:transparent;color:inherit;font:inherit;font-size:1.7rem;line-height:1;cursor:pointer}.mb-read-dialog-mobile-nav{display:none}.mb-read-dialog-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-radius:10px;background:var(--mb-soft,#f4f7f6);padding:0 10px}.mb-read-dialog-tabs button{min-height:68px;border:0;border-top:4px solid transparent;background:transparent;color:var(--mb-muted);font:inherit;font-weight:750;cursor:pointer;padding:8px}.mb-read-dialog-tabs button[aria-selected=true]{border-color:var(--mb-accent);background:var(--mb-surface);color:var(--mb-text)}.mb-read-dialog-panel{padding-top:22px}.mb-read-directory-main{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 28px;margin:0}.mb-read-directory-main a,.mb-read-directory-table a{color:var(--mb-accent)}.mb-read-directory-table-wrap{border:1px solid var(--mb-border);border-radius:10px;overflow:auto}.mb-read-directory-table{width:100%;border-collapse:collapse;text-align:left}.mb-read-directory-table th,.mb-read-directory-table td{padding:13px 14px;vertical-align:top;border-top:1px solid var(--mb-border)}.mb-read-directory-table th{border-top:0;background:var(--mb-soft,#f4f7f6);color:var(--mb-muted);font-size:.78rem}.mb-read-directory-table td small{display:block;margin-top:4px;color:var(--mb-muted)}.mb-read-directory-empty{margin:0;padding:26px;border:1px dashed var(--mb-border);border-radius:10px;color:var(--mb-muted);text-align:center}.mb-read-match{display:inline-flex;border-radius:999px;padding:3px 8px;font-size:.78rem;font-weight:750}.mb-read-match.is-match{background:#eaf7ef;color:#237448}.mb-read-match.is-warning{background:#fff5df;color:#8a5b00}\n@media(max-width:700px){.mb-readonly-heading{align-items:flex-start}.mb-read-grid,.mb-read-directory-main{grid-template-columns:1fr}.mb-read-value.is-wide{grid-column:auto}.mb-read-card{padding:16px}.mb-read-line-header{display:none}.mb-read-line{grid-template-columns:1fr auto;gap:8px}.mb-read-line>*:nth-child(2){grid-column:1/-1}.mb-read-total{justify-content:space-between}.mb-readonly-heading>strong{font-size:1.05rem}.mb-read-dialog-backdrop{place-items:end center;padding:0}.mb-read-dialog{width:100%;min-height:0;max-height:calc(100dvh - 12px);border-radius:18px 18px 0 0;padding:20px 18px calc(20px + env(safe-area-inset-bottom))}.mb-read-dialog header{margin-bottom:14px}.mb-read-dialog-mobile-nav{display:grid;gap:6px;color:var(--mb-muted);font-size:.75rem;font-weight:750;letter-spacing:.05em;text-transform:uppercase}.mb-read-dialog-mobile-nav select{width:100%;min-height:48px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);color:var(--mb-text);font:inherit;font-size:1rem;font-weight:700;padding:10px 12px;text-transform:none}.mb-read-dialog-tabs{display:none}.mb-read-dialog-panel{padding-top:16px}.mb-read-directory-table-wrap{border:0;overflow:visible}.mb-read-directory-table,.mb-read-directory-table thead,.mb-read-directory-table tbody,.mb-read-directory-table tr,.mb-read-directory-table th,.mb-read-directory-table td{display:block}.mb-read-directory-table thead{display:none}.mb-read-directory-table tr{border:1px solid var(--mb-border);border-radius:10px;margin-bottom:10px;overflow:hidden}.mb-read-directory-table td{border-top:1px solid var(--mb-border)}.mb-read-directory-table td:first-child{border-top:0}}\n`;\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n createBillReferenceClient,\n createBillSubmissionClient,\n type BillDeliveryOptions,\n type BillClaimsAdministratorSource,\n type BillClaimsAdministratorDirectory,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionResult,\n type BillLifecycleSessionProvider,\n type BillReviewPayer,\n type BillReviewPayerListInput,\n type BillReviewPayerOption,\n type BillReviewPayerPage,\n type BillReviewPayerSuggestion,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { SendRouteDialog, type SendRouteSubmission } from \"./send-route-dialog\";\nimport { ClaimsAdministratorDirectoryDialog } from \"./claims-administrator-directory-dialog\";\nimport type { BillSubmissionProfileOptions } from \"./billing-profile-options\";\nimport {\n BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS,\n calculateBillSubmissionAllowedAmount,\n DEFAULT_BILL_SUBMISSION_MODIFIERS,\n DEFAULT_BILL_SUBMISSION_PROCEDURES,\n DEFAULT_BILL_SUBMISSION_TAXONOMIES,\n} from \"./billing-catalog\";\n\nexport const BILL_SUBMISSION_DOCUMENT_TYPES = [\n \"final_report\", \"proof_of_service\", \"letter_of_attestation\", \"form_122\",\n \"return_to_work_voucher\", \"w9\", \"medical_records\", \"appeal\", \"other\",\n] as const;\n\nexport type BillSubmissionDocumentType = (typeof BILL_SUBMISSION_DOCUMENT_TYPES)[number];\nexport type BillSubmissionAttachmentReportTypeMode = \"auto\" | \"hidden\" | \"visible\";\nexport type BillSubmissionReportTypeOption = { code: string; label: string };\nexport const MED_LEGAL_REPORT_TYPE_CODE = \"OZ:J4\";\nexport const BILL_SUBMISSION_REPORT_TYPES: readonly BillSubmissionReportTypeOption[] = [\n { code: \"OZ:J1\", label: \"Doctor's First Report (DLSR 5021)\" },\n { code: \"OZ:J2\", label: \"Supplemental Medical Report (BRs)\" },\n { code: \"OZ:J3\", label: \"Medical Permanent Impairment Report\" },\n { code: MED_LEGAL_REPORT_TYPE_CODE, label: \"Med-Legal Report\" },\n { code: \"OZ:J5\", label: \"Vocational Report\" },\n { code: \"OZ:J6\", label: \"Work Status Report\" },\n { code: \"OZ:J7\", label: \"Consultation Report\" },\n { code: \"OZ:J8\", label: \"Permanent Disability Report\" },\n { code: \"OZ:J9\", label: \"Itemized Statement\" },\n { code: \"03\", label: \"Justifying Treatment Beyond Utilization Guidelines\" },\n { code: \"04\", label: \"Drugs Administered\" }, { code: \"05\", label: \"Treatment Diagnosis\" },\n { code: \"06\", label: \"Initial Assessment\" }, { code: \"07\", label: \"Plan of Treatment\" },\n { code: \"08\", label: \"Plan of Treatment\" }, { code: \"09\", label: \"PR2 (Progress Report)\" },\n { code: \"10\", label: \"Continued Treatment\" }, { code: \"11\", label: \"Chemical Analysis\" },\n { code: \"13\", label: \"Certified Test Report\" }, { code: \"15\", label: \"Justification for Admission\" },\n { code: \"21\", label: \"Recovery Plan\" }, { code: \"A3\", label: \"Allergies/Sensitivities Document\" },\n { code: \"A4\", label: \"Autopsy Report\" }, { code: \"AM\", label: \"Ambulance Certification\" },\n { code: \"AS\", label: \"Admission Summary\" }, { code: \"B2\", label: \"Prescription\" },\n { code: \"B3\", label: \"Physician Order\" }, { code: \"B4\", label: \"Referral Form\" },\n { code: \"BR\", label: \"Benchmark Testing Results\" }, { code: \"BS\", label: \"Baseline\" },\n { code: \"BT\", label: \"Blanket Test Results\" }, { code: \"CB\", label: \"Chiropractic Justification\" },\n { code: \"CK\", label: \"Canceled Check\" }, { code: \"CT\", label: \"Certification\" },\n { code: \"D2\", label: \"Drug Profile Document\" }, { code: \"DA\", label: \"Dental Models\" },\n { code: \"DB\", label: \"Durable Medical Equipment RX\" }, { code: \"DG\", label: \"Diagnostic Report\" },\n { code: \"DJ\", label: \"Discharge Monitoring Report\" }, { code: \"DS\", label: \"Discharge Summary\" },\n { code: \"EB\", label: \"Explanation of Benefits\" }, { code: \"HC\", label: \"Health Clinic Records (HC)\" },\n { code: \"HR\", label: \"Health Clinic Records (HR)\" }, { code: \"I5\", label: \"Immunization Record\" },\n { code: \"IR\", label: \"State School Immunization Records\" }, { code: \"LA\", label: \"Laboratory Results\" },\n { code: \"M1\", label: \"Medical Record Attachment\" }, { code: \"MT\", label: \"Nursing Notes\" },\n { code: \"NN\", label: \"Minor Deviation Request\" }, { code: \"OB\", label: \"Operative Note\" },\n { code: \"OC\", label: \"Oxygen Content Averaging Report\" }, { code: \"OD\", label: \"Orders and Treatments Document\" },\n { code: \"OE\", label: \"Objective Physical Examination Doc\" }, { code: \"OX\", label: \"Oxygen Therapy Certification\" },\n { code: \"OZ\", label: \"Support Data for Bill\" }, { code: \"P4\", label: \"Pathology Report\" },\n { code: \"P5\", label: \"Patient Medical History Document\" }, { code: \"PE\", label: \"Periodontal Charts\" },\n { code: \"PN\", label: \"Physical Therapy Notes\" }, { code: \"PO\", label: \"Prosthetics or Orthotic Certification\" },\n { code: \"PQ\", label: \"Paramedical Results\" }, { code: \"PY\", label: \"Physician's Report\" },\n { code: \"PZ\", label: \"Physical Therapy Certification\" }, { code: \"RB\", label: \"Radiology Films\" },\n { code: \"RR\", label: \"Radiology Reports\" }, { code: \"RT\", label: \"Report of tests and Analysis Report\" },\n { code: \"RX\", label: \"Renewable Oxygen Content Averaging Report\" }, { code: \"SG\", label: \"Symptoms Document\" },\n { code: \"V5\", label: \"Death Notification\" }, { code: \"XP\", label: \"Photographs\" },\n] as const;\nexport type BillSubmissionEvaluationType = \"qme\" | \"ame\" | \"psych_qme\";\nexport type BillSubmissionAddress = { line1: string; line2?: string; city: string; state: string; postalCode: string };\nexport type BillSubmissionDiagnosisOption = { code: string; description: string };\nexport type BillSubmissionProcedureOption = { code: string; description: string; allowedAmount?: number };\nexport type BillSubmissionModifierOption = { code: string; description: string };\nexport type BillSubmissionTaxonomyOption = { code: string; description: string };\nexport type BillSubmissionPostalPlace = { city: string; state: string };\n\nexport type BillSubmissionInput = {\n externalId?: string;\n billingMode?: \"med_legal\" | \"professional\";\n patient: {\n id?: string; externalId?: string; firstName: string; middleName?: string; lastName: string;\n dateOfBirth: string; ssn?: string; gender?: \"M\" | \"F\" | \"X\"; phone?: string;\n address: BillSubmissionAddress;\n };\n claim: {\n id?: string; externalId?: string; claimNumber: string; adjNumber?: string; employer?: string;\n dateOfInjury?: string; injuryState?: string; description?: string;\n claimsAdministrator?: {\n id?: string;\n name: string;\n /** The chosen payer (subpayor) when the claims administrator requires payer selection. */\n payerId?: string;\n /** Directory metadata carried while editing; stripped from the submitted bill. */\n payerSelectionRequired?: boolean;\n payers?: BillReviewPayerOption[];\n };\n };\n service: { date: string; endDate?: string | null; authorizationNumber?: string | null };\n billingProvider?: {\n name?: string; taxId?: string; npi?: string; phone?: string; address?: BillSubmissionAddress;\n taxIdType?: \"EIN\" | \"SSN\"; savedProviderId?: string; sourceBillId?: string; taxIdLast4?: string;\n };\n renderingProvider?: {\n name?: string; specialty?: string; npi?: string; taxonomy?: string; licenseNumber?: string;\n licenseState?: string; isQme?: boolean; isAme?: boolean;\n };\n serviceLocation?: { name?: string; address?: BillSubmissionAddress; placeOfServiceCode?: string };\n diagnoses?: string[];\n serviceLines: Array<{\n code: string; modifiers?: string[]; units?: number; serviceDate?: string;\n serviceDateEnd?: string | null; charge?: number; diagnosisPointers?: number[];\n }>;\n};\n\n/** A validated, submission-ready bill. The form accepts partial provider data while editing,\n * but only emits this complete contract after every required field has passed validation. */\nexport type CompleteBillSubmissionInput = Omit<\n BillSubmissionInput,\n \"claim\" | \"billingProvider\" | \"renderingProvider\" | \"serviceLocation\" | \"diagnoses\" | \"serviceLines\"\n> & {\n claim: BillSubmissionInput[\"claim\"] & {\n employer: string;\n dateOfInjury: string;\n claimsAdministrator: { id: string; name: string; payerId?: string };\n };\n billingProvider: {\n name: string; taxId: string; taxIdType?: \"EIN\" | \"SSN\"; npi: string; phone: string; address: BillSubmissionAddress;\n } | { savedProviderId: string } | { sourceBillId: string };\n renderingProvider: NonNullable<BillSubmissionInput[\"renderingProvider\"]> & {\n name: string; npi: string; taxonomy: string;\n };\n serviceLocation: NonNullable<BillSubmissionInput[\"serviceLocation\"]> & {\n address: BillSubmissionAddress; placeOfServiceCode: string;\n };\n diagnoses: string[];\n serviceLines: BillSubmissionInput[\"serviceLines\"];\n};\n\nexport type BillSubmissionSourceAttachment = {\n id: string;\n fileName: string;\n documentType: BillSubmissionDocumentType;\n description?: string;\n /** @deprecated Source attachments shown in the form are included until removed. */\n selected?: boolean;\n /** Marks a document that the host selected by default. This does not imply that it is locked. */\n autoAttached?: boolean;\n /** Controls whether the user can remove the document from this submission packet. Defaults to false for auto-attached documents and true otherwise. */\n removable?: boolean;\n previewUrl?: string;\n /** Authenticated source loader used when the document is not available at a public URL. */\n loadBlob?: () => Promise<Blob>;\n reportTypeCode?: string;\n};\nexport type BillSubmissionUpload = { file: File; documentType: BillSubmissionDocumentType; description?: string; reportTypeCode?: string };\nexport type BillSubmissionFormValue = {\n bill: CompleteBillSubmissionInput;\n /** Delivery route explicitly confirmed by the biller, when the route picker is enabled. */\n submission?: SendRouteSubmission;\n sourceAttachmentIds: string[];\n sourceAttachmentReportTypes: Record<string, string>;\n uploads: BillSubmissionUpload[];\n};\n\nexport type BillSubmissionFormProps = {\n initialBill: BillSubmissionInput;\n /** Host-owned choices or organizationProfileOptions(profile). Selection copies a snapshot into this bill only. */\n profileOptions?: BillSubmissionProfileOptions;\n /** Compact keeps provider fields available behind an edit disclosure; validation errors expand it. */\n profileDisplay?: \"expanded\" | \"compact\";\n attachments?: BillSubmissionSourceAttachment[];\n /**\n * Legacy custom submission escape hatch. Connected forms should omit this so\n * the component owns PDF encoding and the Partner API wire contract.\n */\n onSubmit?: (value: BillSubmissionFormValue) => void | Promise<void>;\n /** Called after the connected component atomically creates and submits the bill. */\n onSubmitted?: (result: BrowserBillSubmissionResult) => void | Promise<void>;\n /** Short-lived partner browser session. Enables reference data and direct submission. */\n getSession?: BillLifecycleSessionProvider;\n sessionEndpoint?: string;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n /** Paginated claims-administrator directory. Empty queries return the alphabetical first page. */\n onListClaimsAdministrators?: (input?: BillReviewPayerListInput) => Promise<BillReviewPayerPage>;\n /** @deprecated Prefer onListClaimsAdministrators for browse and pagination support. */\n onSearchClaimsAdministrators?: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;\n onGetClaimsAdministratorDirectory?: (id: string, injuryState?: string) => Promise<BillClaimsAdministratorDirectory>;\n /** Host-system evidence shown without preselecting a canonical directory entry. EAMS evidence takes precedence. */\n claimsAdministratorSources?: readonly BillClaimsAdministratorSource[];\n /** @deprecated Prefer claimsAdministratorSources so the source label and optional URL remain explicit. */\n claimsAdministratorHint?: ReactNode;\n diagnosisOptions?: BillSubmissionDiagnosisOption[];\n onSearchDiagnoses?: (query: string, limit?: number, offset?: number) => Promise<BillSubmissionDiagnosisOption[]>;\n onLookupPostalCode?: (postalCode: string) => Promise<BillSubmissionPostalPlace | null>;\n procedureOptions?: BillSubmissionProcedureOption[];\n modifierOptions?: BillSubmissionModifierOption[];\n /** Common NUCC provider taxonomies are bundled; supplied values extend or replace matching codes. */\n taxonomyOptions?: BillSubmissionTaxonomyOption[];\n /**\n * The delivery-method dialog shown when the biller submits.\n * \"auto\" (default) shows it whenever the delivery preview is available;\n * \"required\" fails closed until the biller confirms a route; \"off\" submits\n * directly on MindBill's recommended route.\n */\n deliveryRoutePicker?: \"auto\" | \"required\" | \"off\";\n /** Heading for the delivery confirmation dialog. */\n deliveryRouteDialogTitle?: ReactNode;\n /** Auto hides and forces J4 for med-legal bills; treatment bills show the full report-type directory. */\n attachmentReportTypeMode?: BillSubmissionAttachmentReportTypeMode;\n attachmentReportTypes?: readonly BillSubmissionReportTypeOption[];\n defaultAttachmentReportType?: string;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n submitLabel?: string;\n heading?: ReactNode;\n description?: ReactNode;\n /** Rejected-field paths to visually call out while the user corrects the next submission. */\n attentionFields?: string[];\n attentionMessage?: ReactNode;\n /**\n * Optional composable layout. Use the exported section components as children;\n * the parent form continues to own validation, directory lookups, uploads, and submission.\n */\n children?: ReactNode;\n};\n\nexport const BILL_SUBMISSION_REQUIRED_FIELDS = [\n \"patient.firstName\", \"patient.lastName\", \"patient.dateOfBirth\", \"patient.address.line1\",\n \"patient.address.city\", \"patient.address.state\", \"patient.address.postalCode\",\n \"claim.claimNumber\", \"claim.employer\", \"claim.dateOfInjury\", \"claim.claimsAdministrator\", \"service.date\",\n \"billingProvider.name\", \"billingProvider.taxId\", \"billingProvider.npi\", \"billingProvider.phone\",\n \"billingProvider.address.line1\", \"billingProvider.address.city\", \"billingProvider.address.state\", \"billingProvider.address.postalCode\",\n \"renderingProvider.name\", \"renderingProvider.npi\", \"renderingProvider.taxonomy\",\n \"serviceLocation.placeOfServiceCode\", \"serviceLocation.address.line1\", \"serviceLocation.address.city\",\n \"serviceLocation.address.state\", \"serviceLocation.address.postalCode\",\n \"diagnoses[]\",\n \"serviceLines[].code\", \"serviceLines[].units\",\n] as const;\n\nexport type BillSubmissionValidation = { valid: boolean; fieldErrors: Record<string, string> };\n\nconst documentLabels: Record<BillSubmissionDocumentType, string> = {\n final_report: \"Final report\", proof_of_service: \"Proof of service\",\n letter_of_attestation: \"Letter of attestation\", form_122: \"Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\", w9: \"W-9\",\n medical_records: \"Medical records\", appeal: \"Appeal\", other: \"Other\",\n};\nconst MAX_PDF_BYTES = 25 * 1024 * 1024;\nconst MAX_UPLOAD_BYTES = 100 * 1024 * 1024;\nconst MAX_DOCUMENTS = 25;\nconst DIAGNOSIS_PAGE_SIZE = 100;\nconst PAYER_PAGE_SIZE = 50;\nconst EMPTY_ATTACHMENTS: BillSubmissionSourceAttachment[] = [];\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let offset = 0; offset < bytes.length; offset += 32_768) {\n binary += String.fromCharCode(...bytes.subarray(offset, offset + 32_768));\n }\n return globalThis.btoa(binary);\n}\n\nasync function pdfDocument(\n blob: Blob,\n input: Omit<BrowserBillSubmissionDocument, \"contentBase64\">,\n): Promise<BrowserBillSubmissionDocument> {\n if (blob.size > MAX_PDF_BYTES) throw new Error(`${input.filename} is larger than 25 MB.`);\n const bytes = new Uint8Array(await blob.arrayBuffer());\n if (\n bytes.length < 5\n || bytes[0] !== 0x25\n || bytes[1] !== 0x50\n || bytes[2] !== 0x44\n || bytes[3] !== 0x46\n || bytes[4] !== 0x2d\n ) {\n throw new Error(`${input.filename} is not a valid PDF.`);\n }\n return { ...input, contentBase64: bytesToBase64(bytes) };\n}\n\nexport async function prepareBillSubmissionDocuments({\n attachments,\n selectedIds,\n uploads,\n reportTypeCodeByAttachmentId = {},\n defaultReportTypeCode,\n fetch: fetchOverride,\n}: {\n attachments: BillSubmissionSourceAttachment[];\n selectedIds: string[];\n uploads: BillSubmissionUpload[];\n reportTypeCodeByAttachmentId?: Record<string, string>;\n defaultReportTypeCode?: string;\n fetch?: typeof globalThis.fetch;\n}): Promise<BrowserBillSubmissionDocument[]> {\n const fetcher = fetchOverride ?? globalThis.fetch;\n const selected = selectedIds.map((id) => attachments.find((item) => item.id === id)).filter((item): item is BillSubmissionSourceAttachment => Boolean(item));\n const sourceDocuments = await Promise.all(selected.map(async (attachment) => {\n let blob: Blob;\n if (attachment.loadBlob) blob = await attachment.loadBlob();\n else {\n if (!attachment.previewUrl) throw new Error(`${attachment.fileName} cannot be submitted because its document URL is missing.`);\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n const response = await fetcher(attachment.previewUrl, { credentials: \"same-origin\" });\n if (!response.ok) throw new Error(`${attachment.fileName} could not be loaded for submission.`);\n blob = await response.blob();\n }\n return pdfDocument(blob, {\n externalId: attachment.id,\n filename: attachment.fileName,\n documentType: attachment.documentType,\n ...((reportTypeCodeByAttachmentId[attachment.id] || attachment.reportTypeCode || defaultReportTypeCode) ? { reportTypeCode: reportTypeCodeByAttachmentId[attachment.id] || attachment.reportTypeCode || defaultReportTypeCode } : {}),\n ...(attachment.description ? { description: attachment.description } : {}),\n });\n }));\n const uploadedDocuments = await Promise.all(uploads.map(({ file, documentType, description, reportTypeCode }) => pdfDocument(file, {\n filename: file.name,\n documentType,\n ...((reportTypeCode || defaultReportTypeCode) ? { reportTypeCode: reportTypeCode || defaultReportTypeCode } : {}),\n ...(description ? { description } : {}),\n })));\n return [...sourceDocuments, ...uploadedDocuments];\n}\n\nfunction previewUploadedPdf(file: File): void {\n const url = URL.createObjectURL(file);\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n window.setTimeout(() => URL.revokeObjectURL(url), 60_000);\n}\n\nfunction blankLine(): BillSubmissionInput[\"serviceLines\"][number] {\n return { code: \"\", modifiers: [], units: 1 };\n}\nfunction lineHasContent(line: BillSubmissionInput[\"serviceLines\"][number]): boolean {\n return Boolean(line.code.trim() || line.modifiers?.length || line.charge != null);\n}\nexport function ensureTrailingBillSubmissionLine(\n lines: BillSubmissionInput[\"serviceLines\"],\n): BillSubmissionInput[\"serviceLines\"] {\n const normalized: BillSubmissionInput[\"serviceLines\"] = lines.length ? lines.map((line) => ({ ...line, modifiers: [...(line.modifiers ?? [])], units: line.units ?? 1 })) : [];\n while (normalized.length > 1 && !lineHasContent(normalized.at(-1)!) && !lineHasContent(normalized.at(-2)!)) normalized.pop();\n if (!normalized.length || lineHasContent(normalized.at(-1)!)) normalized.push(blankLine());\n return normalized;\n}\n\nexport function parseBillSubmissionDate(value: string): string | undefined {\n const trimmed = value.trim();\n const iso = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(trimmed);\n const us = /^(\\d{1,2})[/-](\\d{1,2})[/-](\\d{4})$/.exec(trimmed);\n const digits = /^(\\d{2})(\\d{2})(\\d{4})$/.exec(trimmed.replace(/\\D/g, \"\"));\n const match = iso ? [iso[2], iso[3], iso[1]] : us ? [us[1], us[2], us[3]] : digits ? [digits[1], digits[2], digits[3]] : null;\n if (!match) return undefined;\n const month = Number(match[0]); const day = Number(match[1]); const year = Number(match[2]);\n const date = new Date(Date.UTC(year, month - 1, day));\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return undefined;\n return `${String(year).padStart(4, \"0\")}-${String(month).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}`;\n}\nexport function formatBillSubmissionDate(value: string | null | undefined): string {\n const parsed = value ? parseBillSubmissionDate(value) : undefined;\n if (!parsed) return \"\";\n const [year, month, day] = parsed.split(\"-\");\n return `${month}/${day}/${year}`;\n}\n\nfunction evaluationModifier(type: BillSubmissionEvaluationType, code: string): string | undefined {\n if (!/^ML(?:200|201|202|203|PRR)$/.test(code.toUpperCase())) return undefined;\n if (type === \"ame\") return code.toUpperCase() === \"ML200\" || code.toUpperCase() === \"MLPRR\" ? undefined : \"94\";\n if (type === \"psych_qme\") return code.toUpperCase() === \"ML200\" ? \"95\" : code.toUpperCase() === \"MLPRR\" ? undefined : \"96\";\n return \"95\";\n}\nexport function applyBillSubmissionEvaluationModifiers(\n lines: BillSubmissionInput[\"serviceLines\"], type: BillSubmissionEvaluationType,\n): BillSubmissionInput[\"serviceLines\"] {\n return lines.map((line) => {\n const auto = evaluationModifier(type, line.code);\n const modifiers = (line.modifiers ?? []).filter((item) => ![\"94\", \"95\", \"96\"].includes(item.replace(/^-/, \"\")));\n return { ...line, modifiers: auto ? [auto, ...modifiers] : modifiers };\n });\n}\n\nexport const PSYCH_QME_DEFAULT_DIAGNOSIS = \"Z04.6\";\n\n/** Seed Psych QME's general examination code only when no diagnosis was supplied. */\nexport function applyBillSubmissionEvaluationDiagnoses(\n diagnoses: string[] | undefined,\n type: BillSubmissionEvaluationType,\n): string[] {\n const current = [...(diagnoses ?? [])];\n return type === \"psych_qme\" && !current.some((code) => code.trim())\n ? [PSYCH_QME_DEFAULT_DIAGNOSIS]\n : current;\n}\n\nfunction initialEvaluationType(bill: BillSubmissionInput): BillSubmissionEvaluationType {\n if (bill.renderingProvider?.isAme) return \"ame\";\n return bill.renderingProvider?.specialty?.toLowerCase().includes(\"psych\") ? \"psych_qme\" : \"qme\";\n}\n\nfunction cloneInitialBill(bill: BillSubmissionInput): BillSubmissionInput {\n const cloned = cloneBill(bill);\n cloned.diagnoses = applyBillSubmissionEvaluationDiagnoses(cloned.diagnoses, initialEvaluationType(bill));\n return cloned;\n}\n\nfunction stableInitializationValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableInitializationValue);\n if (!value || typeof value !== \"object\") return typeof value === \"function\" ? undefined : value;\n return Object.fromEntries(Object.entries(value)\n .filter(([, entry]) => typeof entry !== \"function\")\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, stableInitializationValue(entry)]));\n}\n\n/**\n * Identifies the source draft represented by the host props. Hosts may rebuild\n * equivalent objects during polling; that must not erase in-progress edits.\n */\nexport function billSubmissionInitializationKey(\n initialBill: BillSubmissionInput,\n attachments: BillSubmissionSourceAttachment[] = EMPTY_ATTACHMENTS,\n sourceClaimsAdministratorName = \"\",\n): string {\n return JSON.stringify(stableInitializationValue({\n attachments,\n initialBill,\n sourceClaimsAdministratorName,\n }));\n}\n\nfunction submittedLines(lines: BillSubmissionInput[\"serviceLines\"]): BillSubmissionInput[\"serviceLines\"] {\n return lines.filter(lineHasContent).map((line) => ({ ...line, code: line.code.trim(), modifiers: [...(line.modifiers ?? [])] }));\n}\nfunction cloneBill(bill: BillSubmissionInput): BillSubmissionInput {\n return {\n ...bill,\n patient: { ...bill.patient, address: { ...bill.patient.address } },\n claim: { ...bill.claim, ...(bill.claim.claimsAdministrator ? { claimsAdministrator: { ...bill.claim.claimsAdministrator } } : {}) },\n service: { ...bill.service },\n ...(bill.billingProvider ? { billingProvider: { ...bill.billingProvider, ...(bill.billingProvider.address ? { address: { ...bill.billingProvider.address } } : {}) } } : {}),\n ...(bill.renderingProvider ? { renderingProvider: { ...bill.renderingProvider } } : {}),\n ...(bill.serviceLocation ? { serviceLocation: { ...bill.serviceLocation, ...(bill.serviceLocation.address ? { address: { ...bill.serviceLocation.address } } : {}) } } : {}),\n diagnoses: [...(bill.diagnoses ?? [])],\n serviceLines: ensureTrailingBillSubmissionLine(bill.serviceLines),\n };\n}\nexport function validateBillSubmission(bill: BillSubmissionInput): BillSubmissionValidation {\n const errors: Record<string, string> = {};\n const required = (path: string, value: unknown, message: string) => { if (typeof value !== \"string\" || !value.trim()) errors[path] = message; };\n required(\"patient.firstName\", bill.patient.firstName, \"Enter the patient's first name.\");\n required(\"patient.lastName\", bill.patient.lastName, \"Enter the patient's last name.\");\n required(\"patient.dateOfBirth\", bill.patient.dateOfBirth, \"Enter the patient's date of birth.\");\n required(\"patient.address.line1\", bill.patient.address.line1, \"Enter the patient's street address.\");\n required(\"patient.address.city\", bill.patient.address.city, \"Enter the patient's city.\");\n required(\"patient.address.state\", bill.patient.address.state, \"Enter the patient's 2-letter state code.\");\n required(\"patient.address.postalCode\", bill.patient.address.postalCode, \"Enter the patient's ZIP code.\");\n required(\"claim.claimNumber\", bill.claim.claimNumber, \"Enter the claim number.\");\n required(\"claim.employer\", bill.claim.employer, \"Enter the employer name.\");\n required(\"claim.dateOfInjury\", bill.claim.dateOfInjury, \"Enter the date of injury.\");\n required(\"claim.claimsAdministrator\", bill.claim.claimsAdministrator?.name, \"Select a claims administrator so MindBill can route this bill.\");\n required(\"service.date\", bill.service.date, \"Enter the date of service.\");\n if (!bill.billingProvider?.savedProviderId?.trim() && !bill.billingProvider?.sourceBillId?.trim()) {\n required(\"billingProvider.name\", bill.billingProvider?.name, \"Enter the billing provider name.\");\n required(\"billingProvider.taxId\", bill.billingProvider?.taxId, \"Enter the billing provider Tax ID (EIN or SSN).\");\n required(\"billingProvider.npi\", bill.billingProvider?.npi, \"Enter the billing provider NPI.\");\n required(\"billingProvider.phone\", bill.billingProvider?.phone, \"Enter the billing provider phone number.\");\n required(\"billingProvider.address.line1\", bill.billingProvider?.address?.line1, \"Enter the billing provider street address.\");\n required(\"billingProvider.address.city\", bill.billingProvider?.address?.city, \"Enter the billing provider city.\");\n required(\"billingProvider.address.state\", bill.billingProvider?.address?.state, \"Enter the billing provider 2-letter state code.\");\n required(\"billingProvider.address.postalCode\", bill.billingProvider?.address?.postalCode, \"Enter the billing provider ZIP code.\");\n }\n required(\"renderingProvider.name\", bill.renderingProvider?.name, \"Enter the rendering provider name.\");\n required(\"renderingProvider.npi\", bill.renderingProvider?.npi, \"Enter the rendering provider NPI.\");\n required(\"renderingProvider.taxonomy\", bill.renderingProvider?.taxonomy, \"Enter the rendering provider taxonomy code.\");\n required(\"serviceLocation.placeOfServiceCode\", bill.serviceLocation?.placeOfServiceCode, \"Enter the 2-digit place of service code.\");\n required(\"serviceLocation.address.line1\", bill.serviceLocation?.address?.line1, \"Enter the service facility street address.\");\n required(\"serviceLocation.address.city\", bill.serviceLocation?.address?.city, \"Enter the service facility city.\");\n required(\"serviceLocation.address.state\", bill.serviceLocation?.address?.state, \"Enter the service facility 2-letter state code.\");\n required(\"serviceLocation.address.postalCode\", bill.serviceLocation?.address?.postalCode, \"Enter the service facility ZIP code.\");\n if (!(bill.diagnoses ?? []).some((code) => code.trim())) {\n errors.diagnoses = \"Select at least one ICD-10 diagnosis code.\";\n }\n if (bill.claim.claimsAdministrator?.name && !bill.claim.claimsAdministrator.id) {\n errors[\"claim.claimsAdministrator\"] = \"Select a claims administrator from the payer directory.\";\n }\n if (bill.claim.claimsAdministrator?.payerSelectionRequired && !bill.claim.claimsAdministrator.payerId?.trim()) {\n errors[\"claim.claimsAdministrator.payerId\"] = \"Select the payer for this claims administrator.\";\n }\n if (bill.patient.dateOfBirth && !parseBillSubmissionDate(bill.patient.dateOfBirth)) errors[\"patient.dateOfBirth\"] = \"Use MM/DD/YYYY\";\n if (bill.claim.dateOfInjury && !parseBillSubmissionDate(bill.claim.dateOfInjury)) errors[\"claim.dateOfInjury\"] = \"Use MM/DD/YYYY\";\n if (bill.patient.address.state.trim().length !== 2) errors[\"patient.address.state\"] = \"Use a 2-letter state code\";\n if (!bill.billingProvider?.savedProviderId && !bill.billingProvider?.sourceBillId && bill.billingProvider?.address?.state && bill.billingProvider.address.state.trim().length !== 2) errors[\"billingProvider.address.state\"] = \"Use a 2-letter state code.\";\n if (bill.serviceLocation?.address?.state && bill.serviceLocation.address.state.trim().length !== 2) errors[\"serviceLocation.address.state\"] = \"Use a 2-letter state code.\";\n const digits = (value?: string) => value?.replace(/\\D/g, \"\") ?? \"\";\n if (!bill.billingProvider?.savedProviderId && !bill.billingProvider?.sourceBillId && bill.billingProvider?.taxId && digits(bill.billingProvider.taxId).length !== 9) errors[\"billingProvider.taxId\"] = \"Enter a valid 9-digit EIN or SSN.\";\n if (!bill.billingProvider?.savedProviderId && !bill.billingProvider?.sourceBillId && bill.billingProvider?.npi && !/^\\d{10}$/.test(digits(bill.billingProvider.npi))) errors[\"billingProvider.npi\"] = \"Enter a valid 10-digit NPI.\";\n if (bill.renderingProvider?.npi && !/^\\d{10}$/.test(digits(bill.renderingProvider.npi))) errors[\"renderingProvider.npi\"] = \"Enter a valid 10-digit NPI.\";\n if (bill.renderingProvider?.taxonomy && !/^[A-Za-z0-9]{10}$/.test(bill.renderingProvider.taxonomy.trim())) errors[\"renderingProvider.taxonomy\"] = \"Enter a valid 10-character taxonomy code.\";\n if (bill.serviceLocation?.placeOfServiceCode && !/^\\d{2}$/.test(bill.serviceLocation.placeOfServiceCode.trim())) errors[\"serviceLocation.placeOfServiceCode\"] = \"Enter a valid 2-digit place of service code.\";\n const lines = submittedLines(bill.serviceLines);\n if (!lines.length) errors.serviceLines = \"Add at least one service line\";\n lines.forEach((line, index) => {\n required(`serviceLines.${index}.code`, line.code, \"Select a procedure code.\");\n if (!Number.isInteger(line.units) || (line.units ?? 0) < 1) errors[`serviceLines.${index}.units`] = \"Enter at least 1 unit\";\n if (bill.billingMode === \"professional\" && (!Number.isFinite(line.charge) || (line.charge ?? 0) < 0)) errors[`serviceLines.${index}.charge`] = \"Enter the billed charge\";\n });\n return { valid: Object.keys(errors).length === 0, fieldErrors: errors };\n}\n\nconst css = `\n.mbsf{display:grid;gap:20px;color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbsf *{box-sizing:border-box}\n.mbsf-attention{padding:14px 16px;border-left:4px solid var(--mb-danger);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 8%,var(--mb-surface));color:var(--mb-text)}.mbsf [data-attention=true] .mbsf-input,.mbsf [data-attention=true] .mbsf-select,.mbsf [data-attention=true].mbsf-lines{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf [data-attention=true]>.mbsf-label{color:var(--mb-danger)}\n.mbsf-head,.mbsf-section-head,.mbsf-attach-row,.mbsf-actions{display:flex;align-items:center;justify-content:space-between;gap:16px}.mbsf-title{margin:0;font-size:24px}.mbsf-copy,.mbsf-help{color:var(--mb-muted);margin:5px 0 0}.mbsf-required{font-size:13px;color:var(--mb-muted);white-space:nowrap}.mbsf-star,.mbsf-error{color:var(--mb-danger)}\n.mbsf-card{min-width:0;margin:0;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}.mbsf-card[data-invalid=true]{border-color:var(--mb-danger)}.mbsf-legend{padding:0 10px;font-size:18px;font-weight:760}.mbsf-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px}.mbsf-subhead{grid-column:1/-1;margin:6px 0 -2px;padding-top:14px;border-top:1px solid var(--mb-border);font-size:15px;font-weight:780;letter-spacing:.01em}.mbsf-subhead:first-child{margin-top:0;padding-top:0;border-top:0}.mbsf-span{grid-column:1/-1}.mbsf-field{display:grid;align-content:start;gap:7px;min-width:0}.mbsf-label{font-weight:680}.mbsf-input,.mbsf-select{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbsf-input:focus,.mbsf-select:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}.mbsf-field[data-invalid=true] .mbsf-input,.mbsf-field[data-invalid=true] .mbsf-select,.mbsf-invalid-control .mbsf-input{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf-field[data-invalid=true] .mbsf-input:focus,.mbsf-field[data-invalid=true] .mbsf-select:focus{outline-color:color-mix(in srgb,var(--mb-danger) 24%,transparent)}\n.mbsf-combo{position:relative}.mbsf-menu{position:absolute;z-index:20;top:calc(100% + 5px);left:0;right:0;max-height:min(420px,52vh);overflow:auto;overscroll-behavior:contain;padding:7px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);box-shadow:0 14px 35px rgba(17,38,49,.16)}.mbsf-option{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:14px;width:100%;padding:11px 12px;border:0;border-radius:8px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}.mbsf-option+.mbsf-option{border-top:1px solid color-mix(in srgb,var(--mb-border) 65%,transparent)}.mbsf-option:hover,.mbsf-option:focus{background:color-mix(in srgb,var(--mb-accent) 9%,var(--mb-surface));outline:0}.mbsf-option-main{display:grid;gap:5px;min-width:0}.mbsf-option small{color:var(--mb-muted);overflow-wrap:anywhere;line-height:1.35}.mbsf-option-route{align-self:start;margin-top:2px;color:var(--mb-accent);font-size:13px;font-weight:750;white-space:nowrap}.mbsf-option-badges{display:flex;flex-wrap:wrap;gap:5px}.mbsf-option-badge{padding:2px 7px;border:1px solid var(--mb-border);border-radius:999px;color:var(--mb-muted);font-size:11px;line-height:1.35}.mbsf-option-affiliates{display:block}.mbsf-option-affiliates strong{color:var(--mb-text);font-size:12px}.mbsf-menu-status{padding:12px;text-align:center;color:var(--mb-muted);font-size:13px}.mbsf-directory-link{justify-self:start;border:0;padding:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:700;text-align:left;text-decoration:underline;cursor:pointer}\n.mbsf-payer-status{display:flex;align-items:center;gap:7px;color:#087f5b;font-size:13px;font-weight:650}.mbsf-payer-intro{margin:4px 0 0;color:var(--mb-muted)}.mbsf-payer-list{display:grid;gap:8px}.mbsf-payer-option{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface))}.mbsf-payer-option-main{display:grid;gap:5px;min-width:0}.mbsf-payer-option-main strong{overflow-wrap:anywhere}.mbsf-payer-signals{display:flex;flex-wrap:wrap;gap:6px}.mbsf-payer-signal{padding:2px 7px;border:1px solid var(--mb-border);border-radius:999px;color:var(--mb-muted);font-size:12px}.mbsf-payer-signal[data-state=match]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));color:#087f5b}.mbsf-payer-signal[data-state=warning]{border-color:color-mix(in srgb,#c56a00 55%,var(--mb-border));color:#9a5200}\n.mbsf-source-evidence{display:grid;gap:4px;color:var(--mb-muted);font-size:13px}.mbsf-source-evidence a{color:var(--mb-accent);font-weight:700}.mbsf-source-evidence q{color:var(--mb-text)}.mbsf-suggestions{display:flex;align-items:center;flex-wrap:wrap;gap:7px;color:var(--mb-muted);font-size:13px}.mbsf-suggestion{padding:5px 10px;border:1px solid color-mix(in srgb,var(--mb-accent) 55%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface));color:var(--mb-accent);font:inherit;font-weight:700;cursor:pointer}.mbsf-suggestion:hover,.mbsf-suggestion:focus{outline:2px solid color-mix(in srgb,var(--mb-accent) 25%,transparent)}.mbsf-claim-patterns{display:grid;gap:4px;margin-top:2px;font-size:13px}.mbsf-claim-patterns[data-state=match]{color:#087f5b}.mbsf-claim-patterns[data-state=warning]{color:#9a5200}.mbsf-claim-pattern-list{color:var(--mb-muted)}\n.mbsf-chips,.mbsf-quick-picks{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:8px}.mbsf-chip,.mbsf-quick-pick{display:inline-flex;align-items:center;gap:7px;padding:5px 9px;border:1px solid var(--mb-border);border-radius:999px;background:var(--mb-input)}.mbsf-chip button{border:0;background:transparent;color:var(--mb-muted);cursor:pointer;font:inherit}.mbsf-quick-pick{color:var(--mb-text);font:inherit;cursor:pointer}.mbsf-quick-pick[data-selected=true]{border-color:var(--mb-accent);color:var(--mb-accent)}\n.mbsf-segments{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);overflow:hidden}.mbsf-segment{min-height:44px;border:0;border-right:1px solid var(--mb-border);background:var(--mb-input);color:var(--mb-text);font:inherit;font-weight:700;cursor:pointer}.mbsf-segment:last-child{border-right:0}.mbsf-segment[aria-pressed=true]{background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mbsf-lines{margin-top:18px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);overflow:visible}.mbsf-lines[data-invalid=true]{border-color:var(--mb-danger)}.mbsf-line-head,.mbsf-line{display:grid;grid-template-columns:minmax(190px,1.05fr) minmax(190px,1.3fr) minmax(112px,.7fr) 100px 120px 42px;gap:12px;align-items:start;padding:12px}.mbsf-line-head{color:var(--mb-muted);font-size:13px;font-weight:700;border-bottom:1px solid var(--mb-border)}.mbsf-line{border-bottom:1px solid var(--mb-border)}.mbsf-line:last-child{border-bottom:0}.mbsf-line [data-invalid=true] .mbsf-input{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf-money{padding-top:12px;text-align:right;font-variant-numeric:tabular-nums}.mbsf-dx{display:flex;flex-wrap:wrap;gap:5px;padding-top:6px}.mbsf-dx-chip{width:30px;height:30px;border:1px solid var(--mb-border);border-radius:8px;background:var(--mb-surface);color:var(--mb-muted);font:inherit;font-size:13px;font-weight:750;cursor:pointer}.mbsf-dx-chip[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-accent)}.mbsf-total{display:flex;justify-content:flex-end;gap:45px;padding:16px 56px 16px 16px;font-size:17px;font-weight:760}\n.mbsf-icon-btn{width:40px;height:42px;border:0;background:transparent;color:var(--mb-text);font-size:22px;cursor:pointer}.mbsf-secondary{min-height:40px;padding:8px 14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}.mbsf-attach-list{display:grid;gap:10px;margin-bottom:18px}.mbsf-attach-row{padding:14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius)}.mbsf-attach-row[data-auto=true]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));background:color-mix(in srgb,#159447 5%,var(--mb-surface))}.mbsf-attach-main{display:flex;align-items:center;gap:12px;min-width:0;flex:1}.mbsf-attach-type{width:min(360px,32vw);flex:0 1 360px}.mbsf-attach-type .mbsf-label{display:block;margin-bottom:6px;font-size:12px}.mbsf-attach-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}.mbsf-file{min-width:0}.mbsf-file strong{overflow-wrap:anywhere}.mbsf-badge{display:inline-block;margin-left:8px;padding:2px 7px;border:1px solid var(--mb-border);border-radius:7px;color:var(--mb-muted);font-size:12px;font-weight:600}.mbsf-drop{display:grid;width:100%;place-items:center;min-height:210px;padding:30px;border:2px dashed color-mix(in srgb,var(--mb-muted) 55%,transparent);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));color:var(--mb-text);font:inherit;text-align:center;cursor:pointer}.mbsf-drop[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface))}.mbsf-alert{padding:12px 14px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger)}.mbsf-actions{justify-content:flex-end}.mbsf-submit{min-width:180px;min-height:48px;padding:11px 24px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:780;cursor:pointer}\n@media(max-width:820px){.mbsf{gap:16px}.mbsf-grid{grid-template-columns:1fr}.mbsf-span{grid-column:auto}.mbsf-card{padding:18px 16px}.mbsf-line-head{display:none}.mbsf-line{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 86px;gap:14px;padding:18px 16px}.mbsf-line>div:before{display:block;margin-bottom:6px;color:var(--mb-muted);font-size:12px;font-weight:700;content:attr(data-label)}.mbsf-line>div:nth-child(1),.mbsf-line>div:nth-child(2),.mbsf-line>div:nth-child(3){grid-column:1/-1}.mbsf-money{align-self:end;padding:0 0 12px;text-align:right}.mbsf-line .mbsf-icon-btn{position:absolute;right:8px;bottom:3px}.mbsf-total{padding:16px 18px;gap:24px}.mbsf-head{align-items:flex-start}.mbsf-segments{grid-template-columns:repeat(3,minmax(0,1fr))}.mbsf-segment{min-width:0;padding:8px 4px;border-right:1px solid var(--mb-border);border-bottom:0;font-size:13px}.mbsf-segment:last-child{border-right:0}.mbsf-payer-option{align-items:flex-start}.mbsf-attach-row{align-items:flex-start;flex-wrap:wrap}.mbsf-attach-main{align-items:flex-start;flex-basis:calc(100% - 150px)}.mbsf-attach-type{width:100%;flex-basis:100%;order:3}.mbsf-attach-actions{margin-left:auto}.mbsf-drop{min-height:190px;padding:24px 18px}.mbsf-actions{position:sticky;bottom:86px;z-index:10}.mbsf.mbsf-lifecycle-correction .mbsf-actions{position:static;bottom:auto}.mbsf-submit{width:100%}}\n`;\n\nfunction RequiredMark(): ReactElement { return <span className=\"mbsf-star\"> *</span>; }\nfunction Field({ label, required, error, invalid, path, span, children }: { label: string; required?: boolean; error?: string | undefined; invalid?: boolean; path?: string; span?: boolean; children: ReactNode }): ReactElement {\n return <label className={`mbsf-field${span ? \" mbsf-span\" : \"\"}`} data-field-path={path} data-invalid={Boolean(error) || invalid}><span className=\"mbsf-label\">{label}{required ? <RequiredMark /> : null}</span>{children}{error ? <small className=\"mbsf-error\" role=\"alert\">{error}</small> : null}</label>;\n}\nfunction TextDateInput({ value, onChange, disabled, required, ariaLabel }: { value?: string | null | undefined; onChange: (value: string) => void; disabled: boolean; required?: boolean; ariaLabel: string }): ReactElement {\n const [display, setDisplay] = useState(() => formatBillSubmissionDate(value));\n const [invalid, setInvalid] = useState(false);\n useEffect(() => { setDisplay(formatBillSubmissionDate(value)); setInvalid(false); }, [value]);\n return <><input className=\"mbsf-input\" type=\"text\" inputMode=\"numeric\" autoComplete=\"off\" placeholder=\"MM/DD/YYYY\" aria-label={ariaLabel} aria-invalid={invalid} required={required} disabled={disabled} value={display} onChange={(event) => {\n const next = event.target.value; const parsed = parseBillSubmissionDate(next); setDisplay(next); setInvalid(Boolean(next && !parsed));\n if (!next.trim()) onChange(\"\"); else if (parsed) onChange(parsed);\n }} onBlur={() => setInvalid(Boolean(display && !parseBillSubmissionDate(display)))} />{invalid ? <small className=\"mbsf-error\">Use MM/DD/YYYY</small> : null}</>;\n}\n\ntype ComboOption = { id: string; label: string; detail?: string; badges?: string[]; affiliatedEntities?: string[]; trailing?: string };\nfunction ComboBox({ value, placeholder, options, disabled, loading, loadingMore, invalid, preserveValueOnOpen = false, filterOptions = true, onOpen, onQuery, onEndReached, onSelect, createOption, ariaLabel }: { value: string; placeholder: string; options: ComboOption[]; disabled: boolean; loading?: boolean; loadingMore?: boolean; invalid?: boolean; preserveValueOnOpen?: boolean; filterOptions?: boolean; onOpen?: () => void; onQuery?: (query: string) => void; onEndReached?: () => void; onSelect: (option: ComboOption) => void; createOption?: (query: string) => ComboOption | null; ariaLabel: string }): ReactElement {\n const [open, setOpen] = useState(false); const [query, setQuery] = useState(\"\");\n const visible = useMemo(() => {\n const q = query.trim().toLowerCase();\n const matches = q && filterOptions ? options.filter((option) => `${option.id} ${option.label} ${option.detail ?? \"\"} ${(option.badges ?? []).join(\" \")} ${(option.affiliatedEntities ?? []).join(\" \")} ${option.trailing ?? \"\"}`.toLowerCase().includes(q)) : options;\n const custom = createOption?.(query) ?? null;\n return custom && !matches.some((option) => option.id.toUpperCase() === custom.id.toUpperCase()) ? [...matches, custom] : matches;\n }, [createOption, filterOptions, options, query]);\n const showMenu = open;\n return <div className=\"mbsf-combo\"><input className=\"mbsf-input\" role=\"combobox\" aria-label={ariaLabel} aria-invalid={invalid} aria-expanded={showMenu} autoComplete=\"off\" disabled={disabled} placeholder={placeholder} value={open ? query : value} onFocus={() => { const next = preserveValueOnOpen ? value : \"\"; setOpen(true); setQuery(next); onOpen?.(); if (next) onQuery?.(next); }} onChange={(event) => { setOpen(true); setQuery(event.target.value); onQuery?.(event.target.value); }} onBlur={() => setTimeout(() => setOpen(false), 120)} />{showMenu ? <div className=\"mbsf-menu\" role=\"listbox\" onScroll={(event) => { const menu = event.currentTarget; if (menu.scrollHeight - menu.scrollTop - menu.clientHeight < 120) onEndReached?.(); }}>{loading && !visible.length ? <div className=\"mbsf-menu-status\">Loading…</div> : visible.length ? visible.map((option) => <button className=\"mbsf-option\" type=\"button\" role=\"option\" key={option.id} onMouseDown={(event) => event.preventDefault()} onClick={() => { onSelect(option); setOpen(false); setQuery(\"\"); }}><span className=\"mbsf-option-main\"><strong>{option.label}</strong>{option.detail ? <small>{option.detail}</small> : null}{option.badges?.length ? <span className=\"mbsf-option-badges\">{option.badges.map((badge) => <span className=\"mbsf-option-badge\" key={badge}>{badge}</span>)}</span> : null}{option.affiliatedEntities?.length ? <small className=\"mbsf-option-affiliates\"><strong>Affiliated entities:</strong> {option.affiliatedEntities.join(\", \")}</small> : null}</span>{option.trailing ? <span className=\"mbsf-option-route\">{option.trailing}</span> : null}</button>) : <div className=\"mbsf-option\">No matches</div>}{loadingMore ? <div className=\"mbsf-menu-status\">Loading more…</div> : null}</div> : null}</div>;\n}\n\nfunction focusFirstInvalid(form: HTMLFormElement): void {\n const field = form.querySelector<HTMLElement>('[data-invalid=\"true\"]');\n if (!field) return;\n const control = field.querySelector<HTMLElement>('input,select,textarea,button,[tabindex]:not([tabindex=\"-1\"])');\n control?.focus({ preventScroll: true });\n const fieldRect = field.getBoundingClientRect();\n let scrollParent: HTMLElement | null = field.parentElement;\n while (scrollParent) {\n const style = window.getComputedStyle(scrollParent);\n if (/(auto|scroll)/.test(style.overflowY) && scrollParent.scrollHeight > scrollParent.clientHeight) break;\n scrollParent = scrollParent.parentElement;\n }\n if (scrollParent) {\n const parentRect = scrollParent.getBoundingClientRect();\n scrollParent.scrollTo({ top: Math.max(0, scrollParent.scrollTop + fieldRect.top - parentRect.top - 24), behavior: \"smooth\" });\n } else {\n window.scrollTo({ top: Math.max(0, window.scrollY + fieldRect.top - 24), behavior: \"smooth\" });\n }\n}\n\nfunction customProcedureOption(query: string): ComboOption | null {\n const code = query.trim().toUpperCase().replace(/\\s+/g, \"\");\n if (!/^(?:\\d{5}|[A-Z]\\d{4}|ML(?:20[0-5]|PRR))$/.test(code)) return null;\n return { id: code, label: code, detail: \"Use this CPT, HCPCS, or medical-legal code\" };\n}\n\nfunction mergeOptions<T extends { code: string }>(defaults: T[], supplied: T[] | undefined): T[] {\n const map = new Map(defaults.map((item) => [item.code.toUpperCase(), item]));\n supplied?.forEach((item) => map.set(item.code.toUpperCase(), item)); return [...map.values()];\n}\n\nfunction mergeDiagnosisOptions(options: BillSubmissionDiagnosisOption[]): BillSubmissionDiagnosisOption[] {\n return [...new Map(options.map((item) => [item.code.toUpperCase(), item])).values()]\n .sort((left, right) => left.code.localeCompare(right.code, undefined, { numeric: true }));\n}\n\nexport function normalizeClaimsAdministratorName(value: string): string {\n return value.toUpperCase().replace(/\\[[^\\]]*]/g, \" \").replace(/\\b(?:INCORPORATED|INC|COMPANY|CO|CORPORATION|CORP|GROUP|INSURANCE|SERVICES)\\b/g, \" \").replace(/[^A-Z0-9]+/g, \" \").trim().replace(/\\s+/g, \" \");\n}\n\nexport function exactClaimsAdministratorMatch(results: BillReviewPayer[], suppliedName: string): BillReviewPayer | undefined {\n const normalized = normalizeClaimsAdministratorName(suppliedName);\n return results.find((payer) => normalizeClaimsAdministratorName(payer.name) === normalized)\n ?? results.find((payer) => payer.confidence === \"high\" && payer.recommended);\n}\n\nexport function claimsAdministratorRecommendations(results: BillReviewPayer[], limit = 5): BillReviewPayer[] {\n return [...results]\n .sort((left, right) => Number(Boolean(right.recommended)) - Number(Boolean(left.recommended)))\n .slice(0, Math.max(0, limit));\n}\n\nexport function claimNumberPatternMatches(\n pattern: NonNullable<BillReviewPayer[\"claimNumberPatterns\"]>[number],\n claimNumber: string,\n): boolean | null {\n const example = pattern.example?.trim();\n if (example && /9{2,}/.test(example)) {\n const expression = [...example].map((character) => character === \"9\"\n ? \"\\\\d\"\n : character.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"\");\n return new RegExp(`^${expression}$`, \"i\").test(claimNumber.trim());\n }\n return pattern.matches ?? null;\n}\n\n/**\n * Form-state claims administrator for a directory pick. When the administrator\n * requires payer selection it carries the payer (routing payer) choices and\n * requires an explicit user choice; administrators without routing payers stay a\n * plain `{ id, name }` reference.\n */\nexport function chooseClaimsAdministrator(\n payer: Pick<BillReviewPayer, \"id\" | \"name\" | \"payerSelectionRequired\" | \"payers\">,\n selectedPayerId?: string,\n): NonNullable<BillSubmissionInput[\"claim\"][\"claimsAdministrator\"]> {\n if (!payer.payerSelectionRequired) return { id: payer.id, name: payer.name };\n const payers = (payer.payers ?? []).map((option) => ({ ...option }));\n const resolvedPayerId = selectedPayerId && payers.some((option) => option.id === selectedPayerId)\n ? selectedPayerId\n : undefined;\n return {\n id: payer.id,\n name: payer.name,\n payerSelectionRequired: true,\n ...(payers.length ? { payers } : {}),\n ...(resolvedPayerId ? { payerId: resolvedPayerId } : {}),\n };\n}\n\n/**\n * The claims administrator reference exactly as submitted to MindBill: picker\n * metadata (payerSelectionRequired, payers) stays client-side and the chosen\n * payerId rides on the wire only when set.\n */\nexport function submittedClaimsAdministrator(\n administrator: NonNullable<BillSubmissionInput[\"claim\"][\"claimsAdministrator\"]>,\n): { id: string; name: string; payerId?: string } {\n return {\n id: administrator.id ?? \"\",\n name: administrator.name,\n ...(administrator.payerId ? { payerId: administrator.payerId } : {}),\n };\n}\n\nexport type BillSubmissionSectionId =\n | \"header\"\n | \"patient\"\n | \"claim\"\n | \"providers\"\n | \"serviceLines\"\n | \"attachments\"\n | \"actions\";\n\ntype BillSubmissionSections = Record<BillSubmissionSectionId, ReactNode>;\nconst BillSubmissionSectionsContext = createContext<BillSubmissionSections | null>(null);\n\nfunction BillSubmissionSection({ id }: { id: BillSubmissionSectionId }): ReactElement {\n const sections = useContext(BillSubmissionSectionsContext);\n if (!sections) throw new Error(\"Bill submission sections must be rendered inside BillSubmissionForm.\");\n return <>{sections[id]}</>;\n}\n\nexport function BillSubmissionHeader(): ReactElement { return <BillSubmissionSection id=\"header\" />; }\nexport function BillSubmissionPatientSection(): ReactElement { return <BillSubmissionSection id=\"patient\" />; }\nexport function BillSubmissionClaimSection(): ReactElement { return <BillSubmissionSection id=\"claim\" />; }\nexport function BillSubmissionProvidersSection(): ReactElement { return <BillSubmissionSection id=\"providers\" />; }\nexport function BillSubmissionServiceLinesSection(): ReactElement { return <BillSubmissionSection id=\"serviceLines\" />; }\nexport function BillSubmissionAttachmentsSection(): ReactElement { return <BillSubmissionSection id=\"attachments\" />; }\nexport function BillSubmissionActions(): ReactElement { return <BillSubmissionSection id=\"actions\" />; }\n\nexport function BillSubmissionForm({\n initialBill, attachments = EMPTY_ATTACHMENTS, onSubmit, onSubmitted, getSession, sessionEndpoint, apiBaseUrl,\n profileOptions, profileDisplay = \"expanded\",\n fetch: fetchOverride, onListClaimsAdministrators, onSearchClaimsAdministrators, onGetClaimsAdministratorDirectory, claimsAdministratorSources, claimsAdministratorHint,\n diagnosisOptions = [], onSearchDiagnoses,\n onLookupPostalCode, procedureOptions, modifierOptions, taxonomyOptions, deliveryRoutePicker = \"auto\", deliveryRouteDialogTitle = \"Send bill\", attachmentReportTypeMode = \"auto\",\n attachmentReportTypes = BILL_SUBMISSION_REPORT_TYPES, defaultAttachmentReportType,\n appearance, className = \"bill-submission-form\",\n style, disabled = false, submitLabel = \"Submit bill\", heading = \"Bill information\",\n description = \"Review the bill details, add attachments, and submit.\",\n attentionFields = [], attentionMessage,\n children,\n}: BillSubmissionFormProps): ReactElement {\n const [bill, setBill] = useState(() => cloneInitialBill(initialBill));\n const [providerEditing, setProviderEditing] = useState(false);\n const [selectedIds, setSelectedIds] = useState(() => attachments.map((item) => item.id));\n const [removedSourceIds, setRemovedSourceIds] = useState<string[]>([]);\n const [uploads, setUploads] = useState<BillSubmissionUpload[]>([]); const [errors, setErrors] = useState<Record<string, string>>({});\n const [sourceAttachmentReportTypes, setSourceAttachmentReportTypes] = useState<Record<string, string>>(() => Object.fromEntries(attachments.flatMap((item) => item.reportTypeCode ? [[item.id, item.reportTypeCode]] : [])));\n const [validationActive, setValidationActive] = useState(false);\n const [formError, setFormError] = useState<string | null>(null); const [submitting, setSubmitting] = useState(false);\n // The delivery-method dialog staged with the validated bill.\n const [routeDialog, setRouteDialog] = useState<{ delivery: BillDeliveryOptions; value: BillSubmissionFormValue } | null>(null);\n const [routeError, setRouteError] = useState<string | null>(null);\n const [payerResults, setPayerResults] = useState<BillReviewPayer[]>([]); const [payerLoading, setPayerLoading] = useState(false);\n const [payerSuggestions, setPayerSuggestions] = useState<BillReviewPayerSuggestion[]>([]);\n const [selectedPayerMetadata, setSelectedPayerMetadata] = useState<BillReviewPayer | null>(null);\n const [payerLoadingMore, setPayerLoadingMore] = useState(false); const [payerQuery, setPayerQuery] = useState<string | null>(null); const [payerHasMore, setPayerHasMore] = useState(true);\n const [directoryOpen, setDirectoryOpen] = useState(false);\n const [directory, setDirectory] = useState<BillClaimsAdministratorDirectory | null>(null);\n const [directoryLoading, setDirectoryLoading] = useState(false);\n const [directoryError, setDirectoryError] = useState<string | null>(null);\n const [diagnosisResults, setDiagnosisResults] = useState<BillSubmissionDiagnosisOption[]>([]);\n const [diagnosisLoading, setDiagnosisLoading] = useState(false); const [diagnosisLoadingMore, setDiagnosisLoadingMore] = useState(false);\n const [diagnosisQuery, setDiagnosisQuery] = useState<string | null>(null); const [diagnosisHasMore, setDiagnosisHasMore] = useState(true);\n const [postalStatus, setPostalStatus] = useState<string | null>(null); const [dragActive, setDragActive] = useState(false);\n const formRef = useRef<HTMLFormElement>(null); const fileInput = useRef<HTMLInputElement>(null);\n const diagnosisRequest = useRef(0); const diagnosisAppendPending = useRef(false); const payerRequest = useRef(0); const payerAppendPending = useRef(false);\n const procedures = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_PROCEDURES, procedureOptions), [procedureOptions]);\n const orderedClaimsAdministratorSources = useMemo(() => [...(claimsAdministratorSources ?? [])]\n .filter((source) => source.name.trim())\n .sort((left, right) => Number(right.source.toLowerCase() === \"eams\") - Number(left.source.toLowerCase() === \"eams\")), [claimsAdministratorSources]);\n const sourceClaimsAdministratorName = orderedClaimsAdministratorSources[0]?.name.trim() ?? \"\";\n const initializationKey = useMemo(\n () => billSubmissionInitializationKey(initialBill, attachments, sourceClaimsAdministratorName),\n [initialBill, attachments, sourceClaimsAdministratorName],\n );\n const previousInitializationKey = useRef(initializationKey);\n const modifiers = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_MODIFIERS, modifierOptions), [modifierOptions]);\n const taxonomies = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_TAXONOMIES, taxonomyOptions), [taxonomyOptions]);\n const [evaluationType, setEvaluationType] = useState<BillSubmissionEvaluationType>(() => initialEvaluationType(initialBill));\n const connected = !onSubmit;\n const referenceClient = useMemo(() => (getSession || sessionEndpoint || connected) ? createBillReferenceClient({ getSession, sessionEndpoint, apiBaseUrl, fetch: fetchOverride }) : null, [getSession, sessionEndpoint, apiBaseUrl, fetchOverride, connected]);\n const submissionClient = useMemo(() => connected ? createBillSubmissionClient({ getSession, sessionEndpoint, apiBaseUrl, fetch: fetchOverride }) : null, [getSession, sessionEndpoint, apiBaseUrl, fetchOverride, connected]);\n const locked = disabled || submitting;\n const showAttachmentReportTypes = attachmentReportTypeMode === \"visible\" || (attachmentReportTypeMode === \"auto\" && bill.billingMode !== \"med_legal\");\n const forcedAttachmentReportType = showAttachmentReportTypes ? undefined : (defaultAttachmentReportType ?? MED_LEGAL_REPORT_TYPE_CODE);\n const reportTypeOptions = useMemo(() => attachmentReportTypes.map((item) => ({ id: item.code, label: item.code.replace(/^OZ:/, \"\"), detail: item.label })), [attachmentReportTypes]);\n const missingAttachmentReportType = showAttachmentReportTypes && (\n selectedIds.some((id) => !(sourceAttachmentReportTypes[id] || attachments.find((item) => item.id === id)?.reportTypeCode || defaultAttachmentReportType))\n || uploads.some((upload) => !(upload.reportTypeCode || defaultAttachmentReportType))\n );\n\n useEffect(() => {\n if (previousInitializationKey.current === initializationKey) return;\n previousInitializationKey.current = initializationKey;\n setBill(cloneInitialBill(initialBill)); setEvaluationType(initialEvaluationType(initialBill)); setSelectedIds(attachments.map((item) => item.id));\n setRemovedSourceIds([]); setUploads([]); setSourceAttachmentReportTypes(Object.fromEntries(attachments.flatMap((item) => item.reportTypeCode ? [[item.id, item.reportTypeCode]] : []))); setErrors({}); setValidationActive(false); setFormError(null); setDiagnosisResults([]);\n setDiagnosisQuery(null); setDiagnosisHasMore(true); diagnosisRequest.current += 1; diagnosisAppendPending.current = false;\n setPayerResults([]); setPayerSuggestions([]); setSelectedPayerMetadata(null); setPayerQuery(null); setPayerHasMore(true); payerRequest.current += 1; payerAppendPending.current = false;\n }, [initialBill, attachments, initializationKey]);\n useEffect(() => {\n if (!validationActive) return;\n const next = validateBillSubmission(bill).fieldErrors;\n setErrors(missingAttachmentReportType ? { ...next, attachments: \"Select a report type for every attachment.\" } : next);\n }, [bill, missingAttachmentReportType, validationActive]);\n useEffect(() => {\n const root = formRef.current;\n if (!root) return;\n const nodes = Array.from(root.querySelectorAll<HTMLElement>(\"[data-field-path]\"));\n nodes.forEach((node) => node.removeAttribute(\"data-attention\"));\n for (const requested of attentionFields) {\n const normalized = requested.replace(/\\[\\]/g, \"\");\n for (const node of nodes) {\n const actual = node.dataset.fieldPath ?? \"\";\n if (actual === requested || actual === normalized || actual.startsWith(`${normalized}.`) || normalized.startsWith(`${actual}.`)) {\n node.dataset.attention = \"true\";\n }\n }\n }\n }, [attentionFields]);\n\n const addFiles = useCallback((fileList: FileList | File[]) => {\n const files = Array.from(fileList); if (!files.length) return; setFormError(null);\n const invalid = files.find((file) => file.type !== \"application/pdf\" && !file.name.toLowerCase().endsWith(\".pdf\"));\n if (invalid) return setFormError(`${invalid.name} is not a PDF.`);\n const oversized = files.find((file) => file.size > MAX_PDF_BYTES); if (oversized) return setFormError(`${oversized.name} is larger than 25 MB.`);\n const nextBytes = [...uploads.map((item) => item.file), ...files].reduce((sum, file) => sum + file.size, 0);\n if (nextBytes > MAX_UPLOAD_BYTES) return setFormError(\"Attachments exceed the 100 MB upload limit.\");\n if (selectedIds.length + uploads.length + files.length > MAX_DOCUMENTS) return setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n setUploads((current) => [...current, ...files.map((file) => ({ file, documentType: \"other\" as const, ...(defaultAttachmentReportType ? { reportTypeCode: defaultAttachmentReportType } : {}) }))]);\n }, [defaultAttachmentReportType, selectedIds.length, uploads]);\n useEffect(() => {\n const over = (event: DragEvent) => { if (event.dataTransfer?.types.includes(\"Files\")) { event.preventDefault(); setDragActive(true); } };\n const leave = (event: DragEvent) => { if (!event.relatedTarget) setDragActive(false); };\n const drop = (event: DragEvent) => { if (event.dataTransfer?.files.length) { event.preventDefault(); setDragActive(false); addFiles(event.dataTransfer.files); } };\n window.addEventListener(\"dragover\", over); window.addEventListener(\"dragleave\", leave); window.addEventListener(\"drop\", drop);\n return () => { window.removeEventListener(\"dragover\", over); window.removeEventListener(\"dragleave\", leave); window.removeEventListener(\"drop\", drop); };\n }, [addFiles]);\n\n const setAddress = (patch: Partial<BillSubmissionAddress>) => setBill((current) => ({ ...current, patient: { ...current.patient, address: { ...current.patient.address, ...patch } } }));\n const setLine = (index: number, patch: Partial<BillSubmissionInput[\"serviceLines\"][number]>) => setBill((current) => ({ ...current, serviceLines: ensureTrailingBillSubmissionLine(current.serviceLines.map((line, lineIndex) => {\n if (lineIndex !== index) return line;\n const next = { ...line, ...patch };\n const charge = calculateBillSubmissionAllowedAmount(next, procedures);\n if (charge != null) return { ...next, charge };\n if (Object.hasOwn(patch, \"code\")) { const withoutCharge = { ...next }; delete withoutCharge.charge; return withoutCharge; }\n return next;\n })) }));\n const text = (value: string | null | undefined, onChange: (value: string) => void, options: Pick<React.InputHTMLAttributes<HTMLInputElement>, \"placeholder\" | \"maxLength\" | \"type\" | \"inputMode\"> = {}) => <input className=\"mbsf-input\" disabled={locked} value={value ?? \"\"} onChange={(event) => onChange(event.target.value)} {...options} />;\n const loadPayers = useCallback((query: string, append = false): void => {\n const trimmed = query.trim();\n const list = onListClaimsAdministrators ?? referenceClient?.listClaimsAdministrators;\n const legacySearch = onSearchClaimsAdministrators ?? referenceClient?.searchClaimsAdministrators;\n if (!list && !legacySearch) return;\n const continuing = append && payerQuery === trimmed;\n if (continuing && (!payerHasMore || payerAppendPending.current)) return;\n const offset = continuing ? payerResults.length : 0;\n const request = ++payerRequest.current;\n if (continuing) { payerAppendPending.current = true; setPayerLoadingMore(true); }\n else { setPayerLoading(true); setPayerLoadingMore(false); setPayerQuery(trimmed); setPayerHasMore(true); }\n const page: Promise<BillReviewPayerPage> = list\n ? list({ query: trimmed, claimNumber: bill.claim.claimNumber, ...(sourceClaimsAdministratorName ? { sourceClaimsAdministratorName } : {}), ...(bill.claim.employer ? { employerName: bill.claim.employer } : {}), limit: PAYER_PAGE_SIZE, offset })\n : legacySearch!(trimmed, bill.claim.claimNumber).then((results): BillReviewPayerPage => ({ results, total: results.length }));\n void page.then((result) => {\n if (request !== payerRequest.current) return;\n setPayerResults((current) => {\n const combined = continuing ? [...current, ...result.results] : result.results;\n return [...new Map(combined.map((payer) => [payer.id, payer])).values()];\n });\n if (!continuing) setPayerSuggestions(result.suggestions ?? []);\n setPayerHasMore(result.nextOffset != null ? result.nextOffset > offset : offset + result.results.length < result.total);\n }).catch((caught: unknown) => {\n if (request === payerRequest.current) setFormError(caught instanceof Error ? caught.message : \"Claims administrator search is unavailable.\");\n }).finally(() => {\n if (request !== payerRequest.current) return;\n payerAppendPending.current = false; setPayerLoading(false); setPayerLoadingMore(false);\n });\n }, [bill.claim.claimNumber, bill.claim.employer, onListClaimsAdministrators, onSearchClaimsAdministrators, payerHasMore, payerQuery, payerResults.length, referenceClient, sourceClaimsAdministratorName]);\n const searchPayers = (query: string) => {\n setSelectedPayerMetadata(null);\n setBill((current) => {\n const selected = current.claim.claimsAdministrator;\n if (selected?.id && selected.name === query) return current;\n return { ...current, claim: { ...current.claim, claimsAdministrator: { name: query } } };\n });\n loadPayers(query);\n };\n const loadDiagnoses = (query: string, append = false) => {\n const trimmed = query.trim();\n const search = onSearchDiagnoses ?? referenceClient?.searchDiagnosisCodes;\n if (!search) { setDiagnosisResults(mergeDiagnosisOptions(diagnosisOptions)); setDiagnosisHasMore(false); setDiagnosisQuery(trimmed); return; }\n const continuing = append && diagnosisQuery === trimmed;\n if (continuing && (!diagnosisHasMore || diagnosisAppendPending.current)) return;\n const offset = continuing ? diagnosisResults.length : 0;\n const request = ++diagnosisRequest.current;\n if (continuing) { diagnosisAppendPending.current = true; setDiagnosisLoadingMore(true); }\n else { setDiagnosisLoading(true); setDiagnosisLoadingMore(false); setDiagnosisQuery(trimmed); setDiagnosisHasMore(true); }\n void search(trimmed, DIAGNOSIS_PAGE_SIZE, offset).then((page) => {\n if (request !== diagnosisRequest.current) return;\n setDiagnosisResults((current) => mergeDiagnosisOptions(continuing ? [...current, ...page] : page));\n setDiagnosisHasMore(page.length >= DIAGNOSIS_PAGE_SIZE);\n }).catch(() => {\n if (request === diagnosisRequest.current && !continuing) setDiagnosisResults([]);\n }).finally(() => {\n if (request !== diagnosisRequest.current) return;\n diagnosisAppendPending.current = false; setDiagnosisLoading(false); setDiagnosisLoadingMore(false);\n });\n };\n const searchDiagnoses = (query: string) => loadDiagnoses(query);\n const diagnosisChoices = useMemo(() => mergeDiagnosisOptions([...diagnosisOptions, ...diagnosisResults]), [diagnosisOptions, diagnosisResults]);\n const updatePostalCode = (postalCode: string) => {\n setAddress({ postalCode }); setPostalStatus(null); const lookup = onLookupPostalCode ?? referenceClient?.lookupPostalCode;\n if (!lookup || !/^\\d{5}$/.test(postalCode)) return;\n setPostalStatus(\"Looking up ZIP…\"); void lookup(postalCode).then((place) => { if (!place) return setPostalStatus(\"ZIP not found\"); setAddress({ city: place.city, state: place.state.toUpperCase() }); setPostalStatus(`${place.city}, ${place.state.toUpperCase()} filled from ZIP`); }).catch(() => setPostalStatus(\"ZIP lookup unavailable\"));\n };\n const changeEvaluation = (type: BillSubmissionEvaluationType) => {\n setEvaluationType(type); setBill((current) => ({ ...current, diagnoses: applyBillSubmissionEvaluationDiagnoses(current.diagnoses, type), renderingProvider: { ...current.renderingProvider, isAme: type === \"ame\", isQme: type !== \"ame\", ...(type === \"psych_qme\" && !current.renderingProvider?.specialty ? { specialty: \"Psychiatry\" } : {}) }, serviceLines: applyBillSubmissionEvaluationModifiers(current.serviceLines, type) }));\n };\n const lineCharge = (line: BillSubmissionInput[\"serviceLines\"][number]) => calculateBillSubmissionAllowedAmount(line, procedures) ?? (Number.isFinite(line.charge) ? Number(line.charge) : undefined);\n const total = submittedLines(bill.serviceLines).reduce((sum, line) => sum + (lineCharge(line) ?? 0), 0);\n\n async function submit(): Promise<void> {\n const clean: BillSubmissionInput = { ...cloneBill(bill), serviceLines: submittedLines(bill.serviceLines).map((line) => { const charge = lineCharge(line); return charge == null ? line : { ...line, charge }; }) };\n const validation = validateBillSubmission(clean);\n const fieldErrors = missingAttachmentReportType ? { ...validation.fieldErrors, attachments: \"Select a report type for every attachment.\" } : validation.fieldErrors;\n setValidationActive(true); setErrors(fieldErrors); setFormError(null);\n if (Object.keys(fieldErrors).length) {\n const count = Object.keys(fieldErrors).length;\n const first = Object.values(fieldErrors)[0];\n setFormError(`Fix ${count} highlighted field${count === 1 ? \"\" : \"s\"} before submitting. ${first}`);\n window.requestAnimationFrame(() => { if (formRef.current) focusFirstInvalid(formRef.current); });\n return;\n }\n if (selectedIds.length + uploads.length > MAX_DOCUMENTS) return setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n const administrator = clean.claim.claimsAdministrator;\n const complete = {\n ...clean,\n ...(clean.billingProvider?.savedProviderId ? { billingProvider: { savedProviderId: clean.billingProvider.savedProviderId } } : {}),\n ...(clean.billingProvider?.sourceBillId ? { billingProvider: { sourceBillId: clean.billingProvider.sourceBillId } } : {}),\n claim: {\n ...clean.claim,\n ...(administrator ? { claimsAdministrator: submittedClaimsAdministrator(administrator) } : {}),\n },\n } as CompleteBillSubmissionInput;\n const value: BillSubmissionFormValue = { bill: complete, sourceAttachmentIds: selectedIds, sourceAttachmentReportTypes, uploads };\n // Show the delivery-method dialog (e-bill / email / fax / mail with\n // recipient overrides) before either connected or host-owned submission.\n // Required mode deliberately fails closed so correction workflows cannot\n // silently reuse the previous route when previewing the newly selected\n // claims administrator fails.\n if (deliveryRoutePicker !== \"off\" && referenceClient) {\n setSubmitting(true);\n try {\n const delivery = await referenceClient.getDeliveryPreview({\n claimsAdministratorId: complete.claim.claimsAdministrator.id,\n ...(complete.claim.claimsAdministrator.payerId ? { payerId: complete.claim.claimsAdministrator.payerId } : {}),\n ...(complete.claim.injuryState ? { injuryState: complete.claim.injuryState } : {}),\n });\n setSubmitting(false);\n setRouteError(null);\n setRouteDialog({ delivery, value });\n return;\n } catch (caught) {\n setSubmitting(false);\n if (deliveryRoutePicker === \"required\") {\n setFormError(caught instanceof Error ? caught.message : \"Delivery routes could not be loaded. Nothing was sent.\");\n return;\n }\n }\n }\n if (deliveryRoutePicker === \"required\") {\n setFormError(\"Delivery confirmation is unavailable. Nothing was sent.\");\n return;\n }\n await performSubmit(value);\n }\n\n async function performSubmit(value: BillSubmissionFormValue): Promise<void> {\n setSubmitting(true);\n try {\n if (onSubmit) {\n await onSubmit(value);\n setRouteDialog(null);\n setRouteError(null);\n return;\n }\n if (!submissionClient) throw new Error(\"The connected billing client is unavailable.\");\n const documents = await prepareBillSubmissionDocuments({\n attachments,\n selectedIds,\n uploads,\n reportTypeCodeByAttachmentId: sourceAttachmentReportTypes,\n ...(forcedAttachmentReportType ? { defaultReportTypeCode: forcedAttachmentReportType } : {}),\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n });\n const result = await submissionClient.submitBill({\n bill: value.bill,\n ...(value.submission ? { submission: value.submission } : {}),\n documents,\n });\n setRouteDialog(null);\n setRouteError(null);\n await onSubmitted?.(result);\n } catch (caught) {\n const message = caught instanceof Error ? caught.message : \"Unable to submit the bill.\";\n if (value.submission) setRouteError(message); else setFormError(message);\n }\n finally { setSubmitting(false); }\n }\n\n const claimsAdministratorError = errors[\"claim.claimsAdministrator\"];\n const choosePayer = (payer: BillReviewPayer, selectedPayerId?: string) => {\n setSelectedPayerMetadata(payer);\n setBill((current) => ({ ...current, claim: { ...current.claim, claimsAdministrator: chooseClaimsAdministrator(payer, selectedPayerId) } }));\n };\n const administrator = bill.claim.claimsAdministrator;\n const displayedPayerMetadata = selectedPayerMetadata?.id === administrator?.id ? selectedPayerMetadata : null;\n const displayedClaimPatterns = (displayedPayerMetadata?.claimNumberPatterns ?? []).map((pattern) => ({\n ...pattern,\n matches: claimNumberPatternMatches(pattern, bill.claim.claimNumber),\n }));\n const evaluatedClaimPatterns = displayedClaimPatterns.filter((pattern) => pattern.matches != null);\n const claimNumberMatches = evaluatedClaimPatterns.some((pattern) => pattern.matches);\n const claimNumberPatternState = evaluatedClaimPatterns.length ? (claimNumberMatches ? \"match\" : \"warning\") : null;\n const subpayorOptions = administrator?.payerSelectionRequired ? administrator.payers ?? [] : [];\n const subpayorError = errors[\"claim.claimsAdministrator.payerId\"];\n const selectedSubpayor = subpayorOptions.find((option) => option.id === administrator?.payerId);\n const chooseSubpayor = (payerId: string) => setBill((current) => current.claim.claimsAdministrator\n ? { ...current, claim: { ...current.claim, claimsAdministrator: { ...current.claim.claimsAdministrator, payerId } } }\n : current);\n const openAdministratorDirectory = async (): Promise<void> => {\n if (!administrator?.id) return;\n setDirectoryOpen(true); setDirectory(null); setDirectoryError(null); setDirectoryLoading(true);\n try {\n const load = onGetClaimsAdministratorDirectory ?? referenceClient?.getClaimsAdministratorDirectory;\n if (!load) throw new Error(\"Claims administrator details are unavailable.\");\n setDirectory(await load(administrator.id, bill.claim.injuryState));\n } catch (caught) {\n setDirectoryError(caught instanceof Error ? caught.message : \"Unable to load claims administrator details.\");\n } finally {\n setDirectoryLoading(false);\n }\n };\n\n const headerSection = <div className=\"mbsf-head\"><div><h3 className=\"mbsf-title\">{heading}</h3><p className=\"mbsf-copy\">{description}</p></div><span className=\"mbsf-required\"><RequiredMark /> Required</span></div>;\n\n const patientSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Patient</legend><div className=\"mbsf-grid\">\n <Field path=\"patient.firstName\" label=\"First name\" required error={errors[\"patient.firstName\"]}>{text(bill.patient.firstName, (firstName) => setBill((c) => ({ ...c, patient: { ...c.patient, firstName } })))}</Field>\n <Field path=\"patient.lastName\" label=\"Last name\" required error={errors[\"patient.lastName\"]}>{text(bill.patient.lastName, (lastName) => setBill((c) => ({ ...c, patient: { ...c.patient, lastName } })))}</Field>\n <Field label=\"Middle name\">{text(bill.patient.middleName, (middleName) => setBill((c) => ({ ...c, patient: { ...c.patient, middleName } })))}</Field>\n <Field label=\"Phone (optional)\">{text(bill.patient.phone, (phone) => setBill((c) => ({ ...c, patient: { ...c.patient, phone } })), { type: \"tel\" })}</Field>\n <Field path=\"patient.dateOfBirth\" label=\"Date of birth\" required error={errors[\"patient.dateOfBirth\"]}><TextDateInput ariaLabel=\"Date of birth\" value={bill.patient.dateOfBirth} disabled={locked} required onChange={(dateOfBirth) => setBill((c) => ({ ...c, patient: { ...c.patient, dateOfBirth } }))} /></Field>\n <Field path=\"patient.address.line1\" label=\"Address\" required span error={errors[\"patient.address.line1\"]}>{text(bill.patient.address.line1, (line1) => setAddress({ line1 }), { placeholder: \"Street address\" })}</Field>\n <Field path=\"patient.address.postalCode\" label=\"ZIP\" required error={errors[\"patient.address.postalCode\"]}>{text(bill.patient.address.postalCode, updatePostalCode, { maxLength: 10 })}{postalStatus ? <small className=\"mbsf-help\">{postalStatus}</small> : null}</Field>\n <Field path=\"patient.address.city\" label=\"City\" required error={errors[\"patient.address.city\"]}>{text(bill.patient.address.city, (city) => setAddress({ city }))}</Field>\n <Field path=\"patient.address.state\" label=\"State\" required error={errors[\"patient.address.state\"]}>{text(bill.patient.address.state, (state) => setAddress({ state: state.toUpperCase() }), { maxLength: 2 })}</Field>\n </div></fieldset>;\n\n const claimSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Injury & claim</legend><div className=\"mbsf-grid\">\n <Field path=\"service.date\" label=\"Date of service\" required error={errors[\"service.date\"]}><TextDateInput ariaLabel=\"Date of service\" value={bill.service.date} disabled={locked} required onChange={(date) => setBill((c) => ({ ...c, service: { ...c.service, date } }))} /></Field>\n <Field label=\"Treatment authorization # (optional)\">{text(bill.service.authorizationNumber, (authorizationNumber) => setBill((c) => ({ ...c, service: { ...c.service, authorizationNumber } })), { placeholder: \"Utilization-review authorization number\" })}<small className=\"mbsf-help\">Rides on the bill as CMS-1500 Box 23 / 837 REF*G1.</small></Field>\n <Field path=\"claim.dateOfInjury\" label=\"Date of injury\" required error={errors[\"claim.dateOfInjury\"]}><TextDateInput ariaLabel=\"Date of injury\" value={bill.claim.dateOfInjury} disabled={locked} required onChange={(dateOfInjury) => setBill((c) => ({ ...c, claim: { ...c.claim, dateOfInjury } }))} /></Field>\n <Field path=\"claim.employer\" label=\"Employer name\" required error={errors[\"claim.employer\"]}>{text(bill.claim.employer, (employer) => setBill((c) => ({ ...c, claim: { ...c.claim, employer } })))}</Field>\n <Field path=\"claim.claimNumber\" label=\"Claim number\" required error={errors[\"claim.claimNumber\"]}>{text(bill.claim.claimNumber, (claimNumber) => setBill((c) => ({ ...c, claim: { ...c.claim, claimNumber } })))}\n {displayedClaimPatterns.length ? <div className=\"mbsf-claim-patterns\" data-state={claimNumberPatternState ?? undefined} role=\"status\">\n {claimNumberPatternState === \"match\" ? <strong>✓ Matches a known claim number pattern</strong> : claimNumberPatternState === \"warning\" ? <strong>⚠ Does not match the known claim number patterns</strong> : <strong>Known claim number patterns</strong>}\n <span className=\"mbsf-claim-pattern-list\">{displayedClaimPatterns.map((pattern) => `${pattern.pattern}${pattern.example ? ` (example: ${pattern.example})` : \"\"}`).join(\" · \")}</span>\n </div> : null}\n </Field>\n <Field label=\"WCAB / ADJ number (optional)\">{text(bill.claim.adjNumber, (adjNumber) => setBill((c) => ({ ...c, claim: { ...c.claim, adjNumber } })))}</Field>\n <Field path=\"claim.claimsAdministrator\" label=\"Claims administrator\" required span error={claimsAdministratorError} invalid={!administrator?.id}>\n <ComboBox ariaLabel=\"Claims administrator\" invalid={Boolean(claimsAdministratorError) || !administrator?.id} disabled={locked} loading={payerLoading} loadingMore={payerLoadingMore} filterOptions={false} value={administrator?.name ?? \"\"} placeholder=\"Browse or search claims administrators…\" options={payerResults.map((payer) => { const patternDetail = payer.claimNumberPatterns?.map((pattern) => `${pattern.pattern}${pattern.example ? ` (example: ${pattern.example})` : \"\"}`).join(\" · \") ?? payer.claimNumberHint ?? \"\"; return { id: payer.id, label: payer.name, detail: [payer.aliases?.length ? `Also known as ${payer.aliases.join(\", \")}` : \"\", patternDetail].filter(Boolean).join(\" · \") || \"Claims administrator\", ...(payer.affiliatedEntities?.length ? { affiliatedEntities: payer.affiliatedEntities } : {}), ...(payer.route ? { trailing: payer.route } : {}) }; })} onOpen={() => { if (payerQuery !== \"\") loadPayers(\"\"); }} onQuery={searchPayers} onEndReached={() => loadPayers(payerQuery ?? \"\", true)} onSelect={(option) => choosePayer(payerResults.find((payer) => payer.id === option.id) ?? { id: option.id, name: option.label })} />\n {orderedClaimsAdministratorSources.length ? <div className=\"mbsf-source-evidence\">{orderedClaimsAdministratorSources.map((source, index) => <span key={`${source.source}-${source.name}-${index}`}>{source.url ? <a href={source.url} target=\"_blank\" rel=\"noopener noreferrer\">{source.label}</a> : <strong>{source.label}</strong>}: <q>{source.name}</q></span>)}</div> : null}\n {claimsAdministratorHint ? <small className=\"mbsf-help\">Claims administrator in your system: {claimsAdministratorHint}</small> : null}\n {payerSuggestions.length ? <div className=\"mbsf-suggestions\"><strong>Suggested:</strong>{payerSuggestions.slice(0, 5).map((suggestion) => { const suggestedSubpayor = suggestion.payers?.find((option) => option.id === suggestion.selectedPayerId); return <button className=\"mbsf-suggestion\" type=\"button\" key={`${suggestion.id}-${suggestion.selectedPayerId ?? \"admin\"}`} title={suggestion.reason} onClick={() => choosePayer(suggestion, suggestion.selectedPayerId)}>{suggestion.name}{suggestedSubpayor ? ` · ${suggestedSubpayor.label}` : \"\"}</button>; })}</div> : null}\n {administrator?.id ? <button className=\"mbsf-directory-link\" type=\"button\" onClick={() => { void openAdministratorDirectory(); }}>View contacts and routing details for {administrator.name}</button> : <small className=\"mbsf-help\">Search the directory and choose a claims administrator.</small>}\n </Field>\n {administrator?.payerSelectionRequired ? <Field path=\"claim.claimsAdministrator.payerId\" label=\"Payer\" required span error={subpayorError}>\n {subpayorOptions.length ? <ComboBox ariaLabel=\"Payer\" invalid={Boolean(subpayorError)} disabled={locked} value={selectedSubpayor?.label ?? \"\"} placeholder=\"Select the payer named on the claim or report…\" options={subpayorOptions.map((option) => ({ id: option.id, label: option.label, ...(option.hint ? { detail: option.hint } : {}), ...(option.affiliatedEntities?.length ? { affiliatedEntities: option.affiliatedEntities } : {}) }))} onSelect={(option) => chooseSubpayor(option.id)} /> : <div className=\"mbsf-error\" role=\"alert\">No routing payers are available for {administrator.name}. Electronic submission remains blocked; contact support to correct the payer directory.</div>}\n {selectedSubpayor ? <div className=\"mbsf-payer-status\" role=\"status\"><strong>✓ Payer set:</strong> {selectedSubpayor.label}</div> : <small className=\"mbsf-help\">{administrator.name} administers multiple payers. Choose the payer named on the claim or report so MindBill can route the bill correctly.</small>}\n </Field> : null}\n <Field label=\"Injury description (optional)\" span>{text(bill.claim.description, (description) => setBill((c) => ({ ...c, claim: { ...c.claim, description } })))}</Field>\n <Field path=\"diagnoses\" label=\"Diagnosis codes (ICD-10)\" required span error={errors.diagnoses}>\n <div className=\"mbsf-quick-picks\" aria-label=\"Common diagnosis codes\">{BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS.map((option) => { const selected = (bill.diagnoses ?? []).includes(option.code); return <button className=\"mbsf-quick-pick\" data-selected={selected} type=\"button\" key={option.code} aria-pressed={selected} title={`${option.code} — ${option.description}`} onClick={() => setBill((current) => ({ ...current, diagnoses: selected ? (current.diagnoses ?? []).filter((code) => code !== option.code) : [...new Set([...(current.diagnoses ?? []), option.code])] }))}>{selected ? \"✓\" : \"+\"} {option.label}</button>; })}</div>\n <div className=\"mbsf-chips\">{(bill.diagnoses ?? []).map((code) => { const option = [...BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS, ...diagnosisChoices].find((item) => item.code === code); return <span className=\"mbsf-chip\" key={code}><strong>{code}</strong>{option?.description ? ` ${option.description}` : \"\"}<button type=\"button\" aria-label={`Remove ${code}`} onClick={() => setBill((c) => ({ ...c, diagnoses: (c.diagnoses ?? []).filter((item) => item !== code) }))}>×</button></span>; })}</div>\n <ComboBox ariaLabel=\"Add diagnosis code\" invalid={Boolean(errors.diagnoses)} disabled={locked} loading={diagnosisLoading} loadingMore={diagnosisLoadingMore} value=\"\" placeholder={(bill.diagnoses?.length ?? 0) ? `${bill.diagnoses!.length} selected — add more…` : \"Search ICD-10 codes…\"} options={diagnosisChoices.filter((item) => !(bill.diagnoses ?? []).includes(item.code)).map((item) => ({ id: item.code, label: item.code, detail: item.description }))} onOpen={() => { if (diagnosisQuery !== \"\") loadDiagnoses(\"\"); }} onQuery={searchDiagnoses} onEndReached={() => loadDiagnoses(diagnosisQuery ?? \"\", true)} onSelect={(option) => setBill((c) => ({ ...c, diagnoses: [...new Set([...(c.diagnoses ?? []), option.id])] }))} />\n </Field>\n </div></fieldset>;\n\n const compactProviders = profileDisplay === \"compact\";\n const providerErrors = Object.keys(errors).some((path) => /^(billingProvider|renderingProvider|serviceLocation)\\./.test(path));\n const providersSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Providers & place of service</legend>\n <div className=\"mbsf-grid\">\n {([ [\"billingProviders\", \"billingProvider\", \"Billing provider\"], [\"renderingProviders\", \"renderingProvider\", \"Rendering provider\"], [\"serviceLocations\", \"serviceLocation\", \"Service location\"] ] as const).map(([collection, key, label]) => {\n const options = profileOptions?.[collection];\n return options?.length ? <Field key={key} label={`Saved ${label.toLowerCase()}`}>\n <ComboBox ariaLabel={`Saved ${label.toLowerCase()}`} disabled={locked} value=\"\" placeholder={bill[key]?.name || `Choose ${label.toLowerCase()}…`} options={options.map(({ id, label: optionLabel }) => ({ id, label: optionLabel }))} onSelect={({ id }) => {\n const option = options.find((candidate) => candidate.id === id);\n if (option) setBill((current) => ({ ...current, [key]: structuredClone(option.value) }));\n }} />\n <small className=\"mbsf-help\">{bill[key]?.name ? `Current: ${bill[key]?.name}` : \"Select a profile or enter details below.\"}</small>\n </Field> : null;\n })}\n </div>\n {compactProviders ? <p className=\"mbsf-help\">{[bill.billingProvider?.name, bill.renderingProvider?.name, bill.serviceLocation?.name].filter(Boolean).join(\" · \") || \"Enter provider details or choose saved profiles.\"}</p> : null}\n <details open={!compactProviders || providerEditing || providerErrors}>\n <summary hidden={!compactProviders} onClick={(event) => { event.preventDefault(); setProviderEditing((current) => !current); }} style={{ cursor: \"pointer\", marginBottom: 12 }}>Review or edit provider details</summary>\n <div className=\"mbsf-grid\">\n <h4 className=\"mbsf-subhead\">Billing provider</h4>\n {bill.billingProvider?.savedProviderId || bill.billingProvider?.sourceBillId ? <div className=\"mbsf-span\"><p>Using {bill.billingProvider.sourceBillId ? \"this bill’s original\" : \"saved\"} billing provider: {bill.billingProvider.name}. SSN ending in {bill.billingProvider.taxIdLast4 || \"••••\"} stays on MindBill’s server.</p><button type=\"button\" className=\"mbsf-secondary\" disabled={locked} onClick={() => setBill((c) => {\n const billingProvider = { ...c.billingProvider, taxIdType: \"EIN\" as const, taxId: \"\" };\n delete billingProvider.savedProviderId;\n delete billingProvider.sourceBillId;\n delete billingProvider.taxIdLast4;\n return { ...c, billingProvider };\n })}>Enter different billing provider details</button></div> : null}\n <fieldset disabled={locked || Boolean(bill.billingProvider?.savedProviderId || bill.billingProvider?.sourceBillId)} style={{ display: \"contents\" }}>\n <Field path=\"billingProvider.name\" label=\"Billing provider name\" required error={errors[\"billingProvider.name\"]}>{text(bill.billingProvider?.name, (name) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, name } })))}</Field>\n <Field label=\"Tax ID type\"><select className=\"mbsf-select\" value={bill.billingProvider?.taxIdType ?? \"EIN\"} onChange={(event) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, taxIdType: event.target.value as \"EIN\" | \"SSN\", taxId: \"\" } }))}><option value=\"EIN\">EIN (business)</option><option value=\"SSN\">SSN (individual)</option></select></Field>\n <Field path=\"billingProvider.taxId\" label={bill.billingProvider?.taxIdType === \"SSN\" ? \"SSN\" : \"EIN\"} required error={errors[\"billingProvider.taxId\"]}><input className=\"mbsf-input\" autoComplete=\"off\" type={bill.billingProvider?.taxIdType === \"SSN\" ? \"password\" : \"text\"} inputMode=\"numeric\" value={bill.billingProvider?.taxId ?? \"\"} onChange={(event) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, taxId: event.target.value } }))} /></Field>\n <Field path=\"billingProvider.npi\" label=\"Billing provider NPI\" required error={errors[\"billingProvider.npi\"]}>{text(bill.billingProvider?.npi, (npi) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, npi } })), { inputMode: \"numeric\", maxLength: 10 })}</Field>\n <Field path=\"billingProvider.phone\" label=\"Billing provider phone\" required error={errors[\"billingProvider.phone\"]}>{text(bill.billingProvider?.phone, (phone) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, phone } })), { type: \"tel\" })}</Field>\n <Field path=\"billingProvider.address.line1\" label=\"Billing address line 1\" required span error={errors[\"billingProvider.address.line1\"]}>{text(bill.billingProvider?.address?.line1, (line1) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1, line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field label=\"Billing address line 2 (optional)\" span>{text(bill.billingProvider?.address?.line2, (line2) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2, city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"billingProvider.address.city\" label=\"Billing city\" required error={errors[\"billingProvider.address.city\"]}>{text(bill.billingProvider?.address?.city, (city) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city, state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"billingProvider.address.state\" label=\"Billing state\" required error={errors[\"billingProvider.address.state\"]}>{text(bill.billingProvider?.address?.state, (state) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: state.toUpperCase(), postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })), { maxLength: 2 })}</Field>\n <Field path=\"billingProvider.address.postalCode\" label=\"Billing ZIP\" required error={errors[\"billingProvider.address.postalCode\"]}>{text(bill.billingProvider?.address?.postalCode, (postalCode) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode } } })))}</Field>\n </fieldset>\n <h4 className=\"mbsf-subhead\">Rendering provider</h4>\n <Field path=\"renderingProvider.name\" label=\"Rendering provider name\" required error={errors[\"renderingProvider.name\"]}>{text(bill.renderingProvider?.name, (name) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, name } })))}</Field>\n <Field path=\"renderingProvider.npi\" label=\"Rendering provider NPI\" required error={errors[\"renderingProvider.npi\"]}>{text(bill.renderingProvider?.npi, (npi) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, npi } })), { inputMode: \"numeric\", maxLength: 10 })}</Field>\n <Field path=\"renderingProvider.taxonomy\" label=\"Rendering taxonomy\" required error={errors[\"renderingProvider.taxonomy\"]}><ComboBox ariaLabel=\"Rendering taxonomy\" invalid={Boolean(errors[\"renderingProvider.taxonomy\"])} disabled={locked} preserveValueOnOpen value={bill.renderingProvider?.taxonomy ?? \"\"} placeholder=\"Search specialty name or taxonomy code…\" options={taxonomies.map((item) => ({ id: item.code, label: item.description, detail: item.code }))} createOption={(query) => { const code = query.trim().toUpperCase(); return /^[A-Z0-9]{10}$/.test(code) ? { id: code, label: code, detail: \"Use this taxonomy code\" } : null; }} onSelect={(option) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, taxonomy: option.id } }))} /><small className=\"mbsf-help\">Search by specialty name or 10-character taxonomy code.</small></Field>\n <h4 className=\"mbsf-subhead\">Service facility</h4>\n <Field path=\"serviceLocation.placeOfServiceCode\" label=\"Place of service code\" required error={errors[\"serviceLocation.placeOfServiceCode\"]}>{text(bill.serviceLocation?.placeOfServiceCode, (placeOfServiceCode) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, placeOfServiceCode } })), { inputMode: \"numeric\", maxLength: 2, placeholder: \"11\" })}</Field>\n <Field path=\"serviceLocation.address.line1\" label=\"Service address line 1\" required span error={errors[\"serviceLocation.address.line1\"]}>{text(bill.serviceLocation?.address?.line1, (line1) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1, line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field label=\"Service address line 2 (optional)\" span>{text(bill.serviceLocation?.address?.line2, (line2) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2, city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"serviceLocation.address.city\" label=\"Service city\" required error={errors[\"serviceLocation.address.city\"]}>{text(bill.serviceLocation?.address?.city, (city) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city, state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"serviceLocation.address.state\" label=\"Service state\" required error={errors[\"serviceLocation.address.state\"]}>{text(bill.serviceLocation?.address?.state, (state) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: state.toUpperCase(), postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })), { maxLength: 2 })}</Field>\n <Field path=\"serviceLocation.address.postalCode\" label=\"Service ZIP\" required error={errors[\"serviceLocation.address.postalCode\"]}>{text(bill.serviceLocation?.address?.postalCode, (postalCode) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode } } })))}</Field>\n </div></details></fieldset>;\n\n const serviceLinesSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Evaluation & service lines</legend>\n <p className=\"mbsf-help\">Sets the evaluator/specialty modifier on medical-legal evaluation lines.</p>\n <div className=\"mbsf-segments\" role=\"group\" aria-label=\"Evaluation type\">{([ [\"qme\", \"QME (default)\"], [\"ame\", \"AME\"], [\"psych_qme\", \"Psych QME\"] ] as const).map(([type, label]) => <button className=\"mbsf-segment\" type=\"button\" key={type} aria-pressed={evaluationType === type} onClick={() => changeEvaluation(type)}>{label}</button>)}</div>\n <p className=\"mbsf-help\">{evaluationType === \"ame\" ? \"Agreed Medical Evaluator — eligible ML evaluation codes default to modifier -94.\" : evaluationType === \"psych_qme\" ? \"Psychiatric QME — eligible ML evaluation codes default to modifier -96 (-95 for ML200).\" : \"Qualified Medical Evaluator — eligible ML evaluation codes default to modifier -95.\"}</p>\n <div className=\"mbsf-lines\" data-field-path=\"serviceLines\" data-invalid={Boolean(errors.serviceLines)}><div className=\"mbsf-line-head\"><span>Procedure code<RequiredMark /></span><span>Modifiers</span><span>Dx</span><span>Units<RequiredMark /></span><span>Allowed</span><span /> </div>\n {bill.serviceLines.map((line, index) => <div className=\"mbsf-line\" key={index}>\n <div data-label=\"Procedure code\" data-field-path={`serviceLines.${index}.code`} data-invalid={Boolean(errors[`serviceLines.${index}.code`])}><ComboBox ariaLabel={`Procedure code ${index + 1}`} invalid={Boolean(errors[`serviceLines.${index}.code`])} disabled={locked} value={line.code} placeholder=\"Search or enter code…\" options={procedures.map((item) => ({ id: item.code, label: item.code, detail: item.description }))} createOption={customProcedureOption} onSelect={(option) => { const auto = evaluationModifier(evaluationType, option.id); setLine(index, { code: option.id, ...(auto ? { modifiers: [auto, ...(line.modifiers ?? []).filter((item) => ![\"94\", \"95\", \"96\"].includes(item.replace(/^-/, \"\")))] } : line.modifiers ? { modifiers: line.modifiers } : {}) }); }} />{line.code ? <small className=\"mbsf-help\">{procedures.find((item) => item.code === line.code)?.description ?? \"Custom CPT, HCPCS, or medical-legal code\"}</small> : null}{errors[`serviceLines.${index}.code`] ? <small className=\"mbsf-error\" role=\"alert\">{errors[`serviceLines.${index}.code`]}</small> : null}</div>\n <div data-label=\"Modifiers\"><div className=\"mbsf-chips\">{(line.modifiers ?? []).map((modifier) => <span className=\"mbsf-chip\" key={modifier}>−{modifier.replace(/^-/, \"\")}<button type=\"button\" aria-label={`Remove modifier ${modifier}`} onClick={() => setLine(index, { modifiers: (line.modifiers ?? []).filter((item) => item !== modifier) })}>×</button></span>)}</div><ComboBox ariaLabel={`Modifiers ${index + 1}`} disabled={locked} value=\"\" placeholder={(line.modifiers?.length ?? 0) ? `${line.modifiers!.length} modifier${line.modifiers!.length === 1 ? \"\" : \"s\"}` : \"Add modifiers…\"} options={modifiers.filter((item) => !(line.modifiers ?? []).includes(item.code)).map((item) => ({ id: item.code, label: `−${item.code}`, detail: item.description }))} onSelect={(option) => setLine(index, { modifiers: [...new Set([...(line.modifiers ?? []), option.id])] })} /></div>\n <div data-label=\"Dx\"><div className=\"mbsf-dx\">{(bill.diagnoses ?? []).length ? (bill.diagnoses ?? []).map((code, dxIndex) => { const pointer = dxIndex + 1; const active = (line.diagnosisPointers ?? []).includes(pointer); return <button type=\"button\" key={code} className=\"mbsf-dx-chip\" data-active={active} title={`${String.fromCharCode(64 + pointer)} — ${code}`} aria-pressed={active} aria-label={`Point line ${index + 1} at diagnosis ${code}`} onClick={() => setLine(index, { diagnosisPointers: active ? (line.diagnosisPointers ?? []).filter((item) => item !== pointer) : [...(line.diagnosisPointers ?? []), pointer].sort((left, right) => left - right) })}>{String.fromCharCode(64 + pointer)}</button>; }) : <small className=\"mbsf-help\">Add diagnoses above</small>}</div></div>\n <div data-label=\"Units\" data-field-path={`serviceLines.${index}.units`} data-invalid={Boolean(errors[`serviceLines.${index}.units`])}><input className=\"mbsf-input\" aria-label={`Units ${index + 1}`} aria-invalid={Boolean(errors[`serviceLines.${index}.units`])} type=\"number\" min={1} value={line.units ?? 1} onChange={(event) => setLine(index, { units: Number(event.target.value) })} />{errors[`serviceLines.${index}.units`] ? <small className=\"mbsf-error\" role=\"alert\">{errors[`serviceLines.${index}.units`]}</small> : null}</div>\n <div className=\"mbsf-money\" data-label=\"Allowed\">{lineCharge(line) == null ? \"—\" : lineCharge(line)!.toLocaleString(undefined, { style: \"currency\", currency: \"USD\" })}</div>\n <button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove service line ${index + 1}`} disabled={locked || (!lineHasContent(line) && index === bill.serviceLines.length - 1)} onClick={() => setBill((c) => ({ ...c, serviceLines: ensureTrailingBillSubmissionLine(c.serviceLines.filter((_, itemIndex) => itemIndex !== index)) }))}>×</button>\n </div>)}\n <div className=\"mbsf-total\"><span>Total</span><span>{total.toLocaleString(undefined, { style: \"currency\", currency: \"USD\" })}</span></div>\n </div>{errors.serviceLines ? <p className=\"mbsf-error\" role=\"alert\">{errors.serviceLines}</p> : null}\n </fieldset>;\n\n const attachmentsSection = <fieldset className=\"mbsf-card\" data-field-path=\"attachments\" data-invalid={Boolean(errors.attachments)} disabled={locked}><legend className=\"mbsf-legend\">Attachments</legend><div className=\"mbsf-attach-list\">\n {attachments.filter((attachment) => !removedSourceIds.includes(attachment.id)).map((attachment) => { const auto = attachment.autoAttached || attachment.documentType === \"w9\"; const removable = attachment.removable ?? !auto; const reportTypeCode = sourceAttachmentReportTypes[attachment.id] || attachment.reportTypeCode || defaultAttachmentReportType || \"\"; return <div className=\"mbsf-attach-row\" data-auto={auto} key={attachment.id}><div className=\"mbsf-attach-main\">{auto ? <span aria-label=\"Auto-attached\" role=\"img\">✓</span> : null}<span className=\"mbsf-file\"><strong>{attachment.fileName}</strong><span className=\"mbsf-badge\">{auto ? \"Auto-attached\" : documentLabels[attachment.documentType]}</span><span className=\"mbsf-help\" style={{ display: \"block\" }}>{attachment.description || (auto ? \"Included automatically with every bill.\" : documentLabels[attachment.documentType])}</span></span></div>{showAttachmentReportTypes ? <div className=\"mbsf-attach-type\"><ComboBox ariaLabel={`Report type for ${attachment.fileName}`} invalid={!reportTypeCode} disabled={locked} preserveValueOnOpen value={reportTypeCode} placeholder=\"Select report type…\" options={reportTypeOptions} onSelect={(option) => setSourceAttachmentReportTypes((current) => ({ ...current, [attachment.id]: option.id }))} /></div> : null}<div className=\"mbsf-attach-actions\">{attachment.previewUrl ? <a className=\"mbsf-secondary\" href={attachment.previewUrl} target=\"_blank\" rel=\"noopener noreferrer\">Preview</a> : null}{removable ? <button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove ${attachment.fileName}`} disabled={locked} onClick={() => { setSelectedIds((current) => current.filter((id) => id !== attachment.id)); setRemovedSourceIds((current) => [...new Set([...current, attachment.id])]); }}>×</button> : null}</div></div>; })}\n {uploads.map((upload, index) => { const reportTypeCode = upload.reportTypeCode || defaultAttachmentReportType || \"\"; return <div className=\"mbsf-attach-row\" key={`${upload.file.name}-${index}`}><div className=\"mbsf-attach-main\"><span className=\"mbsf-file\"><strong>{upload.file.name}</strong><span className=\"mbsf-help\" style={{ display: \"block\" }}>{(upload.file.size / 1024 / 1024).toFixed(1)} MB</span></span></div>{showAttachmentReportTypes ? <div className=\"mbsf-attach-type\"><ComboBox ariaLabel={`Report type for ${upload.file.name}`} invalid={!reportTypeCode} disabled={locked} preserveValueOnOpen value={reportTypeCode} placeholder=\"Select report type…\" options={reportTypeOptions} onSelect={(option) => setUploads((current) => current.map((item, itemIndex) => itemIndex === index ? { ...item, reportTypeCode: option.id } : item))} /></div> : null}<div className=\"mbsf-attach-actions\"><button className=\"mbsf-secondary\" type=\"button\" onClick={() => previewUploadedPdf(upload.file)}>Preview</button><button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove ${upload.file.name}`} onClick={() => setUploads((current) => current.filter((_, itemIndex) => itemIndex !== index))}>×</button></div></div>; })}\n </div>{errors.attachments ? <p className=\"mbsf-error\" role=\"alert\">{errors.attachments}</p> : null}<input ref={fileInput} hidden type=\"file\" accept=\"application/pdf,.pdf\" multiple onChange={(event) => { if (event.target.files) addFiles(event.target.files); event.target.value = \"\"; }} /><button className=\"mbsf-drop\" data-active={dragActive} type=\"button\" onClick={() => fileInput.current?.click()}><span><strong style={{ fontSize: 18 }}>Drop additional PDF files here, or click to choose</strong><span className=\"mbsf-help\" style={{ display: \"block\", marginTop: 8 }}>Add supporting documents anywhere on this screen.</span></span></button></fieldset>;\n\n const actionsSection = <>{formError ? <div className=\"mbsf-alert\" role=\"alert\">{formError}</div> : null}<div className=\"mbsf-actions\"><button className=\"mbsf-submit\" type=\"submit\" disabled={locked}>{submitting ? \"Submitting…\" : submitLabel}</button></div></>;\n const sections: BillSubmissionSections = {\n header: headerSection,\n patient: patientSection,\n claim: claimSection,\n providers: providersSection,\n serviceLines: serviceLinesSection,\n attachments: attachmentsSection,\n actions: actionsSection,\n };\n const defaultLayout = <>\n <BillSubmissionHeader />\n <BillSubmissionPatientSection />\n <BillSubmissionClaimSection />\n <BillSubmissionProvidersSection />\n <BillSubmissionServiceLinesSection />\n <BillSubmissionAttachmentsSection />\n <BillSubmissionActions />\n </>;\n\n return <BillSubmissionSectionsContext.Provider value={sections}>\n <form ref={formRef} className={`${className} mbsf`} style={{ ...mindBillAppearanceStyle(appearance), ...style }} onSubmit={(event) => { event.preventDefault(); void submit(); }} noValidate>\n <style>{css}</style>\n {attentionMessage ? <div className=\"mbsf-attention\" role=\"status\">{attentionMessage}</div> : null}\n {children ?? defaultLayout}\n {routeDialog ? (\n <SendRouteDialog\n title={deliveryRouteDialogTitle}\n delivery={routeDialog.delivery}\n submitting={submitting}\n error={routeError}\n onCancel={() => { if (!submitting) { setRouteDialog(null); setRouteError(null); } }}\n onConfirm={(submission) => { void performSubmit({ ...routeDialog.value, submission }); }}\n />\n ) : null}\n </form>\n <ClaimsAdministratorDirectoryDialog\n open={directoryOpen}\n directory={directory}\n loading={directoryLoading}\n error={directoryError}\n onClose={() => {\n setDirectoryOpen(false);\n setDirectory(null);\n setDirectoryError(null);\n }}\n />\n </BillSubmissionSectionsContext.Provider>;\n}\n","\"use client\";\n\n// Delivery-method picker shown when a bill is submitted: one\n// card per route (e-bill / email / fax / mail), the selected card expands\n// inline with its destination sub-form, and the primary button names the\n// channel. Rendered by BillSubmissionForm by default in connected mode; also\n// exported for hosts that submit through their own server.\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { BillDeliveryOptions, BillSubmissionRoute, SubmitBillInput } from \"@mindbill/browser\";\n\nconst EMAIL_RE = /[A-Za-z0-9._%+'-]+@[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*\\.[A-Za-z]{2,}/;\n\n/** First plausible email address inside a raw contact string, or null. */\nexport function extractSendRouteEmail(raw: string | null | undefined): string | null {\n if (!raw) return null;\n const match = raw.match(EMAIL_RE);\n return match ? match[0] : null;\n}\n\n/** \"(213) 555-0199\" for 10/11-digit US numbers; anything else trimmed as-is. */\nexport function formatSendRouteFax(raw: string | null | undefined): string {\n if (!raw) return \"\";\n const digits = raw.replace(/\\D/g, \"\");\n const ten = digits.length === 11 && digits.startsWith(\"1\") ? digits.slice(1) : digits;\n if (ten.length === 10) return `(${ten.slice(0, 3)}) ${ten.slice(3, 6)}-${ten.slice(6)}`;\n return raw.trim();\n}\n\n/**\n * Live format-as-you-type for the fax input: digits render progressively as\n * \"(213) 555-0199\" whether typed bare or pasted pre-formatted. A leading \"+\"\n * (international) or an overflowing value is left as typed.\n */\nexport function formatSendRouteFaxInput(raw: string): string {\n const trimmed = raw.trimStart();\n if (trimmed.startsWith(\"+\")) return raw;\n const all = trimmed.replace(/\\D/g, \"\");\n const digits = all.length === 11 && all.startsWith(\"1\") ? all.slice(1) : all;\n if (digits.length > 10 || (all.length === 11 && !all.startsWith(\"1\")) || all.length > 11) return raw;\n if (digits.length === 0) return \"\";\n if (digits.length <= 3) return `(${digits}`;\n if (digits.length <= 6) return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n}\n\nexport type SendRouteSubmission = Pick<\n SubmitBillInput,\n \"route\" | \"destination\" | \"attention\" | \"subject\" | \"note\" | \"cc\"\n>;\n\nexport type SendRouteDialogProps = {\n /** Dialog heading, e.g. \"Send bill\". */\n title?: ReactNode;\n delivery: BillDeliveryOptions;\n submitting?: boolean;\n /** Disables the confirm button while the caller uploads documents. */\n disabled?: boolean;\n error?: string | null;\n onCancel: () => void;\n onConfirm: (submission: SendRouteSubmission) => void;\n};\n\nconst css = `\n.mbrd-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,30,40,.45)}\n.mbrd{display:grid;gap:16px;width:min(560px,100%);max-height:min(86vh,860px);overflow:auto;overscroll-behavior:contain;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);color:var(--mb-text);font-family:var(--mb-font);font-size:15px;box-shadow:0 24px 60px rgba(17,38,49,.28)}\n.mbrd *{box-sizing:border-box}\n.mbrd-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.mbrd-title{margin:0;font-size:20px;font-weight:760}\n.mbrd-copy{margin:4px 0 0;color:var(--mb-muted);font-size:14px}\n.mbrd-close{border:0;background:transparent;color:var(--mb-muted);font-size:22px;line-height:1;cursor:pointer}\n.mbrd-cards{display:grid;gap:10px}\n.mbrd-card{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);transition:border-color .12s ease,background .12s ease}\n.mbrd-card[data-selected=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}\n.mbrd-card[data-disabled=true]{opacity:.55}\n.mbrd-card-main{display:flex;align-items:center;gap:12px;width:100%;padding:13px 14px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}\n.mbrd-card[data-disabled=true] .mbrd-card-main{cursor:not-allowed}\n.mbrd-radio{flex:0 0 auto;width:18px;height:18px;border:2px solid var(--mb-border);border-radius:50%;display:grid;place-items:center}\n.mbrd-card[data-selected=true] .mbrd-radio{border-color:var(--mb-accent)}\n.mbrd-card[data-selected=true] .mbrd-radio:after{content:\"\";width:9px;height:9px;border-radius:50%;background:var(--mb-accent)}\n.mbrd-card-text{min-width:0;flex:1}\n.mbrd-card-title{font-weight:700;line-height:1.3;overflow-wrap:anywhere}\n.mbrd-card-detail{margin-top:2px;color:var(--mb-muted);font-size:13px;line-height:1.35;overflow-wrap:anywhere}\n.mbrd-badges{display:flex;flex:0 0 auto;gap:6px}\n.mbrd-badge{padding:2px 8px;border:1px solid var(--mb-border);border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap}\n.mbrd-badge[data-tone=verified]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));background:color-mix(in srgb,#159447 8%,var(--mb-surface));color:#0c7a48}\n.mbrd-badge[data-tone=auto]{border-color:color-mix(in srgb,var(--mb-accent) 45%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-accent)}\n.mbrd-sub{display:grid;gap:12px;padding:12px 14px;border-top:1px solid var(--mb-border);background:color-mix(in srgb,var(--mb-accent) 2%,var(--mb-surface));border-radius:0 0 var(--mb-control-radius) var(--mb-control-radius)}\n.mbrd-choice{border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-surface)}\n.mbrd-choice[data-selected=true]{border-color:var(--mb-accent)}\n.mbrd-choice[data-disabled=true]{opacity:.55}\n.mbrd-choice-main{display:flex;align-items:center;gap:10px;width:100%;padding:9px 11px;border:0;background:transparent;color:inherit;font:inherit;font-size:13px;text-align:left;cursor:pointer}\n.mbrd-choice[data-disabled=true] .mbrd-choice-main{cursor:not-allowed}\n.mbrd-choice-title{font-weight:650;overflow-wrap:anywhere}\n.mbrd-choice-detail{margin-top:1px;color:var(--mb-muted);font-size:12px}\n.mbrd-choice-body{display:grid;gap:8px;padding:10px 11px;border-top:1px solid var(--mb-border)}\n.mbrd-field{display:grid;gap:5px;font-size:13px}\n.mbrd-label{font-weight:650}\n.mbrd-star{color:var(--mb-danger)}\n.mbrd-input,.mbrd-textarea{width:100%;padding:9px 11px;border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-input);color:var(--mb-text);font:inherit;font-size:14px}\n.mbrd-textarea{resize:vertical;min-height:74px}\n.mbrd-input:focus,.mbrd-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbrd-error{color:var(--mb-danger);font-size:12px}\n.mbrd-help{color:var(--mb-muted);font-size:12px}\n.mbrd-alert{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}\n.mbrd-actions{display:flex;justify-content:flex-end;gap:10px}\n.mbrd-cancel{min-height:42px;padding:9px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}\n.mbrd-confirm{min-height:42px;min-width:130px;padding:9px 18px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:760;cursor:pointer}\n.mbrd-confirm:disabled,.mbrd-cancel:disabled{opacity:.6;cursor:not-allowed}\n`;\n\nconst CONFIRM_LABELS: Record<BillSubmissionRoute, string> = {\n ebill: \"Send Bill\",\n email: \"Email Bill\",\n fax: \"Fax Bill\",\n mail: \"Mail Bill\",\n};\n\nfunction RouteCard({\n selected,\n disabled,\n title,\n detail,\n badges,\n onSelect,\n children,\n}: {\n selected: boolean;\n disabled?: boolean;\n title: ReactNode;\n detail?: ReactNode;\n badges?: ReactNode;\n onSelect: () => void;\n children?: ReactNode;\n}): ReactElement {\n return (\n <div className=\"mbrd-card\" data-selected={selected} data-disabled={Boolean(disabled)}>\n <button\n className=\"mbrd-card-main\"\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onSelect}\n >\n <span className=\"mbrd-radio\" aria-hidden />\n <span className=\"mbrd-card-text\">\n <span className=\"mbrd-card-title\">{title}</span>\n {detail ? <span className=\"mbrd-card-detail\" style={{ display: \"block\" }}>{detail}</span> : null}\n </span>\n {badges ? <span className=\"mbrd-badges\">{badges}</span> : null}\n </button>\n {selected && children ? <div className=\"mbrd-sub\">{children}</div> : null}\n </div>\n );\n}\n\nfunction RecipientChoice({\n selected,\n disabled,\n title,\n detail,\n onSelect,\n children,\n}: {\n selected: boolean;\n disabled?: boolean;\n title: ReactNode;\n detail?: ReactNode;\n onSelect: () => void;\n children?: ReactNode;\n}): ReactElement {\n return (\n <div className=\"mbrd-choice\" data-selected={selected} data-disabled={Boolean(disabled)}>\n <button\n className=\"mbrd-choice-main\"\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onSelect}\n >\n <span className=\"mbrd-radio\" aria-hidden style={{ width: 15, height: 15 }} />\n <span className=\"mbrd-card-text\">\n <span className=\"mbrd-choice-title\">{title}</span>\n {detail ? <span className=\"mbrd-choice-detail\" style={{ display: \"block\" }}>{detail}</span> : null}\n </span>\n </button>\n {selected && children ? <div className=\"mbrd-choice-body\">{children}</div> : null}\n </div>\n );\n}\n\nexport function SendRouteDialog({\n title = \"Send bill\",\n delivery,\n submitting = false,\n disabled = false,\n error = null,\n onCancel,\n onConfirm,\n}: SendRouteDialogProps): ReactElement {\n const ebillOption = delivery.options.find((option) => option.route === \"ebill\");\n const mailOption = delivery.options.find((option) => option.route === \"mail\");\n const recommendedRoute = delivery.recommended.route;\n const onFileEmail = extractSendRouteEmail(delivery.contacts.claimsEmail);\n const onFileFax = delivery.contacts.faxNumber?.trim() || null;\n const onFileFaxDisplay = formatSendRouteFax(onFileFax);\n const onFileMail = delivery.contacts.mailingAddress?.trim() || \"\";\n\n const [route, setRoute] = useState<BillSubmissionRoute>(recommendedRoute);\n const [emailMode, setEmailMode] = useState<\"onfile\" | \"alt\">(onFileEmail ? \"onfile\" : \"alt\");\n const [faxMode, setFaxMode] = useState<\"onfile\" | \"alt\">(onFileFax ? \"onfile\" : \"alt\");\n const [emailTo, setEmailTo] = useState(\"\");\n const [subject, setSubject] = useState(\"\");\n const [message, setMessage] = useState(\"\");\n const [ccInput, setCcInput] = useState(\"\");\n const [faxTo, setFaxTo] = useState(\"\");\n const [attention, setAttention] = useState(\"\");\n const [mailTo, setMailTo] = useState(onFileMail);\n\n useEffect(() => {\n setRoute(recommendedRoute);\n setEmailMode(onFileEmail ? \"onfile\" : \"alt\");\n setFaxMode(onFileFax ? \"onfile\" : \"alt\");\n setMailTo(onFileMail);\n }, [recommendedRoute, onFileEmail, onFileFax, onFileMail]);\n\n // Close on Escape (unless a submit is in flight — the caller owns that state).\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !submitting) onCancel();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onCancel, submitting]);\n\n const effectiveEmail = emailMode === \"onfile\" && onFileEmail ? onFileEmail : emailTo.trim();\n const effectiveFax = faxMode === \"onfile\" && onFileFax ? onFileFax : faxTo;\n const faxDigits = effectiveFax.replace(/\\D/g, \"\");\n const emailValid = EMAIL_RE.test(effectiveEmail);\n const ccList = ccInput.split(/[,;]/).map((entry) => entry.trim()).filter(Boolean);\n const ccValid = ccList.every((entry) => EMAIL_RE.test(entry));\n const faxValid = faxDigits.length >= 10;\n const mailValid = mailTo.trim().length > 2;\n const confirmDisabled =\n submitting\n || disabled\n || (route === \"email\" && (!emailValid || !ccValid))\n || (route === \"fax\" && !faxValid)\n || (route === \"mail\" && !mailValid);\n\n const submission = useMemo((): SendRouteSubmission => {\n if (route === \"email\") {\n return {\n route,\n destination: { email: effectiveEmail },\n ...(subject.trim() ? { subject: subject.trim() } : {}),\n ...(message.trim() ? { note: message.trim() } : {}),\n ...(ccList.length ? { cc: ccList } : {}),\n };\n }\n if (route === \"fax\") {\n return {\n route,\n destination: { faxNumber: effectiveFax.trim() },\n ...(attention.trim() ? { attention: attention.trim() } : {}),\n };\n }\n if (route === \"mail\") {\n return { route, destination: { mailingAddress: mailTo.trim() } };\n }\n return { route };\n // ccList derives from ccInput.\n }, [route, effectiveEmail, subject, message, ccInput, effectiveFax, attention, mailTo]);\n\n return (\n <div className=\"mbrd-overlay\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget && !submitting) onCancel(); }}>\n <style>{css}</style>\n <div className=\"mbrd\" role=\"dialog\" aria-modal=\"true\" aria-label={typeof title === \"string\" ? title : \"Send bill\"}>\n <div className=\"mbrd-head\">\n <div>\n <h3 className=\"mbrd-title\">{title}</h3>\n <p className=\"mbrd-copy\">Select the delivery method.</p>\n </div>\n <button className=\"mbrd-close\" type=\"button\" aria-label=\"Close\" disabled={submitting} onClick={onCancel}>×</button>\n </div>\n\n <div className=\"mbrd-cards\" role=\"radiogroup\" aria-label=\"Delivery method\">\n {(() => {\n const ebillCard = ebillOption ? (\n <RouteCard\n key=\"ebill\"\n selected={route === \"ebill\"}\n title={ebillOption.printAndMail ? ebillOption.label : `e-Bill to ${ebillOption.payerName || delivery.payerName}`}\n detail={[\n ebillOption.detail || null,\n !ebillOption.printAndMail && ebillOption.label.startsWith(\"e-bill \")\n ? ebillOption.label.slice(\"e-bill \".length)\n : null,\n ].filter(Boolean).join(\" · \")}\n badges={<>\n {!ebillOption.fallback ? <span className=\"mbrd-badge\" data-tone=\"verified\">Verified Route</span> : null}\n {recommendedRoute === \"ebill\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n </>}\n onSelect={() => setRoute(\"ebill\")}\n />\n ) : null;\n\n const emailCard = (\n <RouteCard\n key=\"email\"\n selected={route === \"email\"}\n title=\"Email Bill\"\n detail={onFileEmail ?? \"No claims email on file — enter a recipient.\"}\n badges={recommendedRoute === \"email\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"email\")}\n >\n <div role=\"radiogroup\" aria-label=\"Email recipient\" style={{ display: \"grid\", gap: 8 }}>\n <RecipientChoice\n selected={emailMode === \"onfile\"}\n disabled={!onFileEmail}\n title={onFileEmail ?? \"Claims email on file\"}\n detail={onFileEmail ? \"Claims contact on file\" : \"No claims email exists on file for this payer.\"}\n onSelect={() => setEmailMode(\"onfile\")}\n />\n <RecipientChoice\n selected={emailMode === \"alt\"}\n title=\"Alternative email recipient\"\n onSelect={() => setEmailMode(\"alt\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Alternative email address <span className=\"mbrd-star\">*</span></span>\n <input className=\"mbrd-input\" type=\"email\" value={emailTo} placeholder=\"user@mail.com\" onChange={(event) => setEmailTo(event.target.value)} />\n {emailTo.trim() && !EMAIL_RE.test(emailTo.trim()) ? <span className=\"mbrd-error\">Enter a valid email address.</span> : null}\n </label>\n </RecipientChoice>\n </div>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Cc — optional</span>\n <input className=\"mbrd-input\" value={ccInput} placeholder=\"adjuster@payer.com, supervisor@payer.com\" onChange={(event) => setCcInput(event.target.value)} />\n {!ccValid ? <span className=\"mbrd-error\">Each Cc entry must be a valid email address (separate with commas).</span> : null}\n </label>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Email subject — optional</span>\n <input className=\"mbrd-input\" value={subject} maxLength={255} onChange={(event) => setSubject(event.target.value)} />\n </label>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Message — optional</span>\n <textarea className=\"mbrd-textarea\" value={message} maxLength={5000} placeholder=\"Added at the top of the email body, above the bill summary.\" onChange={(event) => setMessage(event.target.value)} />\n </label>\n </RouteCard>\n );\n\n const faxCard = (\n <RouteCard\n key=\"fax\"\n selected={route === \"fax\"}\n title=\"Fax Bill\"\n detail={onFileFax ? `${onFileFaxDisplay} — payer fax on file` : \"No fax on file — enter a number.\"}\n badges={recommendedRoute === \"fax\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"fax\")}\n >\n <div role=\"radiogroup\" aria-label=\"Fax recipient\" style={{ display: \"grid\", gap: 8 }}>\n <RecipientChoice\n selected={faxMode === \"onfile\"}\n disabled={!onFileFax}\n title={onFileFax ? onFileFaxDisplay : \"Payer fax on file\"}\n detail={onFileFax ? \"Payer fax on file\" : \"No fax number exists on file for this payer.\"}\n onSelect={() => setFaxMode(\"onfile\")}\n />\n <RecipientChoice\n selected={faxMode === \"alt\"}\n title=\"Alternative fax recipient\"\n onSelect={() => setFaxMode(\"alt\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Alternative fax number <span className=\"mbrd-star\">*</span></span>\n <input className=\"mbrd-input\" inputMode=\"tel\" value={faxTo} placeholder=\"(000) 000-0000\" onChange={(event) => setFaxTo(formatSendRouteFaxInput(event.target.value))} />\n {faxTo.trim() && faxTo.replace(/\\D/g, \"\").length < 10 ? <span className=\"mbrd-error\">Enter a valid fax number (10 digits).</span> : null}\n </label>\n </RecipientChoice>\n </div>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Attention — optional</span>\n <input className=\"mbrd-input\" value={attention} maxLength={120} placeholder=\"Recipient name\" onChange={(event) => setAttention(event.target.value)} />\n <span className=\"mbrd-help\">Printed as ATTENTION on the fax cover sheet.</span>\n </label>\n </RouteCard>\n );\n\n const mailCard = (\n <RouteCard\n key=\"mail\"\n selected={route === \"mail\"}\n title=\"Mail Bill\"\n detail={onFileMail ? onFileMail.replace(/\\n/g, \", \") : \"Physical mail — enter the payer's mailing address.\"}\n badges={recommendedRoute === \"mail\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"mail\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Mailing address <span className=\"mbrd-star\">*</span></span>\n <textarea className=\"mbrd-textarea\" value={mailTo} placeholder={\"Payer Claims Dept\\nPO Box 1234\\nCity, ST 00000\"} onChange={(event) => setMailTo(event.target.value)} />\n {!mailValid ? <span className=\"mbrd-error\">Enter a mailing address.</span> : null}\n <span className=\"mbrd-help\">\n {mailOption?.printAndMail\n ? mailOption.detail\n : \"Sent as physical mail — printed and mailed to this address.\"}\n </span>\n </label>\n </RouteCard>\n );\n\n // Preference order: ebill (only when the payer has an e-route) → fax\n // and email WITH a contact on file → mail (always) → the rest last.\n const cards: ReactNode[] = [];\n if (ebillCard) cards.push(ebillCard);\n if (onFileFax) cards.push(faxCard);\n if (onFileEmail) cards.push(emailCard);\n cards.push(mailCard);\n if (!onFileFax) cards.push(faxCard);\n if (!onFileEmail) cards.push(emailCard);\n return cards;\n })()}\n </div>\n\n {error ? <div className=\"mbrd-alert\" role=\"alert\">{error}</div> : null}\n\n <div className=\"mbrd-actions\">\n <button className=\"mbrd-cancel\" type=\"button\" disabled={submitting} onClick={onCancel}>Cancel</button>\n <button\n className=\"mbrd-confirm\"\n type=\"button\"\n disabled={confirmDisabled}\n onClick={() => onConfirm(submission)}\n >\n {submitting ? \"Submitting…\" : CONFIRM_LABELS[route]}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorPayer,\n} from \"@mindbill/browser\";\n\nexport type ClaimsAdministratorDirectoryDialogProps = {\n open: boolean;\n directory?: BillClaimsAdministratorDirectory | null;\n loading?: boolean;\n error?: string | null;\n onClose: () => void;\n};\n\ntype Tab = \"main\" | \"bill-review\" | \"authorization\" | \"mailing\" | \"patterns\";\n\nconst css = `\n.mbcad-backdrop{position:fixed;z-index:1000;inset:0;display:grid;place-items:center;padding:24px;background:rgba(17,28,38,.44)}\n.mbcad-dialog{--mbcad-accent:var(--mb-accent,#176c70);--mbcad-border:var(--mb-border,#d7e0df);--mbcad-surface:var(--mb-surface,#fff);--mbcad-text:var(--mb-text,#17282d);--mbcad-muted:var(--mb-muted,#607176);display:grid;grid-template-rows:auto auto minmax(0,1fr);width:min(1180px,100%);max-height:min(860px,92vh);overflow:hidden;border:1px solid var(--mbcad-border);border-radius:14px;background:var(--mbcad-surface);color:var(--mbcad-text);box-shadow:0 28px 80px rgba(14,31,43,.28);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mbcad-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 22px;border-bottom:1px solid var(--mbcad-border)}.mbcad-head h2{margin:0;font-size:24px;line-height:1.2}.mbcad-close{width:40px;height:40px;border:0;border-radius:9px;background:color-mix(in srgb,var(--mbcad-muted) 9%,var(--mbcad-surface));color:var(--mbcad-accent);font:inherit;font-size:28px;line-height:1;cursor:pointer}\n.mbcad-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));margin:18px 22px 0;border-radius:10px;background:color-mix(in srgb,var(--mbcad-muted) 8%,var(--mbcad-surface));overflow:hidden}.mbcad-tab{min-height:64px;padding:10px;border:0;border-right:1px solid var(--mbcad-border);border-top:4px solid transparent;background:transparent;color:var(--mbcad-muted);font:inherit;font-weight:750;cursor:pointer}.mbcad-tab:last-child{border-right:0}.mbcad-tab[aria-selected=true]{border-top-color:var(--mbcad-accent);background:var(--mbcad-surface);color:var(--mbcad-text)}\n.mbcad-body{overflow:auto;padding:24px 22px 28px}.mbcad-grid{display:grid;gap:0;border:1px solid var(--mbcad-border);border-radius:10px;overflow:hidden}.mbcad-row{display:grid;grid-template-columns:minmax(180px,.8fr) minmax(0,2fr);gap:18px;padding:11px 14px;border-bottom:1px solid var(--mbcad-border)}.mbcad-row:last-child{border-bottom:0}.mbcad-row strong{font-weight:750}.mbcad-list{display:grid;gap:5px;margin:0;padding:0;list-style:none}.mbcad-list a,.mbcad-table a{color:var(--mbcad-accent);overflow-wrap:anywhere}.mbcad-payers{display:grid;gap:9px;margin:0;padding:0;list-style:none}.mbcad-payer{display:grid;gap:7px;padding:12px;border:1px solid var(--mbcad-border);border-radius:9px;background:color-mix(in srgb,var(--mbcad-muted) 3%,var(--mbcad-surface))}.mbcad-payer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mbcad-payer-route{color:var(--mbcad-accent);font-size:13px;font-weight:750;white-space:nowrap}.mbcad-payer-meta{display:flex;flex-wrap:wrap;gap:6px}.mbcad-payer-meta span{padding:3px 7px;border:1px solid var(--mbcad-border);border-radius:999px;color:var(--mbcad-muted);font-size:12px}.mbcad-payer-note{margin:0;color:var(--mbcad-muted);font-size:13px}.mbcad-table{width:100%;border-collapse:collapse;border:1px solid var(--mbcad-border);border-radius:10px;overflow:hidden}.mbcad-table th,.mbcad-table td{padding:13px 14px;border-bottom:1px solid var(--mbcad-border);text-align:left;vertical-align:top}.mbcad-table th{background:color-mix(in srgb,var(--mbcad-muted) 7%,var(--mbcad-surface));font-size:13px}.mbcad-empty{padding:36px;text-align:center;color:var(--mbcad-muted)}.mbcad-notice{padding:14px 16px;border:1px solid color-mix(in srgb,var(--mbcad-accent) 70%,var(--mbcad-border));border-radius:9px;background:color-mix(in srgb,var(--mbcad-accent) 5%,var(--mbcad-surface));font-weight:650}\n@media(max-width:760px){.mbcad-backdrop{padding:8px}.mbcad-dialog{max-height:96vh}.mbcad-head{padding:14px}.mbcad-head h2{font-size:19px}.mbcad-tabs{display:flex;overflow-x:auto;margin:10px 12px 0}.mbcad-tab{min-width:145px}.mbcad-body{padding:14px 12px 18px}.mbcad-row{grid-template-columns:1fr;gap:5px}.mbcad-table{display:block;overflow-x:auto}}\n`;\n\nfunction outbound(value: string, kind: \"phone\" | \"email\" | \"url\"): ReactElement {\n const href = kind === \"phone\" ? `tel:${value.replace(/[^+\\d]/g, \"\")}` : kind === \"email\" ? `mailto:${value}` : /^https?:\\/\\//i.test(value) ? value : `https://${value}`;\n return <a href={href} {...(kind === \"url\" ? { target: \"_blank\", rel: \"noreferrer\" } : {})}>{value}</a>;\n}\n\nfunction list(values: string[] | undefined, kind?: \"phone\" | \"email\" | \"url\"): ReactNode {\n return values?.length ? <ul className=\"mbcad-list\">{values.map((value, index) => <li key={`${value}-${index}`}>{kind ? outbound(value, kind) : value}</li>)}</ul> : \"—\";\n}\n\nfunction payerDetails(payer: BillClaimsAdministratorPayer, index: number): ReactElement {\n const identifiers = Object.entries(payer.clearinghousePayerIds ?? {}).map(([name, id]) => `${name.replace(/_/g, \" \")}: ${id}`);\n const metadata = [\n payer.optionType ? `Type: ${payer.optionType}` : null,\n payer.deliveryType ? `Delivery: ${payer.deliveryType}` : null,\n payer.clearinghouse && payer.payerId ? `${payer.clearinghouse}: ${payer.payerId}` : null,\n payer.sourceClearinghouse && payer.sourcePayerId ? `Catalog route: ${payer.sourceClearinghouse} ${payer.sourcePayerId}` : null,\n ...identifiers,\n payer.preferredClearinghouse ? `Preferred: ${payer.preferredClearinghouse}` : null,\n ].filter((value): value is string => Boolean(value));\n return <li className=\"mbcad-payer\" key={`${payer.name}-${index}`}>\n <div className=\"mbcad-payer-head\"><strong>{payer.name}</strong>{payer.route ? <span className=\"mbcad-payer-route\">{payer.route}</span> : null}</div>\n {payer.aliases?.length ? <p className=\"mbcad-payer-note\">Also known as {payer.aliases.join(\", \")}</p> : null}\n {payer.hint ? <p className=\"mbcad-payer-note\">{payer.hint}</p> : null}\n {payer.affiliatedEntities?.length ? <p className=\"mbcad-payer-note\">Affiliated with {payer.affiliatedEntities.join(\", \")}</p> : null}\n {metadata.length ? <div className=\"mbcad-payer-meta\">{metadata.map((item) => <span key={item}>{item}</span>)}</div> : null}\n </li>;\n}\n\nfunction Main({ directory }: { directory: BillClaimsAdministratorDirectory }): ReactElement {\n return <div className=\"mbcad-grid\">\n {([\n [\"Name\", directory.name ?? \"—\"], [\"Description\", directory.description ?? \"—\"], [\"Type\", directory.type ?? \"—\"],\n [\"Website\", directory.website ? outbound(directory.website, \"url\") : \"—\"],\n [\"Also known as\", list(directory.aliases)], [\"Affiliated entities\", list(directory.affiliatedEntities)],\n [\"Hours of operation\", directory.hours ?? \"—\"], [\"Telephone numbers\", list(directory.telephoneNumbers, \"phone\")],\n [\"Email addresses\", list(directory.emailAddresses, \"email\")], [\"Web portals\", list(directory.webPortals, \"url\")],\n [\"Payers\", directory.payers?.length ? <ul className=\"mbcad-payers\">{directory.payers.map(payerDetails)}</ul> : \"—\"],\n [\"Bill processing workflow\", directory.billProcessingWorkflow ?? \"—\"],\n [\"Bill processing workflow notes\", directory.billProcessingWorkflowNotes ?? \"—\"],\n [\"Claim number hint\", directory.claimNumberHint ?? \"—\"],\n ] as Array<[string, ReactNode]>).map(([label, value]) => <div className=\"mbcad-row\" key={label}><strong>{label}</strong><div>{value}</div></div>)}\n </div>;\n}\n\nfunction contacts(items: BillClaimsAdministratorContact[] | undefined, empty: string): ReactElement {\n if (!items?.length) return <div className=\"mbcad-empty\">{empty}</div>;\n return <table className=\"mbcad-table\"><thead><tr><th>Name</th><th>Telephone</th><th>Web portal</th><th>Email</th><th>Fax</th><th>Address / note</th></tr></thead><tbody>{items.map((item, index) => <tr key={`${item.name ?? \"contact\"}-${index}`}><td>{item.name ?? \"—\"}</td><td>{item.phone ? outbound(item.phone, \"phone\") : \"—\"}</td><td>{item.portalUrl ? outbound(item.portalUrl, \"url\") : \"—\"}</td><td>{item.email ? outbound(item.email, \"email\") : \"—\"}</td><td>{item.fax ?? \"—\"}</td><td>{[item.address, item.note].filter(Boolean).join(\" · \") || \"—\"}</td></tr>)}</tbody></table>;\n}\n\nexport function ClaimsAdministratorDirectoryDialog({ open, directory, loading = false, error, onClose }: ClaimsAdministratorDirectoryDialogProps): ReactElement | null {\n const [tab, setTab] = useState<Tab>(\"main\");\n useEffect(() => { if (open) setTab(\"main\"); }, [open, directory?.id]);\n useEffect(() => {\n if (!open) return;\n const close = (event: KeyboardEvent) => { if (event.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", close); return () => window.removeEventListener(\"keydown\", close);\n }, [onClose, open]);\n if (!open) return null;\n const title = directory?.name ?? \"Claims administrator directory\";\n return <div className=\"mbcad-backdrop\" onMouseDown={(event) => { if (event.target === event.currentTarget) onClose(); }}><style>{css}</style><section className=\"mbcad-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mbcad-title\">\n <header className=\"mbcad-head\"><h2 id=\"mbcad-title\">{title}</h2><button className=\"mbcad-close\" type=\"button\" aria-label=\"Close claims administrator details\" onClick={onClose}>×</button></header>\n <div className=\"mbcad-tabs\" role=\"tablist\">{([\n [\"main\", \"Main\"], [\"bill-review\", \"Bill Review\"], [\"authorization\", \"Authorization Info\"], [\"mailing\", \"Mailing Address\"], [\"patterns\", \"Claim Number Pattern\"],\n ] as Array<[Tab, string]>).map(([id, label]) => <button className=\"mbcad-tab\" type=\"button\" role=\"tab\" aria-selected={tab === id} onClick={() => setTab(id)} key={id}>{label}</button>)}</div>\n <div className=\"mbcad-body\" role=\"tabpanel\">{loading ? <div className=\"mbcad-empty\">Loading directory details…</div> : error ? <div className=\"mbcad-empty\" role=\"alert\">{error}</div> : !directory ? <div className=\"mbcad-empty\">Directory details are unavailable.</div> : tab === \"main\" ? <Main directory={directory} /> : tab === \"bill-review\" ? contacts(directory.billReview, \"No bill-review contacts are listed.\") : tab === \"authorization\" ? <>{directory.authorizationNotice ? <p className=\"mbcad-notice\">{directory.authorizationNotice}</p> : null}{contacts(directory.authorization, \"No authorization contacts are listed.\")}</> : tab === \"mailing\" ? directory.mailingAddresses?.length ? <table className=\"mbcad-table\"><thead><tr><th>Company</th><th>Address</th><th>Notes</th><th>Bill treatment types</th><th>Submission type</th></tr></thead><tbody>{directory.mailingAddresses.map((item, index) => <tr key={`${item.address}-${index}`}><td>{item.company ?? \"—\"}</td><td>{item.address}</td><td>{item.notes ?? \"—\"}</td><td>{item.billTreatmentTypes?.join(\", \") || \"—\"}</td><td>{item.submissionTypes?.join(\", \") || \"—\"}</td></tr>)}</tbody></table> : <div className=\"mbcad-empty\">No mailing addresses are listed.</div> : directory.claimNumberPatterns?.length ? <table className=\"mbcad-table\"><thead><tr><th>Length</th><th>Pattern</th><th>Example</th></tr></thead><tbody>{directory.claimNumberPatterns.map((item, index) => <tr key={`${item.pattern}-${index}`}><td>{item.length ?? \"—\"}</td><td>{item.pattern}</td><td>{item.example ?? \"—\"}</td></tr>)}</tbody></table> : <div className=\"mbcad-empty\">No claim-number patterns are listed.</div>}</div>\n </section></div>;\n}\n","import type {\n BillSubmissionDiagnosisOption,\n BillSubmissionModifierOption,\n BillSubmissionProcedureOption,\n BillSubmissionTaxonomyOption,\n} from \"./bill-submission-form\";\n\n/** Public-domain and MindBill-owned metadata. CPT descriptions are intentionally limited to the curated catalog. */\nexport const DEFAULT_BILL_SUBMISSION_PROCEDURES: BillSubmissionProcedureOption[] = [\n { code: \"ML200\", description: \"Missed appointment for a medical-legal evaluation\", allowedAmount: 503.75 },\n { code: \"ML201\", description: \"Comprehensive medical-legal evaluation\", allowedAmount: 2015 },\n { code: \"ML202\", description: \"Follow-up medical-legal evaluation\", allowedAmount: 1316.25 },\n { code: \"ML203\", description: \"Supplemental medical-legal evaluation\", allowedAmount: 650 },\n { code: \"ML204\", description: \"Medical-legal testimony\", allowedAmount: 113.75 },\n { code: \"ML205\", description: \"Review of sub rosa recordings\", allowedAmount: 81.25 },\n { code: \"MLPRR\", description: \"Medical-legal record review\", allowedAmount: 3 },\n { code: \"90791\", description: \"Psychiatric diagnostic evaluation\" },\n { code: \"90792\", description: \"Psychiatric diagnostic evaluation with medical services\" },\n { code: \"90832\", description: \"Psychotherapy, 30 minutes\" },\n { code: \"90834\", description: \"Psychotherapy, 45 minutes\" },\n { code: \"90837\", description: \"Psychotherapy, 60 minutes\" },\n { code: \"90846\", description: \"Family psychotherapy without patient\" },\n { code: \"90847\", description: \"Family psychotherapy with patient\" },\n { code: \"90853\", description: \"Group psychotherapy\" },\n { code: \"90785\", description: \"Interactive complexity\" },\n { code: \"90833\", description: \"Psychotherapy add-on, 30 minutes\" },\n { code: \"90836\", description: \"Psychotherapy add-on, 45 minutes\" },\n { code: \"90838\", description: \"Psychotherapy add-on, 60 minutes\" },\n { code: \"99202\", description: \"New patient office visit, level 2\" },\n { code: \"99203\", description: \"New patient office visit, level 3\" },\n { code: \"99204\", description: \"New patient office visit, level 4\" },\n { code: \"99205\", description: \"New patient office visit, level 5\", allowedAmount: 349.48 },\n { code: \"99211\", description: \"Established patient office visit, level 1\" },\n { code: \"99212\", description: \"Established patient office visit, level 2\" },\n { code: \"99213\", description: \"Established patient office visit, level 3\" },\n { code: \"99214\", description: \"Established patient office visit, level 4\" },\n { code: \"99215\", description: \"Established patient office visit, level 5\" },\n { code: \"96130\", description: \"Psychological testing evaluation, first hour\" },\n { code: \"96131\", description: \"Psychological testing evaluation, each additional hour\", allowedAmount: 131.96 },\n { code: \"96136\", description: \"Psychological or neuropsychological testing, first 30 minutes\" },\n { code: \"96137\", description: \"Psychological or neuropsychological testing, each additional 30 minutes\" },\n { code: \"97161\", description: \"Physical therapy evaluation, low complexity\" },\n { code: \"97162\", description: \"Physical therapy evaluation, moderate complexity\" },\n { code: \"97163\", description: \"Physical therapy evaluation, high complexity\" },\n { code: \"97110\", description: \"Therapeutic exercises\" },\n { code: \"97112\", description: \"Neuromuscular reeducation\" },\n { code: \"97140\", description: \"Manual therapy techniques\" },\n { code: \"97530\", description: \"Therapeutic activities\" },\n { code: \"98940\", description: \"Chiropractic manipulative treatment, 1-2 regions\" },\n { code: \"98941\", description: \"Chiropractic manipulative treatment, 3-4 regions\" },\n { code: \"98942\", description: \"Chiropractic manipulative treatment, 5 regions\" },\n { code: \"72100\", description: \"Spine radiograph, lumbosacral, 2-3 views\" },\n { code: \"73030\", description: \"Shoulder radiograph, complete\" },\n { code: \"72141\", description: \"MRI cervical spine without contrast\" },\n { code: \"72148\", description: \"MRI lumbar spine without contrast\" },\n { code: \"73721\", description: \"MRI lower-extremity joint without contrast\" },\n { code: \"20610\", description: \"Major joint injection or aspiration\" },\n { code: \"20552\", description: \"Trigger point injection, 1-2 muscles\" },\n { code: \"64483\", description: \"Transforaminal epidural injection, lumbar or sacral\" },\n { code: \"64635\", description: \"Destruction by neurolytic agent, paravertebral facet joint nerve\" },\n { code: \"99070\", description: \"Supplies and materials\" },\n { code: \"L0650\", description: \"Lumbar orthosis\" },\n { code: \"A4556\", description: \"Electrodes\" },\n];\n\nexport const DEFAULT_BILL_SUBMISSION_MODIFIERS: BillSubmissionModifierOption[] = [\n { code: \"92\", description: \"Primary Treating Physician evaluation\" },\n { code: \"93\", description: \"Interpreter required\" },\n { code: \"94\", description: \"Agreed Medical Evaluator\" },\n { code: \"95\", description: \"Qualified Medical Evaluator\" },\n { code: \"96\", description: \"Psychiatric/psychological evaluation\" },\n { code: \"97\", description: \"Toxicology evaluation\" },\n { code: \"98\", description: \"Oncology evaluation\" },\n { code: \"59\", description: \"Distinct procedural service\" },\n { code: \"XE\", description: \"Separate encounter\" },\n { code: \"XS\", description: \"Separate structure\" },\n { code: \"XP\", description: \"Separate practitioner\" },\n { code: \"XU\", description: \"Unusual non-overlapping service\" },\n];\n\n/** Common NUCC provider taxonomies. Consumers can extend this catalog through taxonomyOptions. */\nexport const DEFAULT_BILL_SUBMISSION_TAXONOMIES: BillSubmissionTaxonomyOption[] = [\n { code: \"103G00000X\", description: \"Clinical Neuropsychologist\" },\n { code: \"103T00000X\", description: \"Psychologist\" },\n { code: \"111N00000X\", description: \"Chiropractor\" },\n { code: \"122300000X\", description: \"Dentist\" },\n { code: \"133V00000X\", description: \"Dietitian, Registered\" },\n { code: \"163W00000X\", description: \"Registered Nurse\" },\n { code: \"183500000X\", description: \"Pharmacist\" },\n { code: \"207L00000X\", description: \"Anesthesiology\" },\n { code: \"207P00000X\", description: \"Emergency Medicine\" },\n { code: \"207Q00000X\", description: \"Family Medicine\" },\n { code: \"207R00000X\", description: \"Internal Medicine\" },\n { code: \"207RC0000X\", description: \"Cardiovascular Disease\" },\n { code: \"207RN0300X\", description: \"Nephrology\" },\n { code: \"207RP1001X\", description: \"Pulmonary Disease\" },\n { code: \"207RR0500X\", description: \"Rheumatology\" },\n { code: \"207T00000X\", description: \"Neurological Surgery\" },\n { code: \"207X00000X\", description: \"Orthopaedic Surgery\" },\n { code: \"207XS0117X\", description: \"Orthopaedic Surgery of the Spine\" },\n { code: \"207Y00000X\", description: \"Otolaryngology\" },\n { code: \"208000000X\", description: \"Pediatrics\" },\n { code: \"208100000X\", description: \"Physical Medicine & Rehabilitation\" },\n { code: \"2083X0100X\", description: \"Occupational Medicine\" },\n { code: \"2084N0400X\", description: \"Neurology\" },\n { code: \"2084P0800X\", description: \"Psychiatry\" },\n { code: \"2084P0802X\", description: \"Addiction Psychiatry\" },\n { code: \"2084P0804X\", description: \"Child & Adolescent Psychiatry\" },\n { code: \"2084S0012X\", description: \"Sleep Medicine\" },\n { code: \"2085R0202X\", description: \"Diagnostic Radiology\" },\n { code: \"208600000X\", description: \"Surgery\" },\n { code: \"2086S0105X\", description: \"Surgery of the Hand\" },\n { code: \"208D00000X\", description: \"General Practice\" },\n { code: \"208M00000X\", description: \"Hospitalist\" },\n { code: \"208VP0000X\", description: \"Pain Medicine\" },\n { code: \"213E00000X\", description: \"Podiatrist\" },\n { code: \"225100000X\", description: \"Physical Therapist\" },\n { code: \"225X00000X\", description: \"Occupational Therapist\" },\n { code: \"363A00000X\", description: \"Physician Assistant\" },\n { code: \"363L00000X\", description: \"Nurse Practitioner\" },\n];\n\nexport const BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS: Array<BillSubmissionDiagnosisOption & { label: string }> = [\n { label: \"Psych\", code: \"Z04.6\", description: \"General psychiatric examination requested by authority\" },\n { label: \"Back\", code: \"M54.50\", description: \"Low back pain, unspecified\" },\n { label: \"Neck\", code: \"M54.2\", description: \"Cervicalgia\" },\n { label: \"Left hand\", code: \"M79.642\", description: \"Pain in left hand\" },\n { label: \"Right hand\", code: \"M79.641\", description: \"Pain in right hand\" },\n { label: \"Left knee\", code: \"M25.562\", description: \"Pain in left knee\" },\n { label: \"Right knee\", code: \"M25.561\", description: \"Pain in right knee\" },\n];\n\nconst COMPOSITE_MULTIPLIERS: Record<string, number> = {\n \"93+94+96\": 2.45, \"93+94+97\": 1.95, \"93+94+98\": 1.95,\n \"92+93\": 1.1, \"93+95\": 1.1, \"93+94\": 1.45, \"93+96\": 2.1,\n \"93+97\": 1.6, \"93+98\": 1.6, \"94+96\": 2.35, \"94+97\": 1.85, \"94+98\": 1.85,\n};\n\nconst MED_LEGAL_MODIFIER_MULTIPLIERS: Record<string, number> = {\n \"92\": 1,\n \"93\": 1.1,\n \"94\": 1.35,\n \"95\": 1,\n \"96\": 2,\n \"97\": 1.5,\n \"98\": 1.5,\n};\n\nfunction medicalLegalMultiplier(modifiers: string[]): number {\n const priced = modifiers.filter((item) => MED_LEGAL_MODIFIER_MULTIPLIERS[item] !== 1);\n if (priced.length === 0) return 1;\n const composite = COMPOSITE_MULTIPLIERS[priced.join(\"+\")];\n if (composite != null) return composite;\n return priced.reduce((total, item) => total * (MED_LEGAL_MODIFIER_MULTIPLIERS[item] ?? 1), 1);\n}\n\nexport function calculateBillSubmissionAllowedAmount(\n line: { code: string; modifiers?: string[]; units?: number },\n procedures: BillSubmissionProcedureOption[] = DEFAULT_BILL_SUBMISSION_PROCEDURES,\n): number | undefined {\n const procedure = procedures.find((item) => item.code.toUpperCase() === line.code.trim().toUpperCase());\n if (procedure?.allowedAmount == null) return undefined;\n const code = procedure.code.toUpperCase();\n const units = Math.max(1, line.units ?? 1);\n const normalized = [...new Set((line.modifiers ?? []).map((item) => item.replace(/^-/, \"\").toUpperCase()))].sort();\n const multiplier = [\"ML200\", \"ML201\", \"ML202\", \"ML203\"].includes(code)\n ? medicalLegalMultiplier(normalized)\n : 1;\n return Math.round(procedure.allowedAmount * units * multiplier * 100) / 100;\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useMemo, useState } from \"react\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport type BillingDashboardBill = {\n id: string;\n billNumber?: string | number;\n externalId?: string;\n patientName: string;\n claimNumber?: string;\n payerName?: string;\n state: string;\n submittedAt?: string;\n updatedAt?: string;\n agingDays?: number;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n href?: string;\n workItemLabel?: string;\n};\n\nexport type BillAgingBucketId = \"current\" | \"31-60\" | \"61-90\" | \"91+\";\nexport type BillAgingBucket = {\n id: BillAgingBucketId;\n label: string;\n count: number;\n balance: number;\n};\nexport type BillingDashboardSummary = {\n totalBilled: number;\n totalPaid: number;\n outstanding: number;\n openCount: number;\n bills: number;\n aging: BillAgingBucket[];\n};\n\nexport type BillingComponentProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillListProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n onSelectBill?: (bill: BillingDashboardBill) => void;\n emptyState?: ReactNode;\n};\n\nexport type BillAgingSummaryProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n};\n\nexport type BillingDashboardProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n description?: ReactNode;\n onSelectBill?: (bill: BillingDashboardBill) => void;\n initialSearch?: string;\n initialState?: string;\n hideFilters?: boolean;\n};\n\nexport type BillingReportDimension = \"status\" | \"payer\" | \"aging\";\nexport type BillingReportRow = {\n key: string;\n label: string;\n billCount: number;\n totalBilled: number;\n totalPaid: number;\n balanceDue: number;\n};\nexport type BillingReportProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n groupBy?: BillingReportDimension;\n heading?: ReactNode;\n description?: ReactNode;\n};\n\nconst css = `\n.mbdash{display:grid;gap:20px;color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbdash *{box-sizing:border-box}.mbdash h2,.mbdash h3,.mbdash p{margin:0}.mbdash-copy{color:var(--mb-muted);margin-top:5px!important}.mbdash-card{min-width:0;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n.mbdash-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px}.mbdash-head h2{font-size:24px}.mbdash-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.mbdash-stat{display:grid;gap:7px;padding:20px 22px;border-right:1px solid var(--mb-border)}.mbdash-stat:last-child{border:0}.mbdash-label{color:var(--mb-muted);font-size:12px;font-weight:760;letter-spacing:.06em;text-transform:uppercase}.mbdash-value{font-size:24px;font-weight:780;font-variant-numeric:tabular-nums}.mbdash-aging{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.mbdash-aging-item{display:grid;gap:5px;padding:16px 20px;border-right:1px solid var(--mb-border)}.mbdash-aging-item:last-child{border:0}.mbdash-aging-item strong{font-size:18px;font-variant-numeric:tabular-nums}.mbdash-aging-item span:last-child{color:var(--mb-muted);font-size:13px}\n.mbdash-filters{display:grid;grid-template-columns:minmax(240px,1fr) minmax(180px,260px);gap:12px}.mbdash-control{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbdash-control:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbdash-table-wrap{overflow:auto}.mbdash-table{width:100%;border-collapse:collapse}.mbdash-table th{padding:13px 16px;border-bottom:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px;letter-spacing:.04em;text-align:left;text-transform:uppercase;white-space:nowrap}.mbdash-table td{padding:16px;border-bottom:1px solid var(--mb-border);vertical-align:top}.mbdash-table tr:last-child td{border-bottom:0}.mbdash-table tbody tr[data-clickable=true]{cursor:pointer}.mbdash-table tbody tr[data-clickable=true]:hover{background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}.mbdash-primary{display:block;color:var(--mb-text);font-weight:720;text-decoration:none}.mbdash-secondary{display:block;margin-top:4px;color:var(--mb-muted);font-size:13px}.mbdash-state{display:inline-flex;padding:4px 9px;border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-text);font-size:12px;font-weight:720}.mbdash-money{text-align:right!important;font-variant-numeric:tabular-nums;white-space:nowrap}.mbdash-empty{padding:46px 22px;color:var(--mb-muted);text-align:center}.mbdash-mobile-list{display:none}.mbdash-mobile-card{display:grid;gap:14px;padding:18px;border-bottom:1px solid var(--mb-border)}.mbdash-mobile-card:last-child{border:0}.mbdash-mobile-top,.mbdash-mobile-money{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mbdash-mobile-money>span{display:grid;gap:3px}.mbdash-mobile-money small{color:var(--mb-muted)}\n.mbdash-report-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 22px;border-bottom:1px solid var(--mb-border)}.mbdash-report-total td{font-weight:780;background:var(--mb-soft)}\n@media(max-width:900px){.mbdash-summary{grid-template-columns:repeat(2,1fr)}.mbdash-stat:nth-child(2){border-right:0}.mbdash-stat:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mbdash-aging{grid-template-columns:repeat(2,1fr)}.mbdash-aging-item:nth-child(2){border-right:0}.mbdash-aging-item:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}}\n@media(max-width:700px){.mbdash{gap:16px}.mbdash-head{align-items:flex-start;flex-direction:column}.mbdash-filters{grid-template-columns:1fr}.mbdash-table-wrap{display:none}.mbdash-mobile-list{display:block}.mbdash-value{font-size:20px}.mbdash-stat,.mbdash-aging-item{padding:16px}.mbdash-report .mbdash-table-wrap{display:block}.mbdash-report .mbdash-table th:nth-child(2),.mbdash-report .mbdash-table td:nth-child(2),.mbdash-report .mbdash-table th:nth-child(3),.mbdash-report .mbdash-table td:nth-child(3){display:none}}\n`;\n\nconst terminalStates = new Set([\"closed\", \"voided\", \"cancelled\"]);\nconst money = (value: number) => Number(value || 0).toLocaleString(undefined, { style: \"currency\", currency: \"USD\" });\nconst stateLabel = (state: string) => state.replaceAll(\"_\", \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n\nexport function billAgingDays(bill: BillingDashboardBill, now = new Date()): number {\n if (Number.isFinite(bill.agingDays)) return Math.max(0, Math.floor(bill.agingDays!));\n if (!bill.submittedAt) return 0;\n const submitted = new Date(bill.submittedAt);\n if (Number.isNaN(submitted.valueOf())) return 0;\n return Math.max(0, Math.floor((now.valueOf() - submitted.valueOf()) / 86_400_000));\n}\n\nexport function billAgingBucket(bill: BillingDashboardBill, now = new Date()): BillAgingBucketId {\n const days = billAgingDays(bill, now);\n if (days <= 30) return \"current\";\n if (days <= 60) return \"31-60\";\n if (days <= 90) return \"61-90\";\n return \"91+\";\n}\n\nexport function summarizeBillingDashboard(bills: BillingDashboardBill[], now = new Date()): BillingDashboardSummary {\n const aging: BillAgingBucket[] = [\n { id: \"current\", label: \"0–30 days\", count: 0, balance: 0 },\n { id: \"31-60\", label: \"31–60 days\", count: 0, balance: 0 },\n { id: \"61-90\", label: \"61–90 days\", count: 0, balance: 0 },\n { id: \"91+\", label: \"91+ days\", count: 0, balance: 0 },\n ];\n let totalBilled = 0; let totalPaid = 0; let outstanding = 0; let openCount = 0;\n for (const bill of bills) {\n totalBilled += Number(bill.totalCharge || 0); totalPaid += Number(bill.totalPaid || 0); outstanding += Number(bill.balanceDue || 0);\n if (!terminalStates.has(bill.state.toLowerCase()) && bill.balanceDue > 0) {\n openCount += 1; const bucket = aging.find((item) => item.id === billAgingBucket(bill, now))!;\n bucket.count += 1; bucket.balance += Number(bill.balanceDue || 0);\n }\n }\n return { totalBilled, totalPaid, outstanding, openCount, bills: bills.length, aging };\n}\n\nfunction Shell({ appearance, className = \"\", style, children }: BillingComponentProps & { children: ReactNode }): ReactElement {\n return <div className={`mbdash ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}><style>{css}</style>{children}</div>;\n}\n\nfunction BillIdentity({ bill }: { bill: BillingDashboardBill }): ReactElement {\n const label = bill.billNumber == null ? bill.externalId ?? \"Bill\" : `Bill #${bill.billNumber}`;\n const content = <><span className=\"mbdash-primary\">{label}</span><span className=\"mbdash-secondary\">{[bill.patientName, bill.claimNumber ? `Claim ${bill.claimNumber}` : null].filter(Boolean).join(\" · \")}</span></>;\n return bill.href ? <a href={bill.href} className=\"mbdash-primary\">{content}</a> : <>{content}</>;\n}\n\nfunction BillListContent({ bills, onSelectBill, emptyState = \"No bills match these filters.\" }: BillListProps): ReactElement {\n if (!bills.length) return <div className=\"mbdash-card mbdash-empty\">{emptyState}</div>;\n return <div className=\"mbdash-card\">\n <div className=\"mbdash-table-wrap\"><table className=\"mbdash-table\"><thead><tr><th>Bill</th><th>Payer</th><th>Status</th><th>Age</th><th className=\"mbdash-money\">Billed</th><th className=\"mbdash-money\">Paid</th><th className=\"mbdash-money\">Balance</th></tr></thead><tbody>\n {bills.map((bill) => <tr key={bill.id} data-clickable={Boolean(onSelectBill)} onClick={() => onSelectBill?.(bill)}><td><BillIdentity bill={bill} /></td><td>{bill.payerName || \"—\"}</td><td><span className=\"mbdash-state\">{stateLabel(bill.state)}</span></td><td>{billAgingDays(bill)} days</td><td className=\"mbdash-money\">{money(bill.totalCharge)}</td><td className=\"mbdash-money\">{money(bill.totalPaid)}</td><td className=\"mbdash-money\"><strong>{money(bill.balanceDue)}</strong></td></tr>)}\n </tbody></table></div>\n <div className=\"mbdash-mobile-list\">{bills.map((bill) => <article className=\"mbdash-mobile-card\" key={bill.id} onClick={() => onSelectBill?.(bill)}><div className=\"mbdash-mobile-top\"><div><BillIdentity bill={bill} /></div><span className=\"mbdash-state\">{stateLabel(bill.state)}</span></div><div className=\"mbdash-mobile-money\"><span><small>Age</small>{billAgingDays(bill)} days</span><span><small>Paid</small>{money(bill.totalPaid)}</span><span><small>Balance</small><strong>{money(bill.balanceDue)}</strong></span></div></article>)}</div>\n </div>;\n}\n\nexport function BillList(props: BillListProps): ReactElement {\n const shellProps = {\n ...(props.appearance === undefined ? {} : { appearance: props.appearance }),\n ...(props.className === undefined ? {} : { className: props.className }),\n ...(props.style === undefined ? {} : { style: props.style }),\n };\n return <Shell {...shellProps}><BillListContent {...props} /></Shell>;\n}\n\nfunction AgingContent({ bills, heading = \"Accounts receivable\" }: Pick<BillAgingSummaryProps, \"bills\" | \"heading\">): ReactElement {\n const summary = useMemo(() => summarizeBillingDashboard(bills), [bills]);\n return <><div className=\"mbdash-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">Current balances and aging at a glance.</p></div></div><div className=\"mbdash-card mbdash-summary\"><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Outstanding</span><span className=\"mbdash-value\">{money(summary.outstanding)}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Open bills</span><span className=\"mbdash-value\">{summary.openCount}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Collected</span><span className=\"mbdash-value\">{money(summary.totalPaid)}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Total billed</span><span className=\"mbdash-value\">{money(summary.totalBilled)}</span></div></div><div className=\"mbdash-card mbdash-aging\">{summary.aging.map((bucket) => <div className=\"mbdash-aging-item\" key={bucket.id}><span className=\"mbdash-label\">{bucket.label}</span><strong>{money(bucket.balance)}</strong><span>{bucket.count} bill{bucket.count === 1 ? \"\" : \"s\"}</span></div>)}</div></>;\n}\n\nexport function BillAgingSummary(props: BillAgingSummaryProps): ReactElement {\n const shellProps = {\n ...(props.appearance === undefined ? {} : { appearance: props.appearance }),\n ...(props.className === undefined ? {} : { className: props.className }),\n ...(props.style === undefined ? {} : { style: props.style }),\n };\n return <Shell {...shellProps}><AgingContent bills={props.bills} {...(props.heading === undefined ? {} : { heading: props.heading })} /></Shell>;\n}\n\nexport function BillingDashboard({ bills, heading = \"Billing\", description = \"Track submitted bills, payments, and outstanding balances.\", onSelectBill, initialSearch = \"\", initialState = \"all\", hideFilters = false, appearance, className, style }: BillingDashboardProps): ReactElement {\n const [search, setSearch] = useState(initialSearch); const [state, setState] = useState(initialState);\n const states = useMemo(() => [...new Set(bills.map((bill) => bill.state))].sort((a, b) => a.localeCompare(b)), [bills]);\n const filtered = useMemo(() => { const query = search.trim().toLowerCase(); return bills.filter((bill) => (state === \"all\" || bill.state === state) && (!query || [bill.billNumber, bill.externalId, bill.patientName, bill.claimNumber, bill.payerName, bill.workItemLabel].some((value) => String(value ?? \"\").toLowerCase().includes(query)))); }, [bills, search, state]);\n const shellProps = {\n ...(appearance === undefined ? {} : { appearance }),\n ...(className === undefined ? {} : { className }),\n ...(style === undefined ? {} : { style }),\n };\n const listProps = { bills: filtered, ...(onSelectBill === undefined ? {} : { onSelectBill }) };\n return <Shell {...shellProps}><div className=\"mbdash-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">{description}</p></div></div><AgingContent bills={filtered} heading=\"Receivables\" />{hideFilters ? null : <div className=\"mbdash-filters\"><input className=\"mbdash-control\" type=\"search\" value={search} onChange={(event) => setSearch(event.target.value)} placeholder=\"Search patient, claim, payer, or bill…\" aria-label=\"Search bills\" /><select className=\"mbdash-control\" value={state} onChange={(event) => setState(event.target.value)} aria-label=\"Filter bills by status\"><option value=\"all\">All statuses</option>{states.map((item) => <option value={item} key={item}>{stateLabel(item)}</option>)}</select></div>}<BillListContent {...listProps} /></Shell>;\n}\n\nexport function buildBillingReportRows(bills: BillingDashboardBill[], groupBy: BillingReportDimension = \"status\"): BillingReportRow[] {\n const rows = new Map<string, BillingReportRow>();\n for (const bill of bills) {\n const key = groupBy === \"payer\" ? bill.payerName || \"Unassigned payer\" : groupBy === \"aging\" ? billAgingBucket(bill) : bill.state;\n const label = groupBy === \"status\" ? stateLabel(key) : groupBy === \"aging\" ? ({ current: \"0–30 days\", \"31-60\": \"31–60 days\", \"61-90\": \"61–90 days\", \"91+\": \"91+ days\" } as Record<string, string>)[key] ?? key : key;\n const row = rows.get(key) ?? { key, label, billCount: 0, totalBilled: 0, totalPaid: 0, balanceDue: 0 };\n row.billCount += 1; row.totalBilled += Number(bill.totalCharge || 0); row.totalPaid += Number(bill.totalPaid || 0); row.balanceDue += Number(bill.balanceDue || 0); rows.set(key, row);\n }\n return [...rows.values()].sort((a, b) => a.label.localeCompare(b.label, undefined, { numeric: true }));\n}\n\nexport function buildBillingReportCsv(bills: BillingDashboardBill[], groupBy: BillingReportDimension = \"status\"): string {\n const escape = (value: string | number) => `\"${String(value).replaceAll('\"', '\"\"')}\"`;\n return [[\"Group\", \"Bills\", \"Total billed\", \"Total paid\", \"Balance due\"].map(escape).join(\",\"), ...buildBillingReportRows(bills, groupBy).map((row) => [row.label, row.billCount, row.totalBilled.toFixed(2), row.totalPaid.toFixed(2), row.balanceDue.toFixed(2)].map(escape).join(\",\"))].join(\"\\n\");\n}\n\nexport function BillingReport({ bills, groupBy = \"status\", heading = \"Billing report\", description = \"Billed, paid, and outstanding totals.\", appearance, className, style }: BillingReportProps): ReactElement {\n const rows = useMemo(() => buildBillingReportRows(bills, groupBy), [bills, groupBy]); const total = useMemo(() => summarizeBillingDashboard(bills), [bills]);\n const shellProps = {\n ...(appearance === undefined ? {} : { appearance }),\n className: `mbdash-report ${className ?? \"\"}`.trim(),\n ...(style === undefined ? {} : { style }),\n };\n return <Shell {...shellProps}><div className=\"mbdash-card\"><div className=\"mbdash-report-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">{description}</p></div><span className=\"mbdash-state\">By {groupBy}</span></div><div className=\"mbdash-table-wrap\"><table className=\"mbdash-table\"><thead><tr><th>Group</th><th>Bills</th><th className=\"mbdash-money\">Billed</th><th className=\"mbdash-money\">Paid</th><th className=\"mbdash-money\">Balance</th></tr></thead><tbody>{rows.map((row) => <tr key={row.key}><td><strong>{row.label}</strong></td><td>{row.billCount}</td><td className=\"mbdash-money\">{money(row.totalBilled)}</td><td className=\"mbdash-money\">{money(row.totalPaid)}</td><td className=\"mbdash-money\">{money(row.balanceDue)}</td></tr>)}<tr className=\"mbdash-report-total\"><td>Total</td><td>{total.bills}</td><td className=\"mbdash-money\">{money(total.totalBilled)}</td><td className=\"mbdash-money\">{money(total.totalPaid)}</td><td className=\"mbdash-money\">{money(total.outstanding)}</td></tr></tbody></table></div></div></Shell>;\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useMemo } from \"react\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { billAgingBucket, type BillAgingBucketId, type BillingDashboardBill } from \"./billing-dashboard\";\n\nexport type BillStatusAgingCell = {\n state: string;\n bucket: BillAgingBucketId | \"total\";\n count: number;\n balance: number;\n bills: BillingDashboardBill[];\n};\n\nexport type BillStatusAgingRow = {\n state: string;\n label: string;\n cells: BillStatusAgingCell[];\n total: BillStatusAgingCell;\n};\n\nexport type BillStatusAgingMatrixData = {\n rows: BillStatusAgingRow[];\n columnTotals: BillStatusAgingCell[];\n grandTotal: BillStatusAgingCell;\n};\n\nexport type BillStatusAgingMatrixProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n description?: ReactNode;\n /** Lifecycle-first row order; unknown states append alphabetically. */\n stateOrder?: string[];\n /** Show outstanding balance under each count. Default true. */\n showBalances?: boolean;\n onSelectCell?: (cell: BillStatusAgingCell) => void;\n};\n\nexport const BILL_STATUS_AGING_BUCKETS: { id: BillAgingBucketId; label: string }[] = [\n { id: \"current\", label: \"0–30 days\" },\n { id: \"31-60\", label: \"31–60 days\" },\n { id: \"61-90\", label: \"61–90 days\" },\n { id: \"91+\", label: \"91+ days\" },\n];\n\nconst DEFAULT_STATE_ORDER = [\n \"draft\",\n \"incomplete\",\n \"created\",\n \"sent\",\n \"submitted\",\n \"accepted\",\n \"processed\",\n \"paid\",\n \"underpaid\",\n \"denied\",\n \"rejected\",\n \"appealing\",\n \"second_review\",\n \"ibr\",\n \"lien\",\n \"closed\",\n];\n\nconst money = (value: number) => Number(value || 0).toLocaleString(undefined, { style: \"currency\", currency: \"USD\" });\nconst stateLabel = (state: string) => state.replaceAll(\"_\", \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n\nconst emptyCell = (state: string, bucket: BillAgingBucketId | \"total\"): BillStatusAgingCell => ({ state, bucket, count: 0, balance: 0, bills: [] });\n\nexport function buildBillStatusAgingMatrix(\n bills: BillingDashboardBill[],\n stateOrder: string[] = DEFAULT_STATE_ORDER,\n now = new Date(),\n): BillStatusAgingMatrixData {\n const orderIndex = new Map(stateOrder.map((state, index) => [state.toLowerCase(), index]));\n const states = [...new Set(bills.map((bill) => bill.state))].sort((a, b) => {\n const left = orderIndex.get(a.toLowerCase()) ?? stateOrder.length;\n const right = orderIndex.get(b.toLowerCase()) ?? stateOrder.length;\n return left - right || a.localeCompare(b);\n });\n const columnTotals = BILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(\"all\", bucket.id));\n const grandTotal = emptyCell(\"all\", \"total\");\n const rows = states.map((state) => {\n const cells = BILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(state, bucket.id));\n const total = emptyCell(state, \"total\");\n return { state, label: stateLabel(state), cells, total };\n });\n const rowByState = new Map(rows.map((row) => [row.state, row]));\n for (const bill of bills) {\n const row = rowByState.get(bill.state)!;\n const bucketIndex = BILL_STATUS_AGING_BUCKETS.findIndex((bucket) => bucket.id === billAgingBucket(bill, now));\n const balance = Number(bill.balanceDue || 0);\n for (const cell of [row.cells[bucketIndex]!, row.total, columnTotals[bucketIndex]!, grandTotal]) {\n cell.count += 1;\n cell.balance += balance;\n cell.bills.push(bill);\n }\n }\n return { rows, columnTotals, grandTotal };\n}\n\nexport function buildBillStatusAgingCsv(bills: BillingDashboardBill[], stateOrder?: string[]): string {\n const matrix = buildBillStatusAgingMatrix(bills, stateOrder);\n const escape = (value: string | number) => `\"${String(value).replaceAll('\"', '\"\"')}\"`;\n const header = [\"Status\", ...BILL_STATUS_AGING_BUCKETS.map((bucket) => bucket.label), \"Total\"];\n const lines = matrix.rows.map((row) => [row.label, ...row.cells.map((cell) => cell.count), row.total.count]);\n lines.push([\"Total\", ...matrix.columnTotals.map((cell) => cell.count), matrix.grandTotal.count]);\n return [header, ...lines].map((line) => line.map(escape).join(\",\")).join(\"\\n\");\n}\n\nconst css = `\n.mbmx{color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbmx *{box-sizing:border-box}.mbmx h2,.mbmx p{margin:0}\n.mbmx-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:16px}.mbmx-head h2{font-size:24px}.mbmx-copy{color:var(--mb-muted);margin-top:5px!important}\n.mbmx-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);overflow:auto}\n.mbmx-table{width:100%;border-collapse:collapse;min-width:640px}\n.mbmx-table th{padding:13px 16px;border-bottom:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;text-align:right}\n.mbmx-table th:first-child{text-align:left}\n.mbmx-table td{padding:0;border-bottom:1px solid var(--mb-border);border-left:1px solid color-mix(in srgb,var(--mb-border) 55%,transparent);text-align:right;vertical-align:middle}\n.mbmx-table td:first-child{border-left:0;padding:14px 16px;text-align:left;white-space:nowrap}\n.mbmx-table tr:last-child td{border-bottom:0}\n.mbmx-state{display:inline-flex;padding:4px 9px;border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-text);font-size:12px;font-weight:720}\n.mbmx-cell{display:block;width:100%;min-height:56px;padding:9px 16px;border:0;background:none;color:var(--mb-text);font:inherit;text-align:right}\n.mbmx-cell[data-clickable=true]{cursor:pointer}.mbmx-cell[data-clickable=true]:hover{background:color-mix(in srgb,var(--mb-accent) 8%,var(--mb-surface))}\n.mbmx-count{display:block;font-size:17px;font-weight:760;font-variant-numeric:tabular-nums}\n.mbmx-balance{display:block;margin-top:2px;color:var(--mb-muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}\n.mbmx-zero{color:var(--mb-muted)}\n.mbmx-total td,.mbmx-table td.mbmx-rowtotal{background:var(--mb-soft);font-weight:760}\n`;\n\nexport function BillStatusAgingMatrix({\n bills,\n heading = \"Bills by status and age\",\n description = \"Every bill grouped by lifecycle status, then by days outstanding.\",\n stateOrder,\n showBalances = true,\n onSelectCell,\n appearance,\n className = \"\",\n style,\n}: BillStatusAgingMatrixProps): ReactElement {\n const matrix = useMemo(() => buildBillStatusAgingMatrix(bills, stateOrder), [bills, stateOrder]);\n const clickable = Boolean(onSelectCell);\n const cell = (data: BillStatusAgingCell, key: string, isTotal = false): ReactElement => (\n <td key={key} className={isTotal ? \"mbmx-rowtotal\" : undefined}>\n <button\n type=\"button\"\n className=\"mbmx-cell\"\n data-clickable={clickable && data.count > 0}\n onClick={() => data.count > 0 && onSelectCell?.(data)}\n disabled={!clickable || data.count === 0}\n aria-label={`${stateLabel(data.state)} · ${data.bucket === \"total\" ? \"all ages\" : data.bucket}: ${data.count} bills`}\n >\n <span className={`mbmx-count ${data.count === 0 ? \"mbmx-zero\" : \"\"}`.trim()}>{data.count === 0 ? \"—\" : data.count}</span>\n {showBalances && data.count > 0 ? <span className=\"mbmx-balance\">{money(data.balance)}</span> : null}\n </button>\n </td>\n );\n return (\n <div className={`mbmx ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}>\n <style>{css}</style>\n <div className=\"mbmx-head\"><div><h2>{heading}</h2><p className=\"mbmx-copy\">{description}</p></div></div>\n <div className=\"mbmx-card\">\n <table className=\"mbmx-table\">\n <thead><tr><th>Status</th>{BILL_STATUS_AGING_BUCKETS.map((bucket) => <th key={bucket.id}>{bucket.label}</th>)}<th>Total</th></tr></thead>\n <tbody>\n {matrix.rows.map((row) => (\n <tr key={row.state}>\n <td><span className=\"mbmx-state\">{row.label}</span></td>\n {row.cells.map((data) => cell(data, `${row.state}-${data.bucket}`))}\n {cell(row.total, `${row.state}-total`, true)}\n </tr>\n ))}\n <tr className=\"mbmx-total\">\n <td>Total</td>\n {matrix.columnTotals.map((data) => cell(data, `all-${data.bucket}`))}\n {cell(matrix.grandTotal, \"all-total\", true)}\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","\"use client\";\n\n// \"Bill Tasks\" dashboard: one theme-aware card with a semantic marker per\n// task section (Payment Due, No Response, Denied, …), rows bucketed by age in\n// days with accent-tinted bucket headers, per-cell click-through counts, and a\n// closing grand-total card. Purely props-driven: hosts aggregate their own\n// work items with buildBillTasksDashboard (re-exported from @mindbill/browser)\n// so MindBill itself can dogfood the surface without the partner API.\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport {\n BILL_TASKS_AGING_BUCKETS,\n type BillTasksAgingBucket,\n type BillTasksDashboardData,\n type BillTasksDashboardRow,\n type BillTasksDashboardSection,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport {\n BILL_TASKS_AGING_BUCKETS,\n billTasksAgingBucketIndex,\n buildBillTasksDashboard,\n} from \"@mindbill/browser\";\nexport type {\n BillTasksAgingBucket,\n BillTasksDashboardData,\n BillTasksDashboardItem,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardSectionInput,\n BillTasksDashboardTone,\n} from \"@mindbill/browser\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillTasksDashboardCell = {\n sectionId: string;\n rowId: string;\n /** Null for a row's \"Task Total\" cell (all buckets). */\n bucketId: string | null;\n refs: string[];\n count: number;\n};\n\nexport type BillTasksDashboardProps = SurfaceProps & {\n data: BillTasksDashboardData;\n /** Must match the buckets passed to buildBillTasksDashboard. */\n buckets?: BillTasksAgingBucket[];\n heading?: ReactNode;\n grandTotalLabel?: string;\n /** Column heading; use \"Bill Total\" when displaying bills without tasks. */\n totalLabel?: string;\n /** Plural noun for accessible count labels, for example \"bills\". */\n itemLabel?: string;\n emptyLabel?: string;\n onSelectCell?: (cell: BillTasksDashboardCell) => void;\n /** Rendered above the sections — hosts pass their own filters. */\n toolbar?: ReactNode;\n footnote?: ReactNode;\n};\n\nconst css = `\n.mbtk{color:var(--mb-text);font-family:var(--mb-font);font-size:14px}.mbtk *{box-sizing:border-box}.mbtk h2,.mbtk p{margin:0}\n.mbtk-heading{margin-bottom:14px}.mbtk-heading h2{font-size:18px;font-weight:650;line-height:1.4}\n.mbtk-toolbar{margin-bottom:14px}\n.mbtk-section{margin-bottom:var(--mbtk-section-gap);border:var(--mbtk-border-width) solid var(--mbtk-border);border-radius:var(--mbtk-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);overflow:hidden}\n.mbtk-grid{display:grid;grid-template-columns:var(--mbtk-cols);gap:0 10px;align-items:center;padding:0 16px}\n.mbtk-head{padding:12px 16px;border-bottom:1px solid var(--mb-border)}\n.mbtk-title{display:flex;align-items:center;gap:9px;min-width:0}\n.mbtk-dot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--mbtk-tone,var(--mb-muted))}\n.mbtk-title-text{min-width:0}\n.mbtk-title-text strong{display:block;font-size:14px;line-height:1.3}\n.mbtk-basis{display:block;color:var(--mb-muted);font-size:12px;line-height:1.35}\n.mbtk-pill{justify-self:stretch;padding:5px 6px;border-radius:var(--mbtk-aging-radius);background:var(--mb-soft);background:var(--mbtk-pill);color:var(--mbtk-aging-text);font-size:11px;font-weight:750;line-height:1.25;text-align:center;white-space:nowrap}\n.mbtk-colhead{justify-self:stretch;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;text-align:center;white-space:nowrap}\n.mbtk-row{border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);min-height:var(--mbtk-row-height)}\n.mbtk-row:first-of-type{border-top:0}\n.mbtk-rowlabel{color:var(--mb-muted);font-size:13px;line-height:1.35;padding:9px 0;overflow-wrap:anywhere}\n.mbtk-count{text-align:center;font-variant-numeric:tabular-nums}\n.mbtk-zero{color:var(--mb-muted)}\n.mbtk-bal{display:block;color:var(--mb-muted);font-size:11px;font-weight:550;line-height:1.35;white-space:nowrap;font-variant-numeric:tabular-nums}\n.mbtk-link{border:0;background:none;padding:6px 8px;min-height:44px;min-width:44px;color:var(--mbtk-link);font:inherit;font-weight:750;font-variant-numeric:tabular-nums;cursor:pointer;border-radius:var(--mb-control-radius)}\n.mbtk-link:hover{text-decoration:underline;background:color-mix(in srgb,var(--mb-accent) 8%,transparent)}\n.mbtk-link:focus-visible{outline:2px solid var(--mbtk-link);outline-offset:2px;text-decoration:underline}\n.mbtk-total{text-align:center}\n.mbtk-totals{background:var(--mb-soft);border-top:1px solid var(--mb-border);font-weight:760}\n.mbtk-totals .mbtk-rowlabel{color:var(--mb-text);font-weight:760}\n.mbtk-empty{padding:22px 16px;color:var(--mb-muted);text-align:center}\n.mbtk-grand .mbtk-rowlabel{color:var(--mb-text);font-size:14px;font-weight:800}\n.mbtk-grand{min-height:52px}\n.mbtk-footnote{margin-top:12px;color:var(--mb-muted);font-size:12.5px}\n@media(max-width:760px){.mbtk-pill,.mbtk-colhead,.mbtk-count{display:none}.mbtk-grid{grid-template-columns:minmax(0,1fr) auto}}\n`;\n\nconst USD = new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" });\n\nfunction cellBody(count: number, balance: number | undefined): ReactNode {\n return <><span>{count}</span>{count > 0 && balance !== undefined && Number.isFinite(balance)\n ? <span className=\"mbtk-bal\">{USD.format(balance)}</span> : null}</>;\n}\n\nfunction cellButton(\n key: string,\n count: number,\n className: string,\n label: string,\n onSelect: (() => void) | null,\n balance: number | undefined,\n): ReactElement {\n const ariaLabel = count > 0 && balance !== undefined && Number.isFinite(balance)\n ? `${label} · ${USD.format(balance)} due` : label;\n if (count > 0 && onSelect) {\n return (\n <span key={key} className={className}>\n <button type=\"button\" className=\"mbtk-link\" aria-label={ariaLabel} onClick={onSelect}>{cellBody(count, balance)}</button>\n </span>\n );\n }\n return <span key={key} className={`${className}${count === 0 ? \" mbtk-zero\" : \"\"}`}>{cellBody(count, balance)}</span>;\n}\n\nfunction TaskRow({\n sectionId,\n row,\n buckets,\n onSelectCell,\n itemLabel,\n}: {\n sectionId: string;\n row: BillTasksDashboardRow;\n buckets: BillTasksAgingBucket[];\n onSelectCell?: ((cell: BillTasksDashboardCell) => void) | undefined;\n itemLabel: string;\n}): ReactElement {\n const allRefs = row.refs.flat();\n return (\n <div className=\"mbtk-grid mbtk-row\">\n <span className=\"mbtk-rowlabel\">{row.label}</span>\n {buckets.map((bucket, index) => {\n const count = row.counts[index] ?? 0;\n return cellButton(\n bucket.id,\n count,\n \"mbtk-count\",\n `${row.label} · ${bucket.label}: ${count} ${itemLabel}`,\n onSelectCell\n ? () => onSelectCell({ sectionId, rowId: row.id, bucketId: bucket.id, refs: row.refs[index] ?? [], count })\n : null,\n row.balances?.[index],\n );\n })}\n {cellButton(\n \"task-total\",\n row.total,\n \"mbtk-total\",\n `${row.label} · all ages: ${row.total} ${itemLabel}`,\n onSelectCell\n ? () => onSelectCell({ sectionId, rowId: row.id, bucketId: null, refs: allRefs, count: row.total })\n : null,\n row.balanceTotal,\n )}\n </div>\n );\n}\n\nfunction SectionCard({\n section,\n buckets,\n emptyLabel,\n onSelectCell,\n totalLabel,\n itemLabel,\n}: {\n section: BillTasksDashboardSection;\n buckets: BillTasksAgingBucket[];\n emptyLabel: ReactNode;\n onSelectCell?: ((cell: BillTasksDashboardCell) => void) | undefined;\n totalLabel: string;\n itemLabel: string;\n}): ReactElement {\n return (\n <section\n className=\"mbtk-section\"\n style={{ \"--mbtk-tone\": `var(--mbtk-${section.tone})` } as CSSProperties}\n aria-label={section.label}\n >\n <div className=\"mbtk-grid mbtk-head\">\n <span className=\"mbtk-title\">\n <i className=\"mbtk-dot\" aria-hidden=\"true\" />\n <span className=\"mbtk-title-text\">\n <strong>{section.label}</strong>\n <span className=\"mbtk-basis\">by {section.agingBasisLabel}</span>\n </span>\n </span>\n {buckets.map((bucket, index) => (\n <span\n key={bucket.id}\n className=\"mbtk-pill\"\n style={{ \"--mbtk-pill\": `var(--mbtk-aging-${Math.min(index + 1, 5)})` } as CSSProperties}\n >\n {bucket.label}\n </span>\n ))}\n <span className=\"mbtk-colhead\">{totalLabel}</span>\n </div>\n {section.empty ? (\n <p className=\"mbtk-empty\">{emptyLabel}</p>\n ) : (\n <>\n {section.rows.map((row) => (\n <TaskRow key={row.id} sectionId={section.id} row={row} buckets={buckets} onSelectCell={onSelectCell} itemLabel={itemLabel} />\n ))}\n <div className=\"mbtk-grid mbtk-row mbtk-totals\">\n <span className=\"mbtk-rowlabel\">Total</span>\n {buckets.map((bucket, index) => (\n <span key={bucket.id} className=\"mbtk-count\">{cellBody(section.totals[index] ?? 0, section.balanceTotals?.[index])}</span>\n ))}\n <span className=\"mbtk-total\">{cellBody(section.total, section.balanceTotal)}</span>\n </div>\n </>\n )}\n </section>\n );\n}\n\nexport function BillTasksDashboard({\n data,\n buckets = BILL_TASKS_AGING_BUCKETS,\n heading,\n grandTotalLabel = \"Bill Tasks Total\",\n totalLabel = \"Task Total\",\n itemLabel = \"tasks\",\n emptyLabel = \"No Tasks\",\n onSelectCell,\n toolbar,\n footnote,\n appearance,\n className = \"\",\n style,\n}: BillTasksDashboardProps): ReactElement {\n const columns = `minmax(150px,1.6fr) repeat(${buckets.length},minmax(84px,1fr)) minmax(84px,1fr)`;\n return (\n <div\n className={`mbtk ${className}`.trim()}\n style={{ ...mindBillAppearanceStyle(appearance), \"--mbtk-cols\": columns, ...style } as CSSProperties}\n >\n <style>{css}</style>\n {heading ? <div className=\"mbtk-heading\">{typeof heading === \"string\" ? <h2>{heading}</h2> : heading}</div> : null}\n {toolbar ? <div className=\"mbtk-toolbar\">{toolbar}</div> : null}\n {data.sections.map((section) => (\n <SectionCard\n key={section.id}\n section={section}\n buckets={buckets}\n emptyLabel={emptyLabel}\n onSelectCell={onSelectCell}\n totalLabel={totalLabel}\n itemLabel={itemLabel}\n />\n ))}\n <section className=\"mbtk-section is-grand\" aria-label={grandTotalLabel}>\n <div className=\"mbtk-grid mbtk-row mbtk-grand mbtk-totals\">\n <span className=\"mbtk-rowlabel\">{grandTotalLabel}</span>\n {buckets.map((bucket, index) => (\n <span key={bucket.id} className=\"mbtk-count\">{cellBody(data.grandTotals[index] ?? 0, data.grandBalanceTotals?.[index])}</span>\n ))}\n <span className=\"mbtk-total\">{cellBody(data.grandTotal, data.grandBalanceTotal)}</span>\n </div>\n </section>\n {footnote ? <p className=\"mbtk-footnote\">{footnote}</p> : null}\n </div>\n );\n}\n","\"use client\";\n\n// Submissions ribbon: a horizontal scrollable row of chips —\n// one per bill submission (Original Bill, Second Review, Duplicate Bill, …) —\n// each with an optional deadline badge and up to three small label/value meta\n// pairs (delivery route, sent date, acknowledgement). Purely presentational;\n// billSubmissionsRibbonFromHistory maps MindBill's presented history rows\n// (kind === \"submission\") into ribbon items.\n\nimport type { CSSProperties, ReactElement } from \"react\";\nimport type { BillAttemptSummary, BillHistoryEntry } from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillSubmissionRibbonItem = {\n id: string;\n /** Submission history row to reveal when this attempt is selected. */\n historyEntryId?: string;\n /** \"Original Bill\" | \"Second Review\" | \"Duplicate Bill\" | … */\n label: string;\n /** Small rounded badge, e.g. \"Denial in 3 working days\". */\n badge?: string;\n /** Semantic color for the status badge. */\n badgeTone?: \"neutral\" | \"success\" | \"warning\" | \"danger\";\n /** Up to three label/value pairs rendered under the label. */\n meta?: Array<{ label: string; value: string }>;\n active?: boolean;\n href?: string;\n};\n\nexport type BillSubmissionsRibbonProps = SurfaceProps & {\n items: BillSubmissionRibbonItem[];\n onSelect?: (item: BillSubmissionRibbonItem) => void;\n};\n\n/** Maps a presented-history submission summary to its delivery route word. */\nexport function billSubmissionsRibbonDeliveryLabel(summary: string): string {\n if (/electronically sent/i.test(summary)) return \"e-Bill (837)\";\n if (/faxed/i.test(summary)) return \"Fax\";\n if (/emailed/i.test(summary)) return \"Email\";\n if (/mailed/i.test(summary)) return \"Mail\";\n return \"Sent\";\n}\n\nfunction ribbonDate(iso: string): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return iso;\n return new Intl.DateTimeFormat(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }).format(parsed);\n}\n\nfunction attemptStatus(\n entries: readonly BillHistoryEntry[],\n attempt?: BillAttemptSummary,\n): Pick<BillSubmissionRibbonItem, \"badge\" | \"badgeTone\" | \"meta\"> {\n // Each attempt's server-resolved status includes events after its ACK.\n // This applies to historical attempts as well as the current bill.\n if (attempt?.status) return {\n badge: attempt.status.replaceAll(\"_\", \" \"),\n badgeTone: attempt.status === \"rejected\" ? \"danger\" : /accepted|processed|paid/.test(attempt.status) ? \"success\" : \"neutral\",\n };\n const latestAck = [...entries].reverse().find((entry) => entry.kind === \"ack\");\n const closed = [...entries].reverse().find((entry) => entry.kind === \"close\");\n if (closed) return { badge: \"Closed\", badgeTone: \"neutral\", meta: [{ label: \"Closed\", value: ribbonDate(closed.date) }] };\n const processed = [...entries].reverse().find((entry) => entry.kind === \"eor\" || entry.kind === \"payment\");\n if (processed) return { badge: \"Processed\", badgeTone: \"success\", meta: [{ label: \"Processed\", value: ribbonDate(processed.date) }] };\n const rejected = latestAck && [latestAck].find((entry) =>\n entry.kind === \"ack\" && (/reject|deni|error/i.test(entry.action) || entry.tone === \"problem\"),\n );\n if (rejected) return {\n badge: rejected.action,\n badgeTone: \"danger\",\n meta: [{ label: \"Rejected\", value: ribbonDate(rejected.date) }],\n };\n\n const complianceDueDate = entries\n .flatMap((entry) => entry.details?.complianceDueDates ?? [])\n .find((due) => /payment|working day/i.test(due.text));\n if (complianceDueDate) return {\n badge: complianceDueDate.text,\n badgeTone: \"warning\",\n meta: [{ label: \"Effective date\", value: ribbonDate(complianceDueDate.date) }],\n };\n\n const accepted = latestAck && [latestAck].find((entry) =>\n entry.kind === \"ack\" && (/accept/i.test(entry.action) || entry.tone === \"success\"),\n );\n if (accepted) return {\n badge: accepted.action,\n badgeTone: \"success\",\n meta: [{ label: \"Accepted\", value: ribbonDate(accepted.date) }],\n };\n\n if (attempt?.ackLabel) return {\n badge: attempt.ackLabel,\n badgeTone: /reject|deni|error/i.test(attempt.ackLabel) ? \"danger\" : /accept/i.test(attempt.ackLabel) ? \"success\" : \"neutral\",\n ...(attempt.ackAt ? { meta: [{ label: /reject|deni|error/i.test(attempt.ackLabel) ? \"Rejected\" : \"Acknowledged\", value: ribbonDate(attempt.ackAt) }] } : {}),\n };\n\n return {};\n}\n\n/**\n * Builds one item per immutable submission attempt. Each card summarizes the\n * payer events following that attempt, while the full history remains unified.\n */\nexport function billSubmissionsRibbonFromHistory(\n history: BillHistoryEntry[],\n attempts: BillAttemptSummary[] = [],\n): BillSubmissionRibbonItem[] {\n if (attempts.length) {\n return attempts.map((attempt) => {\n const attemptEntries = history.filter((entry) => entry.attemptId === attempt.id);\n const submission = attemptEntries.find((entry) => entry.kind === \"submission\");\n const status = attemptStatus(attemptEntries, attempt);\n return {\n id: attempt.id,\n ...(submission ? { historyEntryId: submission.id } : {}),\n label: attempt.label,\n ...(status.badge ? { badge: status.badge } : {}),\n ...(status.badgeTone ? { badgeTone: status.badgeTone } : {}),\n meta: [\n { label: \"Delivery\", value: attempt.deliveryLabel ?? (submission ? billSubmissionsRibbonDeliveryLabel(submission.summary) : \"—\") },\n { label: \"Sent\", value: attempt.sentAt ? ribbonDate(attempt.sentAt) : submission ? ribbonDate(submission.date) : \"—\" },\n ...(status.meta ?? []),\n ],\n active: attempt.isCurrent,\n };\n });\n }\n\n const submissions = history\n .map((entry, index) => ({ entry, index }))\n .filter(({ entry }) => entry.kind === \"submission\");\n\n return submissions.map(({ entry, index }, submissionIndex) => {\n const nextSubmissionIndex = submissions[submissionIndex + 1]?.index ?? history.length;\n const status = attemptStatus(history.slice(index, nextSubmissionIndex));\n return {\n id: entry.id,\n historyEntryId: entry.id,\n label: entry.action,\n ...(status.badge ? { badge: status.badge } : {}),\n ...(status.badgeTone ? { badgeTone: status.badgeTone } : {}),\n meta: [\n { label: \"Delivery\", value: billSubmissionsRibbonDeliveryLabel(entry.summary) },\n { label: \"Sent\", value: ribbonDate(entry.date) },\n ...(status.meta ?? []),\n ],\n };\n });\n}\n\nconst css = `\n.mbsr{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;color:var(--mb-text);font-family:var(--mb-font);font-size:13px}\n.mbsr *{box-sizing:border-box}\n.mbsr-chip{flex:0 0 240px;display:grid;gap:7px;width:240px;min-width:min(240px,85vw);max-width:280px;padding:11px 13px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer}\n.mbsr-chip:hover{border-color:var(--mb-accent)}\n.mbsr-chip[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface));box-shadow:0 0 0 1px var(--mb-accent) inset}\n.mbsr-top{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;min-width:0}\n.mbsr-label{min-width:0;font-size:13.5px;font-weight:760;line-height:1.3;overflow-wrap:normal;word-break:normal}\n.mbsr-badge{justify-self:start;max-width:100%;padding:2px 8px;border:1px solid color-mix(in srgb,var(--mb-muted) 45%,var(--mb-border));border-radius:999px;background:var(--mb-soft);font-size:11px;font-weight:700;white-space:normal}\n.mbsr-badge[data-tone=success]{border-color:color-mix(in srgb,#23876f 52%,var(--mb-border));background:color-mix(in srgb,#23876f 11%,var(--mb-surface));color:#176452}\n.mbsr-badge[data-tone=warning]{border-color:color-mix(in srgb,var(--mb-warning) 55%,var(--mb-border));background:color-mix(in srgb,var(--mb-warning) 12%,var(--mb-surface))}\n.mbsr-badge[data-tone=danger]{border-color:color-mix(in srgb,var(--mb-danger) 45%,var(--mb-border));background:color-mix(in srgb,var(--mb-danger) 9%,var(--mb-surface));color:var(--mb-danger)}\n.mbsr-meta{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,auto);gap:2px 14px;justify-content:start}\n.mbsr-meta>span{display:grid;gap:1px;min-width:0}\n.mbsr-meta i{color:var(--mb-muted);font-size:10.5px;font-style:normal;font-weight:800;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap}\n.mbsr-meta b{font-size:12.5px;font-weight:700;white-space:nowrap}\n`;\n\nexport function BillSubmissionsRibbon({\n items,\n onSelect,\n appearance,\n className = \"\",\n style,\n}: BillSubmissionsRibbonProps): ReactElement {\n return (\n <div\n className={`mbsr ${className}`.trim()}\n style={mindBillAppearanceStyle(appearance, style)}\n role=\"list\"\n aria-label=\"Bill submissions\"\n >\n <style>{css}</style>\n {items.map((item) => {\n const content = (\n <>\n <span className=\"mbsr-top\">\n <span className=\"mbsr-label\">{item.label}</span>\n {item.badge ? <span className=\"mbsr-badge\" data-tone={item.badgeTone ?? \"neutral\"}>{item.badge}</span> : null}\n </span>\n {item.meta?.length ? (\n <span className=\"mbsr-meta\">\n {item.meta.slice(0, 3).map((pair) => (\n <span key={pair.label}><i>{pair.label}</i><b>{pair.value}</b></span>\n ))}\n </span>\n ) : null}\n </>\n );\n return item.href ? (\n <a\n key={item.id}\n className=\"mbsr-chip\"\n data-active={Boolean(item.active)}\n aria-current={item.active ? \"true\" : undefined}\n href={item.href}\n role=\"listitem\"\n onClick={() => onSelect?.(item)}\n >\n {content}\n </a>\n ) : (\n <button\n key={item.id}\n type=\"button\"\n className=\"mbsr-chip\"\n data-active={Boolean(item.active)}\n aria-pressed={Boolean(item.active)}\n role=\"listitem\"\n onClick={() => onSelect?.(item)}\n >\n {content}\n </button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\n// \"Report Bill Status\" dialog: call the Claims Administrator /\n// Bill Review vendor (contacts in section 1), verify the submission receipt\n// the host renders in section 2, then record the reported payment status plus\n// the call details in section 3. Presentational: the host posts the resulting\n// ReportBillStatusInput through its own lifecycle action call.\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport {\n REPORT_BILL_STATUS_OPTIONS,\n type BillClaimsAdministratorContact,\n type BillClaimsAdministratorDirectory,\n type ReportBillStatusId,\n type ReportBillStatusInput,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\n// The five status options and their input shape are framework-neutral and live\n// in @mindbill/browser; re-exported here so existing imports keep working.\nexport { REPORT_BILL_STATUS_OPTIONS } from \"@mindbill/browser\";\nexport type { ReportBillStatusId, ReportBillStatusInput } from \"@mindbill/browser\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type ReportBillStatusDialogProps = SurfaceProps & {\n title?: ReactNode;\n claimsAdmin?: {\n name: string;\n hoursOfOperation?: string;\n phones?: Array<{ label: string; value: string }>;\n };\n billReview?: { name: string; phone?: string };\n /** Complete partner-safe payer directory details shown before the biller calls. */\n directory?: BillClaimsAdministratorDirectory;\n /** Host renders its submission receipt, e.g. a BillHistoryTable. */\n receipt?: ReactNode;\n submitting?: boolean;\n error?: string | null;\n onCancel: () => void;\n onSave: (input: ReportBillStatusInput) => void;\n};\n\nconst css = `\n.mbbs-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,30,40,.45)}\n.mbbs{display:grid;gap:18px;width:min(860px,100%);max-height:min(90vh,960px);overflow:auto;overscroll-behavior:contain;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);color:var(--mb-text);font-family:var(--mb-font);font-size:14px;box-shadow:0 24px 60px rgba(17,38,49,.28)}\n.mbbs *{box-sizing:border-box}\n.mbbs-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.mbbs-title{margin:0;font-size:20px;font-weight:760}\n.mbbs-close{border:0;background:transparent;color:var(--mb-muted);font-size:22px;line-height:1;cursor:pointer}\n.mbbs-section h4{margin:0 0 4px;font-size:15px}\n.mbbs-copy{margin:0 0 10px;color:var(--mb-muted);font-size:13px}\n.mbbs-contacts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n.mbbs-contact{border:1px solid var(--mb-border);border-left:4px solid var(--mb-accent);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));padding:12px 14px}\n.mbbs-contact h5{margin:0 0 6px;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}\n.mbbs-contact dl{display:grid;gap:4px;margin:0}\n.mbbs-contact dl>div{display:grid;grid-template-columns:130px minmax(0,1fr);gap:10px}\n.mbbs-contact dt{color:var(--mb-muted);font-size:12.5px}\n.mbbs-contact dd{margin:0;font-weight:700;overflow-wrap:anywhere}\n.mbbs-contact a,.mbbs-directory a{color:var(--mb-accent);text-decoration-thickness:1px;text-underline-offset:2px}\n.mbbs-directory{display:grid;gap:10px}\n.mbbs-directory-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}\n.mbbs-directory-card{min-width:0;padding:12px 14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface))}\n.mbbs-directory-card.wide{grid-column:1/-1}\n.mbbs-directory-card h5{margin:0 0 8px;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}\n.mbbs-directory-card dl{display:grid;gap:7px;margin:0}\n.mbbs-directory-card dl>div{display:grid;grid-template-columns:120px minmax(0,1fr);gap:10px}\n.mbbs-directory-card dt{color:var(--mb-muted);font-size:12px}\n.mbbs-directory-card dd{min-width:0;margin:0;font-weight:650;overflow-wrap:anywhere}\n.mbbs-directory-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}\n.mbbs-directory-list li{display:grid;gap:2px;padding-top:8px;border-top:1px solid var(--mb-border)}\n.mbbs-directory-list li:first-child{padding-top:0;border-top:0}\n.mbbs-directory-list small{color:var(--mb-muted);line-height:1.4}\n.mbbs-receipt{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:10px}\n.mbbs-report{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:18px}\n.mbbs-options{display:grid;gap:8px;align-content:start}\n.mbbs-option{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);cursor:pointer}\n.mbbs-option[data-selected=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}\n.mbbs-option input{margin-top:3px;accent-color:var(--mb-accent)}\n.mbbs-option-label{display:block;font-weight:750;line-height:1.35}\n.mbbs-option-copy{display:block;margin-top:2px;color:var(--mb-muted);font-size:12.5px;line-height:1.4}\n.mbbs-fields{display:grid;gap:10px;align-content:start}\n.mbbs-field{display:grid;gap:5px;font-size:13px}\n.mbbs-label{font-weight:650}\n.mbbs-input,.mbbs-textarea{width:100%;padding:9px 11px;border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-input);color:var(--mb-text);font:inherit;font-size:14px}\n.mbbs-textarea{resize:vertical;min-height:74px}\n.mbbs-input:focus,.mbbs-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbbs-alert{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}\n.mbbs-actions{display:flex;justify-content:flex-end;gap:10px}\n.mbbs-cancel{min-height:42px;padding:9px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}\n.mbbs-save{min-height:42px;min-width:130px;padding:9px 18px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:760;cursor:pointer}\n.mbbs-save:disabled,.mbbs-cancel:disabled{opacity:.6;cursor:not-allowed}\n@media(max-width:700px){.mbbs-contacts,.mbbs-directory-grid,.mbbs-report{grid-template-columns:1fr}.mbbs-directory-card.wide{grid-column:auto}.mbbs-directory-card dl>div{grid-template-columns:1fr;gap:2px}}\n`;\n\nfunction externalHref(value: string): string {\n return /^https?:\\/\\//i.test(value) ? value : `https://${value}`;\n}\n\nfunction contactLine(contact: BillClaimsAdministratorContact, key: number): ReactElement {\n return <li key={key}>\n <strong>{contact.name || \"Contact\"}</strong>\n <span>\n {contact.phone ? <><a href={`tel:${contact.phone}`}>{contact.phone}</a>{\" \"}</> : null}\n {contact.email ? <><a href={`mailto:${contact.email}`}>{contact.email}</a>{\" \"}</> : null}\n {contact.portalUrl ? <><a href={externalHref(contact.portalUrl)} target=\"_blank\" rel=\"noreferrer\">Open portal</a>{\" \"}</> : null}\n {contact.fax ? <>Fax {contact.fax}{\" \"}</> : null}\n {contact.address || null}\n </span>\n {contact.note ? <small>{contact.note}</small> : null}\n </li>;\n}\n\nfunction DirectoryDetails({ directory }: { directory: BillClaimsAdministratorDirectory }): ReactElement {\n const aliases = directory.aliases?.filter(Boolean).join(\", \");\n const affiliates = directory.affiliatedEntities?.filter(Boolean).join(\", \");\n return <div className=\"mbbs-directory-grid\">\n <section className=\"mbbs-directory-card wide\"><h5>Claims administrator</h5><dl>\n {directory.name ? <div><dt>Name</dt><dd>{directory.name}</dd></div> : null}\n {directory.type ? <div><dt>Type</dt><dd>{directory.type}</dd></div> : null}\n {directory.description ? <div><dt>Description</dt><dd>{directory.description}</dd></div> : null}\n {directory.website ? <div><dt>Website</dt><dd><a href={externalHref(directory.website)} target=\"_blank\" rel=\"noreferrer\">{directory.website}</a></dd></div> : null}\n {directory.hours ? <div><dt>Hours</dt><dd>{directory.hours}</dd></div> : null}\n {directory.telephoneNumbers?.length ? <div><dt>Phone</dt><dd>{directory.telephoneNumbers.map((value, index) => <span key={value}>{index ? \", \" : \"\"}<a href={`tel:${value}`}>{value}</a></span>)}</dd></div> : null}\n {directory.emailAddresses?.length ? <div><dt>Email</dt><dd>{directory.emailAddresses.map((value, index) => <span key={value}>{index ? \", \" : \"\"}<a href={`mailto:${value}`}>{value}</a></span>)}</dd></div> : null}\n {directory.webPortals?.length ? <div><dt>Portals</dt><dd>{directory.webPortals.map((value, index) => <span key={value}>{index ? \", \" : \"\"}<a href={externalHref(value)} target=\"_blank\" rel=\"noreferrer\">Open portal {index + 1}</a></span>)}</dd></div> : null}\n {aliases ? <div><dt>Also known as</dt><dd>{aliases}</dd></div> : null}\n {affiliates ? <div><dt>Affiliates</dt><dd>{affiliates}</dd></div> : null}\n {directory.claimNumberHint ? <div><dt>Claim number</dt><dd>{directory.claimNumberHint}</dd></div> : null}\n {directory.billProcessingWorkflow ? <div><dt>Workflow</dt><dd>{directory.billProcessingWorkflow}</dd></div> : null}\n {directory.billProcessingWorkflowNotes ? <div><dt>Workflow notes</dt><dd>{directory.billProcessingWorkflowNotes}</dd></div> : null}\n </dl></section>\n {directory.billReview?.length ? <section className=\"mbbs-directory-card\"><h5>Bill review</h5><ul className=\"mbbs-directory-list\">{directory.billReview.map(contactLine)}</ul></section> : null}\n {directory.authorization?.length || directory.authorizationNotice ? <section className=\"mbbs-directory-card\"><h5>Authorization</h5>{directory.authorizationNotice ? <p className=\"mbbs-copy\">{directory.authorizationNotice}</p> : null}<ul className=\"mbbs-directory-list\">{(directory.authorization ?? []).map(contactLine)}</ul></section> : null}\n {directory.mailingAddresses?.length ? <section className=\"mbbs-directory-card\"><h5>Mailing addresses</h5><ul className=\"mbbs-directory-list\">{directory.mailingAddresses.map((entry, index) => <li key={index}><strong>{entry.company || \"Mailing address\"}</strong><span>{entry.address}</span>{entry.notes ? <small>{entry.notes}</small> : null}{entry.submissionTypes?.length ? <small>Submission types: {entry.submissionTypes.join(\", \")}</small> : null}</li>)}</ul></section> : null}\n {directory.claimNumberPatterns?.length ? <section className=\"mbbs-directory-card\"><h5>Claim number patterns</h5><ul className=\"mbbs-directory-list\">{directory.claimNumberPatterns.map((entry, index) => <li key={index}><strong>{entry.pattern}</strong><span>{entry.length ? `Length ${entry.length}` : \"\"}{entry.example ? `${entry.length ? \" · \" : \"\"}Example ${entry.example}` : \"\"}</span></li>)}</ul></section> : null}\n {directory.payers?.length ? <section className=\"mbbs-directory-card wide\"><h5>Electronic billing routes</h5><ul className=\"mbbs-directory-list\">{directory.payers.map((payer, index) => <li key={`${payer.name}-${payer.payerId ?? index}`}><strong>{payer.name}</strong><span>{[payer.deliveryType || payer.route, payer.clearinghouse, payer.payerId ? `Payer ID ${payer.payerId}` : null].filter(Boolean).join(\" · \")}</span>{payer.hint ? <small>{payer.hint}</small> : null}</li>)}</ul></section> : null}\n </div>;\n}\n\nexport function ReportBillStatusDialog({\n title = \"Report Bill Status\",\n claimsAdmin,\n billReview,\n directory,\n receipt,\n submitting = false,\n error = null,\n onCancel,\n onSave,\n appearance,\n className = \"\",\n style,\n}: ReportBillStatusDialogProps): ReactElement {\n const [status, setStatus] = useState<ReportBillStatusId | null>(null);\n const [company, setCompany] = useState(\"\");\n const [representativeName, setRepresentativeName] = useState(\"\");\n const [representativeRole, setRepresentativeRole] = useState(\"\");\n const [phone, setPhone] = useState(\"\");\n const [callReference, setCallReference] = useState(\"\");\n const [note, setNote] = useState(\"\");\n\n // Close on Escape (unless a save is in flight — the caller owns that state).\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !submitting) onCancel();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onCancel, submitting]);\n\n const save = () => {\n if (!status) return;\n onSave({\n status,\n ...(company.trim() ? { company: company.trim() } : {}),\n ...(representativeName.trim() ? { representativeName: representativeName.trim() } : {}),\n ...(representativeRole.trim() ? { representativeRole: representativeRole.trim() } : {}),\n ...(phone.trim() ? { phone: phone.trim() } : {}),\n ...(callReference.trim() ? { callReference: callReference.trim() } : {}),\n ...(note.trim() ? { note: note.trim() } : {}),\n });\n };\n\n const field = (\n label: string,\n value: string,\n onChange: (next: string) => void,\n ): ReactElement => (\n <label className=\"mbbs-field\" key={label}>\n <span className=\"mbbs-label\">{label}</span>\n <input className=\"mbbs-input\" value={value} disabled={submitting} onChange={(event) => onChange(event.target.value)} />\n </label>\n );\n\n return (\n <div\n className=\"mbbs-overlay\"\n role=\"presentation\"\n onMouseDown={(event) => { if (event.target === event.currentTarget && !submitting) onCancel(); }}\n >\n <style>{css}</style>\n <div\n className={`mbbs ${className}`.trim()}\n style={mindBillAppearanceStyle(appearance, style)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={typeof title === \"string\" ? title : \"Report Bill Status\"}\n >\n <div className=\"mbbs-head\">\n <h3 className=\"mbbs-title\">{title}</h3>\n <button className=\"mbbs-close\" type=\"button\" aria-label=\"Close\" disabled={submitting} onClick={onCancel}>×</button>\n </div>\n\n {directory || claimsAdmin || billReview ? (\n <div className=\"mbbs-section\">\n <h4>1. Call Claims Administrator or Bill Review</h4>\n <p className=\"mbbs-copy\">Contact the payer to request the payment status of this bill.</p>\n {directory ? <DirectoryDetails directory={directory} /> : <div className=\"mbbs-contacts\">\n {claimsAdmin ? (\n <div className=\"mbbs-contact\">\n <h5>Claims Admin</h5>\n <dl>\n <div><dt>Name</dt><dd>{claimsAdmin.name}</dd></div>\n {claimsAdmin.hoursOfOperation ? <div><dt>Hours of Operation</dt><dd>{claimsAdmin.hoursOfOperation}</dd></div> : null}\n {(claimsAdmin.phones ?? []).map((entry) => (\n <div key={`${entry.label}-${entry.value}`}><dt>{entry.label}</dt><dd>{entry.value}</dd></div>\n ))}\n </dl>\n </div>\n ) : null}\n {billReview ? (\n <div className=\"mbbs-contact\">\n <h5>Bill Review</h5>\n <dl>\n <div><dt>Name</dt><dd>{billReview.name}</dd></div>\n {billReview.phone ? <div><dt>Phone</dt><dd>{billReview.phone}</dd></div> : null}\n </dl>\n </div>\n ) : null}\n </div>}\n </div>\n ) : null}\n\n {receipt ? (\n <div className=\"mbbs-section\">\n <h4>2. Review Bill Submission Receipt</h4>\n <p className=\"mbbs-copy\">Reference the submission receipt below when the payer asks how and when the bill was sent.</p>\n <div className=\"mbbs-receipt\">{receipt}</div>\n </div>\n ) : null}\n\n <div className=\"mbbs-section\">\n <h4>3. Report Bill Payment Status</h4>\n <p className=\"mbbs-copy\">Select the status reported by the payer, then record who provided it.</p>\n <div className=\"mbbs-report\">\n <div className=\"mbbs-options\" role=\"radiogroup\" aria-label=\"Reported bill payment status\">\n {REPORT_BILL_STATUS_OPTIONS.map((option) => (\n <label key={option.id} className=\"mbbs-option\" data-selected={status === option.id}>\n <input\n type=\"radio\"\n name=\"mbbs-status\"\n value={option.id}\n checked={status === option.id}\n disabled={submitting}\n onChange={() => setStatus(option.id)}\n />\n <span>\n <span className=\"mbbs-option-label\">{option.label}</span>\n <span className=\"mbbs-option-copy\">{option.description}</span>\n </span>\n </label>\n ))}\n </div>\n <div className=\"mbbs-fields\">\n {field(\"Company\", company, setCompany)}\n {field(\"Name\", representativeName, setRepresentativeName)}\n {field(\"Role\", representativeRole, setRepresentativeRole)}\n {field(\"Phone Number\", phone, setPhone)}\n {field(\"Call Reference Number\", callReference, setCallReference)}\n <label className=\"mbbs-field\">\n <span className=\"mbbs-label\">Message Note</span>\n <textarea className=\"mbbs-textarea\" value={note} disabled={submitting} onChange={(event) => setNote(event.target.value)} />\n </label>\n </div>\n </div>\n </div>\n\n {error ? <div className=\"mbbs-alert\" role=\"alert\">{error}</div> : null}\n\n <div className=\"mbbs-actions\">\n <button className=\"mbbs-cancel\" type=\"button\" disabled={submitting} onClick={onCancel}>Cancel</button>\n <button className=\"mbbs-save\" type=\"button\" disabled={submitting || !status} onClick={save}>\n {submitting ? \"Saving…\" : \"Save\"}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport {\n createOrganizationClient,\n type BillLifecycleSessionProvider,\n type OrganizationBillingProviderInput,\n type OrganizationClient,\n type OrganizationLocationInput,\n type OrganizationProfileData,\n type OrganizationRenderingProviderInput,\n} from \"@mindbill/browser\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { TaxIdInput, taxIdWrite } from \"./tax-id-input\";\nimport { W9Upload } from \"./w9-upload\";\n\n// Embeddable organization onboarding (INC-1470): capture the practice name,\n// tax ID, group NPI, billing provider, locations, and W-9 ONCE, saved straight\n// to MindBill through the partner browser session — the partner's users never\n// visit the MindBill dashboard. `BillingSettings` is the compact\n// edit-after-setup variant of the same surface.\n\nexport type OrganizationOnboardingProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n sessionEndpoint?: string;\n getSession?: BillLifecycleSessionProvider;\n apiBaseUrl?: string;\n heading?: ReactNode;\n description?: ReactNode;\n /** \"onboarding\" renders a stepper; \"settings\" stacks every section for editing. */\n variant?: \"onboarding\" | \"settings\";\n onSaved?: (profile: OrganizationProfileData) => void;\n onCompleted?: (profile: OrganizationProfileData) => void;\n onError?: (error: Error) => void;\n};\n\ntype StepId = \"practice\" | \"rendering\" | \"locations\" | \"w9\" | \"review\";\nconst STEPS: Array<{ id: StepId; label: string }> = [\n { id: \"practice\", label: \"Practice & billing\" },\n { id: \"rendering\", label: \"Rendering providers\" },\n { id: \"locations\", label: \"Locations\" },\n { id: \"w9\", label: \"W-9\" },\n { id: \"review\", label: \"Review\" },\n];\n\nconst css = `\n.mbob{color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbob *{box-sizing:border-box}.mbob h2,.mbob h3,.mbob p{margin:0}\n.mbob-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);padding:24px}\n.mbob-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:18px}.mbob-head h2{font-size:22px}.mbob-copy{color:var(--mb-muted);margin-top:5px!important}\n.mbob-steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}\n.mbob-step{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--mb-border);border-radius:999px;background:var(--mb-surface);padding:7px 13px;color:var(--mb-muted);font:inherit;font-size:13px;font-weight:700;cursor:pointer}\n.mbob-step[data-active=true]{border-color:var(--mb-accent);color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 8%,var(--mb-surface))}\n.mbob-step[data-done=true] i{color:var(--mb-success);font-style:normal}\n.mbob-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 22px;align-items:start}.mbob-span{grid-column:1/-1}\n.mbob-tax-id label{display:grid;gap:7px}.mbob-tax-id small{color:var(--mb-muted);font-weight:450;line-height:1.5}.mbob-tax-id button{justify-self:start;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);padding:8px 10px;font:inherit;cursor:pointer}\n.mbob-field{display:grid;gap:7px;font-size:13px;font-weight:720}\n.mbob-field input,.mbob-field select{width:100%;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);padding:10px 12px;color:var(--mb-text);font:inherit;font-weight:450}\n.mbob-field input:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbob-subhead{margin:20px 0 12px!important;padding-top:16px;border-top:1px solid var(--mb-border);font-size:15px}\n.mbob-loc{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:end;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding:16px 0}\n.mbob-loc:first-of-type{border-top:0}\n.mbob-primary{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--mb-muted);white-space:nowrap;padding-bottom:12px}\n.mbob-remove{border:0;background:transparent;color:var(--mb-muted);font-size:20px;cursor:pointer;padding-bottom:8px}\n.mbob-add,.mbob-secondary{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);padding:10px 14px;color:var(--mb-text);font:inherit;font-weight:700;cursor:pointer}\n.mbob-drop{display:grid;place-content:center;gap:6px;min-height:150px;border:2px dashed color-mix(in srgb,var(--mb-muted) 55%,transparent);border-radius:var(--mb-control-radius);text-align:center;cursor:pointer;position:relative}\n.mbob-drop input{position:absolute;inset:0;opacity:0;cursor:pointer}\n.mbob-drop span{color:var(--mb-muted);font-size:13px}\n.mbob-w9-current{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid color-mix(in srgb,var(--mb-success) 35%,var(--mb-border));border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-success) 8%,var(--mb-surface));padding:12px 14px;margin-bottom:14px}\n.mbob-w9-current span{color:var(--mb-muted);font-size:13px}\n.mbob-check{display:grid;gap:9px}\n.mbob-check-item{display:flex;align-items:center;gap:10px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:11px 14px}\n.mbob-check-item[data-complete=true]{border-color:color-mix(in srgb,var(--mb-success) 35%,var(--mb-border));background:color-mix(in srgb,var(--mb-success) 8%,var(--mb-surface))}\n.mbob-check-item i{font-style:normal}\n.mbob-actions{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:20px}\n.mbob-save{min-width:170px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);padding:12px 22px;font:inherit;font-weight:780;cursor:pointer}\n.mbob-save:disabled{opacity:.6;cursor:wait}\n.mbob-error{margin-top:14px;border-left:4px solid var(--mb-danger);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 8%,var(--mb-surface));padding:12px 14px;color:var(--mb-danger)}\n.mbob-status{color:var(--mb-muted)}\n.mbob-done{color:var(--mb-success);font-weight:750}\n@media(max-width:820px){.mbob-grid{grid-template-columns:1fr}.mbob-span{grid-column:auto}.mbob-loc{grid-template-columns:1fr 1fr;align-items:center}.mbob-loc>*{grid-column:auto}}\n`;\n\nconst blankLocation = (): OrganizationLocationInput => ({ name: \"\", street: \"\", city: \"\", state: \"\", zip: \"\", isPrimary: false });\nconst blankRendering = (): OrganizationRenderingProviderInput => ({ name: \"\", npi: \"\", specialty: \"\", taxonomy: \"\", active: true });\n\nasync function fileToBase64(file: File): Promise<string> {\n const buffer = new Uint8Array(await file.arrayBuffer());\n let binary = \"\";\n for (const byte of buffer) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\nexport function OrganizationOnboarding({\n appearance,\n className = \"\",\n style,\n sessionEndpoint = \"/api/mindbill/session\",\n getSession,\n apiBaseUrl,\n heading = \"Billing setup\",\n description = \"Practice identity, locations, and the W-9 — saved once, used on every bill.\",\n variant = \"onboarding\",\n onSaved,\n onCompleted,\n onError,\n}: OrganizationOnboardingProps): ReactElement {\n const client: OrganizationClient = useMemo(\n () =>\n createOrganizationClient({\n sessionEndpoint,\n ...(getSession ? { getSession } : {}),\n ...(apiBaseUrl ? { apiBaseUrl } : {}),\n }),\n [sessionEndpoint, getSession, apiBaseUrl],\n );\n\n const [profile, setProfile] = useState<OrganizationProfileData | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [step, setStep] = useState<StepId>(\"practice\");\n const [identity, setIdentity] = useState<{ name: string; legalName: string; taxId: string; npi: string; phone: string; email: string; taxIdType?: \"EIN\" | \"SSN\"; taxIdLast4?: string; taxIdConfigured?: boolean }>({ name: \"\", legalName: \"\", taxId: \"\", npi: \"\", phone: \"\", email: \"\" });\n const [provider, setProvider] = useState<OrganizationBillingProviderInput>({ name: \"\", taxId: \"\", npi: \"\", billType: \"Professional\", phone: \"\", billingStreet: \"\", billingCity: \"\", billingState: \"\", billingZip: \"\" });\n const [locations, setLocations] = useState<OrganizationLocationInput[]>([blankLocation()]);\n const [rendering, setRendering] = useState<OrganizationRenderingProviderInput>(blankRendering);\n const primaryGroup = useId();\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [savedStep, setSavedStep] = useState<Record<string, boolean>>({});\n const completedFired = useRef(false);\n\n const adoptProfile = useCallback((next: OrganizationProfileData) => {\n setProfile(next);\n setIdentity((current) => ({\n name: next.practiceIdentity.name ?? current.name,\n legalName: next.practiceIdentity.legalName ?? current.legalName,\n taxId: next.practiceIdentity.taxId ?? \"\",\n taxIdType: next.practiceIdentity.taxIdType ?? \"EIN\",\n taxIdLast4: next.practiceIdentity.taxIdLast4 ?? \"\",\n taxIdConfigured: next.practiceIdentity.taxIdConfigured ?? false,\n npi: next.practiceIdentity.npi ?? current.npi,\n phone: next.practiceIdentity.phone ?? current.phone,\n email: next.practiceIdentity.email ?? current.email,\n }));\n if (next.billingProviders[0]) setProvider({ billType: \"Professional\", ...next.billingProviders[0] });\n if (next.renderingProviders?.[0]) setRendering({ ...next.renderingProviders[0] });\n if (next.locations.length) setLocations(next.locations.map((item) => ({ ...item })));\n if (next.onboarding.complete && !completedFired.current) {\n completedFired.current = true;\n onCompleted?.(next);\n }\n }, [onCompleted]);\n\n useEffect(() => {\n let alive = true;\n client.getOrganization()\n .then((next) => { if (alive) { setLoadError(null); adoptProfile(next); } })\n .catch((caught) => {\n if (!alive) return;\n const failure = caught instanceof Error ? caught : new Error(\"The organization could not be loaded.\");\n setLoadError(failure.message);\n onError?.(failure);\n });\n return () => { alive = false; };\n }, [client, adoptProfile, onError]);\n\n const run = async (work: () => Promise<OrganizationProfileData>, stepId: StepId) => {\n setSaving(true);\n setError(null);\n try {\n const next = await work();\n adoptProfile(next);\n setSavedStep((current) => ({ ...current, [stepId]: true }));\n onSaved?.(next);\n if (variant === \"onboarding\") {\n const order: StepId[] = STEPS.map((item) => item.id);\n const nextStep = order[order.indexOf(stepId) + 1];\n if (nextStep) setStep(nextStep);\n }\n } catch (caught) {\n const failure = caught instanceof Error ? caught : new Error(\"Saving failed.\");\n setError(failure.message);\n onError?.(failure);\n } finally {\n setSaving(false);\n }\n };\n\n const savePractice = () =>\n run(() => {\n return client.saveBillingProfile({\n practiceIdentity: taxIdWrite(identity),\n ...(provider.name.trim() || provider.taxId?.trim() || provider.npi.trim() ? { billingProviders: [taxIdWrite(provider)] } : {}),\n });\n }, \"practice\");\n const saveLocations = () =>\n run(() => client.saveLocations(locations.filter((item) => item.name.trim() || item.street.trim())), \"locations\");\n const saveW9 = async (file: File) => {\n setSaving(true);\n try {\n const next = await client.saveW9({ filename: file.name, contentBase64: await fileToBase64(file) });\n adoptProfile(next);\n setSavedStep((current) => ({ ...current, w9: true }));\n onSaved?.(next);\n if (variant === \"onboarding\") setStep(\"review\");\n } catch (error) {\n onError?.(error instanceof Error ? error : new Error(\"The W-9 could not be saved.\"));\n throw error;\n } finally { setSaving(false); }\n };\n\n const field = (label: string, value: string, onChange: (value: string) => void, span = false, placeholder = \"\") => (\n <label className={`mbob-field${span ? \" mbob-span\" : \"\"}`}>{label}\n <input value={value} placeholder={placeholder} onChange={(event) => onChange(event.target.value)} disabled={saving} />\n </label>\n );\n\n const setLocation = (index: number, patch: Partial<OrganizationLocationInput>) =>\n setLocations((current) => current.map((item, itemIndex) => {\n if (itemIndex !== index) return patch.isPrimary ? { ...item, isPrimary: false } : item;\n return { ...item, ...patch };\n }));\n\n const practiceSection = (\n <div>\n <p className=\"mbob-status\">Choose EIN for a business or SSN for an individual. Saved SSNs are encrypted and shown only by their last four digits.</p>\n <div className=\"mbob-grid\">\n {field(\"Practice name\", identity.name, (name) => setIdentity((c) => ({ ...c, name })))}\n {field(\"Legal name\", identity.legalName, (legalName) => setIdentity((c) => ({ ...c, legalName })))}\n <TaxIdInput label=\"Practice tax ID\" value={identity} disabled={saving} onChange={(patch) => setIdentity((c) => ({ ...c, ...patch }))} />\n {field(\"Group NPI\", identity.npi, (npi) => setIdentity((c) => ({ ...c, npi })))}\n {field(\"Phone\", identity.phone, (phone) => setIdentity((c) => ({ ...c, phone })))}\n {field(\"Email\", identity.email, (email) => setIdentity((c) => ({ ...c, email })))}\n </div>\n <h3 className=\"mbob-subhead\">Billing provider (pay-to)</h3>\n <label className=\"mbob-field\">Saved billing provider\n <select disabled={saving} value={provider.id ?? \"\"} onChange={(event) => setProvider({ ...(profile?.billingProviders.find((item) => item.id === event.target.value) ?? { name: \"\", taxId: \"\", npi: \"\" }) })}>\n <option value=\"\">Add a billing provider</option>\n {profile?.billingProviders.map((item) => <option key={item.id} value={item.id}>{item.name}</option>)}\n </select>\n </label>\n <div className=\"mbob-grid\">\n {field(\"Billing provider name\", provider.name, (name) => setProvider((c) => ({ ...c, name })))}\n <TaxIdInput label=\"Billing tax ID\" value={provider} disabled={saving} onChange={(patch) => setProvider((c) => ({ ...c, ...patch }))} />\n {field(\"Billing NPI\", provider.npi, (npi) => setProvider((c) => ({ ...c, npi })))}\n {field(\"Billing phone\", provider.phone ?? \"\", (phone) => setProvider((c) => ({ ...c, phone })))}\n {field(\"Street\", provider.billingStreet ?? \"\", (billingStreet) => setProvider((c) => ({ ...c, billingStreet })), true)}\n {field(\"City\", provider.billingCity ?? \"\", (billingCity) => setProvider((c) => ({ ...c, billingCity })))}\n {field(\"State\", provider.billingState ?? \"\", (billingState) => setProvider((c) => ({ ...c, billingState: billingState.toUpperCase().slice(0, 2) })))}\n {field(\"ZIP\", provider.billingZip ?? \"\", (billingZip) => setProvider((c) => ({ ...c, billingZip })))}\n </div>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"practice\"] ? \"Saved to MindBill.\" : \"Saved once, used on every bill.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving} onClick={savePractice}>{saving ? \"Saving…\" : \"Save practice\"}</button></div>\n </div>\n );\n\n const renderingSection = <div>\n <label className=\"mbob-field\">Saved rendering provider\n <select disabled={saving} value={rendering.id ?? \"\"} onChange={(event) => setRendering({ ...(profile?.renderingProviders?.find((item) => item.id === event.target.value) ?? blankRendering()) })}>\n <option value=\"\">Add a rendering provider</option>\n {profile?.renderingProviders?.map((item) => <option key={item.id} value={item.id}>{item.name}{item.active === false ? \" (inactive)\" : \"\"}</option>)}\n </select>\n </label>\n <div className=\"mbob-grid\" style={{ marginTop: 16 }}>\n {field(\"Rendering provider name\", rendering.name, (name) => setRendering((c) => ({ ...c, name })))}\n {field(\"Rendering NPI\", rendering.npi, (npi) => setRendering((c) => ({ ...c, npi })))}\n {field(\"Taxonomy\", rendering.taxonomy ?? \"\", (taxonomy) => setRendering((c) => ({ ...c, taxonomy })))}\n {field(\"Specialty\", rendering.specialty ?? \"\", (specialty) => setRendering((c) => ({ ...c, specialty })))}\n {field(\"License number\", rendering.licenseNumber ?? \"\", (licenseNumber) => setRendering((c) => ({ ...c, licenseNumber })))}\n {field(\"License state\", rendering.licenseState ?? \"\", (licenseState) => setRendering((c) => ({ ...c, licenseState: licenseState.toUpperCase().slice(0, 2) })))}\n <label><input disabled={saving} type=\"checkbox\" checked={rendering.active !== false} onChange={(event) => setRendering((c) => ({ ...c, active: event.target.checked }))} /> Available for new bills</label>\n </div>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"rendering\"] ? \"Saved to MindBill.\" : \"Saved profiles do not change previously submitted bills.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving || !rendering.name.trim()} onClick={() => run(() => client.saveBillingProfile({ renderingProviders: [rendering] }), \"rendering\")}>{saving ? \"Saving…\" : \"Save rendering provider\"}</button></div>\n </div>;\n\n const locationsSection = (\n <div>\n {locations.map((location, index) => (\n <div className=\"mbob-loc\" key={location.id ?? index}>\n {field(\"Name\", location.name ?? \"\", (name) => setLocation(index, { name }))}\n {field(\"Street\", location.street, (street) => setLocation(index, { street }))}\n {field(\"City\", location.city, (city) => setLocation(index, { city }))}\n {field(\"State\", location.state, (state) => setLocation(index, { state: state.toUpperCase().slice(0, 2) }))}\n {field(\"ZIP\", location.zip, (zip) => setLocation(index, { zip }))}\n {field(\"Place of service code\", location.posCode ?? \"\", (posCode) => setLocation(index, { posCode }), false, \"11\")}\n <label className=\"mbob-primary\"><input disabled={saving || location.active === false} type=\"radio\" name={primaryGroup} checked={location.isPrimary === true} onChange={() => setLocation(index, { isPrimary: true })} /> Primary</label>\n {location.id ? <button className=\"mbob-secondary\" disabled={saving} type=\"button\" onClick={() => setLocation(index, { active: location.active === false, ...(location.active !== false ? { isPrimary: false } : {}) })}>{location.active === false ? \"Restore\" : \"Archive\"}</button> : <button className=\"mbob-remove\" disabled={saving} type=\"button\" aria-label=\"Remove location\" onClick={() => setLocations((current) => current.filter((_, itemIndex) => itemIndex !== index))}>×</button>}\n </div>\n ))}\n <button className=\"mbob-add\" type=\"button\" onClick={() => setLocations((current) => [...current, blankLocation()])}>+ Add location</button>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"locations\"] ? \"Saved to MindBill.\" : \"Where evaluations happen.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving} onClick={saveLocations}>{saving ? \"Saving…\" : \"Save locations\"}</button></div>\n </div>\n );\n\n const w9Section = <div><p className=\"mbob-status\">The saved W-9 is auto-attached to every submission.</p><W9Upload {...(appearance ? { appearance } : {})} {...(profile?.w9 ? { document: { filename: profile.w9.filename, addedAt: profile.w9.addDate } } : {})} onUpload={saveW9} disabled={saving} /></div>;\n\n const reviewSection = (\n <div className=\"mbob-check\">\n {(profile?.onboarding.checklist ?? []).map((item) => (\n <div className=\"mbob-check-item\" key={item.id} data-complete={item.complete}>\n <i>{item.complete ? \"✓\" : \"•\"}</i><span>{item.label}</span>\n </div>\n ))}\n {profile?.onboarding.complete ? <p className=\"mbob-done\">Billing setup is complete — bills submitted from your product carry this profile automatically.</p> : <p className=\"mbob-status\">Items above complete themselves as each section is saved.</p>}\n </div>\n );\n\n const sections: Record<StepId, ReactElement> = { practice: practiceSection, rendering: renderingSection, locations: locationsSection, w9: w9Section, review: reviewSection };\n\n return (\n <div className={`mbob ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}>\n <style>{css}</style>\n <div className=\"mbob-card\">\n <div className=\"mbob-head\"><div><h2>{heading}</h2><p className=\"mbob-copy\">{description}</p></div></div>\n {loadError ? <div className=\"mbob-error\" role=\"alert\">{loadError}</div> : null}\n {variant === \"onboarding\" ? (\n <>\n <div className=\"mbob-steps\">\n {STEPS.map((item) => (\n <button className=\"mbob-step\" type=\"button\" key={item.id} data-active={step === item.id} data-done={Boolean(savedStep[item.id])} onClick={() => setStep(item.id)}>\n <i>{savedStep[item.id] ? \"✓\" : \"\"}</i>{item.label}\n </button>\n ))}\n </div>\n {sections[step]}\n </>\n ) : (\n <>\n {practiceSection}\n <h3 className=\"mbob-subhead\">Rendering providers</h3>\n {renderingSection}\n <h3 className=\"mbob-subhead\">Locations</h3>\n {locationsSection}\n <h3 className=\"mbob-subhead\">Practice W-9</h3>\n {w9Section}\n <h3 className=\"mbob-subhead\">Checklist</h3>\n {reviewSection}\n </>\n )}\n {error ? <div className=\"mbob-error\" role=\"alert\">{error}</div> : null}\n </div>\n </div>\n );\n}\n\n/** Compact edit-after-setup variant of {@link OrganizationOnboarding}. */\nexport function BillingSettings(props: Omit<OrganizationOnboardingProps, \"variant\">): ReactElement {\n return (\n <OrganizationOnboarding\n heading=\"Billing settings\"\n description=\"Practice identity, locations, and the W-9 used on every bill.\"\n {...props}\n variant=\"settings\"\n />\n );\n}\n","import type { OrganizationPracticeIdentity } from \"@mindbill/browser\";\nexport { organizationTaxIdWrite as taxIdWrite } from \"@mindbill/browser\";\n\ntype TaxIdFields = Pick<OrganizationPracticeIdentity, \"taxId\" | \"taxIdType\" | \"taxIdLast4\" | \"taxIdConfigured\">;\n\nexport function TaxIdInput({ label, value, onChange, disabled }: {\n label: string; value: TaxIdFields; onChange: (patch: TaxIdFields) => void; disabled: boolean;\n}) {\n const saved = value.taxIdType === \"SSN\" && value.taxIdConfigured;\n return <div className=\"mbob-field mbob-tax-id\">\n <label>{label} type<select disabled={disabled} value={value.taxIdType ?? \"EIN\"} onChange={(event) => onChange({ taxIdType: event.target.value as \"EIN\" | \"SSN\", taxId: \"\", taxIdConfigured: false, taxIdLast4: \"\" })}><option value=\"EIN\">EIN (business)</option><option value=\"SSN\">SSN (individual)</option></select></label>\n <label>{label}<input disabled={disabled} autoComplete=\"off\" inputMode=\"numeric\" type={value.taxIdType === \"SSN\" ? \"password\" : \"text\"} value={value.taxId ?? \"\"} placeholder={saved ? \"Leave blank to keep saved SSN\" : \"\"} onChange={(event) => onChange({ taxId: event.target.value })} /></label>\n {saved ? <><small>Saved SSN ending in {value.taxIdLast4 ?? \"••••\"}. The full number is not returned to your browser.</small><button type=\"button\" disabled={disabled} onClick={() => onChange({ taxId: \"\", taxIdConfigured: false, taxIdLast4: \"\" })}>Clear saved SSN on save</button></> : null}\n </div>;\n}\n","\"use client\";\n\nimport { useState, type CSSProperties, type ReactElement } from \"react\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport type W9ExtractionStatus = \"idle\" | \"queued\" | \"processing\" | \"complete\" | \"not_found\" | \"failed\";\nexport type W9UploadProps = {\n document?: { filename: string; addedAt?: string };\n /** Extraction and storage remain owned by your authorized server adapter. */\n extractionStatus?: W9ExtractionStatus;\n onUpload: (file: File) => Promise<void>;\n onView?: () => void;\n onRetryExtraction?: () => void | Promise<void>;\n maxSizeBytes?: number;\n disabled?: boolean;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport function validateW9File(file: Pick<File, \"name\" | \"size\" | \"type\">, maxSizeBytes = 20 * 1024 * 1024): string | null {\n if (!file.name.toLowerCase().endsWith(\".pdf\") || (file.type && file.type !== \"application/pdf\")) return \"Choose a PDF file for the W-9.\";\n if (file.size === 0) return \"The selected PDF is empty.\";\n if (file.size > maxSizeBytes) return `Choose a PDF smaller than ${Math.round(maxSizeBytes / 1024 / 1024)} MB.`;\n return null;\n}\n\nconst extractionLabels: Record<W9ExtractionStatus, string> = {\n idle: \"\",\n queued: \"W-9 saved. Tax ID and address extraction is queued.\",\n processing: \"Reading the tax ID and remittance address…\",\n complete: \"Extraction complete. Review the tax ID and remittance address before saving your billing settings.\",\n not_found: \"The tax ID or address could not be read. Enter the missing billing details manually.\",\n failed: \"Extraction failed. Your W-9 is still saved; enter the billing details manually or retry.\",\n};\n\n/** Reusable upload UI without a second source of truth for practice documents or tax IDs. */\nexport function W9Upload({ document, extractionStatus = \"idle\", onUpload, onView, onRetryExtraction, maxSizeBytes = 20 * 1024 * 1024, disabled = false, appearance, className = \"\", style }: W9UploadProps): ReactElement {\n const [file, setFile] = useState<File | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saved, setSaved] = useState(false);\n const choose = (next: File | null) => {\n if (busy || disabled) return;\n const failure = next ? validateW9File(next, maxSizeBytes) : null;\n setError(failure); setSaved(false); setFile(failure ? null : next);\n };\n const upload = async () => {\n if (!file || busy || disabled) return;\n setBusy(true); setError(null); setSaved(false);\n try { await onUpload(file); setFile(null); setSaved(true); }\n catch { setError(\"The W-9 could not be uploaded. Please try again.\"); }\n finally { setBusy(false); }\n };\n const retry = async () => {\n setBusy(true); setError(null);\n try { await onRetryExtraction?.(); }\n catch { setError(\"Extraction could not be restarted. Please try again.\"); }\n finally { setBusy(false); }\n };\n return <section className={`mbw9 ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }} aria-label=\"Practice W-9\">\n <style>{`.mbw9{font:inherit;color:var(--mb-text)}.mbw9 *{box-sizing:border-box}.mbw9 p{margin:0;color:var(--mb-muted);font-size:13px;line-height:1.6}.mbw9-current,.mbw9-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.mbw9-current{padding:12px 14px;background:var(--mb-soft);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);margin-bottom:12px}.mbw9-current strong{overflow-wrap:anywhere}.mbw9 button{font:inherit;color:var(--mb-text);background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:9px 14px;cursor:pointer}.mbw9 button:disabled{opacity:.55;cursor:default}.mbw9-drop{display:grid;gap:8px;padding:20px;border:1px dashed var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface)}.mbw9-drop input{font:inherit;max-width:100%;color:var(--mb-muted)}.mbw9-actions{margin-top:12px}.mbw9 button.mbw9-primary{background:var(--mb-accent);color:var(--mb-accent-contrast);border-color:var(--mb-accent)}.mbw9 [role=alert]{color:var(--mb-danger);margin-top:12px}.mbw9 button:focus-visible,.mbw9 input:focus-visible{outline:2px solid var(--mb-accent);outline-offset:3px}.mbw9{min-width:0}.mbw9-drop{grid-template-columns:minmax(0,1fr);min-width:0;white-space:normal}.mbw9-drop>*{min-width:0;overflow-wrap:anywhere}.mbw9-drop input{width:100%}.mbw9-current>div{min-width:0;max-width:100%}`}</style>\n {document ? <div className=\"mbw9-current\"><div><strong>{document.filename}</strong>{document.addedAt ? <p>Added {document.addedAt}</p> : null}</div>{onView ? <button type=\"button\" disabled={busy || disabled} onClick={onView}>View W-9</button> : null}</div> : null}\n <label className=\"mbw9-drop\" onDragOver={(event) => event.preventDefault()} onDrop={(event) => { event.preventDefault(); choose(event.dataTransfer.files[0] ?? null); }}>\n <strong>{document ? \"Replace practice W-9\" : \"Upload practice W-9\"}</strong>\n <p>Choose or drop a PDF, up to {Math.round(maxSizeBytes / 1024 / 1024)} MB. Your server securely stores the document for billing.</p>\n <input aria-label=\"W-9 PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={busy || disabled} onChange={(event) => { choose(event.target.files?.[0] ?? null); event.target.value = \"\"; }} />\n {file ? <p>{file.name}</p> : null}\n </label>\n <div className=\"mbw9-actions\"><p role=\"status\">{busy ? \"Working…\" : extractionLabels[extractionStatus] || (saved ? \"W-9 saved.\" : \"\")}</p><div>{onRetryExtraction && (extractionStatus === \"failed\" || extractionStatus === \"not_found\") ? <button type=\"button\" disabled={busy || disabled} onClick={() => void retry()}>Retry extraction</button> : null} <button className=\"mbw9-primary\" type=\"button\" disabled={!file || busy || disabled} onClick={() => void upload()}>{busy ? \"Please wait…\" : \"Upload W-9\"}</button></div></div>\n {error ? <p role=\"alert\">{error}</p> : null}\n </section>;\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState, type CSSProperties, type ReactElement } from \"react\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { createBillingOperationsClient, type BillingOperationsClientOptions, type PaymentReviewItem, type PaymentReviewQuery, type PaymentReviewResult } from \"./billing-operations-client\";\n\nexport type PaymentReviewRange = \"today\" | \"week\" | \"month\" | \"year\" | \"all\";\nconst localDate = (date: Date) => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\nexport function paymentReviewDateRange(range: PaymentReviewRange, now = new Date()): Pick<PaymentReviewQuery, \"receivedFrom\" | \"receivedTo\"> {\n if (range === \"all\") return {};\n const start = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n if (range === \"week\") start.setDate(start.getDate() - (start.getDay() + 6) % 7);\n if (range === \"month\") start.setDate(1);\n if (range === \"year\") { start.setMonth(0); start.setDate(1); }\n return { receivedFrom: localDate(start), receivedTo: localDate(now) };\n}\nconst money = (value: number) => new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" }).format(value);\nconst dateLabel = (value: string | null) => value ? value.slice(0, 10) : \"—\";\n/** Ledger entry IDs are unique within a bill, not necessarily across bills. */\nexport const paymentReviewRowKey = (item: Pick<PaymentReviewItem, \"billId\" | \"id\">): string => JSON.stringify([item.billId, item.id]);\n/** Every cell is quoted and spreadsheet formulas are neutralized, including tab-prefixed input. */\nexport function paymentReviewCsv(items: readonly PaymentReviewItem[]): string {\n const escape = (value: string | number | null) => {\n let text = value == null ? \"\" : String(value);\n if (/^[\\s]*[=+@-]/.test(text) || /^[\\t\\r\\n]/.test(text)) text = `'${text}`;\n return `\"${text.replaceAll('\"', '\"\"')}\"`;\n };\n return [[\"Patient\", \"Bill\", \"Claim\", \"Date of service\", \"Received\", \"Posted\", \"Status\", \"Method\", \"Source\", \"Check / trace\", \"Amount\"], ...items.map((item) => [item.patientName, item.billNumber, item.claimNumber, item.dateOfService, item.receivedDate, item.postedDate, \"Received\", item.method, item.source, item.checkNumber, item.amount])].map((row) => row.map(escape).join(\",\")).join(\"\\r\\n\");\n}\n\nexport type ConnectedPaymentReviewProps = BillingOperationsClientOptions & {\n initialQuery?: PaymentReviewQuery;\n onSelectBill?: (billId: string) => void;\n /** Optional host action; reviewing payments never posts or changes a payment. */\n onPostPayment?: () => void;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nconst css = `.mbpr{font:14px/1.5 var(--mb-font);color:var(--mb-text);min-width:0}.mbpr *{box-sizing:border-box}.mbpr h2,.mbpr p{margin:0}.mbpr h2{font-size:21px}.mbpr-head,.mbpr-actions,.mbpr-toolbar,.mbpr-pager{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.mbpr-head,.mbpr-pager{justify-content:space-between}.mbpr small,.mbpr-sub{color:var(--mb-muted)}.mbpr small{display:block;font-size:12px}.mbpr-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:18px 0}.mbpr-metric,.mbpr-card{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius)}.mbpr-metric{padding:16px}.mbpr-metric strong{display:block;font-size:24px;line-height:1.4;font-variant-numeric:tabular-nums}.mbpr-card{overflow:hidden}.mbpr-controls{padding:14px;display:grid;gap:12px}.mbpr label{display:grid;gap:4px;font-size:12px}.mbpr input,.mbpr button{font:inherit;color:var(--mb-text);background:var(--mb-input);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:8px 10px;min-height:38px}.mbpr button{cursor:pointer;white-space:nowrap}.mbpr button:disabled{opacity:.55;cursor:default}.mbpr button.active,.mbpr button.primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mbpr button:focus-visible,.mbpr input:focus-visible{outline:2px solid var(--mb-accent);outline-offset:2px}.mbpr-search{flex:1;min-width:210px}.mbpr-scroll{overflow:auto}.mbpr table{width:100%;min-width:900px;border-collapse:collapse}.mbpr th,.mbpr td{padding:11px 13px;text-align:left;border-top:1px solid var(--mb-border)}.mbpr th{background:var(--mb-soft);color:var(--mb-muted);font-size:12px;font-weight:600}.mbpr .mbpr-money{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.mbpr .mbpr-link{color:var(--mb-accent);border:0;background:none;padding:0;min-height:30px}.mbpr-status{display:inline-block;background:color-mix(in srgb,var(--mb-success) 10%,var(--mb-surface));color:var(--mb-success);border-radius:var(--mb-control-radius);padding:2px 7px;font-size:12px}.mbpr-state{padding:30px;text-align:center;color:var(--mb-muted)}.mbpr-error{color:var(--mb-danger)}.mbpr-pager{padding:12px;border-top:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px}@media(max-width:640px){.mbpr-metrics{gap:8px}.mbpr-metric{padding:10px}.mbpr-metric strong{font-size:20px}.mbpr-head{align-items:flex-start}.mbpr-toolbar label{flex:1}.mbpr-search{min-width:100%}.mbpr input{width:100%;min-width:0}}`;\n\nexport function ConnectedPaymentReview({ initialQuery, onSelectBill, onPostPayment, appearance, className = \"\", style, ...options }: ConnectedPaymentReviewProps): ReactElement {\n const client = useMemo(() => createBillingOperationsClient(options), [options.apiBaseUrl, options.fetch, options.getSession, options.sessionEndpoint]);\n const [query, setQuery] = useState<PaymentReviewQuery>(() => ({ ...paymentReviewDateRange(\"month\"), page: 1, pageSize: 25, ...initialQuery }));\n const [range, setRange] = useState<PaymentReviewRange | null>(initialQuery?.receivedFrom || initialQuery?.receivedTo ? null : \"month\");\n const [search, setSearch] = useState(initialQuery?.q ?? \"\");\n const [result, setResult] = useState<PaymentReviewResult | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const [retry, setRetry] = useState(0);\n const invalidRange = Boolean(query.receivedFrom && query.receivedTo && query.receivedFrom > query.receivedTo);\n useEffect(() => {\n const controller = new AbortController();\n setResult(null); setError(false);\n if (invalidRange) { setLoading(false); return () => controller.abort(); }\n setLoading(true);\n client.getPaymentReview(query, controller.signal).then((next) => { if (!controller.signal.aborted) setResult(next); }).catch(() => { if (!controller.signal.aborted) setError(true); }).finally(() => { if (!controller.signal.aborted) setLoading(false); });\n return () => controller.abort();\n }, [client, query, retry, invalidRange]);\n const update = (patch: Partial<PaymentReviewQuery>) => setQuery((current) => ({ ...current, ...patch, page: 1 }));\n const exportPage = () => {\n if (!result?.items.length || loading) return;\n const url = URL.createObjectURL(new Blob([paymentReviewCsv(result.items)], { type: \"text/csv;charset=utf-8\" }));\n const anchor = document.createElement(\"a\"); anchor.href = url; anchor.download = \"payment-review-page.csv\"; anchor.click(); URL.revokeObjectURL(url);\n };\n return <section className={`mbpr ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }} aria-label=\"Payment review\">\n <style>{css + `.mbpr{font-family:var(--mb-font,ui-sans-serif,system-ui,sans-serif)}@media(max-width:640px){.mbpr-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.mbpr-metric:first-child{grid-column:1/-1}.mbpr-metric strong{overflow-wrap:anywhere}}`}</style>\n <div className=\"mbpr-head\"><div><h2>Payment review</h2><p className=\"mbpr-sub\">Review confirmed payments, check details, and cash totals.</p></div><div className=\"mbpr-actions\"><button type=\"button\" disabled={!result?.items.length || loading} onClick={exportPage}>Export page</button>{onPostPayment ? <button className=\"primary\" type=\"button\" onClick={onPostPayment}>+ Post payment</button> : null}</div></div>\n <small>Pending EOR and 835 amounts are excluded until funds are confirmed. Historical legacy payments are also excluded.</small>\n <div className=\"mbpr-metrics\">{[[\"Posted total\", result ? money(result.summary.postedTotal) : \"—\"], [\"Payment entries\", result?.summary.entryCount ?? \"—\"], [\"Unique patients\", result?.summary.uniquePatients ?? \"—\"]].map(([label, value]) => <div className=\"mbpr-metric\" key={label}><small>{label}</small><strong>{value}</strong></div>)}</div>\n<div className=\"mbpr-card\"><div className=\"mbpr-controls\"><div className=\"mbpr-toolbar\" aria-label=\"Quick range\">{([[\"today\", \"Today\"], [\"week\", \"This week\"], [\"month\", \"This month\"], [\"year\", \"This year\"], [\"all\", \"All dates\"]] as const).map(([id, label]) => <button type=\"button\" key={id} className={range === id ? \"active\" : \"\"} aria-pressed={range === id} onClick={() => { setRange(id); setQuery((current) => { const next = { ...current }; delete next.receivedFrom; delete next.receivedTo; return { ...next, ...paymentReviewDateRange(id), page: 1 }; }); }}>{label}</button>)}</div>\n <form className=\"mbpr-toolbar\" onSubmit={(event) => { event.preventDefault(); update({ q: search }); }}><label className=\"mbpr-search\">Search<input type=\"search\" placeholder=\"Patient, bill, claim, payer, or check…\" value={search} onChange={(event) => setSearch(event.target.value)} /></label><button type=\"submit\">Search</button><label>Received from<input type=\"date\" value={query.receivedFrom ?? \"\"} onChange={(event) => { setRange(null); update({ receivedFrom: event.target.value }); }} /></label><label>Received through<input type=\"date\" value={query.receivedTo ?? \"\"} onChange={(event) => { setRange(null); update({ receivedTo: event.target.value }); }} /></label></form>\n </div>{invalidRange ? <p className=\"mbpr-state mbpr-error\" role=\"alert\">The received-through date must be on or after the received-from date.</p> : loading ? <p className=\"mbpr-state\" role=\"status\">Loading payments…</p> : error ? <div className=\"mbpr-state mbpr-error\" role=\"alert\">Payments could not be loaded. <button type=\"button\" onClick={() => setRetry((value) => value + 1)}>Retry</button></div> : !result?.items.length ? <p className=\"mbpr-state\">No confirmed payments match these filters.</p> : <div className=\"mbpr-scroll\" tabIndex={0} role=\"region\" aria-label=\"Payment entries\"><table><thead><tr>{[\"Patient\", \"Bill / DOS\", \"Received\", \"Posted\", \"Status\", \"Method / source\", \"Check / trace\", \"Amount\"].map((label) => <th key={label} scope=\"col\" className={label === \"Amount\" ? \"mbpr-money\" : \"\"}>{label}</th>)}</tr></thead><tbody>{result.items.map((item) => <tr key={paymentReviewRowKey(item)}><td>{item.patientName}<small>{item.claimNumber}</small></td><td>{onSelectBill ? <button type=\"button\" className=\"mbpr-link\" onClick={() => onSelectBill(item.billId)}>{item.billNumber == null ? \"View bill\" : `Bill #${item.billNumber}`}</button> : item.billNumber == null ? \"—\" : `Bill #${item.billNumber}`}<small>DOS {dateLabel(item.dateOfService)}</small></td><td>{dateLabel(item.receivedDate)}</td><td>{dateLabel(item.postedDate)}</td><td><span className=\"mbpr-status\">Received</span></td><td>{item.method || \"—\"}<small>{item.source}</small></td><td>{item.checkNumber || \"—\"}</td><td className=\"mbpr-money\">{money(item.amount)}</td></tr>)}</tbody></table></div>}\n {result ? <div className=\"mbpr-pager\"><span>{result.total} entries · Page {result.page} of {Math.max(1, Math.ceil(result.total / result.pageSize))}</span><div className=\"mbpr-actions\"><button type=\"button\" disabled={result.page <= 1} onClick={() => setQuery((current) => ({ ...current, page: Math.max(1, result.page - 1) }))}>Previous</button><button type=\"button\" disabled={result.page * result.pageSize >= result.total} onClick={() => setQuery((current) => ({ ...current, page: result.page + 1 }))}>Next</button></div></div> : null}</div>\n </section>;\n}\n","import {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n type BillLifecycleSession,\n type BillLifecycleSessionProvider,\n type BillTasksDashboardData,\n} from \"@mindbill/browser\";\n\n/** Confirmed cash ledger entries, never pending EOR/835 estimates or imported legacy payments. */\nexport type PaymentReviewItem = {\n id: string;\n billId: string;\n billNumber: number | null;\n patientName: string;\n claimNumber: string;\n dateOfService: string | null;\n receivedDate: string | null;\n postedDate: string | null;\n status: \"received\";\n method: string;\n source: string;\n checkNumber: string | null;\n amount: number;\n};\nexport type PaymentReviewQuery = {\n q?: string;\n receivedFrom?: string;\n receivedTo?: string;\n renderingProviderId?: string;\n page?: number;\n pageSize?: number;\n};\nexport type PaymentReviewResult = {\n items: PaymentReviewItem[];\n total: number;\n page: number;\n pageSize: number;\n /** Totals span all matching entries, not only the current page. */\n summary: { postedTotal: number; entryCount: number; uniquePatients: number };\n};\n\nexport type BillRegistryStatus = {\n id: string;\n label: string;\n tone?: \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n};\n\nexport type BillRegistryItem = {\n id: string;\n billNumber: string;\n externalId: string | null;\n patientName: string;\n claimNumber: string;\n claimsAdministrator: string;\n status: BillRegistryStatus;\n dateOfService: string | null;\n procedureCodes: string[];\n billingProviderId: string | null;\n renderingProviderId?: string | null;\n renderingProviderName?: string | null;\n submittedAt: string | null;\n arAgeDays: number | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n};\n\nexport type BillRegistryAge = \"all\" | \"0-30\" | \"31-60\" | \"61-90\" | \"91+\" | \"91-180\" | \"181+\";\nexport type BillRegistrySort = \"submitted_desc\" | \"submitted_asc\" | \"balance_desc\" | \"balance_asc\" | \"patient_asc\";\n\nexport type BillRegistryQuery = {\n q?: string;\n status?: string;\n age?: BillRegistryAge;\n claimsAdministrator?: string;\n billingProviderId?: string;\n /** Doctor who performed the service, distinct from the billing practice. */\n renderingProviderId?: string;\n taskSection?: string;\n taskType?: string;\n taskLabel?: string;\n page?: number;\n pageSize?: number;\n sort?: BillRegistrySort;\n};\n\nexport type BillRegistryResult = {\n items: BillRegistryItem[];\n total: number;\n balanceTotal: number;\n page: number;\n pageSize: number;\n filters?: { renderingProviders: Array<{ id: string; name: string }> };\n};\n\nexport type BillTasksResult = {\n dashboard: BillTasksDashboardData;\n /** Separate status inventory; not included in actionable task totals. */\n waiting?: BillTasksDashboardData;\n filters: { claimsAdministrators: Array<{ id: string; name: string }>; renderingProviders?: Array<{ id: string; name: string }> };\n};\n\nexport type ServiceLineItemsReport = {\n from: string;\n to: string;\n windowLabel: string;\n cptRows: Array<{ code: string; bills: number; lines: number; billed: number }>;\n billRows: Array<{\n billId: string;\n billNumber: string;\n submittedDate: string | null;\n dos: string | null;\n patient: string;\n claim: string;\n claimsAdmin: string;\n codes: string[];\n billed: number;\n status: string;\n }>;\n totalBills: number;\n totalLines: number;\n totalBilled: number;\n};\n\nexport type ProductivityReport = {\n lo: string;\n hi: string;\n dayKeys: string[];\n billers: Array<{ name: string; initials: string }>;\n created: Record<string, Record<string, number>>;\n sent: Record<string, Record<string, number>>;\n createdTotal: Record<string, number>;\n sentTotal: Record<string, number>;\n submittedTotal: Record<string, number>;\n cleanTotal: Record<string, number>;\n totalCreated: number;\n totalSent: number;\n totalSubmitted: number;\n totalClean: number;\n};\n\nexport type BillingOperationsClientOptions = {\n /** Same-origin route that exchanges the signed-in user for a short-lived MindBill browser session. */\n sessionEndpoint?: string;\n /** Advanced escape hatch for hosts that do not use an HTTP session endpoint. */\n getSession?: BillLifecycleSessionProvider;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n};\n\nexport type BillingOperationsClient = {\n getPaymentReview: (query?: PaymentReviewQuery, signal?: AbortSignal) => Promise<PaymentReviewResult>;\n clearSession: () => void;\n getBills: (query?: BillRegistryQuery, signal?: AbortSignal) => Promise<BillRegistryResult>;\n getBillTasks: (claimsAdministrator?: string, signal?: AbortSignal, renderingProviderId?: string) => Promise<BillTasksResult>;\n getServiceLineItems: (range: { from: string; to: string }, signal?: AbortSignal) => Promise<ServiceLineItemsReport>;\n getProductivity: (range: { from: string; to: string }, signal?: AbortSignal) => Promise<ProductivityReport>;\n};\n\nasync function responseError(response: Response, fallback: string): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; error?: unknown }).detail ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction normalizeSession(value: unknown): BillLifecycleSession {\n if (!value || typeof value !== \"object\") throw new Error(\"The MindBill session endpoint returned an invalid response.\");\n const candidate = value as { token?: unknown; expiresAt?: unknown; apiBaseUrl?: unknown; session?: unknown; data?: unknown };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\" ? nested as typeof candidate : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\"The MindBill session endpoint did not return a browser session token.\");\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\" ? { expiresAt: session.expiresAt } : {}),\n ...(typeof session.apiBaseUrl === \"string\" ? { apiBaseUrl: session.apiBaseUrl } : {}),\n };\n}\n\nfunction isFresh(session: BillLifecycleSession | null): boolean {\n if (!session) return false;\n if (!session.expiresAt) return true;\n const expiresAt = Date.parse(session.expiresAt);\n return Number.isFinite(expiresAt) && expiresAt > Date.now() + 30_000;\n}\n\nfunction queryString(values: Record<string, string | number | undefined>): string {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(values)) {\n if (value !== undefined && value !== \"\") params.set(key, String(value));\n }\n const text = params.toString();\n return text ? `?${text}` : \"\";\n}\n\n/** Browser-safe client for the multi-bill workspace. Partner API keys are never accepted here. */\nexport function createBillingOperationsClient({\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillingOperationsClientOptions = {}): BillingOperationsClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n let session: BillLifecycleSession | null = null;\n let pendingSession: Promise<BillLifecycleSession> | null = null;\n let pendingSessionSignal: AbortSignal | null = null;\n\n const mintSession = async (signal: AbortSignal, force = false): Promise<BillLifecycleSession> => {\n if (!force && isFresh(session)) return session as BillLifecycleSession;\n if (!force && pendingSession && !pendingSessionSignal?.aborted) return pendingSession;\n const pending = getSession\n ? getSession({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n signal,\n }).then(async (response) => {\n if (!response.ok) throw await responseError(response, \"MindBill browser session could not be created.\");\n return response.json();\n });\n const request = Promise.resolve(pending).then(normalizeSession).then((next) => {\n session = next;\n return next;\n }).finally(() => {\n if (pendingSession === request) {\n pendingSession = null;\n pendingSessionSignal = null;\n }\n });\n pendingSession = request;\n pendingSessionSignal = signal;\n return request;\n };\n\n const get = async <T>(path: string, signal?: AbortSignal): Promise<T> => {\n const controller = signal ? null : new AbortController();\n const requestSignal = signal ?? controller?.signal;\n if (!requestSignal) throw new Error(\"An AbortSignal could not be created.\");\n let browserSession = await mintSession(requestSignal);\n const request = (active: BillLifecycleSession) => {\n const base = (active.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n return fetcher(`${base}${path}`, {\n headers: { authorization: `Bearer ${active.token}` },\n signal: requestSignal,\n });\n };\n let response = await request(browserSession);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(requestSignal, true);\n response = await request(browserSession);\n }\n if (!response.ok) throw await responseError(response, \"MindBill data could not be loaded.\");\n const body = await response.json() as { data?: T } & T;\n return (body.data ?? body) as T;\n };\n\n return {\n clearSession() { session = null; pendingSession = null; pendingSessionSignal = null; },\n getBills(query = {}, signal) {\n const { claimsAdministrator, taskType, taskSection: _taskSection, sort, status, ...filters } = query;\n // Section is a presentation grouping, not a supported bill-list filter.\n void _taskSection;\n const sortKey = sort?.startsWith(\"balance_\") ? \"balanceDue\"\n : sort?.startsWith(\"patient_\") ? \"patient\" : sort ? \"submitted\" : undefined;\n return get<BillRegistryResult>(`/partner/v2/bill-dashboard${queryString({\n ...filters,\n status: status === \"submitted\" ? \"sent\" : status,\n claimsAdminId: claimsAdministrator,\n taskKind: taskType,\n sort: sortKey,\n dir: sort ? (sort.endsWith(\"_asc\") ? \"asc\" : \"desc\") : undefined,\n })}`, signal);\n },\n getBillTasks(claimsAdministrator, signal, renderingProviderId) {\n return get<BillTasksResult>(\n `/partner/v2/bill-tasks${queryString({ claimsAdminId: claimsAdministrator, renderingProviderId })}`,\n signal,\n );\n },\n getServiceLineItems(range, signal) {\n return get<ServiceLineItemsReport>(\n `/partner/v2/reports/service-line-items${queryString(range)}`,\n signal,\n );\n },\n getPaymentReview(query = {}, signal) {\n return get<PaymentReviewResult>(`/partner/v2/reports/payments${queryString(query)}`, signal);\n },\n getProductivity(range, signal) {\n return get<ProductivityReport>(`/partner/v2/reports/productivity${queryString(range)}`, signal);\n },\n };\n}\n","\"use client\";\n\nimport { useEffect, useId, useRef, useState, type CSSProperties, type ReactElement } from \"react\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport type NotificationAgingDay = 30 | 60 | 90;\nexport type NotificationPreferences = {\n enabled: boolean;\n statusUpdates: boolean;\n agingDays: NotificationAgingDay[];\n quietHours: boolean;\n};\n\n/** A projection from the host's authenticated server, not the raw administrative API. */\nexport type NotificationSettingsSnapshot = {\n preferences: NotificationPreferences | null;\n /** Display only. The server selects and verifies this address. */\n email: string;\n audience: \"practice\" | \"assigned_bills\";\n environment: \"live\" | \"sandbox\";\n canEnable: boolean;\n};\n\n/** Deliberately excludes identity, address, audience, verification and bill assignments. */\nexport type NotificationSettingsUpdate = NotificationPreferences & { consent: boolean };\nexport type NotificationSettingsAdapter = {\n load: () => Promise<NotificationSettingsSnapshot>;\n save: (update: NotificationSettingsUpdate) => Promise<NotificationSettingsSnapshot>;\n unsubscribe: () => Promise<NotificationSettingsSnapshot>;\n};\nexport type NotificationSettingsProps = {\n /** Change on host user, practice or environment changes. Never an authorization credential. */\n identityKey: string;\n /** Memoize this adapter. Every method calls the host's authenticated server. */\n adapter: NotificationSettingsAdapter;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n onSaved?: (snapshot: NotificationSettingsSnapshot) => void;\n};\n\nexport function defaultNotificationPreferences(): NotificationPreferences {\n return { enabled: false, statusUpdates: false, agingDays: [], quietHours: true };\n}\n\n/** Allowlist the browser payload even when callers supply objects with extra properties. */\nexport function notificationSettingsUpdate(preferences: NotificationPreferences, consent: boolean): NotificationSettingsUpdate {\n return {\n enabled: preferences.enabled === true,\n statusUpdates: preferences.statusUpdates === true,\n agingDays: ([30, 60, 90] as const).filter(day => preferences.agingDays.includes(day)),\n quietHours: preferences.quietHours === true,\n consent: consent === true,\n };\n}\n\nexport function notificationSettingsNeedsConsent(previous: NotificationPreferences | null, next: NotificationPreferences): boolean {\n if (!next.enabled) return false;\n if (!previous?.enabled || previous.statusUpdates !== next.statusUpdates || previous.quietHours !== next.quietHours) return true;\n return JSON.stringify(notificationSettingsUpdate(previous, false).agingDays) !== JSON.stringify(notificationSettingsUpdate(next, false).agingDays);\n}\n\nconst css = `\n.mbns{color:var(--mb-text);font-family:var(--mb-font);font-size:14px;line-height:1.5;min-width:0}.mbns *{box-sizing:border-box}.mbns h2,.mbns p{margin:0}.mbns-card{padding:24px;background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius);box-shadow:var(--mb-shadow)}\n.mbns-header{display:flex;gap:16px;align-items:flex-start;justify-content:space-between;margin-bottom:24px}.mbns h2{font-size:20px;line-height:1.3;font-weight:700}.mbns-muted{color:var(--mb-muted)}.mbns-header p{margin-top:6px;max-width:56ch}.mbns-badge{flex-shrink:0;background:var(--mb-soft);color:var(--mb-muted);padding:4px 9px;border-radius:var(--mb-control-radius);font-size:12px;font-weight:650}\n.mbns-account{padding:14px 16px;background:var(--mb-soft);border-radius:var(--mb-control-radius);margin-bottom:20px;overflow-wrap:anywhere}.mbns-account strong{display:block;font-weight:650}.mbns-account p{margin-top:3px;font-size:13px}\n.mbns-check{display:flex;gap:12px;align-items:flex-start;cursor:pointer;min-height:44px;padding:8px 0}.mbns-check input{flex-shrink:0;margin:3px 0 0;width:18px;height:18px;accent-color:var(--mb-accent)}.mbns-check strong{display:block;font-weight:650}.mbns-check small{display:block;color:var(--mb-muted);font-size:13px;margin-top:2px}.mbns fieldset{margin:14px 0 0;padding:16px 0 0;border:0;border-top:1px solid var(--mb-border);min-width:0}.mbns legend{padding:0 8px 0 0;font-size:13px;font-weight:650}.mbns-days{display:flex;flex-wrap:wrap;gap:8px 24px}.mbns-consent{border-top:1px solid var(--mb-border);margin-top:16px;padding-top:16px}.mbns-actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:24px;padding-top:20px;border-top:1px solid var(--mb-border)}\n.mbns button{font:inherit;min-height:44px;padding:10px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font-weight:650;cursor:pointer}.mbns button.mbns-save{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mbns button:disabled{opacity:.5;cursor:not-allowed}.mbns input:focus-visible,.mbns button:focus-visible{outline:2px solid var(--mb-accent);outline-offset:3px}.mbns-notice{margin-top:16px!important;color:var(--mb-muted)}.mbns-error{color:var(--mb-danger)}.mbns :disabled+span{opacity:.6}@media(max-width:540px){.mbns-card{padding:18px}.mbns-header{gap:8px}.mbns-actions button{flex:1 1 auto}.mbns-days{gap:4px 18px}}\n`;\n\n/** Drop into a host settings page. Identity changes remount and discard stale UI state. */\nexport function NotificationSettings(props: NotificationSettingsProps): ReactElement {\n return <NotificationSettingsSession key={props.identityKey} {...props} />;\n}\n\n/** The same connected, host-adapter surface; no permanent key or browser enrollment endpoint. */\nexport const ConnectedNotificationSettings = NotificationSettings;\n\nfunction NotificationSettingsSession({ adapter, appearance, className, style, onSaved }: NotificationSettingsProps): ReactElement {\n const titleId = useId();\n const [snapshot, setSnapshot] = useState<NotificationSettingsSnapshot | null>(null);\n const [draft, setDraft] = useState(defaultNotificationPreferences);\n const [consent, setConsent] = useState(false);\n const [phase, setPhase] = useState<\"loading\" | \"ready\" | \"saving\" | \"error\">(\"loading\");\n const [notice, setNotice] = useState(\"\");\n const [failed, setFailed] = useState(false);\n const [reload, setReload] = useState(0);\n const request = useRef(0);\n\n useEffect(() => {\n const current = ++request.current;\n setPhase(\"loading\");\n setSnapshot(null);\n setDraft(defaultNotificationPreferences());\n setConsent(false);\n setNotice(\"\");\n setFailed(false);\n void Promise.resolve().then(() => adapter.load()).then(result => {\n if (current !== request.current) return;\n setSnapshot(result);\n setDraft(result.preferences ?? defaultNotificationPreferences());\n setPhase(\"ready\");\n }).catch(() => {\n if (current !== request.current) return;\n setPhase(\"error\");\n });\n return () => { request.current++; };\n }, [adapter, reload]);\n\n const needsConsent = notificationSettingsNeedsConsent(snapshot?.preferences ?? null, draft);\n const hasCategory = draft.statusUpdates || draft.agingDays.length > 0;\n const changed = JSON.stringify(notificationSettingsUpdate(draft, false)) !== JSON.stringify(notificationSettingsUpdate(snapshot?.preferences ?? defaultNotificationPreferences(), false));\n const busy = phase !== \"ready\";\n const canSave = !busy && changed && (!draft.enabled || (!!snapshot?.canEnable && hasCategory && (!needsConsent || consent)));\n\n const update = (value: Partial<NotificationPreferences>) => {\n setDraft(previous => ({ ...previous, ...value }));\n setConsent(false);\n setNotice(\"\");\n setFailed(false);\n };\n const save = async (unsubscribe: boolean) => {\n if (busy || (!unsubscribe && !canSave)) return;\n const current = ++request.current;\n setPhase(\"saving\");\n setNotice(\"\");\n setFailed(false);\n try {\n const result = await (unsubscribe ? adapter.unsubscribe() : adapter.save(notificationSettingsUpdate(draft, consent)));\n if (current !== request.current) return;\n setSnapshot(result);\n setDraft(result.preferences ?? defaultNotificationPreferences());\n setConsent(false);\n setPhase(\"ready\");\n setNotice(result.preferences?.enabled ? \"Notification preferences saved.\" : \"Email notifications are off.\");\n // Consumer observers must not turn a confirmed server save into a retry prompt.\n try { onSaved?.(result); } catch { /* Persistence succeeded; host callback failures are separate. */ }\n } catch {\n if (current !== request.current) return;\n setPhase(\"ready\");\n setConsent(false);\n setFailed(true);\n setNotice(\"We couldn't confirm your changes. Retry, or reload settings to check their current state.\");\n }\n };\n\n return <section className={`mbns ${className ?? \"\"}`} style={{ ...mindBillAppearanceStyle(appearance), ...style }} aria-labelledby={titleId} aria-busy={phase === \"loading\" || phase === \"saving\"}>\n <style>{css}</style>\n <div className=\"mbns-card\">\n <header className=\"mbns-header\"><div><h2 id={titleId}>Email notifications</h2><p className=\"mbns-muted\">Choose which billing updates reach your inbox. Notifications are off until you opt in.</p></div><span className=\"mbns-badge\">{!snapshot ? \"—\" : snapshot.preferences?.enabled ? \"On\" : \"Off\"}</span></header>\n {phase === \"loading\" ? <p role=\"status\" className=\"mbns-muted\">Loading notification preferences…</p> : phase === \"error\" ? <div><p role=\"alert\" className=\"mbns-error\">We couldn't load your preferences. No settings have been changed.</p><div className=\"mbns-actions\"><button type=\"button\" onClick={() => setReload(value => value + 1)}>Retry loading</button></div></div> : snapshot ? <>\n <div className=\"mbns-account\"><strong>{snapshot.email || \"No verified email address\"}</strong><p className=\"mbns-muted\">{snapshot.audience === \"practice\" ? \"Updates for this practice's bills\" : \"Updates only for bills assigned to you\"}. Your application manages this address and access.</p></div>\n {snapshot.environment === \"sandbox\" && <p className=\"mbns-notice\">Sandbox preview only. No notification emails will be sent.</p>}\n {!snapshot.canEnable && <p className=\"mbns-notice\">Notifications aren't available for this account yet. Ask your administrator to confirm email verification, billing access and notification availability. You can still turn existing notifications off.</p>}\n <label className=\"mbns-check\"><input type=\"checkbox\" checked={draft.enabled} disabled={busy || (!snapshot.canEnable && !draft.enabled)} onChange={event => update({ enabled: event.target.checked })} /><span><strong>Send me billing updates</strong><small>Emails contain a general alert, not patient details or attachments.</small></span></label>\n <fieldset disabled={busy || !draft.enabled || !snapshot.canEnable}><legend>Updates to receive</legend>\n <label className=\"mbns-check\"><input type=\"checkbox\" checked={draft.statusUpdates} onChange={event => update({ statusUpdates: event.target.checked })} /><span><strong>Bill status changes</strong><small>Follow accepted, rejected, processed and payment updates.</small></span></label>\n <p className=\"mbns-muted\">Remind me when a bill is still waiting for a payer:</p><div className=\"mbns-days\">{([30, 60, 90] as const).map(day => <label key={day} className=\"mbns-check\"><input type=\"checkbox\" checked={draft.agingDays.includes(day)} onChange={event => update({ agingDays: event.target.checked ? [...draft.agingDays, day] : draft.agingDays.filter(value => value !== day) })} /><span>{day} days</span></label>)}</div>\n <label className=\"mbns-check\"><input type=\"checkbox\" checked={draft.quietHours} onChange={event => update({ quietHours: event.target.checked })} /><span><strong>Quiet hours</strong><small>Hold emails from 7 pm to 7 am Pacific time.</small></span></label>\n </fieldset>\n {draft.enabled && !hasCategory && <p className=\"mbns-notice\">Select at least one update type to enable notifications.</p>}\n {needsConsent && <label className=\"mbns-check mbns-consent\"><input type=\"checkbox\" checked={consent} disabled={busy || !snapshot.canEnable} onChange={event => setConsent(event.target.checked)} /><span>I agree to receive the selected billing emails {snapshot.audience === \"practice\" ? \"for this practice\" : \"for bills assigned to me\"} at the address above. I can unsubscribe at any time.</span></label>}\n <div className=\"mbns-actions\"><button type=\"button\" className=\"mbns-save\" disabled={!canSave} onClick={() => void save(false)}>{phase === \"saving\" ? \"Saving…\" : \"Save preferences\"}</button>{snapshot.preferences?.enabled && <button type=\"button\" disabled={busy} onClick={() => void save(true)}>Unsubscribe from all</button>}{failed && <button type=\"button\" disabled={busy} onClick={() => setReload(value => value + 1)}>Reload settings</button>}</div>\n {notice && <p className={`mbns-notice ${failed ? \"mbns-error\" : \"\"}`} role={failed ? \"alert\" : \"status\"}>{notice}</p>}\n </> : null}\n </div>\n </section>;\n}\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n BillStatusSummary,\n type BillStatusSummaryProps,\n} from \"./native-bill-review\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n} from \"@mindbill/browser\";\n\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type BillStatusData = {\n billId: string;\n state: string;\n nativeStatus: string;\n submittedAt: string | null;\n agingDays: number | null;\n updatedAt: string | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n};\n\nexport type BillStatusSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillStatusSessionRequest = {\n signal: AbortSignal;\n};\n\nexport type BillStatusSessionProvider = (\n request: BillStatusSessionRequest,\n) => Promise<BillStatusSession>;\n\nexport type BillStatusClientOptions = {\n billId: string;\n /** Same-origin route that mints a short-lived organization/user browser session. */\n sessionEndpoint?: string;\n /** Advanced escape hatch for non-HTTP session exchange. */\n getSession?: BillStatusSessionProvider;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n};\n\nexport type BillStatusClient = {\n getStatus: (signal?: AbortSignal) => Promise<BillStatusData>;\n clearSession: () => void;\n};\n\nexport type UseBillStatusOptions = BillStatusClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillStatusData | null;\n};\n\nexport type UseBillStatusResult = {\n data: BillStatusData | null;\n error: Error | null;\n isLoading: boolean;\n isRefreshing: boolean;\n refresh: () => Promise<void>;\n};\n\nasync function responseError(\n response: Response,\n fallback: string,\n): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; error?: unknown }).detail\n ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction isSessionFresh(session: BillStatusSession | null): boolean {\n if (!session) return false;\n if (!session.expiresAt) return true;\n const expiresAt = new Date(session.expiresAt).getTime();\n return Number.isFinite(expiresAt) && expiresAt > Date.now() + 30_000;\n}\n\nfunction normalizeSession(value: unknown): BillStatusSession {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The MindBill session endpoint returned an invalid response.\");\n }\n const candidate = value as {\n token?: unknown;\n expiresAt?: unknown;\n apiBaseUrl?: unknown;\n session?: unknown;\n data?: unknown;\n };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\"\n ? nested as typeof candidate\n : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\"The MindBill session endpoint did not return a browser session token.\");\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\"\n ? { expiresAt: session.expiresAt }\n : {}),\n ...(typeof session.apiBaseUrl === \"string\"\n ? { apiBaseUrl: session.apiBaseUrl }\n : {}),\n };\n}\n\nfunction normalizeStatus(value: unknown, billId: string): BillStatusData {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"MindBill returned an invalid bill status.\");\n }\n const status = value as Partial<BillStatusData>;\n const amounts = [status.totalCharge, status.totalPaid, status.balanceDue];\n if (\n typeof status.state !== \"string\"\n || amounts.some(\n (amount) => typeof amount !== \"number\" || !Number.isFinite(amount),\n )\n ) {\n throw new Error(\"MindBill returned an invalid bill status.\");\n }\n return {\n billId: typeof status.billId === \"string\" ? status.billId : billId,\n state: status.state,\n nativeStatus: typeof status.nativeStatus === \"string\"\n ? status.nativeStatus\n : status.state,\n submittedAt: typeof status.submittedAt === \"string\"\n ? status.submittedAt\n : null,\n agingDays: typeof status.agingDays === \"number\" ? status.agingDays : null,\n updatedAt: typeof status.updatedAt === \"string\" ? status.updatedAt : null,\n totalCharge: status.totalCharge as number,\n totalPaid: status.totalPaid as number,\n balanceDue: status.balanceDue as number,\n };\n}\n\n/**\n * Browser-safe status client used by useBillStatus. It exchanges the user's\n * authenticated same-origin session for a short-lived MindBill token, then\n * reads status directly from MindBill. It never accepts a Partner API key.\n */\nexport function createBillStatusClient({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillStatusClientOptions): BillStatusClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") {\n throw new Error(\"A Fetch API implementation is required.\");\n }\n let session: BillStatusSession | null = null;\n let sessionRequest: Promise<BillStatusSession> | null = null;\n\n const mintSession = async (\n signal: AbortSignal,\n force = false,\n ): Promise<BillStatusSession> => {\n if (!force && isSessionFresh(session)) return session as BillStatusSession;\n if (!force && sessionRequest) return sessionRequest;\n\n const pending = getSession\n ? getSession({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n signal,\n }).then(async (response) => {\n if (!response.ok) {\n throw await responseError(\n response,\n \"MindBill browser session could not be created.\",\n );\n }\n return response.json();\n });\n\n const request = Promise.resolve(pending)\n .then(normalizeSession)\n .then((nextSession) => {\n session = nextSession;\n return nextSession;\n })\n .finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const requestStatus = async (\n browserSession: BillStatusSession,\n signal: AbortSignal,\n ): Promise<Response> => {\n const baseUrl = (browserSession.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n return fetcher(`${baseUrl}/partner/v2/bills/${encodeURIComponent(billId)}/status`, {\n headers: { authorization: `Bearer ${browserSession.token}` },\n signal,\n });\n };\n\n return {\n clearSession() {\n session = null;\n sessionRequest = null;\n },\n async getStatus(providedSignal) {\n const controller = providedSignal ? null : new AbortController();\n const signal = providedSignal ?? controller?.signal;\n if (!signal) throw new Error(\"An AbortSignal could not be created.\");\n let browserSession = await mintSession(signal);\n let response = await requestStatus(browserSession, signal);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(signal, true);\n response = await requestStatus(browserSession, signal);\n }\n if (!response.ok) {\n throw await responseError(response, \"Bill status could not be loaded.\");\n }\n const body = await response.json() as { data?: unknown };\n return normalizeStatus(body.data, billId);\n },\n };\n}\n\nexport function useBillStatus({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n refreshInterval = DEFAULT_REFRESH_INTERVAL,\n enabled = true,\n initialData = null,\n fetch: fetchOverride,\n}: UseBillStatusOptions): UseBillStatusResult {\n const client = useMemo(() => createBillStatusClient({\n billId,\n sessionEndpoint,\n ...(getSession ? { getSession } : {}),\n apiBaseUrl,\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n }), [apiBaseUrl, billId, fetchOverride, getSession, sessionEndpoint]);\n const [data, setData] = useState<BillStatusData | null>(initialData);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled && !initialData);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const dataRef = useRef<BillStatusData | null>(initialData);\n const initialDataRef = useRef<BillStatusData | null>(initialData);\n initialDataRef.current = initialData;\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestSequence = useRef(0);\n\n useEffect(() => {\n const seed = initialDataRef.current;\n dataRef.current = seed;\n setData(seed);\n setError(null);\n setIsLoading(enabled && !seed);\n activeControllerRef.current?.abort();\n return () => activeControllerRef.current?.abort();\n }, [client, enabled]);\n\n const load = useCallback(async () => {\n if (!enabled || !billId) return;\n const sequence = ++requestSequence.current;\n activeControllerRef.current?.abort();\n const controller = new AbortController();\n activeControllerRef.current = controller;\n if (dataRef.current) setIsRefreshing(true);\n else setIsLoading(true);\n setError(null);\n\n try {\n const nextData = await client.getStatus(controller.signal);\n if (!controller.signal.aborted && sequence === requestSequence.current) {\n dataRef.current = nextData;\n setData(nextData);\n }\n } catch (cause) {\n if (controller.signal.aborted) return;\n if (sequence === requestSequence.current) {\n setError(\n cause instanceof Error\n ? cause\n : new Error(\"Bill status could not be loaded.\"),\n );\n }\n } finally {\n if (activeControllerRef.current === controller) {\n activeControllerRef.current = null;\n }\n if (!controller.signal.aborted && sequence === requestSequence.current) {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }\n }, [billId, client, enabled]);\n\n useEffect(() => {\n if (enabled) void load();\n }, [enabled, load]);\n\n useEffect(() => {\n if (!enabled || refreshInterval <= 0) return;\n const timer = window.setInterval(() => void load(), refreshInterval);\n const onFocus = () => void load();\n const onVisibility = () => {\n if (document.visibilityState === \"visible\") void load();\n };\n window.addEventListener(\"focus\", onFocus);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.clearInterval(timer);\n window.removeEventListener(\"focus\", onFocus);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n }, [enabled, load, refreshInterval]);\n\n return { data, error, isLoading, isRefreshing, refresh: load };\n}\n\nexport type ConnectedBillStatusProps = UseBillStatusOptions & {\n actions?: BillStatusSummaryProps[\"actions\"];\n appearance?: BillStatusSummaryProps[\"appearance\"];\n className?: string;\n style?: BillStatusSummaryProps[\"style\"];\n loadingFallback?: ReactNode;\n errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;\n};\n\nexport function ConnectedBillStatus({\n actions,\n appearance,\n className,\n style,\n loadingFallback,\n errorFallback,\n ...options\n}: ConnectedBillStatusProps): ReactElement | null {\n const status = useBillStatus(options);\n if (status.isLoading && !status.data) {\n return <>{loadingFallback ?? <div role=\"status\">Loading bill status…</div>}</>;\n }\n if (status.error && !status.data) {\n return <>{errorFallback?.(status.error, status.refresh) ?? (\n <div role=\"alert\">\n {status.error.message}{\" \"}\n <button type=\"button\" onClick={() => void status.refresh()}>Retry</button>\n </div>\n )}</>;\n }\n if (!status.data) return null;\n return <BillStatusSummary\n status={status.data.state}\n submittedAt={status.data.submittedAt}\n agingDays={status.data.agingDays}\n updatedAt={status.data.updatedAt}\n totalCharge={status.data.totalCharge}\n totalPaid={status.data.totalPaid}\n balanceDue={status.data.balanceDue}\n {...(actions ? { actions } : {})}\n {...(appearance ? { appearance } : {})}\n {...(className ? { className } : {})}\n {...(style ? { style } : {})}\n />;\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState, type CSSProperties, type ReactElement } from \"react\";\nimport type {\n BillEorDocument,\n BillHistoryEntry,\n BillLifecycleAction,\n BillLifecycleData,\n BillLifecycleDelivery,\n BillPaymentRecord,\n BillRejection,\n BillRemittanceSummary,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillLifecycleActionsProps = SurfaceProps & {\n actions: readonly BillLifecycleAction[];\n onAction: (action: BillLifecycleAction) => void;\n /** Show disabled actions and the server-provided reason. Defaults to false. */\n showUnavailable?: boolean;\n disabled?: boolean;\n};\n\n/** Returns the server-authoritative actions that should be rendered. */\nexport function visibleBillLifecycleActions(\n actions: readonly BillLifecycleAction[],\n showUnavailable = false,\n): BillLifecycleAction[] {\n return actions.filter((action) => action.enabled || showUnavailable);\n}\n\nexport function BillLifecycleActions({\n actions,\n onAction,\n showUnavailable = false,\n disabled = false,\n appearance,\n className,\n style,\n}: BillLifecycleActionsProps): ReactElement | null {\n const visible = visibleBillLifecycleActions(actions, showUnavailable);\n if (!visible.length) return null;\n\n return (\n <div className={classes(\"mb-lifecycle-actions\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill actions\">\n <style>{lifecycleSurfaceStyles}</style>\n {visible.map((action) => (\n <div className=\"mb-lifecycle-action\" key={action.id}>\n <button type=\"button\" className={action.primary ? \"mb-action-button is-primary\" : \"mb-action-button\"} disabled={disabled || !action.enabled} onClick={() => onAction(action)}>\n {action.label}\n </button>\n {!action.enabled && action.reason ? <span className=\"mb-action-reason\">{action.reason}</span> : null}\n </div>\n ))}\n </div>\n );\n}\n\nexport type BillActivityEvent = {\n id: string;\n type: string;\n createdAt: string;\n title?: string;\n description?: string;\n actor?: string | null;\n};\n\nexport type BillActivityTimelineProps = SurfaceProps & {\n events: readonly BillActivityEvent[];\n emptyLabel?: string;\n formatDate?: (createdAt: string) => string;\n};\n\nconst activityLabels: Record<string, string> = {\n \"bill.scrub_failed\": \"Submission needs attention\",\n \"bill.submitted\": \"Bill submitted\",\n \"bill.accepted\": \"Bill accepted\",\n \"bill.rejected\": \"Bill rejected\",\n \"bill.denied\": \"Bill denied\",\n \"bill.partially_paid\": \"Partial payment received\",\n \"bill.paid\": \"Bill paid\",\n \"bill.second_review\": \"Second Bill Review submitted\",\n \"bill.lien\": \"Bill moved to lien\",\n \"bill.ibr\": \"Independent Bill Review submitted\",\n \"bill.closed\": \"Bill closed\",\n \"bill.written_off\": \"Balance written off\",\n \"payment.posted\": \"Payment posted\",\n \"eor.received\": \"EOR received\",\n \"bill.autofill_completed\": \"Bill data extracted\",\n};\n\n/** Human-readable fallback for a signed partner event type. */\nexport function billActivityEventLabel(type: string): string {\n return activityLabels[type] ?? type.replace(/[._-]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction defaultFormatDate(createdAt: string): string {\n const parsed = new Date(createdAt);\n if (Number.isNaN(parsed.getTime())) return createdAt;\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\", timeStyle: \"short\" }).format(parsed);\n}\n\nexport function BillActivityTimeline({ events, emptyLabel = \"No bill activity yet.\", appearance, className, style, formatDate = defaultFormatDate }: BillActivityTimelineProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-activity\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill activity\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill history</strong><span>Submission, payer responses, follow-up, and payments.</span></div></header>\n {!events.length ? <p className=\"mb-activity-empty\">{emptyLabel}</p> : (\n <ol className=\"mb-activity-list\">\n {events.map((event) => (\n <li className=\"mb-activity-item\" key={event.id}>\n <span className=\"mb-activity-marker\" aria-hidden=\"true\" />\n <div className=\"mb-activity-content\">\n <strong>{event.title ?? billActivityEventLabel(event.type)}</strong>\n {event.description ? <p>{event.description}</p> : null}\n <span>{formatDate(event.createdAt)}{event.actor ? ` · ${event.actor}` : \"\"}</span>\n </div>\n </li>\n ))}\n </ol>\n )}\n </section>\n );\n}\n\nexport type BillHistoryTableProps = SurfaceProps & {\n entries: readonly BillHistoryEntry[];\n /** History row selected from the submissions ribbon. */\n selectedEntryId?: string;\n emptyLabel?: string;\n /** Formats the Date column. Defaults to MM/DD/YYYY. */\n formatDate?: (iso: string) => string;\n /** Resolve a clickable href for a submitted document; return null for plain text. */\n documentHref?: (doc: { id: string; filename: string }) => string | null;\n /** Open an authenticated submitted document in a new tab when no direct href is available. */\n onOpenDocument?: (doc: { id: string; filename: string }) => void | Promise<void>;\n};\n\nfunction historyDate(iso: string): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return iso;\n return new Intl.DateTimeFormat(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }).format(parsed);\n}\n\n/**\n * The Bill History table: Date / Action / User / Details rows where\n * submissions are pale-blue expandable rows (documents + compliance due dates), notes\n * are pale-yellow, and 277 responses expand into decoded status-code sentences. The\n * rows come pre-worded from the MindBill API (`BillLifecycleData.history`).\n */\nexport function BillHistoryTable({ entries, selectedEntryId, emptyLabel = \"No bill history yet.\", appearance, className, style, formatDate = historyDate, documentHref, onOpenDocument }: BillHistoryTableProps): ReactElement {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n const selectedRowRef = useRef<HTMLLIElement | null>(null);\n useEffect(() => {\n if (!selectedEntryId) return;\n const selected = entries.find((entry) => entry.id === selectedEntryId);\n if (selected?.details) setExpanded((current) => current[selectedEntryId] ? current : { ...current, [selectedEntryId]: true });\n selectedRowRef.current?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }, [entries, selectedEntryId]);\n return (\n <section className={classes(\"mb-surface mb-history\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill history\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill history</strong><span>Submissions, payer responses, follow-up, and payments.</span></div></header>\n {!entries.length ? <p className=\"mb-activity-empty\">{emptyLabel}</p> : (\n <div className=\"mb-history-table\">\n <div className=\"mb-history-head\" aria-hidden=\"true\"><span>Date</span><span>Action</span><span>User</span><span>Details</span></div>\n <ul className=\"mb-history-rows\">\n {entries.map((entry) => {\n const isSelected = entry.id === selectedEntryId;\n const expandable = Boolean(entry.details);\n const isOpen = expandable && Boolean(expanded[entry.id]);\n const details = entry.details;\n const lineContents = <>\n <span className=\"mb-history-date\">{formatDate(entry.date)}</span>\n <span className=\"mb-history-action\">{entry.action}</span>\n <span className=\"mb-history-actor\">{entry.actor ?? \"—\"}</span>\n <span className=\"mb-history-summary\">\n {expandable ? <i className={`mb-history-caret${isOpen ? \" is-open\" : \"\"}`} aria-hidden=\"true\" /> : null}\n {entry.summary}\n </span>\n </>;\n return (\n <li\n key={entry.id}\n ref={isSelected ? selectedRowRef : undefined}\n className={`mb-history-row is-${entry.tone}${isSelected ? \" is-selected\" : \"\"}`}\n aria-current={isSelected ? \"true\" : undefined}\n >\n {expandable ? <button\n type=\"button\"\n className=\"mb-history-line is-expandable\"\n aria-expanded={isOpen}\n onClick={() => setExpanded((current) => ({ ...current, [entry.id]: !current[entry.id] }))}\n >{lineContents}</button> : <div className=\"mb-history-line\">{lineContents}</div>}\n {isOpen && details ? (\n <div className=\"mb-history-details\">\n {details.rows?.length ? (\n <dl className=\"mb-history-kv\">\n {details.rows.map((row) => (\n <div key={`${row.label}-${row.value}`}><dt>{row.label}</dt><dd>{row.value}</dd></div>\n ))}\n </dl>\n ) : null}\n {details.documents?.length ? (\n <div className=\"mb-history-kv\"><div><dt>Documents</dt><dd>\n {details.documents.map((doc) => {\n const href = documentHref?.(doc) ?? null;\n return href\n ? <a key={doc.id} className=\"mb-history-doc\" href={href} target=\"_blank\" rel=\"noreferrer\">{doc.filename}</a>\n : onOpenDocument\n ? <button key={doc.id} type=\"button\" className=\"mb-history-doc\" onClick={() => void onOpenDocument(doc)}>{doc.filename}</button>\n : <span key={doc.id} className=\"mb-history-doc\">{doc.filename}</span>;\n })}\n </dd></div></div>\n ) : null}\n {details.codes?.length ? (\n <dl className=\"mb-history-codes\">\n {details.codes.map((code) => (\n <div key={code.code}><dt>{code.code}</dt><dd>{code.text}</dd></div>\n ))}\n </dl>\n ) : null}\n {details.complianceDueDates?.length ? (\n <div className=\"mb-history-due\">\n <em>Compliance Due Dates</em>\n <dl>\n {details.complianceDueDates.map((due) => (\n <div key={`${due.date}-${due.text}`}><dt>{formatDate(due.date)}</dt><dd>{due.text}</dd></div>\n ))}\n </dl>\n </div>\n ) : null}\n {details.text ? <p className=\"mb-history-text\">{details.text}</p> : null}\n </div>\n ) : null}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </section>\n );\n}\n\nexport type BillLifecycleStage = \"submitted\" | \"accepted\" | \"processed\" | \"closed\";\n\nconst lifecycleStages: Array<{ id: BillLifecycleStage; label: string }> = [\n { id: \"submitted\", label: \"Sent\" },\n { id: \"accepted\", label: \"Accepted\" },\n { id: \"processed\", label: \"Processed\" },\n { id: \"closed\", label: \"Closed\" },\n];\n\nexport type BillLifecycleProgressStep = {\n id: string;\n label: string;\n status: \"complete\" | \"current\" | \"upcoming\";\n};\n\n/** Maps MindBill's detailed lifecycle state into a compact progress stage. */\nexport function billLifecycleStage(state: string): BillLifecycleStage {\n const value = state.toLowerCase();\n if (value.includes(\"closed\") || value.includes(\"written_off\")) return \"closed\";\n if (value.includes(\"second_review\") || value.includes(\"appeal\") || value.includes(\"reject\")) return \"submitted\";\n if (value.includes(\"processed\") || value.includes(\"paid\") || value.includes(\"denied\") || value.includes(\"partial\") || value.includes(\"response\") || value.includes(\"ibr\") || value.includes(\"lien\")) return \"processed\";\n if (value.includes(\"accepted\")) return \"accepted\";\n return \"submitted\";\n}\n\nexport type BillLifecycleProgressStepsOptions = {\n /**\n * Render pre-submission bills (\"draft\") as a dedicated leading Draft stage\n * ahead of the Sent→Closed rail. Off by default: hosts whose bills are always\n * already submitted (the typical partner embed) never see a Draft stage, and\n * without the flag a draft state keeps the legacy rendering (Sent as the\n * current stage). Post-submission states render identically either way.\n */\n draftStage?: boolean;\n};\n\n/** True when the lifecycle state is a pre-submission draft. */\nexport function isBillLifecycleDraft(state: string): boolean {\n return state.toLowerCase() === \"draft\";\n}\n\n/** Builds the progress rail for a lifecycle state, including terminal exception paths. */\nexport function billLifecycleProgressSteps(state: string, options?: BillLifecycleProgressStepsOptions): BillLifecycleProgressStep[] {\n if (state.toLowerCase() === \"rejected\") {\n return [\n { id: \"submitted\", label: \"Sent\", status: \"complete\" },\n { id: \"rejected\", label: \"Rejected\", status: \"current\" },\n ];\n }\n\n if (options?.draftStage && isBillLifecycleDraft(state)) {\n return [\n { id: \"draft\", label: \"Draft\", status: \"current\" },\n ...lifecycleStages.map((stage) => ({ ...stage, status: \"upcoming\" as const })),\n ];\n }\n\n const current = billLifecycleStage(state);\n const currentIndex = lifecycleStages.findIndex((stage) => stage.id === current);\n return lifecycleStages.map((stage, index) => ({\n ...stage,\n status:\n index < currentIndex\n ? \"complete\"\n : index === currentIndex\n ? \"current\"\n : \"upcoming\",\n }));\n}\n\n/** Returns the end-user label for a canonical lifecycle state. */\nexport function billLifecycleDisplayLabel(state: string, nativeStatus?: string): string {\n const value = state.toLowerCase();\n if (value === \"submitted\") return \"Sent\";\n if (value === \"second_review\") return \"Second Review sent\";\n if (value === \"rejected\") return \"Rejected\";\n if (value === \"denied\") return \"Denied\";\n if (value === \"partially_paid\") return \"Partially paid\";\n if (value === \"written_off\") return \"Written off\";\n return humanize(state || nativeStatus || \"submitted\");\n}\n\nexport type BillLifecycleProgressProps = SurfaceProps & {\n state: string;\n nativeStatus?: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n /** Opt-in leading Draft stage for pre-submission bills. See {@link BillLifecycleProgressStepsOptions}. */\n draftStage?: boolean;\n};\n\nexport function BillLifecycleProgress({ state, nativeStatus, submittedAt, agingDays, draftStage, appearance, className, style }: BillLifecycleProgressProps): ReactElement {\n const rejected = state.toLowerCase() === \"rejected\";\n const draft = Boolean(draftStage) && isBillLifecycleDraft(state);\n const steps = billLifecycleProgressSteps(state, { draftStage: Boolean(draftStage) });\n return (\n <section className={classes(`mb-surface mb-progress${rejected ? \" is-rejected\" : \"\"}`, className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill lifecycle\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>{billLifecycleDisplayLabel(state, nativeStatus)}</strong><span>{rejected ? \"The payer rejected this submission.\" : draft ? \"Not yet sent\" : `${submittedAt ? `Submitted ${defaultFormatDate(submittedAt)}` : \"Submitted\"}${typeof agingDays === \"number\" ? ` · ${agingDays} days old` : \"\"}`}</span></div></header>\n <ol className=\"mb-progress-list\" style={{ gridTemplateColumns: `repeat(${steps.length}, minmax(0, 1fr))` }}>\n {steps.map((step, index) => (\n <li key={step.id} className={`is-${step.status}`} aria-current={step.status === \"current\" ? \"step\" : undefined}>\n <span aria-hidden=\"true\">{step.status === \"complete\" ? \"✓\" : rejected && step.status === \"current\" ? \"!\" : index + 1}</span>\n <b>{step.label}</b>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n\nexport type BillRejectionNoticeProps = SurfaceProps & {\n rejection: BillRejection;\n title?: string;\n submittedAt?: string | null;\n formatDate?: (createdAt: string) => string;\n};\n\n/** Builds concise source-aware copy without inventing a clearinghouse name. */\nexport function billRejectionIssueSummary(rejection: BillRejection, count: number): string {\n const noun = count === 1 ? \"validation error\" : \"validation errors\";\n const source = rejection.source?.trim().replace(/\\.$/, \"\");\n if (!source) return `${count} ${noun}.`;\n if (/acknowledg/i.test(source)) return `${count} clearinghouse ${noun}.`;\n return `${count} ${noun} returned by ${source}.`;\n}\n\n/** A prominent, end-user-readable explanation of a rejected submission. */\nexport function BillRejectionNotice({ rejection, title = \"Rejected — action required\", submittedAt, appearance, className, style, formatDate = defaultFormatDate }: BillRejectionNoticeProps): ReactElement {\n const issues = rejection.issues?.length\n ? rejection.issues\n : [{ code: rejection.code, description: rejection.reason }];\n const hasCodes = issues.some((issue) => Boolean(issue.code));\n\n return (\n <section className={classes(\"mb-surface mb-rejection-notice\", className)} style={mindBillAppearanceStyle(appearance, style)} role=\"alert\" aria-label=\"Bill rejection reasons\">\n <style>{lifecycleSurfaceStyles}</style>\n <div className=\"mb-rejection-overview\">\n <header className=\"mb-rejection-heading\">\n <span className=\"mb-rejection-icon\" aria-hidden=\"true\">!</span>\n <div><strong>{title}</strong><span>Fix the {issues.length === 1 ? \"issue\" : \"issues\"} below, then resubmit.</span></div>\n </header>\n <ol className=\"mb-rejection-progress\" aria-label=\"Submission status\">\n <li className=\"is-complete\"><span aria-hidden=\"true\">✓</span><b>Sent</b>{submittedAt ? <small>{formatDate(submittedAt)}</small> : null}</li>\n <li className=\"is-rejected\" aria-current=\"step\"><span aria-hidden=\"true\">!</span><b>Rejected</b>{rejection.receivedAt ? <small>{formatDate(rejection.receivedAt)}</small> : null}</li>\n </ol>\n </div>\n <div className=\"mb-rejection-issues\" aria-label=\"Rejection reasons\">\n <div className=\"mb-rejection-issues-heading\">\n <strong><span aria-hidden=\"true\">△</span> Rejection reasons</strong>\n <span>{billRejectionIssueSummary(rejection, issues.length)}</span>\n </div>\n <ol aria-label={`${issues.length} rejection ${issues.length === 1 ? \"reason\" : \"reasons\"}`}>\n {issues.map((issue, index) => (\n <li key={`${issue.code ?? \"issue\"}-${index}`}>\n <span className=\"mb-rejection-bullet\" aria-hidden=\"true\" />\n <p>{issue.description}</p>\n {issue.code ? <span className=\"mb-rejection-code\">{issue.code}</span> : null}\n </li>\n ))}\n </ol>\n {hasCodes ? <p className=\"mb-rejection-code-note\"><span aria-hidden=\"true\">i</span> Technical error codes are included for support and auditability.</p> : null}\n </div>\n </section>\n );\n}\n\nexport type BillSnapshotSummaryProps = SurfaceProps & Pick<BillLifecycleData, \"bill\" | \"patient\" | \"injury\" | \"delivery\">;\n\nexport function BillSnapshotSummary({ bill, patient, injury, delivery, appearance, className, style }: BillSnapshotSummaryProps): ReactElement {\n const values = [\n [\"Patient\", patient.name || [patient.firstName, patient.lastName].filter(Boolean).join(\" \")],\n [\"Claim\", injury.claimNumber || \"—\"],\n [\"Payer\", delivery.payerName || injury.claimsAdminName || \"—\"],\n [\"Date of service\", bill.dos || \"—\"],\n [\"Charged\", currency(bill.totalCharge)],\n [\"Balance\", currency(bill.balanceDue)],\n ];\n return (\n <section className={classes(\"mb-surface mb-snapshot\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill snapshot\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill snapshot</strong><span>Bill #{bill.billNumber}</span></div></header>\n <dl>{values.map(([label, value]) => <div key={label}><dt>{label}</dt><dd>{value}</dd></div>)}</dl>\n </section>\n );\n}\n\nexport type BillRemittanceCardProps = SurfaceProps & { remittance: BillRemittanceSummary };\n\nexport type BillExplanationOfReviewProps = SurfaceProps & {\n remittance: BillRemittanceSummary;\n eors: readonly BillEorDocument[];\n payments: readonly BillPaymentRecord[];\n submittedAt?: string | null;\n onOpenEor?: (document: BillEorDocument) => void | Promise<void>;\n};\n\n/**\n * A consolidated payer-response surface: financial summary, denial context,\n * EOR documents, and posted payments in one familiar reconciliation view.\n */\nexport function BillExplanationOfReview({\n remittance,\n eors,\n payments,\n submittedAt,\n onOpenEor,\n appearance,\n className,\n style,\n}: BillExplanationOfReviewProps): ReactElement {\n const rows = payments.length ? payments : [null];\n return (\n <section className={classes(\"mb-surface mb-eor-review\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Explanation of Review and payments\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Explanation of Review</strong><span>Payer response and payment reconciliation.</span></div></header>\n <dl className=\"mb-eor-metrics\">\n <div><dt>Amount billed</dt><dd>{currency(remittance.billedAmount)}</dd></div>\n <div><dt>Payer allowed</dt><dd>{remittance.payerAllowedAmount === null ? \"—\" : currency(remittance.payerAllowedAmount)}</dd></div>\n <div><dt>Payer reported paid</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div className=\"is-balance\"><dt>Balance due</dt><dd>{currency(remittance.balanceDue)}</dd></div>\n <div><dt>Payment posted</dt><dd>{currency(remittance.postedPrincipal)}</dd></div>\n <div><dt>Penalty & interest</dt><dd>{currency(remittance.postedAdditional)}</dd></div>\n <div><dt>Total received</dt><dd>{currency(remittance.totalPostedCash)}</dd></div>\n <div><dt>Expected</dt><dd>{currency(remittance.expectedAmount)}</dd></div>\n </dl>\n {remittance.denialReason ? <div className=\"mb-denial\"><strong>Denial reason</strong><p>{remittance.denialReason}</p></div> : null}\n <div className=\"mb-eor-table-wrap\">\n <table className=\"mb-eor-table\">\n <thead>\n <tr className=\"mb-eor-groups\"><th colSpan={2}>Submission</th><th colSpan={5}>EOR payment information</th><th colSpan={2}>EOR post</th><th>EOR</th></tr>\n <tr><th>Submission</th><th>Submission payment</th><th>Payment method</th><th>Reference</th><th>Effective date</th><th>Payment total</th><th>Deposit date</th><th>Post date</th><th>Source</th><th>Document</th></tr>\n </thead>\n <tbody>{rows.map((payment, index) => {\n const eor = eors[index] ?? eors[0];\n return <tr key={payment?.id ?? `empty-${index}`}>\n <td data-label=\"Submission\"><strong>Original bill</strong>{submittedAt ? <span>Sent {defaultFormatDate(submittedAt)}</span> : null}</td>\n <td data-label=\"Submission payment\">{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</td>\n <td data-label=\"Payment method\">{payment ? humanize(payment.method) : \"—\"}</td>\n <td data-label=\"Reference\">{payment?.checkNumber || \"—\"}</td>\n <td data-label=\"Effective date\">{payment ? payment.receivedDate || payment.depositDate || defaultFormatDate(payment.postedAt) : \"—\"}</td>\n <td data-label=\"Payment total\">{payment ? currency(payment.amount) : currency(0)}</td>\n <td data-label=\"Deposit date\">{payment?.depositDate || \"Not recorded\"}</td>\n <td data-label=\"Post date\">{payment ? defaultFormatDate(payment.postedAt) : eor ? defaultFormatDate(eor.addedAt) : \"—\"}</td>\n <td data-label=\"Source\">{payment ? payment.source.toUpperCase() : eor ? \"EOR\" : \"—\"}</td>\n <td data-label=\"EOR\">{eor && onOpenEor ? <button type=\"button\" className=\"mb-eor-link\" onClick={() => void onOpenEor(eor)}>{eor.filename}</button> : eor?.filename || \"—\"}</td>\n </tr>;\n })}</tbody>\n </table>\n </div>\n {eors.length > rows.length ? <div className=\"mb-eor-documents\">{eors.slice(rows.length).map((eor) => <button type=\"button\" key={eor.id} onClick={() => void onOpenEor?.(eor)}>{eor.filename}</button>)}</div> : null}\n </section>\n );\n}\n\nexport function BillRemittanceCard({ remittance, appearance, className, style }: BillRemittanceCardProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-remittance\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Remittance summary\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Remittance</strong><span>Amounts reported by the payer and posted to the bill.</span></div></header>\n <dl>\n <div><dt>Amount billed</dt><dd>{currency(remittance.billedAmount)}</dd></div>\n <div><dt>Expected</dt><dd>{currency(remittance.expectedAmount)}</dd></div>\n <div><dt>Payer allowed</dt><dd>{remittance.payerAllowedAmount === null ? \"—\" : currency(remittance.payerAllowedAmount)}</dd></div>\n <div><dt>Payer reported paid</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div><dt>Payment posted</dt><dd>{currency(remittance.postedPrincipal)}</dd></div>\n <div><dt>Penalty & interest</dt><dd>{currency(remittance.postedAdditional)}</dd></div>\n <div><dt>Total received</dt><dd>{currency(remittance.totalPostedCash)}</dd></div>\n <div><dt>Balance due</dt><dd>{currency(remittance.balanceDue)}</dd></div>\n </dl>\n {remittance.denialReason ? <div className=\"mb-denial\"><strong>Denial reason</strong><p>{remittance.denialReason}</p></div> : null}\n </section>\n );\n}\n\nexport type BillPayerContactCardProps = SurfaceProps & { delivery: BillLifecycleDelivery };\n\nexport function BillPayerContactCard({ delivery, appearance, className, style }: BillPayerContactCardProps): ReactElement | null {\n const contacts = [\n delivery.contacts.adjusterName ? [\"Adjuster\", delivery.contacts.adjusterName, null] : null,\n delivery.contacts.adjusterPhone ? [\"Adjuster phone\", delivery.contacts.adjusterPhone, `tel:${delivery.contacts.adjusterPhone}`] : null,\n delivery.contacts.adjusterEmail ? [\"Adjuster email\", delivery.contacts.adjusterEmail, `mailto:${delivery.contacts.adjusterEmail}`] : null,\n delivery.contacts.faxNumber ? [\"Fax\", delivery.contacts.faxNumber, `tel:${delivery.contacts.faxNumber}`] : null,\n delivery.contacts.claimsEmail ? [\"Email\", delivery.contacts.claimsEmail, `mailto:${delivery.contacts.claimsEmail}`] : null,\n delivery.contacts.mailingAddress ? [\"Mail\", delivery.contacts.mailingAddress, null] : null,\n delivery.contacts.portalUrl ? [\"Portal\", \"Open payer portal\", delivery.contacts.portalUrl] : null,\n ].filter(Boolean) as Array<[string, string, string | null]>;\n if (!delivery.payerName && !contacts.length) return null;\n return (\n <section className={classes(\"mb-surface mb-contacts\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Payer contact information\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>{delivery.payerName || \"Claims administrator\"}</strong><span>Billing and follow-up contacts.</span></div></header>\n {!contacts.length ? <p className=\"mb-empty\">No payer contact details are available.</p> : <dl>{contacts.map(([label, value, href]) => <div key={label}><dt>{label}</dt><dd>{href ? <a href={href} target={label === \"Portal\" ? \"_blank\" : undefined} rel={label === \"Portal\" ? \"noreferrer noopener\" : undefined}>{value}</a> : value}</dd></div>)}</dl>}\n </section>\n );\n}\n\nexport type BillPaymentLedgerProps = SurfaceProps & { payments: readonly BillPaymentRecord[] };\n\nexport function BillPaymentLedger({ payments, appearance, className, style }: BillPaymentLedgerProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-payments\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Payment ledger\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Payments</strong><span>Funds recorded against this bill.</span></div></header>\n {!payments.length ? <p className=\"mb-empty\">No payments posted.</p> : <div className=\"mb-payment-list\">{payments.map((payment) => {\n const additional = payment.feeAmount ?? 0;\n return <article key={payment.id}>\n <div className=\"mb-payment-amount\"><strong>{currency(payment.amount)}</strong><span>Total received</span></div>\n <dl>\n <div><dt>Applied to bill</dt><dd>{currency(payment.principalAmount)}</dd></div>\n {additional > 0 ? <div><dt>Penalty & interest</dt><dd>{currency(additional)}</dd></div> : null}\n <div><dt>Method</dt><dd>{payment.method.toUpperCase()}</dd></div>\n <div><dt>Reference</dt><dd>{payment.checkNumber || \"—\"}</dd></div>\n <div><dt>Effective date</dt><dd>{payment.receivedDate || payment.depositDate || defaultFormatDate(payment.postedAt)}</dd></div>\n <div><dt>Deposit date</dt><dd>{payment.depositDate || \"Not recorded\"}</dd></div>\n <div><dt>Posted</dt><dd>{defaultFormatDate(payment.postedAt)} · {payment.source.toUpperCase()}</dd></div>\n <div><dt>Status</dt><dd>{humanize(payment.status || \"posted\")}</dd></div>\n </dl>\n {payment.feeReason ? <p>{payment.feeReason}</p> : null}\n {payment.note ? <p>{payment.note}</p> : null}\n </article>;\n })}</div>}\n </section>\n );\n}\n\nfunction classes(base: string, className?: string): string {\n return [base, className].filter(Boolean).join(\" \");\n}\n\nfunction humanize(value: string): string {\n return value.replace(/[._-]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction currency(value: number): string {\n return new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nconst lifecycleSurfaceStyles = `\n.mb-lifecycle-actions,.mb-surface{box-sizing:border-box;color:var(--mb-text);font-family:var(--mb-font,ui-sans-serif,system-ui,sans-serif)}\n.mb-surface *{box-sizing:border-box}.mb-surface{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,12px);box-shadow:var(--mb-shadow);padding:20px}\n.mb-surface-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.mb-surface-heading>div{display:grid;gap:2px}.mb-surface-heading strong{font-size:16px}.mb-surface-heading span,.mb-empty{color:var(--mb-muted);font-size:13px}.mb-surface-heading>span{border-radius:999px;background:var(--mb-soft);font-weight:750;padding:4px 8px}\n.mb-lifecycle-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start}.mb-lifecycle-action{display:grid;gap:5px;max-width:260px}.mb-action-button{appearance:none;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:700;line-height:1.2;padding:11px 15px;cursor:pointer}.mb-action-button:hover:not(:disabled){border-color:var(--mb-accent);color:var(--mb-accent)}.mb-action-button:focus-visible{outline:3px solid color-mix(in srgb,var(--mb-accent) 28%,transparent);outline-offset:2px}.mb-action-button.is-primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-action-button:disabled{cursor:not-allowed;opacity:.55}.mb-action-reason{color:var(--mb-muted);font-size:12px;line-height:1.35}\n.mb-activity-list{list-style:none;margin:0;padding:0}.mb-activity-item{display:grid;grid-template-columns:18px minmax(0,1fr);gap:12px;position:relative;padding:0 0 22px}.mb-activity-item:last-child{padding-bottom:0}.mb-activity-item:not(:last-child)::before{background:var(--mb-border);content:\"\";left:8px;position:absolute;top:10px;bottom:0;width:1px}.mb-activity-marker{background:var(--mb-surface);border:3px solid var(--mb-accent);border-radius:999px;height:11px;margin-top:4px;position:relative;width:11px;z-index:1}.mb-activity-content{display:grid;gap:4px;min-width:0}.mb-activity-content strong{font-size:15px;line-height:1.35}.mb-activity-content p{color:var(--mb-text);font-size:14px;line-height:1.5;margin:0}.mb-activity-content span,.mb-activity-empty{color:var(--mb-muted);font-size:13px;line-height:1.45}.mb-activity-empty,.mb-empty{margin:0}\n.mb-progress-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));list-style:none;margin:0;padding:0}.mb-progress-list li{display:grid;gap:7px;position:relative;text-align:center;color:var(--mb-muted);font-size:12px}.mb-progress-list li:not(:last-child)::after{content:\"\";position:absolute;left:calc(50% + 14px);right:calc(-50% + 14px);top:13px;height:2px;background:var(--mb-border)}.mb-progress-list li.is-complete:not(:last-child)::after{background:var(--mb-accent)}.mb-progress-list li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:28px;height:28px;border:2px solid var(--mb-border);border-radius:50%;background:var(--mb-surface);font-weight:800}.mb-progress-list li.is-complete>span,.mb-progress-list li.is-current>span{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-progress-list li.is-current{color:var(--mb-text)}\n.mb-progress.is-rejected{border-color:color-mix(in srgb,var(--mb-danger) 34%,var(--mb-border));background:color-mix(in srgb,var(--mb-danger) 3%,var(--mb-surface));box-shadow:0 8px 24px color-mix(in srgb,var(--mb-danger) 8%,transparent)}.mb-progress.is-rejected .mb-surface-heading strong,.mb-progress.is-rejected .mb-progress-list li.is-current{color:var(--mb-danger)}.mb-progress.is-rejected .mb-progress-list li.is-current>span{border-color:var(--mb-danger);background:var(--mb-danger);color:#fff}\n.mb-rejection-notice{border:1px solid color-mix(in srgb,var(--mb-danger) 30%,var(--mb-border));border-left:4px solid var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 5%,var(--mb-surface));box-shadow:0 14px 38px color-mix(in srgb,var(--mb-danger) 9%,transparent);padding:26px 28px 18px}.mb-rejection-overview{display:grid;grid-template-columns:minmax(230px,.72fr) minmax(360px,1.28fr);align-items:start;gap:38px}.mb-rejection-heading{display:flex;align-items:flex-start;gap:14px}.mb-rejection-heading>div{display:grid;gap:5px}.mb-rejection-heading strong{color:var(--mb-danger);font-size:19px;line-height:1.25}.mb-rejection-heading span{color:color-mix(in srgb,var(--mb-danger) 48%,var(--mb-text));font-size:14px;line-height:1.45}.mb-rejection-icon{display:grid;place-items:center;flex:0 0 auto;width:42px;height:42px;border-radius:50%;background:var(--mb-danger);box-shadow:0 5px 14px color-mix(in srgb,var(--mb-danger) 25%,transparent);color:#fff;font-size:21px;font-weight:900}.mb-rejection-progress{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));list-style:none;margin:5px 0 24px;padding:0}.mb-rejection-progress li{display:grid;grid-template-rows:34px auto auto;gap:4px;position:relative;text-align:center;color:var(--mb-text);font-size:12px}.mb-rejection-progress li:first-child::after{content:\"\";position:absolute;left:calc(50% + 17px);right:calc(-50% + 17px);top:16px;height:2px;background:color-mix(in srgb,var(--mb-danger) 48%,var(--mb-border))}.mb-rejection-progress li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:34px;height:34px;border:2px solid color-mix(in srgb,var(--mb-danger) 32%,var(--mb-border));border-radius:50%;background:var(--mb-surface);color:var(--mb-danger);font-size:16px;font-weight:900}.mb-rejection-progress li.is-rejected>span{border-color:var(--mb-danger);background:var(--mb-danger);color:#fff}.mb-rejection-progress b{font-size:13px}.mb-rejection-progress small{color:var(--mb-muted);font-size:11px;line-height:1.3}.mb-rejection-issues{border:1px solid color-mix(in srgb,var(--mb-danger) 19%,var(--mb-border));border-radius:12px;background:color-mix(in srgb,var(--mb-danger) 2%,var(--mb-surface));overflow:hidden}.mb-rejection-issues-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--mb-danger) 14%,var(--mb-border))}.mb-rejection-issues-heading strong{display:flex;align-items:center;gap:8px;font-size:13px}.mb-rejection-issues-heading strong>span{color:var(--mb-danger);font-size:17px}.mb-rejection-issues-heading>span{color:var(--mb-muted);font-size:12px;text-align:right}.mb-rejection-issues ol{display:grid;gap:7px;list-style:none;margin:0;padding:10px 12px}.mb-rejection-issues li{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:11px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--mb-danger) 11%,var(--mb-border));border-radius:8px;background:color-mix(in srgb,var(--mb-danger) 1%,var(--mb-surface));box-shadow:0 1px 3px rgba(23,39,48,.04)}.mb-rejection-bullet{width:7px;height:7px;border-radius:50%;background:var(--mb-danger)}.mb-rejection-issues p{margin:0;font-size:14px;line-height:1.45}.mb-rejection-code{justify-self:end;border:1px solid color-mix(in srgb,var(--mb-danger) 20%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-danger) 6%,var(--mb-surface));color:var(--mb-danger);font-size:11px;font-weight:850;line-height:1.2;padding:4px 8px}.mb-rejection-code-note{display:flex;align-items:center;gap:7px;margin:0;padding:1px 16px 13px;color:var(--mb-muted);font-size:11px}.mb-rejection-code-note>span{display:grid;place-items:center;width:16px;height:16px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:850}\n.mb-snapshot dl,.mb-remittance dl,.mb-contacts dl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:0}.mb-remittance dl{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:1px;background:var(--mb-border)}.mb-snapshot dl>div,.mb-remittance dl>div,.mb-contacts dl>div{display:grid;gap:3px;padding:10px 14px;border-left:1px solid var(--mb-border)}.mb-remittance dl>div{border:0;background:var(--mb-surface)}.mb-snapshot dl>div:nth-child(3n+1),.mb-contacts dl>div:first-child{border-left:0}.mb-snapshot dt,.mb-remittance dt,.mb-contacts dt,.mb-payment-list dt{color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.mb-snapshot dd,.mb-remittance dd,.mb-contacts dd,.mb-payment-list dd{font-size:14px;font-weight:750;margin:0;overflow-wrap:anywhere}.mb-contacts a{color:var(--mb-accent)}.mb-denial{margin-top:16px;border-left:4px solid var(--mb-danger);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 8%,var(--mb-surface));padding:12px 14px}.mb-denial p{margin:4px 0 0}\n.mb-payment-list{display:grid}.mb-payment-list article{display:grid;grid-template-columns:minmax(120px,.35fr) 1fr;gap:14px 24px;padding:16px 0;border-top:1px solid var(--mb-border)}.mb-payment-list article:first-child{border-top:0}.mb-payment-amount{display:grid;align-content:start;gap:2px}.mb-payment-amount strong{font-size:1.2rem}.mb-payment-list article>dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0}.mb-payment-list article>dl>div{display:grid;align-content:start;gap:3px}.mb-payment-list article span{color:var(--mb-muted);font-size:12px}.mb-payment-list article p{grid-column:1/-1;margin:0;color:var(--mb-muted);font-size:13px}\n.mb-eor-review{border-top:4px solid var(--mb-accent);padding-top:17px}.mb-eor-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:0 0 18px;border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}.mb-eor-metrics>div{display:grid;gap:4px;padding:13px 15px;border-left:1px solid var(--mb-border);border-top:1px solid var(--mb-border)}.mb-eor-metrics>div:nth-child(-n+4){border-top:0}.mb-eor-metrics>div:nth-child(4n+1){border-left:0}.mb-eor-metrics dt{color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.mb-eor-metrics dd{margin:0;font-size:15px;font-weight:800}.mb-eor-metrics .is-balance{background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface))}.mb-eor-table-wrap{overflow-x:auto;border:1px solid var(--mb-border);border-radius:10px}.mb-eor-table{width:100%;min-width:1080px;border-collapse:collapse;font-size:12px}.mb-eor-table th,.mb-eor-table td{padding:10px 12px;border-left:1px solid var(--mb-border);border-top:1px solid var(--mb-border);text-align:left;vertical-align:top}.mb-eor-table th:first-child,.mb-eor-table td:first-child{border-left:0}.mb-eor-table thead th{background:var(--mb-soft);color:var(--mb-muted);font-weight:800}.mb-eor-table .mb-eor-groups th{border-top:0;background:color-mix(in srgb,var(--mb-accent) 13%,var(--mb-surface));color:var(--mb-text);text-align:center}.mb-eor-table td>strong,.mb-eor-table td>span{display:block}.mb-eor-table td>span{margin-top:3px;color:var(--mb-muted)}.mb-eor-link,.mb-eor-documents button{border:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:750;padding:0;text-align:left;text-decoration:underline;cursor:pointer;overflow-wrap:anywhere}.mb-eor-documents{display:flex;flex-wrap:wrap;gap:12px;margin-top:12px}\n.mb-history-table{border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}\n.mb-history-head{display:grid;grid-template-columns:96px 160px 140px minmax(0,1fr);gap:12px;padding:8px 14px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}\n.mb-history-rows{list-style:none;margin:0;padding:0}.mb-history-row{border-top:1px solid var(--mb-border)}\n.mb-history-row.is-submission{background:color-mix(in srgb,var(--mb-accent) 9%,var(--mb-surface))}\n.mb-history-row.is-note{background:color-mix(in srgb,#f2c344 13%,var(--mb-surface))}\n.mb-history-row.is-selected{position:relative;background:color-mix(in srgb,var(--mb-accent) 15%,var(--mb-surface));box-shadow:inset 4px 0 0 var(--mb-accent),inset 0 0 0 1px color-mix(in srgb,var(--mb-accent) 44%,transparent)}\n.mb-history-line{display:grid;grid-template-columns:96px 160px 140px minmax(0,1fr);gap:12px;width:100%;padding:10px 14px;border:0;background:transparent;color:inherit;font:inherit;text-align:left}\n.mb-history-line.is-expandable{cursor:pointer}.mb-history-line.is-expandable:hover .mb-history-summary{text-decoration:underline}\n.mb-history-date{color:var(--mb-muted);font-size:13px}.mb-history-action{font-size:13.5px;font-weight:750}\n.mb-history-row.is-problem .mb-history-action{color:var(--mb-danger)}\n.mb-history-actor{color:var(--mb-muted);font-size:13px;overflow-wrap:anywhere}\n.mb-history-summary{display:flex;align-items:flex-start;gap:7px;min-width:0;font-size:13.5px;line-height:1.45;overflow-wrap:anywhere}\n.mb-history-caret{flex:0 0 auto;margin-top:5px;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--mb-muted);transition:transform .12s ease}\n.mb-history-caret.is-open{transform:rotate(90deg)}\n.mb-history-details{padding:4px 14px 14px 122px;font-size:13.5px;line-height:1.5}\n.mb-history-kv,.mb-history-codes,.mb-history-due dl{display:grid;gap:4px;margin:0}\n.mb-history-kv>div{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding-top:4px}\n.mb-history-kv dt{font-weight:750}.mb-history-kv dd{margin:0;overflow-wrap:anywhere}.mb-history-kv dd a{color:var(--mb-accent)}.mb-history-doc{display:block}.mb-history-kv button.mb-history-doc{border:0;background:transparent;color:var(--mb-accent);font:inherit;padding:0;text-align:left;text-decoration:underline;cursor:pointer}\n.mb-history-codes>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:12px}.mb-history-codes dt{font-weight:800}.mb-history-codes dd{margin:0}\n.mb-history-due{margin-top:8px}.mb-history-due em{display:block;color:var(--mb-muted);font-size:12.5px;margin-bottom:4px}\n.mb-history-due dl>div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding-top:4px}\n.mb-history-due dt{font-weight:750}.mb-history-due dd{margin:0}\n.mb-history-text{margin:8px 0 0;color:var(--mb-text);white-space:pre-wrap}\n@media(max-width:500px){.mb-eor-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-eor-metrics>div:nth-child(n){border-top:1px solid var(--mb-border);border-left:1px solid var(--mb-border)}.mb-eor-metrics>div:nth-child(-n+2){border-top:0}.mb-eor-metrics>div:nth-child(odd){border-left:0}.mb-eor-metrics dd{overflow-wrap:anywhere}}\n@media(max-width:700px){.mb-history-head{display:none}.mb-history-line{grid-template-columns:1fr;gap:2px;padding:10px 12px}.mb-history-details{padding:4px 12px 12px}.mb-history-kv>div,.mb-history-due dl>div{grid-template-columns:1fr}}\n@media(max-width:700px){.mb-surface.mb-progress{padding:16px 10px}.mb-progress-list{grid-template-columns:repeat(4,minmax(0,1fr))}.mb-progress-list li{display:grid;grid-template-columns:1fr;align-items:start;gap:6px;text-align:center;font-size:10px;min-width:0}.mb-progress-list li b{font-size:10px;white-space:nowrap}.mb-progress-list li:not(:last-child)::after{left:calc(50% + 12px);right:calc(-50% + 12px);top:11px;bottom:auto;width:auto;height:2px}.mb-progress-list li>span{grid-row:auto;width:24px;height:24px;font-size:11px}.mb-rejection-notice{padding:18px 14px 14px}.mb-rejection-overview{grid-template-columns:1fr;gap:18px}.mb-rejection-heading strong{font-size:17px}.mb-rejection-icon{width:36px;height:36px}.mb-rejection-progress{margin:0 0 4px}.mb-rejection-issues-heading{align-items:flex-start;flex-direction:column;gap:4px}.mb-rejection-issues-heading>span{text-align:left}.mb-rejection-issues li{grid-template-columns:8px minmax(0,1fr);gap:8px 10px}.mb-rejection-code{grid-column:2;justify-self:start}.mb-snapshot dl,.mb-remittance dl,.mb-contacts dl{grid-template-columns:1fr 1fr}.mb-snapshot dl>div,.mb-remittance dl>div,.mb-contacts dl>div{border:0;border-top:1px solid var(--mb-border);padding:10px 0}.mb-snapshot dl>div:nth-child(-n+2),.mb-remittance dl>div:nth-child(-n+2),.mb-contacts dl>div:nth-child(-n+2){border-top:0}.mb-payment-list article{grid-template-columns:1fr}.mb-payment-list article>dl{grid-template-columns:1fr 1fr}}\n`;\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n createBillLifecycleClient,\n reportBillStatusContacts,\n secondReviewDeadline,\n type AddBillNoteInput,\n type BrowserBillCreateInput,\n type BillClaimsAdministratorSource,\n type BillEorDocument,\n type BillLifecycleAction,\n type BillLifecycleClient,\n type BillLifecycleClientOptions,\n type BillLifecycleData,\n type BillRejection,\n type CloseBillInput,\n type PostBillPaymentInput,\n type ReopenBillInput,\n type SandboxSimulationScenario,\n type SubmitNewBillInput,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\nimport {\n BillActivityTimeline,\n BillExplanationOfReview,\n BillHistoryTable,\n BillLifecycleProgress,\n BillRejectionNotice,\n} from \"./bill-lifecycle-surfaces\";\nimport { BillReadOnlyForm } from \"./bill-read-only-form\";\nimport {\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BillSubmissionForm,\n prepareBillSubmissionDocuments,\n type BillSubmissionDocumentType,\n type BillSubmissionFormValue,\n type BillSubmissionInput,\n type BillSubmissionSourceAttachment,\n} from \"./bill-submission-form\";\nimport type { BillReviewAttachment } from \"./native-bill-review\";\nimport { BillSubmissionsRibbon, billSubmissionsRibbonFromHistory } from \"./bill-submissions-ribbon\";\nimport { ReportBillStatusDialog } from \"./report-bill-status-dialog\";\nimport { SecondReviewForm } from \"./second-review-form\";\nimport { BillCourtesyCopyForm, type CourtesyCopyRecipientOption } from \"./bill-courtesy-copy-form\";\n\nexport {\n SECOND_REVIEW_REASON_TEMPLATE,\n SECOND_REVIEW_WINDOW_DAYS,\n createBillLifecycleClient,\n reportBillStatusContacts,\n secondReviewDeadline,\n} from \"@mindbill/browser\";\nexport type {\n AddBillNoteInput,\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPayer,\n BillClaimsAdministratorPattern,\n BillEorDocument,\n BillActivityRecord,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillSubmissionDetail,\n HistoricalBillReviewData,\n BillLifecycleDelivery,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n BrowserBillAddress,\n BillPaymentRecord,\n BillRemittanceSummary,\n BillRejection,\n CloseBillInput,\n PostBillPaymentInput,\n ReopenBillInput,\n ReportBillStatusContacts,\n ResubmitBillInput,\n SandboxSimulationScenario,\n SecondReviewDeadline,\n SendDuplicateBillInput,\n SimulateSandboxBillInput,\n SubmitNewBillInput,\n SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\n\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\n/** Canonical team notes plus legacy API notes, without rendering their audit mirror twice. */\nexport function billTeamNotes(data: Pick<BillLifecycleData, \"notes\" | \"history\">) {\n const notes = data.notes ?? [];\n const canonicalIds = new Set(notes.map((note) => note.id));\n const legacy = (data.history ?? []).filter((entry) => entry.kind === \"note\" &&\n !canonicalIds.has(entry.id) && !notes.some((note) => entry.id.endsWith(`:ev-${note.id}`)));\n return [...legacy, ...notes.map((note) => ({ id: note.id, summary: note.body, actor: note.author, date: note.createdAt }))]\n .sort((left, right) => right.date.localeCompare(left.date));\n}\n\nexport type UseBillLifecycleOptions = BillLifecycleClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n};\n\nexport type UseBillLifecycleResult = {\n billId: string;\n data: BillLifecycleData | null;\n error: Error | null;\n isLoading: boolean;\n isRefreshing: boolean;\n isMutating: boolean;\n refresh: () => Promise<void>;\n searchClaimsAdministrators: BillLifecycleClient[\"searchClaimsAdministrators\"];\n getClaimsAdministratorDirectory: BillLifecycleClient[\"getClaimsAdministratorDirectory\"];\n getDeliveryOptions: BillLifecycleClient[\"getDeliveryOptions\"];\n getAttachment: BillLifecycleClient[\"getAttachment\"];\n openAttachment: (attachment: Pick<BillReviewAttachment, \"id\">) => Promise<void>;\n openEor: (document: BillEorDocument) => Promise<void>;\n downloadPacket: () => Promise<void>;\n downloadSubmissionArtifact: (attemptId: string, artifactId: string, label: string) => Promise<void>;\n downloadIbrPacket: () => Promise<void>;\n addNote: BillLifecycleClient[\"addNote\"];\n previewCourtesyCopy: BillLifecycleClient[\"previewCourtesyCopy\"];\n sendCourtesyCopy: BillLifecycleClient[\"sendCourtesyCopy\"];\n closeBill: BillLifecycleClient[\"closeBill\"];\n reopenBill: BillLifecycleClient[\"reopenBill\"];\n postPayment: BillLifecycleClient[\"postPayment\"];\n submitSecondReview: BillLifecycleClient[\"submitSecondReview\"];\n resubmitBill: BillLifecycleClient[\"resubmitBill\"];\n submitNewBill: BillLifecycleClient[\"submitNewBill\"];\n sendDuplicateBill: BillLifecycleClient[\"sendDuplicateBill\"];\n reportBillStatus: BillLifecycleClient[\"reportBillStatus\"];\n simulateSandbox: BillLifecycleClient[\"simulateSandbox\"];\n};\n\nfunction reservePreviewWindow(): Window | null {\n const preview = window.open(\"about:blank\", \"_blank\");\n if (preview) {\n preview.opener = null;\n preview.document.open();\n preview.document.write(\"<!doctype html><title>Preparing PDF…</title><meta name=viewport content=\\\"width=device-width,initial-scale=1\\\"><style>body{margin:0;display:grid;place-items:center;min-height:100vh;font:16px system-ui;color:#42545a;background:#f5f8f8}</style><p>Preparing PDF preview…</p>\");\n preview.document.close();\n }\n return preview;\n}\n\nfunction previewBlob(blob: Blob, preview: Window | null): void {\n const url = URL.createObjectURL(blob);\n if (preview) preview.location.replace(url);\n else {\n const link = document.createElement(\"a\");\n link.href = url;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.click();\n }\n window.setTimeout(() => URL.revokeObjectURL(url), 3_600_000);\n}\n\n/**\n * Opens a PDF loader from a user gesture without losing Safari's popup permission\n * while the authenticated request is in flight.\n */\nexport async function openPdfFromUserGesture(loadPdf: () => Promise<Blob>): Promise<void> {\n const preview = reservePreviewWindow();\n try {\n previewBlob(await loadPdf(), preview);\n } catch (error) {\n preview?.close();\n throw error;\n }\n}\n\nexport function useBillLifecycle({\n billId: providedBillId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n refreshInterval = DEFAULT_REFRESH_INTERVAL,\n enabled = true,\n fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [data, setData] = useState<BillLifecycleData | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [isMutating, setIsMutating] = useState(false);\n const mounted = useRef(true);\n const client = useMemo(() => createBillLifecycleClient({\n billId: providedBillId,\n sessionEndpoint,\n getSession,\n apiBaseUrl,\n fetch: fetchOverride,\n }), [apiBaseUrl, fetchOverride, getSession, providedBillId, sessionEndpoint]);\n\n useEffect(() => {\n setData(null);\n setError(null);\n setIsLoading(enabled);\n }, [enabled, providedBillId]);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n client.clearSession();\n };\n }, [client]);\n\n const refresh = useCallback(async () => {\n if (!enabled) return;\n setIsRefreshing(true);\n try {\n const next = await client.getLifecycle();\n if (!mounted.current) return;\n setData(next);\n setError(null);\n } catch (cause) {\n if (mounted.current) setError(cause instanceof Error ? cause : new Error(\"Bill could not be loaded.\"));\n } finally {\n if (mounted.current) {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }\n }, [client, enabled]);\n\n useEffect(() => {\n if (!enabled) return;\n void refresh();\n const interval = refreshInterval > 0 ? window.setInterval(() => void refresh(), refreshInterval) : null;\n const onFocus = () => void refresh();\n window.addEventListener(\"focus\", onFocus);\n return () => {\n if (interval) window.clearInterval(interval);\n window.removeEventListener(\"focus\", onFocus);\n };\n }, [enabled, refresh, refreshInterval]);\n\n const mutate = useCallback(async (task: () => Promise<BillLifecycleData>) => {\n setIsMutating(true);\n setError(null);\n try {\n const next = await task();\n if (mounted.current) setData(next);\n return next;\n } catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"The billing service could not complete this request.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n } finally {\n if (mounted.current) setIsMutating(false);\n }\n }, []);\n\n const openAttachment = useCallback(async (attachment: Pick<BillReviewAttachment, \"id\">) => {\n await openPdfFromUserGesture(() => client.getAttachment(attachment.id));\n }, [client]);\n const openEor = useCallback(async (document: BillEorDocument) => {\n await openPdfFromUserGesture(() => client.getEor(document.id));\n }, [client]);\n const downloadPacket = useCallback(async () => {\n setError(null);\n try {\n await openPdfFromUserGesture(() => client.getPacket());\n } catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"Submission packet could not be opened.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n }\n }, [client]);\n const downloadSubmissionArtifact = useCallback(async (attemptId: string, artifactId: string, label: string) => {\n setError(null);\n try {\n const blob = await client.getSubmissionArtifact(attemptId, artifactId);\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = label.replace(/[\\\\/]/g, \"_\");\n link.click();\n setTimeout(() => URL.revokeObjectURL(url), 60_000);\n } catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"Submission file could not be downloaded.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n }\n }, [client]);\n const downloadIbrPacket = useCallback(async () => {\n setError(null);\n setIsMutating(true);\n try { await openPdfFromUserGesture(() => client.prepareIbrPacket()); }\n catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"IBR packet could not be prepared.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n } finally { if (mounted.current) setIsMutating(false); }\n }, [client]);\n\n return {\n billId: providedBillId,\n data,\n error,\n isLoading,\n isRefreshing,\n isMutating,\n refresh,\n searchClaimsAdministrators: (query, claimNumber) => client.searchClaimsAdministrators(query, claimNumber),\n getClaimsAdministratorDirectory: (id, injuryState) => client.getClaimsAdministratorDirectory(id, injuryState),\n getDeliveryOptions: () => client.getDeliveryOptions(),\n getAttachment: (attachmentId) => client.getAttachment(attachmentId),\n openAttachment,\n openEor,\n downloadPacket,\n downloadSubmissionArtifact,\n downloadIbrPacket,\n addNote: (input) => mutate(() => client.addNote(input)),\n previewCourtesyCopy: (input) => client.previewCourtesyCopy(input),\n sendCourtesyCopy: (input, key) => client.sendCourtesyCopy(input, key),\n closeBill: (input) => mutate(() => client.closeBill(input)),\n reopenBill: (input) => mutate(() => client.reopenBill(input)),\n postPayment: (input) => mutate(() => client.postPayment(input)),\n submitSecondReview: (input) => mutate(() => client.submitSecondReview(input)),\n resubmitBill: (input) => mutate(() => client.resubmitBill(input)),\n submitNewBill: (input) => mutate(() => client.submitNewBill(input)),\n sendDuplicateBill: (input) => mutate(() => client.sendDuplicateBill(input)),\n reportBillStatus: (input) => mutate(() => client.reportBillStatus(input)),\n simulateSandbox: (input) => mutate(() => client.simulateSandbox(input)),\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillReactAppearance;\n /** Case-scoped suggestions; recipients must still be selected and confirmed. */\n courtesyCopyRecipientOptions?: readonly CourtesyCopyRecipientOption[];\n /** Human-readable name recorded for user-initiated bill actions. */\n actorName?: string;\n /** Optional host-system claims-administrator name shown as a selection hint. */\n claimsAdministratorHint?: ReactNode;\n /** Host-system evidence shown without preselecting a canonical directory entry. */\n claimsAdministratorSources?: readonly BillClaimsAdministratorSource[];\n /**\n * Exposes payer-response simulation controls for an explicit sandbox\n * playground. Sandbox responses remain indistinguishable from live\n * lifecycle responses to ordinary host applications.\n */\n sandboxControls?: boolean;\n className?: string;\n style?: CSSProperties;\n loadingFallback?: ReactNode;\n errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;\n onChanged?: (data: BillLifecycleData) => void;\n};\n\ntype Panel = \"\" | \"resubmit\" | \"submit_new_bill\" | \"second_review\" | \"ibr\" | \"payment\" | \"close\" | \"reopen\" | \"send_duplicate\" | \"report_status\" | \"courtesy_copy\";\ntype Tab = \"details\" | \"history\";\n\nfunction LifecycleDialog({ children, title, wide = false, onClose }: { children: ReactNode; title: string; wide?: boolean; onClose: () => void }): ReactElement {\n const dialog = useRef<HTMLDivElement | null>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n dialog.current?.focus();\n const onKeyDown = (event: KeyboardEvent) => event.key === \"Escape\" && onCloseRef.current();\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n previous?.focus();\n };\n }, []);\n return <div className=\"mb-lifecycle-dialog-backdrop\" onMouseDown={(event) => event.currentTarget === event.target && onClose()}>\n <div ref={dialog} className={[\"mb-lifecycle-dialog\", wide ? \"wide\" : \"\"].filter(Boolean).join(\" \")} role=\"dialog\" aria-modal=\"true\" aria-label={title} tabIndex={-1}>\n <button type=\"button\" className=\"mb-lifecycle-dialog-close\" aria-label=\"Close\" onClick={onClose}>×</button>{children}\n </div>\n </div>;\n}\n\nfunction correctionDocumentType(value: string): BillSubmissionDocumentType {\n return (BILL_SUBMISSION_DOCUMENT_TYPES as readonly string[]).includes(value)\n ? value as BillSubmissionDocumentType\n : \"other\";\n}\n\nfunction uniqueContactValues(values: Array<string | null | undefined>): string[] {\n const seen = new Set<string>();\n return values.flatMap((value) => {\n const trimmed = value?.trim();\n if (!trimmed) return [];\n const key = trimmed.toLocaleLowerCase();\n if (seen.has(key)) return [];\n seen.add(key);\n return [trimmed];\n });\n}\n\nexport type CorrectionRejectionSummary = {\n code: string | null;\n clearinghouseDetail: string | null;\n description: string;\n};\n\nexport function correctionRejectionSummary(rejection: BillRejection): CorrectionRejectionSummary {\n const reason = rejection.reason.trim();\n const encodedReason = reason.match(/^([A-Z0-9]+:[A-Z0-9-]+)(?:\\s+(\\d{8}\\s+[A-Z]\\s+\\d{4}))?\\s*[:-]?\\s+(.+)$/i);\n if (encodedReason?.[1] && encodedReason[3]) {\n return {\n code: encodedReason[1],\n clearinghouseDetail: encodedReason[2]?.trim() || null,\n description: encodedReason[3].trim(),\n };\n }\n\n const code = rejection.code?.trim() || null;\n const description = code && reason.toLocaleLowerCase().startsWith(code.toLocaleLowerCase())\n ? reason.slice(code.length).replace(/^\\s*[:-]?\\s*/, \"\").trim()\n : reason;\n return {\n code,\n clearinghouseDetail: null,\n description: description || reason || \"The clearinghouse rejected this submission.\",\n };\n}\n\nfunction CorrectionRejectionReason({ rejection }: { rejection: BillRejection }): ReactElement {\n const summary = correctionRejectionSummary(rejection);\n const details = rejection.issues?.filter((issue) => (\n issue.description.trim() !== summary.description\n || Boolean(issue.code?.trim() && issue.code.trim() !== summary.code)\n )) ?? [];\n\n return <div className=\"mb-lifecycle-correction-reason\" role=\"alert\">\n {summary.code ? <div className=\"mb-lifecycle-correction-reason-code\">\n <span>Rejection code</span>\n <code>{summary.code}</code>\n {summary.clearinghouseDetail ? <small><span>Clearinghouse detail</span>{summary.clearinghouseDetail}</small> : null}\n </div> : null}\n <div className=\"mb-lifecycle-correction-reason-description\">\n <span>Reason</span>\n <strong>{summary.description}</strong>\n </div>\n {details.length ? <ul aria-label=\"Additional rejection details\">{details.map((issue, index) => <li key={`${issue.code || \"issue\"}-${index}`}>\n {issue.code ? <code>{issue.code}</code> : null}<span>{issue.description}</span>\n </li>)}</ul> : null}\n </div>;\n}\n\nfunction CorrectionVerificationContact({ delivery }: { delivery: BillLifecycleData[\"delivery\"] }): ReactElement | null {\n const directory = delivery.directory;\n const billReview = directory?.billReview ?? [];\n const phones = uniqueContactValues([\n delivery.contacts.adjusterPhone,\n ...(directory?.telephoneNumbers ?? []),\n ...billReview.map((contact) => contact.phone),\n ]);\n const emails = uniqueContactValues([\n delivery.contacts.claimsEmail,\n delivery.contacts.adjusterEmail,\n ...(directory?.emailAddresses ?? []),\n ...billReview.map((contact) => contact.email),\n ]);\n const faxes = uniqueContactValues([\n delivery.contacts.faxNumber,\n ...billReview.map((contact) => contact.fax),\n ]);\n const portals = uniqueContactValues([\n delivery.contacts.portalUrl,\n ...(directory?.webPortals ?? []),\n ...billReview.map((contact) => contact.portalUrl),\n directory?.website,\n ]);\n const mailingAddresses = uniqueContactValues([\n delivery.contacts.mailingAddress,\n ...(directory?.mailingAddresses ?? []).map((entry) => entry.address),\n ...billReview.map((contact) => contact.address),\n ]);\n const methods = [\n { label: \"Phone\", values: phones, href: (value: string) => `tel:${value.replace(/[^+\\d]/g, \"\")}` },\n { label: \"Email\", values: emails, href: (value: string) => `mailto:${value}` },\n { label: \"Fax\", values: faxes },\n { label: \"Portal\", values: portals, href: (value: string) => value },\n { label: \"Mail\", values: mailingAddresses },\n ].filter((method) => method.values.length);\n\n if (!methods.length) return null;\n return <aside className=\"mb-lifecycle-correction-contact\">\n <strong>Need to verify the rejected information?</strong>\n <span>Contact {delivery.payerName} using any available method:</span>\n <dl>{methods.map((method) => <div key={method.label}>\n <dt>{method.label}</dt>\n <dd><ul>{method.values.map((value) => <li key={value}>{method.href\n ? <a href={method.href(value)} {...(method.label === \"Portal\" ? { target: \"_blank\", rel: \"noreferrer\" } : {})}>{value}</a>\n : value}</li>)}</ul></dd>\n </div>)}</dl>\n </aside>;\n}\n\nfunction correctionBill(data: BillLifecycleData): BillSubmissionInput {\n const billing = data.bill.billingSnapshot?.billingProvider;\n const rendering = data.bill.billingSnapshot?.renderingProvider;\n const location = data.bill.billingSnapshot?.placeOfService;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n const firstName = data.patient.firstName || nameParts[0] || \"\";\n const lastName = data.patient.lastName || nameParts.slice(1).join(\" \") || \"\";\n return {\n billingMode: data.bill.billingMode,\n patient: {\n firstName,\n ...(data.patient.middleName ? { middleName: data.patient.middleName } : {}),\n lastName,\n dateOfBirth: data.patient.dob || \"\",\n ...(data.patient.phone ? { phone: data.patient.phone } : {}),\n address: {\n line1: data.patient.address?.line1 || \"\",\n city: data.patient.address?.city || \"\",\n state: data.patient.address?.state || \"\",\n postalCode: data.patient.address?.postalCode || \"\",\n },\n },\n claim: {\n claimNumber: data.injury.claimNumber || \"\",\n ...(data.injury.adjNumber ? { adjNumber: data.injury.adjNumber } : {}),\n employer: data.injury.employer || \"\",\n dateOfInjury: data.injury.doi || \"\",\n ...(data.injury.injuryDescription ? { description: data.injury.injuryDescription } : {}),\n ...(data.injury.claimsAdminId && data.injury.claimsAdminName ? {\n claimsAdministrator: { id: data.injury.claimsAdminId, name: data.injury.claimsAdminName },\n } : {}),\n },\n service: {\n date: data.bill.dos,\n ...(data.bill.dosEnd !== undefined ? { endDate: data.bill.dosEnd } : {}),\n ...(data.bill.authorizationNumber !== undefined ? { authorizationNumber: data.bill.authorizationNumber } : {}),\n },\n ...(billing ? { billingProvider: {\n name: billing.name,\n taxId: billing.taxId,\n ...(billing.taxIdType ? { taxIdType: billing.taxIdType } : {}),\n ...(billing.taxIdType === \"SSN\" && billing.taxIdConfigured ? { sourceBillId: data.bill.id, ...(billing.taxIdLast4 ? { taxIdLast4: billing.taxIdLast4 } : {}) } : {}),\n npi: billing.npi,\n ...(billing.phone ? { phone: billing.phone } : {}),\n address: {\n line1: billing.billingStreet || \"\",\n city: billing.billingCity || \"\",\n state: billing.billingState || \"\",\n postalCode: billing.billingZip || \"\",\n },\n } } : {}),\n ...(rendering ? { renderingProvider: {\n name: rendering.name,\n npi: rendering.npi,\n ...(rendering.taxonomy ? { taxonomy: rendering.taxonomy } : {}),\n ...(rendering.specialty ? { specialty: rendering.specialty } : {}),\n ...(rendering.licenseNumber ? { licenseNumber: rendering.licenseNumber } : {}),\n ...(rendering.licenseState ? { licenseState: rendering.licenseState } : {}),\n ...(rendering.isQME !== undefined ? { isQme: rendering.isQME } : {}),\n ...(rendering.isAME !== undefined ? { isAme: rendering.isAME } : {}),\n } } : {}),\n ...(location ? { serviceLocation: {\n ...(location.name ? { name: location.name } : {}),\n address: { line1: location.street, city: location.city, state: location.state, postalCode: location.zip },\n ...(location.posCode ? { placeOfServiceCode: location.posCode } : {}),\n } } : {}),\n diagnoses: data.injury.diagnoses?.map((diagnosis) => diagnosis.code)\n ?? [...(data.injury.diagnosisCodes || [])],\n serviceLines: data.bill.lineItems.map((line) => ({\n code: line.code,\n modifiers: [...line.modifiers],\n units: line.units,\n charge: line.charge,\n ...(line.serviceDate ? { serviceDate: line.serviceDate } : {}),\n ...(line.serviceDateEnd !== undefined ? { serviceDateEnd: line.serviceDateEnd } : {}),\n ...(line.diagnosisPointers ? { diagnosisPointers: [...line.diagnosisPointers] } : {}),\n })),\n };\n}\n\nfunction today(): string {\n const now = new Date();\n return new Date(now.getTime() - now.getTimezoneOffset() * 60_000).toISOString().slice(0, 10);\n}\n\nfunction usDate(isoDate: string): string {\n const [year, month, day] = isoDate.split(\"-\");\n return year && month && day ? `${month}/${day}/${year}` : isoDate;\n}\n\nfunction actionPanel(action: BillLifecycleAction): Panel {\n if (action.id === \"resubmit\") return \"resubmit\";\n if (action.id === \"submit_new_bill\") return \"submit_new_bill\";\n if (action.id === \"second_review\") return \"second_review\";\n if (action.id === \"independent_bill_review\") return \"ibr\";\n if (action.id === \"post_payment\") return \"payment\";\n if (action.id === \"close\") return \"close\";\n if (action.id === \"reopen\") return \"reopen\";\n if (action.id === \"send_duplicate\") return \"send_duplicate\";\n if (action.id === \"report_bill_status\") return \"report_status\";\n return \"\";\n}\n\nfunction sandboxScenarios(state: string): Array<{ id: SandboxSimulationScenario; label: string; detail: string }> {\n if (state === \"submitted\") return [\n { id: \"accepted\", label: \"Accept submission\", detail: \"Add clearinghouse and payer acknowledgements.\" },\n { id: \"rejected\", label: \"Reject submission\", detail: \"Return a correctable routing rejection.\" },\n ];\n if (state === \"accepted\" || state === \"second_review\") return [\n { id: \"processed\", label: \"Process with EOR\", detail: \"Attach a synthetic payer EOR and enable payment posting.\" },\n { id: \"denied\", label: \"Deny payment\", detail: \"Attach a realistic denial EOR and enable Second Review.\" },\n ];\n return [];\n}\n\nexport function shouldShowSandboxControls(environment: BillLifecycleData[\"environment\"], enabled = false): boolean {\n return enabled && environment === \"sandbox\";\n}\n\nexport function ConnectedBillLifecycle({ appearance, actorName, claimsAdministratorHint, claimsAdministratorSources, courtesyCopyRecipientOptions = [], sandboxControls = false, className, style, loadingFallback, errorFallback, onChanged, ...options }: ConnectedBillLifecycleProps): ReactElement {\n const lifecycle = useBillLifecycle(options);\n const { data } = lifecycle;\n const [tab, setTab] = useState<Tab>(\"details\");\n const [selectedSubmissionId, setSelectedSubmissionId] = useState<string>();\n const [panel, setPanel] = useState<Panel>(\"\");\n const [notice, setNotice] = useState(\"\");\n const [note, setNote] = useState(\"\");\n const [reason, setReason] = useState(\"\");\n const [correctionError, setCorrectionError] = useState(\"\");\n const [newBillError, setNewBillError] = useState(\"\");\n const [payment, setPayment] = useState<PostBillPaymentInput>({ amount: 0, penaltyAmount: 0, interestAmount: 0, method: \"check\", checkNumber: \"\", depositDate: today(), note: \"\" });\n const [duplicateError, setDuplicateError] = useState(\"\");\n const currentAttemptKey = data?.attempts?.find((attempt) => attempt.isCurrent)?.id\n ?? data?.history?.filter((entry) => entry.kind === \"submission\").at(-1)?.id\n ?? data?.bill.id;\n useEffect(() => {\n // A concurrent resubmission must not leave an action dialog pointing at a\n // different current bill/attempt after the next polling refresh.\n setPanel(\"\");\n }, [currentAttemptKey]);\n const actor = actorName?.trim() ? { actorName: actorName.trim() } : {};\n const lastData = useRef<BillLifecycleData | null>(null);\n const correctionInitialBill = useMemo(() => data ? correctionBill(data) : null, [data]);\n const correctionAttachments = useMemo<BillSubmissionSourceAttachment[]>(() => data ? data.bill.attachments.map((attachment) => {\n const documentType = correctionDocumentType(attachment.documentType);\n const isW9 = documentType === \"w9\";\n return {\n id: attachment.id,\n fileName: attachment.filename,\n documentType,\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => lifecycle.getAttachment(attachment.id),\n ...(isW9 ? { autoAttached: true, removable: false } : { removable: true }),\n };\n }) : [], [data, lifecycle]);\n const correctionAttentionFields = useMemo(() => data?.rejection?.issues\n ?.flatMap((issue) => issue.fieldPaths || [])\n .filter((path, index, fields) => fields.indexOf(path) === index) || [], [data]);\n\n useEffect(() => {\n if (!data || data === lastData.current) return;\n lastData.current = data;\n onChanged?.(data);\n const payerRemaining = data.remittance.payerReportedPaid === null\n ? data.bill.balanceDue\n : Math.max(0, data.remittance.payerReportedPaid - data.remittance.postedPrincipal);\n setPayment((current) => ({\n ...current,\n amount: current.amount > 0 && current.amount <= data.bill.balanceDue\n ? current.amount\n : Math.min(data.bill.balanceDue, payerRemaining || data.bill.balanceDue),\n penaltyAmount: 0,\n interestAmount: 0,\n }));\n }, [data, onChanged]);\n\n if (lifecycle.isLoading && !data) return <>{loadingFallback ?? <div className=\"mb-lifecycle-loading\">Loading bill…</div>}</>;\n if (!data) {\n const error = lifecycle.error ?? new Error(\"Bill could not be loaded.\");\n return <>{errorFallback?.(error, lifecycle.refresh) ?? <div className=\"mb-lifecycle-error\" role=\"alert\"><strong>Billing is unavailable.</strong><span>{error.message}</span><button type=\"button\" onClick={() => void lifecycle.refresh()}>Try again</button></div>}</>;\n }\n\n const complete = async (message: string, task: () => Promise<unknown>) => {\n setNotice(\"\");\n try {\n await task();\n setPanel(\"\");\n setReason(\"\");\n setNotice(message);\n } catch {\n // useBillLifecycle keeps the server error visible.\n }\n };\n const addNote = async () => {\n const value = note.trim();\n if (!value) return;\n setNotice(\"\");\n try {\n await lifecycle.addNote({ note: value, ...actor } satisfies AddBillNoteInput);\n setNote(\"\");\n setNotice(\"Note added.\");\n } catch {\n // useBillLifecycle keeps the server error visible and the note editable.\n }\n };\n const submitCorrection = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setCorrectionError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.resubmitBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(value.submission ? { submission: value.submission } : {}),\n ...(documents.length ? { documents } : {}),\n ...(reason.trim() ? { reason: reason.trim() } : {}),\n ...actor,\n });\n } catch (cause) {\n // A failed resubmission must never look like a success: keep the dialog\n // (and the biller's corrections) open and show the server's reason inline\n // next to the submit control, like the other action panels do.\n setCorrectionError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The corrected bill could not be resubmitted.\",\n );\n throw cause;\n }\n setPanel(\"\");\n setReason(\"\");\n setNotice(\"Corrected submission sent.\");\n };\n const submitNewBillFromForm = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setNewBillError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.submitNewBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(value.submission ? { submission: value.submission } : {}),\n ...(documents.length ? { documents } : {}),\n ...(reason.trim() ? { reason: reason.trim() } : {}),\n ...actor,\n } satisfies SubmitNewBillInput);\n } catch (cause) {\n // Same contract as the correction dialog: a failed submission must never\n // look like a success — keep the form (and the biller's edits) open and\n // show the server's reason inline next to the submit control.\n setNewBillError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The new bill could not be submitted.\",\n );\n throw cause;\n }\n setPanel(\"\");\n setReason(\"\");\n setNotice(\"New bill submitted.\");\n };\n const submitDuplicateFromForm = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setDuplicateError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.sendDuplicateBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(value.submission ? { submission: value.submission } : {}),\n ...(documents.length ? { documents } : {}),\n ...actor,\n });\n } catch (cause) {\n setDuplicateError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The duplicate bill could not be submitted.\",\n );\n throw cause;\n }\n setPanel(\"\");\n setNotice(\"Duplicate bill sent.\");\n };\n const viewEor = data.lifecycle.actions.find((action) => action.id === \"view_eor\" && action.enabled);\n const supportedActions = new Set<BillLifecycleAction[\"id\"]>([\"resubmit\", \"submit_new_bill\", \"second_review\", \"independent_bill_review\", \"post_payment\", \"close\", \"reopen\", \"send_duplicate\", \"report_bill_status\"]);\n const actions = data.lifecycle.actions.filter((action) => action.enabled && supportedActions.has(action.id));\n const mappedRibbonItems = data.history ? billSubmissionsRibbonFromHistory(data.history, data.attempts) : [];\n const activeSubmissionId = (mappedRibbonItems.some((item) => item.id === selectedSubmissionId) ? selectedSubmissionId : null)\n ?? mappedRibbonItems.find((item) => item.active)?.id\n ?? mappedRibbonItems[mappedRibbonItems.length - 1]?.id;\n const ribbonItems = mappedRibbonItems.map((item) => ({ ...item, active: item.id === activeSubmissionId }));\n const selectedAttempt = data.attempts?.find((attempt) => attempt.id === activeSubmissionId);\n const historical = selectedAttempt ? !selectedAttempt.isCurrent\n : !!activeSubmissionId && activeSubmissionId !== mappedRibbonItems.at(-1)?.id;\n const selectedDetail = historical && selectedAttempt ? data.submissionDetails?.find((item) => item.attemptId === activeSubmissionId && item.billId === selectedAttempt.billId) : null;\n const activePanel = historical ? \"\" : panel;\n const showSandboxControls = shouldShowSandboxControls(data.environment, sandboxControls) && !historical;\n const simulations = showSandboxControls ? sandboxScenarios(data.lifecycle.state) : [];\n const displayedData = historical ? selectedDetail?.detail : data;\n const billNotes = billTeamNotes(data);\n const statusContacts = reportBillStatusContacts(data.delivery);\n const receiptEntries = (data.history ?? []).filter((entry) => entry.kind === \"submission\" || entry.kind === \"ack\");\n const reviewDeadline = secondReviewDeadline(data.eors);\n\n return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n {ribbonItems.length >= 2 ? <BillSubmissionsRibbon items={ribbonItems} onSelect={(item) => { setSelectedSubmissionId(item.id); setTab(\"details\"); setPanel(\"\"); }} {...(appearance ? { appearance } : {})} /> : null}\n {historical ? null : data.lifecycle.state.toLowerCase() === \"rejected\" && data.rejection\n ? <BillRejectionNotice rejection={data.rejection} submittedAt={data.lifecycle.submittedAt ?? null} {...(appearance ? { appearance } : {})} />\n : <BillLifecycleProgress state={data.lifecycle.state} nativeStatus={data.lifecycle.nativeStatus} submittedAt={data.lifecycle.submittedAt ?? null} agingDays={data.lifecycle.agingDays ?? null} {...(appearance ? { appearance } : {})} />}\n\n <header className=\"mb-lifecycle-head\">\n <div><div className=\"mb-lifecycle-title\"><h2>{historical && !selectedAttempt ? \"Previous submission\" : `Bill #${historical ? selectedAttempt?.billNumber : data.bill.billNumber}`}</h2></div><p>{displayedData ? `Claim ${displayedData.injury.claimNumber || \"—\"}` : \"Previous submission\"}{lifecycle.isRefreshing ? \" · Refreshing…\" : \"\"}</p></div>\n {!historical ? <><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating} onClick={() => void lifecycle.downloadPacket().catch(() => undefined)}>Download packet</button>\n <button type=\"button\" className=\"mb-lifecycle-button secondary\" disabled={lifecycle.isMutating} onClick={() => setPanel(\"courtesy_copy\")}>Forward copy</button></> : null}\n </header>\n\n <div className=\"mb-lifecycle-tabs\" role=\"tablist\" aria-label=\"Bill view\">\n <button type=\"button\" role=\"tab\" aria-selected={tab === \"details\"} onClick={() => setTab(\"details\")}>Bill details</button>\n <button type=\"button\" role=\"tab\" aria-selected={tab === \"history\"} onClick={() => setTab(\"history\")}>Bill history</button>\n </div>\n\n {tab === \"details\" ? <div className=\"mb-lifecycle-tabpanel\" role=\"tabpanel\">\n {selectedAttempt && ribbonItems.length >= 2 ? <section className=\"mb-lifecycle-attempt-detail\" aria-label=\"Selected submission detail\">\n <header><div><span>Selected submission</span><h3>{selectedAttempt.label}</h3></div><strong>{selectedAttempt.isCurrent ? \"Current\" : \"Previous\"}</strong></header>\n <dl>\n <div><dt>Bill</dt><dd>#{selectedAttempt.billNumber || data.bill.billNumber}</dd></div>\n <div><dt>Delivery</dt><dd>{selectedAttempt.deliveryLabel || \"—\"}</dd></div>\n <div><dt>Sent</dt><dd>{selectedAttempt.sentAt ? new Date(selectedAttempt.sentAt).toLocaleString() : \"—\"}</dd></div>\n <div><dt>Status</dt><dd>{selectedAttempt.status || selectedAttempt.ackLabel || \"Submitted\"}</dd></div>\n {selectedAttempt.complianceLabel ? <div><dt>{selectedAttempt.complianceLabel}</dt><dd>{selectedAttempt.complianceAt ? new Date(selectedAttempt.complianceAt).toLocaleDateString() : \"—\"}</dd></div> : null}\n </dl>\n </section> : null}\n {!historical && (data.eors.length || data.payments.length || [\"processed\", \"denied\", \"partially_paid\"].includes(data.lifecycle.state)) ? <BillExplanationOfReview remittance={data.remittance} eors={data.eors} payments={data.payments} submittedAt={data.lifecycle.submittedAt ?? null} onOpenEor={lifecycle.openEor} {...(appearance ? { appearance } : {})} /> : null}\n\n {showSandboxControls ? <section className=\"mb-lifecycle-simulator\" aria-label=\"Sandbox lifecycle simulator\"><div><span>Sandbox demo controls</span><h3>Simulate the next payer response</h3><p>This changes sandbox data only. The host receives the result through the same lifecycle API and components partners use.</p></div>{simulations.length ? <div className=\"mb-lifecycle-simulator-actions\">{simulations.map((scenario) => <button type=\"button\" key={scenario.id} disabled={lifecycle.isMutating} onClick={() => void complete(`${scenario.label} simulated.`, () => lifecycle.simulateSandbox({ scenario: scenario.id }))}><strong>{scenario.label}</strong><span>{scenario.detail}</span></button>)}</div> : <p className=\"mb-lifecycle-simulator-idle\">No simulated payer transition is needed at this stage. Use the bill action below to continue.</p>}</section> : null}\n\n {historical ? <p className=\"mb-lifecycle-card\">{selectedDetail?.source === \"submission_snapshot\" ? \"Saved as submitted. This previous submission is read-only; payment balances and current actions are shown on the current bill.\" : displayedData ? \"Historical bill record. An exact as-submitted snapshot was not recorded for this older attempt; these are the stored bill values, not a guaranteed copy of the original packet.\" : \"Detailed values were not saved for this historical submission. Select the current submission to see the current bill. We will not substitute current data for this older attempt.\"}</p> : null}\n {displayedData ? <BillReadOnlyForm key={activeSubmissionId} data={displayedData} {...(!historical ? { onOpenAttachment: lifecycle.openAttachment } : {})} {...(appearance ? { appearance } : {})} /> : null}\n {historical && selectedAttempt ? <section className=\"mb-lifecycle-card\" aria-label=\"Retained submission files\"><h3>Retained submission files</h3><p>Exact files saved for this submission. These downloads do not include a regenerated current bill or a later EOR.</p>{selectedDetail?.artifacts?.length ? selectedDetail.artifacts.map((artifact) => <button type=\"button\" className=\"mb-lifecycle-button secondary\" key={artifact.id} onClick={() => void lifecycle.downloadSubmissionArtifact(selectedAttempt.id, artifact.id, artifact.label).catch(() => undefined)}>Download {artifact.kind === \"submitted_edi\" ? \"submitted EDI\" : \"submitted attachment\"}: {artifact.label}</button>) : <p>No retained files are available for this submission.</p>}</section> : null}\n {!historical ? <section className=\"mb-lifecycle-notes\" aria-label=\"Bill notes\">\n <header><div><h3>Team notes</h3><p>Shared with your workspace’s billing team. Never sent to the payer.</p></div><span>{billNotes.length}</span></header>\n {billNotes.length ? <ol>{billNotes.map((entry) => <li key={entry.id}><p>{entry.summary}</p><small>{entry.actor || \"System\"} · {usDate(entry.date)}</small></li>)}</ol> : <p className=\"mb-lifecycle-notes-empty\">No notes yet.</p>}\n <form onSubmit={(event) => { event.preventDefault(); void addNote(); }}><label><span>Add a note</span><textarea value={note} maxLength={2000} placeholder=\"Add context for the billing team…\" onChange={(event) => setNote(event.target.value)} /></label><button type=\"submit\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating || !note.trim()}>{lifecycle.isMutating ? \"Adding…\" : \"Add note\"}</button></form>\n </section> : null}\n </div> : <div className=\"mb-lifecycle-tabpanel\" role=\"tabpanel\">{data.history?.length\n ? <BillHistoryTable entries={data.history} {...(!historical ? { onOpenDocument: lifecycle.openAttachment } : {})} {...(appearance ? { appearance } : {})} />\n : <BillActivityTimeline events={data.activity} {...(appearance ? { appearance } : {})} />}</div>}\n\n {!historical && (viewEor || actions.length) ? <aside className=\"mb-lifecycle-actions-sheet\" aria-label=\"Bill actions\">\n {viewEor && data.eors[0] ? <button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => void lifecycle.openEor(data.eors[0]!).catch(() => undefined)}>{viewEor.label}</button> : null}\n {actions.map((action) => <button type=\"button\" key={action.id} className={action.primary ? \"mb-lifecycle-button primary\" : \"mb-lifecycle-button secondary\"} onClick={() => {\n const next = actionPanel(action);\n if (!next) return;\n if (next === \"resubmit\") setCorrectionError(\"\");\n if (next === \"submit_new_bill\") setNewBillError(\"\");\n if (next === \"send_duplicate\") setDuplicateError(\"\");\n setPanel(next);\n }}>{action.label}</button>)}\n </aside> : null}\n\n {activePanel === \"courtesy_copy\" ? <LifecycleDialog title=\"Forward courtesy copy\" wide onClose={() => setPanel(\"\")}><BillCourtesyCopyForm documents={data.bill.attachments} recipientOptions={courtesyCopyRecipientOptions} subject={`Courtesy copy — bill #${data.bill.billNumber}`} environment={data.environment} onPreview={lifecycle.previewCourtesyCopy} onSend={lifecycle.sendCourtesyCopy} onSent={() => { void lifecycle.refresh(); }} {...(appearance ? { appearance } : {})} /></LifecycleDialog> : null}\n {activePanel === \"ibr\" ? <LifecycleDialog title=\"Prepare Independent Bill Review packet\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><header style={{ paddingRight: 44 }}><h3>Prepare Independent Bill Review packet</h3></header><p>Download a PDF packet for self-filing Independent Bill Review (IBR). Preparing this packet does not file the review, send it to a payer, or change the bill status.</p>{lifecycle.error ? <p role=\"alert\" className=\"mb-lifecycle-message error\">{lifecycle.error.message}</p> : null}<div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" disabled={lifecycle.isMutating} onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating} onClick={() => void lifecycle.downloadIbrPacket().then(() => { setPanel(\"\"); setNotice(\"IBR packet prepared for self-filing. The review has not been filed.\"); }).catch(() => undefined)}>{lifecycle.isMutating ? \"Preparing…\" : \"Prepare IBR packet\"}</button></div></section></LifecycleDialog> : null}\n {activePanel === \"resubmit\" && correctionInitialBill ? <LifecycleDialog title=\"Correct and resubmit\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Correct and resubmit</h3><p>Review the rejected snapshot, correct the highlighted information, and submit a new immutable attempt under this bill.</p></div></header>{data.environment === \"live\" ? <div className=\"mb-lifecycle-live-warning\"><strong>Live clearinghouse submission</strong><span>Resubmitting sends a real bill. Confirm the corrected information before continuing.</span></div> : null}{data.rejection ? <CorrectionRejectionReason rejection={data.rejection} /> : null}<CorrectionVerificationContact delivery={data.delivery} /><label className=\"mb-lifecycle-correction-note\"><span>Correction note (optional)</span><textarea value={reason} placeholder=\"What changed before resubmission?\" onChange={(event) => setReason(event.target.value)} /></label><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitCorrection}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionFields={correctionAttentionFields}\n attentionMessage={correctionAttentionFields.length ? \"The rejected response points to the highlighted fields. Confirm every required value before resubmitting.\" : \"Confirm the bill information below before resubmitting.\"}\n submitLabel={lifecycle.isMutating ? \"Resubmitting…\" : \"Resubmit bill\"}\n deliveryRoutePicker=\"required\"\n deliveryRouteDialogTitle=\"Confirm corrected bill delivery\"\n heading=\"Corrected bill information\"\n description=\"The original submission stays unchanged. This form creates the next submission attempt.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{correctionError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{correctionError}</div> : null}</section></LifecycleDialog> : null}\n\n {activePanel === \"submit_new_bill\" && correctionInitialBill ? <LifecycleDialog title=\"Submit New Bill\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Submit New Bill</h3><p>This closed bill stays closed and keeps its record. Review the carried-over snapshot below and submit a fresh bill — both bills stay linked in the submissions timeline.</p></div></header><label className=\"mb-lifecycle-correction-note\"><span>Submission note (optional)</span><textarea value={reason} placeholder=\"Why is a new bill being submitted?\" onChange={(event) => setReason(event.target.value)} /></label><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitNewBillFromForm}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionMessage=\"Confirm every value carried over from the closed bill before submitting the new bill.\"\n submitLabel={lifecycle.isMutating ? \"Submitting…\" : \"Submit New Bill\"}\n deliveryRoutePicker=\"required\"\n deliveryRouteDialogTitle=\"Confirm new bill delivery\"\n heading=\"New bill information\"\n description=\"The closed bill stays unchanged. This form submits a fresh bill linked to it.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{newBillError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{newBillError}</div> : null}</section></LifecycleDialog> : null}\n\n {activePanel === \"second_review\" ? <LifecycleDialog title=\"Submit Second Review\" wide onClose={() => setPanel(\"\")}><SecondReviewForm\n data={data}\n submitting={lifecycle.isMutating}\n error={lifecycle.error}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n getDeliveryOptions={lifecycle.getDeliveryOptions}\n openAttachment={lifecycle.openAttachment}\n onCancel={() => setPanel(\"\")}\n onSubmit={(input) => complete(\"Second Review submitted.\", () => lifecycle.submitSecondReview({ ...input, ...actor }))}\n />{reviewDeadline ? <p className=\"mb-lifecycle-deadline-hint\">Second Review must be requested within 90 days of the denial EOR (dated {usDate(reviewDeadline.eorDate)}) — file by <strong>{usDate(reviewDeadline.deadline)}</strong>.</p> : null}</LifecycleDialog> : null}\n\n {activePanel === \"payment\" ? <LifecycleDialog title=\"Post payment\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>Post payment</h3><p>Record a full or partial payment, plus any penalty and interest received.</p></div><div className=\"mb-lifecycle-fields two\"><label><span>Amount applied to bill</span><input type=\"number\" min=\"0.01\" max={data.bill.balanceDue} step=\"0.01\" value={payment.amount || \"\"} onChange={(event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) }))} /></label><label><span>Penalty</span><input type=\"number\" min=\"0\" step=\"0.01\" value={payment.penaltyAmount || \"\"} placeholder=\"0.00\" onChange={(event) => setPayment((current) => ({ ...current, penaltyAmount: Number(event.target.value) }))} /></label><label><span>Interest</span><input type=\"number\" min=\"0\" step=\"0.01\" value={payment.interestAmount || \"\"} placeholder=\"0.00\" onChange={(event) => setPayment((current) => ({ ...current, interestAmount: Number(event.target.value) }))} /></label><label><span>Method</span><select value={payment.method} onChange={(event) => setPayment((current) => ({ ...current, method: event.target.value as \"check\" | \"eft\" }))}><option value=\"check\">Check</option><option value=\"eft\">EFT</option></select></label><label><span>{payment.method === \"check\" ? \"Check number\" : \"EFT reference\"}</span><input value={payment.checkNumber} onChange={(event) => setPayment((current) => ({ ...current, checkNumber: event.target.value }))} /></label><label><span>Deposit date</span><input required value={payment.depositDate} placeholder=\"MM/DD/YYYY\" onChange={(event) => setPayment((current) => ({ ...current, depositDate: event.target.value }))} /></label><label className=\"full\"><span>Note (optional)</span><input value={payment.note} onChange={(event) => setPayment((current) => ({ ...current, note: event.target.value }))} /></label></div><div className=\"mb-payment-total\"><span>Total received</span><strong>{new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(payment.amount + (payment.penaltyAmount ?? 0) + (payment.interestAmount ?? 0))}</strong></div><div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating || payment.amount <= 0 || payment.amount > data.bill.balanceDue || (payment.penaltyAmount ?? 0) < 0 || (payment.interestAmount ?? 0) < 0 || !payment.depositDate} onClick={() => void complete(\"Payment posted.\", () => lifecycle.postPayment({ ...payment, ...actor }))}>{lifecycle.isMutating ? \"Posting…\" : \"Post payment\"}</button></div></section></LifecycleDialog> : null}\n\n {(activePanel === \"close\" || activePanel === \"reopen\") ? <LifecycleDialog title={activePanel === \"close\" ? \"Close bill\" : \"Reopen bill\"} onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>{activePanel === \"close\" ? \"Close bill\" : \"Reopen bill\"}</h3><p>{activePanel === \"close\" ? \"The immutable submission and history remain available.\" : \"Return this bill to active follow-up without changing the submitted snapshot.\"}</p></div><label><span>Reason</span><textarea required value={reason} onChange={(event) => setReason(event.target.value)} /></label><div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating || !reason.trim()} onClick={() => void complete(activePanel === \"close\" ? \"Bill closed.\" : \"Bill reopened.\", () => activePanel === \"close\" ? lifecycle.closeBill({ reason, ...actor } satisfies CloseBillInput) : lifecycle.reopenBill({ reason, ...actor } satisfies ReopenBillInput))}>{lifecycle.isMutating ? \"Saving…\" : activePanel === \"close\" ? \"Close bill\" : \"Reopen bill\"}</button></div></section></LifecycleDialog> : null}\n\n {activePanel === \"send_duplicate\" && correctionInitialBill ? <LifecycleDialog title=\"Send duplicate bill\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Send duplicate bill</h3><p>Review and edit any bill field before creating a duplicate submission. The original bill and its history stay unchanged.</p></div></header>{data.environment === \"live\" ? <div className=\"mb-lifecycle-live-warning\"><strong>Live clearinghouse submission</strong><span>The duplicate will be sent only after you confirm its delivery route in the next dialog.</span></div> : null}<CorrectionVerificationContact delivery={data.delivery} /><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitDuplicateFromForm}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionMessage=\"Confirm every carried-over value. You may edit any field before sending this duplicate.\"\n submitLabel={lifecycle.isMutating ? \"Sending…\" : \"Send duplicate\"}\n deliveryRoutePicker=\"required\"\n deliveryRouteDialogTitle=\"Confirm duplicate bill delivery\"\n heading=\"Duplicate bill information\"\n description=\"The submitted original remains immutable. This form creates and sends a linked duplicate.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{duplicateError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{duplicateError}</div> : null}</section></LifecycleDialog> : null}\n\n {activePanel === \"report_status\" ? <ReportBillStatusDialog\n {...(data.delivery.directory ? { directory: data.delivery.directory } : {})}\n {...(statusContacts.claimsAdmin ? { claimsAdmin: statusContacts.claimsAdmin } : {})}\n {...(statusContacts.billReview ? { billReview: statusContacts.billReview } : {})}\n {...(receiptEntries.length ? { receipt: <BillHistoryTable entries={receiptEntries} onOpenDocument={lifecycle.openAttachment} {...(appearance ? { appearance } : {})} /> } : {})}\n submitting={lifecycle.isMutating}\n error={lifecycle.error?.message ?? null}\n onCancel={() => setPanel(\"\")}\n onSave={(input) => void complete(\"Bill status reported.\", () => lifecycle.reportBillStatus({ ...input, ...actor }))}\n {...(appearance ? { appearance } : {})}\n /> : null}\n\n {notice ? <div className=\"mb-lifecycle-message success\" role=\"status\">{notice}</div> : null}\n {lifecycle.error ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{lifecycle.error.message}</div> : null}\n </section>;\n}\n\nconst CONNECTED_LIFECYCLE_STYLES = `\n.mb-connected-lifecycle{grid-template-columns:minmax(0,1fr);min-width:0}.mb-lifecycle-tabpanel{min-width:0;grid-template-columns:minmax(0,1fr)}.mb-lifecycle-tabpanel>*{min-width:0}\n.mb-lifecycle-attempt-detail{display:grid;gap:15px;padding:18px;border:1px solid color-mix(in srgb,var(--mb-accent) 38%,var(--mb-border));border-radius:var(--mb-radius,14px);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}.mb-lifecycle-attempt-detail>header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.mb-lifecycle-attempt-detail>header span{color:var(--mb-accent);font-size:.72rem;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.mb-lifecycle-attempt-detail h3{margin:3px 0 0;font-size:1.08rem}.mb-lifecycle-attempt-detail>header>strong{padding:4px 9px;border:1px solid color-mix(in srgb,var(--mb-accent) 35%,var(--mb-border));border-radius:999px;background:var(--mb-surface);color:var(--mb-accent);font-size:.75rem}.mb-lifecycle-attempt-detail dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0}.mb-lifecycle-attempt-detail dl>div{display:grid;gap:2px;min-width:0}.mb-lifecycle-attempt-detail dt{color:var(--mb-muted);font-size:.7rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.mb-lifecycle-attempt-detail dd{min-width:0;margin:0;font-weight:700;overflow-wrap:anywhere}\n.mb-lifecycle-notes{display:grid;gap:14px;padding:20px;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface)}.mb-lifecycle-notes>header{display:flex;align-items:center;justify-content:space-between;gap:16px}.mb-lifecycle-notes h3{margin:0;font-size:1.08rem}.mb-lifecycle-notes header p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-notes>header>span{display:grid;place-items:center;min-width:28px;height:28px;border-radius:999px;background:var(--mb-soft);font-weight:750}.mb-lifecycle-notes ol{display:grid;gap:9px;margin:0;padding:0;list-style:none}.mb-lifecycle-notes li{padding:11px 13px;border-left:3px solid color-mix(in srgb,var(--mb-accent) 52%,var(--mb-border));border-radius:0 8px 8px 0;background:var(--mb-soft)}.mb-lifecycle-notes li p{margin:0;white-space:pre-wrap}.mb-lifecycle-notes li small{display:block;margin-top:4px;color:var(--mb-muted)}.mb-lifecycle-notes-empty{margin:0;color:var(--mb-muted)}.mb-lifecycle-notes form{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px}.mb-lifecycle-notes label{display:grid;gap:6px;font-size:.82rem;font-weight:750}.mb-lifecycle-notes textarea{width:100%;min-height:76px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;resize:vertical}\n.mb-lifecycle-simulator{display:grid;gap:14px;padding:18px;border:1px solid #b8dadd;border-radius:var(--mb-radius,14px);background:#f2fbfb}.mb-lifecycle-simulator>div:first-child>span{color:var(--mb-accent);font-size:.72rem;font-weight:850;letter-spacing:.09em;text-transform:uppercase}.mb-lifecycle-simulator h3{margin:3px 0 0;font-size:1.05rem}.mb-lifecycle-simulator p{margin:4px 0 0;color:var(--mb-muted)}.mb-lifecycle-simulator-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.mb-lifecycle-simulator-actions button{min-height:76px;border:1px solid #a9cccf;border-radius:10px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;padding:12px 14px;text-align:left;font:inherit}.mb-lifecycle-simulator-actions button:hover{border-color:var(--mb-accent);box-shadow:0 3px 14px rgba(23,108,112,.1)}.mb-lifecycle-simulator-actions button:disabled{cursor:not-allowed;opacity:.55}.mb-lifecycle-simulator-actions button strong,.mb-lifecycle-simulator-actions button span{display:block}.mb-lifecycle-simulator-actions button span{margin-top:3px;color:var(--mb-muted);font-size:.83rem}.mb-lifecycle-simulator-idle{padding:10px 12px;border-radius:8px;background:rgba(255,255,255,.72)}\n.mb-connected-lifecycle{--mb-accent:#176c70;--mb-text:#17282d;--mb-muted:#607176;--mb-border:#d7e0df;--mb-soft:#f4f7f6;--mb-surface:#fff;display:grid;gap:18px;color:var(--mb-text);font:14px/1.45 var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}.mb-connected-lifecycle *{box-sizing:border-box}.mb-lifecycle-head{display:flex;align-items:center;justify-content:space-between;gap:20px}.mb-lifecycle-title{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.mb-lifecycle-title h2{margin:0;font-size:1.7rem}.mb-lifecycle-head p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-tabs{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);padding:6px}.mb-lifecycle-tabs button{min-height:46px;border:0;border-radius:8px;background:transparent;color:var(--mb-muted);font:inherit;font-size:1rem;font-weight:750;cursor:pointer}.mb-lifecycle-tabs button[aria-selected=true]{background:var(--mb-accent);color:white}.mb-lifecycle-tabpanel{display:grid;gap:18px}.mb-lifecycle-button{min-height:40px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast,#fff)}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-actions-sheet{position:sticky;bottom:12px;z-index:24;display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:9px;padding:10px;border:1px solid var(--mb-border);border-radius:12px;background:color-mix(in srgb,var(--mb-surface) 94%,transparent);box-shadow:0 10px 34px rgba(18,35,43,.16);backdrop-filter:blur(12px)}.mb-lifecycle-card,.mb-lifecycle-panel{padding:20px;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:center;justify-content:space-between;gap:20px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:1.08rem}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-card header>span{display:grid;place-items:center;min-width:28px;height:28px;border-radius:999px;background:var(--mb-soft);font-weight:750}.mb-lifecycle-documents{list-style:none;margin:14px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid;gap:3px;min-width:0}.mb-lifecycle-documents li span{color:var(--mb-muted);font-size:.85rem}.mb-lifecycle-dialog-backdrop{position:fixed;z-index:2147483000;inset:0;display:grid;place-items:center;padding:20px;background:rgba(18,35,43,.56);backdrop-filter:blur(3px)}.mb-lifecycle-dialog{position:relative;width:min(760px,100%);max-height:calc(100dvh - 40px);overflow:auto;outline:0}.mb-lifecycle-dialog-close{position:absolute;z-index:1;top:12px;right:12px;width:44px;height:44px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;font:24px/1 inherit}.mb-lifecycle-panel{display:grid;gap:17px;padding-top:24px;box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:.85rem;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea{width:100%;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;padding:10px 12px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:13px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:.85rem;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;padding:10px 2px;border-top:1px solid var(--mb-border)}.mb-lifecycle-packet>label>input{width:16px;min-height:16px}.mb-lifecycle-packet>label>span{display:grid}.mb-lifecycle-packet button{border:0;background:transparent;color:var(--mb-accent);cursor:pointer;font:inherit}.mb-lifecycle-message,.mb-lifecycle-error,.mb-lifecycle-loading{padding:12px 14px;border-radius:9px}.mb-lifecycle-message.success{background:#edf9f2;color:#217449}.mb-lifecycle-message.error,.mb-lifecycle-error{background:#fff0ef;color:#9d3029}.mb-lifecycle-error{display:flex;align-items:center;gap:12px}.mb-lifecycle-error span{flex:1}.mb-lifecycle-error button{border:1px solid currentColor;border-radius:7px;background:transparent;color:inherit;padding:7px 10px}\n.mb-lifecycle-dialog.wide{width:min(1280px,100%)}.mb-lifecycle-correction{display:grid;gap:16px;padding:22px;border-radius:var(--mb-radius,14px);background:var(--mb-surface);box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-correction>header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding-right:56px}.mb-lifecycle-correction h3{margin:0;font-size:1.2rem}.mb-lifecycle-correction header p{margin:4px 0 0;color:var(--mb-muted)}.mb-lifecycle-live-warning,.mb-lifecycle-correction-reason,.mb-lifecycle-correction-contact{display:grid;gap:4px;padding:13px 15px;border-radius:10px}.mb-lifecycle-live-warning{border-left:4px solid #b97716;background:#fff8e8;color:#6f470e}.mb-lifecycle-correction-reason{grid-template-columns:max-content minmax(0,1fr);align-items:start;column-gap:18px;row-gap:10px;border-left:4px solid #c5443f;background:#fff2f1;color:#812d29}.mb-lifecycle-correction-reason-code,.mb-lifecycle-correction-reason-description{display:grid;gap:4px}.mb-lifecycle-correction-reason-code>span,.mb-lifecycle-correction-reason-description>span,.mb-lifecycle-correction-reason-code small>span{color:#9b514d;font-size:.7rem;font-weight:850;letter-spacing:.07em;text-transform:uppercase}.mb-lifecycle-correction-reason code{width:max-content;border:1px solid #e8b4b0;border-radius:6px;background:rgba(255,255,255,.66);color:#812d29;font:750 .84rem/1.35 ui-monospace,SFMono-Regular,Menlo,monospace;padding:3px 7px}.mb-lifecycle-correction-reason-code small{display:grid;gap:1px;margin-top:3px;color:#9b514d;font:500 .72rem/1.35 ui-monospace,SFMono-Regular,Menlo,monospace}.mb-lifecycle-correction-reason-description strong{font-size:.94rem}.mb-lifecycle-correction-reason>ul{grid-column:1/-1;display:grid;gap:5px;margin:0;padding:8px 0 0 18px;border-top:1px solid #ecc7c4}.mb-lifecycle-correction-reason li{padding-left:3px}.mb-lifecycle-correction-reason li code{margin-right:7px}.mb-lifecycle-correction-contact{border:1px solid color-mix(in srgb,var(--mb-accent) 35%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface))}.mb-lifecycle-correction-contact dl{display:grid;gap:10px;margin:8px 0 0}.mb-lifecycle-correction-contact dl>div{display:grid;grid-template-columns:68px minmax(0,1fr);gap:10px}.mb-lifecycle-correction-contact dt{padding-top:2px;color:var(--mb-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.mb-lifecycle-correction-contact dd{min-width:0;margin:0;overflow-wrap:anywhere}.mb-lifecycle-correction-contact dd ul{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mb-lifecycle-correction-contact dd li{min-width:0}.mb-lifecycle-correction-contact a{color:var(--mb-accent);text-underline-offset:2px}.mb-lifecycle-correction-note{display:grid;gap:6px;font-size:.85rem;font-weight:750}.mb-lifecycle-correction-note textarea{min-height:76px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;padding:10px 12px;resize:vertical}\n.mb-payment-total{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:9px;background:var(--mb-soft)}.mb-payment-total strong{font-size:1.12rem}\n.mb-lifecycle-deadline-hint{margin:0;padding:10px 12px;border-radius:9px;background:color-mix(in srgb,var(--mb-warning,#8a5c17) 10%,var(--mb-surface));color:var(--mb-warning,#8a5c17);font-size:.85rem}\n@media(max-width:700px){.mb-lifecycle-attempt-detail dl{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-notes form{grid-template-columns:1fr}.mb-lifecycle-notes form button{width:100%}.mb-lifecycle-head,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-head>.mb-lifecycle-button{width:100%}.mb-lifecycle-actions-sheet{bottom:calc(var(--mb-host-bottom-offset,72px) + env(safe-area-inset-bottom) + 8px);grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-actions-sheet .mb-lifecycle-button:last-child:nth-child(odd){grid-column:1/-1}.mb-lifecycle-fields.two{grid-template-columns:1fr}.mb-lifecycle-fields .full{grid-column:auto}.mb-lifecycle-dialog-backdrop{align-items:end;padding:0}.mb-lifecycle-dialog{max-height:calc(100dvh - 12px)}.mb-lifecycle-dialog .mb-lifecycle-panel,.mb-lifecycle-correction{border-radius:18px 18px 0 0}.mb-lifecycle-correction{padding:18px 12px calc(18px + env(safe-area-inset-bottom))}.mb-lifecycle-correction>header{align-items:stretch;flex-direction:column;padding-right:56px}.mb-lifecycle-correction-reason{grid-template-columns:1fr}.mb-lifecycle-correction-reason>ul{grid-column:auto}.mb-lifecycle-correction-contact dl>div{grid-template-columns:1fr;gap:2px}.mb-lifecycle-tabs button{font-size:.9rem}.mb-lifecycle-title h2{font-size:1.4rem}}\n`;\n","\"use client\";\n\nimport { useMemo, useState, type ChangeEvent, type ReactElement } from \"react\";\nimport type {\n BillDeliveryOptions,\n BillLifecycleData,\n SecondReviewLineInput,\n SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\nimport {\n prepareBillSubmissionDocuments,\n type BillSubmissionUpload,\n} from \"./bill-submission-form\";\nimport { SendRouteDialog, type SendRouteSubmission } from \"./send-route-dialog\";\nimport { parseSecondReviewCorrection, type CorrectionDraft } from \"./second-review-corrections\";\n\nexport const SECOND_REVIEW_REASON_TEMPLATES = [\n {\n label: \"Med-legal report denied\",\n value: \"The attached medical-legal report satisfies the applicable requirements for a compensable medical-legal evaluation. Please reprocess this service and issue payment under the Medical-Legal Fee Schedule.\",\n },\n {\n label: \"Supporting documentation was provided\",\n value: \"The EOR incorrectly states that supporting documentation was not received. The original electronic submission included the required documentation and was acknowledged as accepted. Please reprocess this service.\",\n },\n {\n label: \"Payment missing or not received\",\n value: \"The EOR reports payment, but the funds have not been received or deposited by the provider. Please issue or reissue payment and pay the remaining fee-schedule balance, including applicable penalty and interest.\",\n },\n {\n label: \"PPO or network reduction unsupported\",\n value: \"The EOR applies a PPO or network discount, but the provider has no agreement authorizing this reduction. Please demonstrate entitlement to the contracted rate or reprocess this service under the applicable fee schedule.\",\n },\n {\n label: \"Service was authorized\",\n value: \"The billed service was authorized. Please reprocess this service and issue payment; the supporting authorization is included with this request.\",\n },\n {\n label: \"Correct units or modifiers\",\n value: \"The units or modifiers on this service have been corrected on the accompanying modified bill. Please reprocess the service using the corrected billing information.\",\n },\n {\n label: \"Fee schedule incorrectly applied\",\n value: \"The applicable fee schedule was incorrectly applied to this service. Please recalculate the allowed amount under the governing fee schedule and issue the additional payment due.\",\n },\n {\n label: \"Treatment before liability decision\",\n value: \"This service was provided before the claims administrator accepted or denied liability and was authorized under California Labor Code section 5402(c). Please reprocess this service and issue payment.\",\n },\n] as const;\n\ntype AuthorizationAnswer = \"\" | \"yes\" | \"no\";\ntype LineDraft = CorrectionDraft & { selected: boolean; reason: string; serviceAuthorized: AuthorizationAnswer };\n\nexport type SecondReviewFormProps = {\n data: BillLifecycleData;\n submitting?: boolean;\n error?: Error | null;\n fetch?: typeof globalThis.fetch;\n getDeliveryOptions: () => Promise<BillDeliveryOptions>;\n openAttachment: (attachment: { id: string }) => Promise<void>;\n onCancel: () => void;\n onSubmit: (input: SubmitSecondReviewInput) => Promise<void>;\n};\n\nconst css = `\n.mb-second-review{display:grid;gap:18px;padding:22px;color:var(--mb-text);font-family:var(--mb-font);background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius);box-shadow:var(--mb-shadow)}\n.mb-second-review *{box-sizing:border-box}.mb-second-review h3{margin:0;font-size:22px}.mb-second-review p{margin:4px 0 0;color:var(--mb-muted)}\n.mb-second-review-deadline{padding:12px 14px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-warning) 10%,var(--mb-surface));color:var(--mb-text)!important}\n.mb-second-review-template,.mb-second-review-field{display:grid;gap:6px}.mb-second-review-label{font-size:13px;font-weight:720}.mb-second-review-select,.mb-second-review-textarea{width:100%;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mb-second-review-textarea{min-height:86px;resize:vertical}.mb-second-review-select:focus,.mb-second-review-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 20%,transparent);border-color:var(--mb-accent)}\n.mb-second-review-lines{display:grid;gap:10px}.mb-second-review-line{display:grid;gap:12px;padding:14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface)}.mb-second-review-line[data-selected=true]{border-color:color-mix(in srgb,var(--mb-accent) 65%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 4%,var(--mb-surface))}.mb-second-review-line-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.mb-second-review-check{display:flex;align-items:center;gap:9px;font-weight:750}.mb-second-review-check input{width:18px;height:18px;accent-color:var(--mb-accent)}.mb-second-review-metrics{display:flex;gap:14px;color:var(--mb-muted);font-size:12px}.mb-second-review-auth{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:13px}.mb-second-review-auth strong{margin-right:4px}.mb-second-review-auth label{display:flex;align-items:center;gap:5px}.mb-second-review-auth input{accent-color:var(--mb-accent)}\n.mb-second-review-packet{display:grid;gap:10px;padding:0;border:0}.mb-second-review-packet legend{margin-bottom:8px;font-weight:750}.mb-second-review-document{display:flex;align-items:center;gap:10px;padding:10px 0;border-top:1px solid var(--mb-border)}.mb-second-review-document input{width:18px;height:18px;accent-color:var(--mb-accent)}.mb-second-review-document span{display:grid;min-width:0;flex:1}.mb-second-review-document small{color:var(--mb-muted)}.mb-second-review-link{border:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:700;cursor:pointer}\n.mb-second-review-upload{display:grid;place-items:center;min-height:82px;padding:16px;border:1px dashed color-mix(in srgb,var(--mb-accent) 55%,var(--mb-border));border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));cursor:pointer}.mb-second-review-upload input{position:absolute;width:1px;height:1px;opacity:0}.mb-second-review-upload strong{color:var(--mb-accent)}\n.mb-second-review-uploaded{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius)}\n.mb-second-review-error{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}.mb-second-review-actions{display:flex;justify-content:flex-end;gap:10px}.mb-second-review-button{min-height:42px;padding:9px 16px;border-radius:var(--mb-control-radius);font:inherit;font-weight:740;cursor:pointer}.mb-second-review-button.secondary{border:1px solid var(--mb-border);background:var(--mb-surface);color:var(--mb-text)}.mb-second-review-button.primary{border:0;background:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-second-review-button:disabled{opacity:.55;cursor:not-allowed}\n.mb-second-review-corrections{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.mb-second-review-correction-note{font-size:13px}\n@media(max-width:680px){.mb-second-review{padding:16px}.mb-second-review-line-head{align-items:flex-start;flex-direction:column}.mb-second-review-metrics{flex-wrap:wrap}.mb-second-review-corrections{grid-template-columns:1fr}}\n`;\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nfunction initialLineDrafts(data: BillLifecycleData): Record<string, LineDraft> {\n return Object.fromEntries(data.bill.lineItems.flatMap((line) => line.id ? [[line.id, {\n selected: true,\n reason: \"\",\n serviceAuthorized: \"\" as AuthorizationAnswer,\n correctBilling: false,\n units: String(line.units),\n modifiers: line.modifiers.join(\", \"),\n charge: line.charge.toFixed(2),\n chargeReviewed: false,\n }]] : []));\n}\n\nexport function SecondReviewForm({\n data,\n submitting = false,\n error,\n fetch: fetchOverride,\n getDeliveryOptions,\n openAttachment,\n onCancel,\n onSubmit,\n}: SecondReviewFormProps): ReactElement {\n const [lines, setLines] = useState<Record<string, LineDraft>>(() => initialLineDrafts(data));\n const [attachmentIds, setAttachmentIds] = useState(() => data.bill.attachments.map((attachment) => attachment.id));\n const [uploads, setUploads] = useState<BillSubmissionUpload[]>([]);\n const [formError, setFormError] = useState(\"\");\n const [preparing, setPreparing] = useState(false);\n const [delivery, setDelivery] = useState<BillDeliveryOptions | null>(null);\n\n const selectableLines = useMemo(() => data.bill.lineItems.filter((line): line is typeof line & { id: string } => Boolean(line.id)), [data.bill.lineItems]);\n const selected = selectableLines.filter((line) => lines[line.id]?.selected);\n const invalidReason = selected.some((line) => !lines[line.id]?.reason.trim());\n const correctionErrors = Object.fromEntries(selected.map((line) => {\n try { parseSecondReviewCorrection(lines[line.id]!); return [line.id, \"\"]; }\n catch (cause) { return [line.id, cause instanceof Error ? cause.message : \"Review the corrected billing values.\"]; }\n }));\n const invalidCorrection = Object.values(correctionErrors).some(Boolean);\n const disputedAmount = selected.reduce((sum, line) => sum + Math.max(0, !correctionErrors[line.id] && lines[line.id]?.correctBilling ? Number(lines[line.id]!.charge) : line.charge), 0);\n\n const patchLine = (id: string, patch: Partial<LineDraft>) => setLines((current) => {\n const line = current[id];\n if (!line) return current;\n return { ...current, [id]: { ...line, ...patch } };\n });\n\n const applyTemplate = (value: string) => {\n if (!value) return;\n setLines((current) => Object.fromEntries(Object.entries(current).map(([id, line]) => [\n id,\n line.selected ? { ...line, reason: value, ...(value === SECOND_REVIEW_REASON_TEMPLATES[5].value ? { correctBilling: true, chargeReviewed: false } : {}) } : line,\n ])));\n };\n\n const addUploads = (event: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n event.target.value = \"\";\n if (!files.length) return;\n const invalid = files.find((file) => file.type !== \"application/pdf\" && !file.name.toLowerCase().endsWith(\".pdf\"));\n if (invalid) { setFormError(`${invalid.name} is not a PDF.`); return; }\n const oversized = files.find((file) => file.size > 25 * 1024 * 1024);\n if (oversized) { setFormError(`${oversized.name} is larger than 25 MB.`); return; }\n setFormError(\"\");\n setUploads((current) => [...current, ...files.map((file) => ({ file, documentType: \"appeal\" as const }))]);\n };\n\n const continueToDelivery = async () => {\n if (!selected.length) { setFormError(\"Select at least one service line.\"); return; }\n if (invalidReason) { setFormError(\"Enter a dispute reason for every selected service line.\"); return; }\n if (invalidCorrection) { setFormError(\"Review the corrected billing values for each selected service line.\"); return; }\n setPreparing(true);\n setFormError(\"\");\n try {\n setDelivery(await getDeliveryOptions());\n } catch (cause) {\n setFormError(cause instanceof Error ? cause.message : \"Delivery methods could not be loaded.\");\n } finally {\n setPreparing(false);\n }\n };\n\n const submit = async (route: SendRouteSubmission) => {\n setPreparing(true);\n setFormError(\"\");\n try {\n if (!selected.length || invalidReason || invalidCorrection) throw new Error(\"Review all selected service lines before submitting.\");\n const documents = await prepareBillSubmissionDocuments({\n attachments: [],\n selectedIds: [],\n uploads,\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n });\n const lineItems: SecondReviewLineInput[] = selected.map((line) => {\n const draft = lines[line.id]!;\n return {\n lineItemId: line.id,\n reason: draft.reason.trim(),\n ...(draft.serviceAuthorized === \"\" ? {} : { serviceAuthorized: draft.serviceAuthorized === \"yes\" }),\n ...(draft.correctBilling ? { correction: parseSecondReviewCorrection(draft)! } : {}),\n };\n });\n await onSubmit({\n attachmentIds,\n documents,\n disputedAmount,\n lineItems,\n ...(lineItems[0] ? { reason: lineItems[0].reason } : {}),\n ...route,\n });\n } catch (cause) {\n setFormError(cause instanceof Error ? cause.message : \"The Second Review could not be submitted.\");\n } finally {\n setPreparing(false);\n }\n };\n\n return <>\n <style>{css}</style>\n <section className=\"mb-second-review\">\n <div><h3>Submit Second Review</h3><p>Select each disputed service and explain why it should be reconsidered.</p></div>\n <label className=\"mb-second-review-template\"><span className=\"mb-second-review-label\">Apply a saved reason to selected lines</span><select className=\"mb-second-review-select\" defaultValue=\"\" onChange={(event) => { applyTemplate(event.target.value); event.target.value = \"\"; }}><option value=\"\">Choose a reason template (optional)</option>{SECOND_REVIEW_REASON_TEMPLATES.map((template) => <option key={template.label} value={template.value}>{template.label}</option>)}</select></label>\n <section className=\"mb-second-review-lines\" aria-label=\"Service lines in dispute\">\n {selectableLines.map((line) => {\n const draft = lines[line.id];\n return <article className=\"mb-second-review-line\" data-selected={draft?.selected} key={line.id}>\n <div className=\"mb-second-review-line-head\"><label className=\"mb-second-review-check\"><input type=\"checkbox\" checked={Boolean(draft?.selected)} onChange={(event) => patchLine(line.id, { selected: event.target.checked })} /><span>{line.code}{line.modifiers.length ? `-${line.modifiers.join(\"-\")}` : \"\"}</span></label><span className=\"mb-second-review-metrics\"><span>{line.units} unit{line.units === 1 ? \"\" : \"s\"}</span><span>{money(line.charge)}</span></span></div>\n {draft?.selected ? <><label className=\"mb-second-review-field\"><span className=\"mb-second-review-label\">Reason for requesting Second Review</span><textarea className=\"mb-second-review-textarea\" required value={draft.reason} onChange={(event) => patchLine(line.id, { reason: event.target.value })} /></label><div className=\"mb-second-review-auth\" role=\"radiogroup\" aria-label={`Service or good ${line.code} authorized`}><strong>Service/Good Authorized?</strong>{([['yes','Yes'],['no','No'],['','Not specified']] as const).map(([value, label]) => <label key={label}><input type=\"radio\" name={`authorized-${line.id}`} checked={draft.serviceAuthorized === value} onChange={() => patchLine(line.id, { serviceAuthorized: value })} />{label}</label>)}</div></> : null}\n {draft?.selected ? <>\n <label className=\"mb-second-review-check\"><input type=\"checkbox\" checked={draft.correctBilling} onChange={(event) => patchLine(line.id, { correctBilling: event.target.checked, chargeReviewed: false })} />Correct units or modifiers on this submission</label>\n {draft.correctBilling ? <>\n <p className=\"mb-second-review-correction-note\">Earlier submissions stay unchanged. Review the charge explicitly; changing units or modifiers does not recalculate it.</p>\n <div className=\"mb-second-review-corrections\">\n <label className=\"mb-second-review-field\"><span className=\"mb-second-review-label\">Corrected units</span><input className=\"mb-second-review-select\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value={draft.units} onChange={(event) => patchLine(line.id, { units: event.target.value, chargeReviewed: false })} /></label>\n <label className=\"mb-second-review-field\"><span className=\"mb-second-review-label\">Corrected modifiers</span><input className=\"mb-second-review-select\" placeholder=\"95, 93 — or leave blank\" value={draft.modifiers} onChange={(event) => patchLine(line.id, { modifiers: event.target.value, chargeReviewed: false })} /></label>\n <label className=\"mb-second-review-field\"><span className=\"mb-second-review-label\">Corrected charge ($)</span><input className=\"mb-second-review-select\" type=\"number\" min=\"0\" max=\"999999.99\" step=\"0.01\" value={draft.charge} onChange={(event) => patchLine(line.id, { charge: event.target.value, chargeReviewed: false })} /></label>\n </div>\n <label className=\"mb-second-review-check\"><input type=\"checkbox\" checked={draft.chargeReviewed} onChange={(event) => patchLine(line.id, { chargeReviewed: event.target.checked })} />I reviewed the corrected charge</label>\n {correctionErrors[line.id] ? <p className=\"mb-second-review-correction-note\" role=\"status\">{correctionErrors[line.id]}</p> : null}\n </> : null}\n </> : null}\n </article>;\n })}\n {!selectableLines.length ? <div className=\"mb-second-review-error\">This bill has no stable service-line identifiers. Refresh the bill before submitting a Second Review.</div> : null}\n </section>\n <fieldset className=\"mb-second-review-packet\"><legend>Supporting packet</legend>{data.bill.attachments.map((attachment) => <label className=\"mb-second-review-document\" key={attachment.id}><input type=\"checkbox\" checked={attachmentIds.includes(attachment.id)} onChange={(event) => setAttachmentIds((current) => event.target.checked ? [...current, attachment.id] : current.filter((id) => id !== attachment.id))} /><span><strong>{attachment.filename}</strong><small>{attachment.description || attachment.documentType}</small></span><button className=\"mb-second-review-link\" type=\"button\" onClick={() => void openAttachment(attachment).catch(() => undefined)}>View</button></label>)}<label className=\"mb-second-review-upload\"><input type=\"file\" accept=\"application/pdf,.pdf\" multiple onChange={addUploads} /><span><strong>Choose one or more PDF files</strong> to attach</span></label>{uploads.map((upload, index) => <div className=\"mb-second-review-uploaded\" key={`${upload.file.name}-${index}`}><span>{upload.file.name}</span><button className=\"mb-second-review-link\" type=\"button\" onClick={() => setUploads((current) => current.filter((_, itemIndex) => itemIndex !== index))}>Remove</button></div>)}</fieldset>\n {(formError || error?.message) ? <div className=\"mb-second-review-error\" role=\"alert\">{formError || error?.message}</div> : null}\n <div className=\"mb-second-review-actions\"><button className=\"mb-second-review-button secondary\" type=\"button\" disabled={submitting || preparing} onClick={onCancel}>Cancel</button><button className=\"mb-second-review-button primary\" type=\"button\" disabled={submitting || preparing || !selected.length || invalidReason || invalidCorrection} onClick={() => void continueToDelivery()}>{preparing ? \"Preparing…\" : \"Continue to delivery\"}</button></div>\n </section>\n {delivery ? <SendRouteDialog title=\"Confirm Second Review delivery\" delivery={delivery} submitting={submitting || preparing} error={formError || error?.message || null} onCancel={() => setDelivery(null)} onConfirm={(route) => void submit(route)} /> : null}\n </>;\n}\n","export { parseSecondReviewCorrection, type CorrectionDraft } from \"@mindbill/browser\";\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Ref,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport type { BillTasksDashboardCell } from \"./bill-tasks-dashboard\";\nimport { BillTasksDashboard } from \"./bill-tasks-dashboard\";\nimport { ConnectedBillLifecycle } from \"./connected-bill-lifecycle\";\nimport { ConnectedPaymentReview } from \"./payment-review\";\nimport type { CourtesyCopyRecipientOption } from \"./bill-courtesy-copy-form\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport {\n createBillingOperationsClient,\n type BillingOperationsClientOptions,\n type BillRegistryAge,\n type BillRegistryItem,\n type BillRegistryQuery,\n type BillRegistryResult,\n type BillTasksResult,\n type ProductivityReport,\n type ServiceLineItemsReport,\n} from \"./billing-operations-client\";\n\ntype ConnectedSurfaceProps = BillingOperationsClientOptions & {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nconst css = `\n.mbow-select{max-width:100%}\n.mbow{color:var(--mb-text);font:14px/1.45 var(--mb-font);background:var(--mb-soft);border-radius:var(--mb-radius);padding:20px}.mbow,.mbow *{box-sizing:border-box}.mbow h2,.mbow h3,.mbow p{margin:0}.mbow a{color:var(--mb-accent)}\n.mbow-workspace{width:100%;height:100%;max-height:var(--mbow-available-height,100dvh);min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}\n.mbow-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.mbow-head h2{font-size:24px;line-height:1.2}.mbow-sub{color:var(--mb-muted);margin-top:4px!important}.mbow-actions{display:flex;gap:8px;flex-wrap:wrap}\n.mbow-button,.mbow-input,.mbow-select{min-height:38px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbow-button{padding:7px 12px;cursor:pointer;font-weight:650}.mbow-button:hover{border-color:var(--mb-accent)}.mbow-button.primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mbow-button:disabled{opacity:.55;cursor:not-allowed}.mbow-input,.mbow-select{padding:7px 10px}.mbow-input{min-width:260px;flex:1}\n.mbow-tabs{display:flex;gap:4px;border-bottom:1px solid var(--mb-border);margin-bottom:18px;overflow:auto}.mbow-tab{border:0;border-bottom:3px solid transparent;background:transparent;color:var(--mb-muted);padding:10px 13px;font:inherit;font-weight:700;white-space:nowrap;cursor:pointer}.mbow-tab.active{color:var(--mb-text);border-bottom-color:var(--mb-accent)}\n.mbow-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.mbow-card{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius);box-shadow:var(--mb-shadow);overflow:hidden}.mbow-scroll{overflow:auto}.mbow-table{width:100%;border-collapse:collapse;min-width:820px}.mbow-table th,.mbow-table td{padding:11px 12px;border-bottom:1px solid var(--mb-border);text-align:left;vertical-align:middle}.mbow-table th{color:var(--mb-muted);font-size:11px;letter-spacing:.045em;text-transform:uppercase;font-weight:800;background:color-mix(in srgb,var(--mb-soft) 60%,var(--mb-surface))}.mbow-table tr:last-child td{border-bottom:0}.mbow-table tbody tr.clickable{cursor:pointer}.mbow-table tbody tr.clickable:hover{background:color-mix(in srgb,var(--mb-accent) 6%,var(--mb-surface))}.mbow-money{text-align:right!important;font-variant-numeric:tabular-nums}.mbow-strong{font-weight:760}.mbow-muted{color:var(--mb-muted);font-size:12px}.mbow-badge{display:inline-flex;border:1px solid var(--mb-border);border-radius:999px;padding:2px 8px;font-size:12px;background:var(--mb-soft);white-space:nowrap}.mbow-badge.success{color:var(--mb-success);border-color:color-mix(in srgb,var(--mb-success) 35%,var(--mb-border));background:color-mix(in srgb,var(--mb-success) 8%,var(--mb-surface))}.mbow-badge.danger{color:var(--mb-danger)}.mbow-badge.warning{color:var(--mb-warning)}\n.mbow-state{padding:28px;text-align:center;color:var(--mb-muted)}.mbow-error{color:var(--mb-danger)}.mbow-pager{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;color:var(--mb-muted)}\n.mbow-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:14px 0 18px}.mbow-metric{padding:16px;background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius);box-shadow:var(--mb-shadow)}.mbow-metric span{display:block;color:var(--mb-muted);font-size:11px;text-transform:uppercase;letter-spacing:.05em}.mbow-metric strong{display:block;font-size:24px;margin-top:5px}.mbow-section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--mb-border)}\n.mbow-back{margin-bottom:12px}.mbow-task-note{color:var(--mb-muted);font-size:13px;margin-bottom:14px!important}.mbow-bar{height:7px;min-width:70px;background:var(--mb-soft);border-radius:99px;overflow:hidden}.mbow-bar i{display:block;height:100%;background:var(--mb-accent);border-radius:inherit}\n@media(max-width:760px){.mbow{padding:14px}.mbow-head{display:block}.mbow-actions{margin-top:12px}.mbow-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.mbow-input{min-width:100%}}\n`;\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nfunction RenderingProviderFilter({ value, options, onChange }: {\n value: string;\n options: Array<{ id: string; name: string }> | undefined;\n onChange: (value: string) => void;\n}): ReactElement | null {\n if (!options && !value) return null;\n return <select className=\"mbow-select\" aria-label=\"Rendering provider filter\" value={value} onChange={(event) => onChange(event.target.value)}>\n <option value=\"\">All rendering providers</option>\n {value && !options?.some((option) => option.id === value) ? <option value={value}>Selected rendering provider</option> : null}\n {options?.map((option) => <option key={option.id} value={option.id}>{option.name}</option>)}\n </select>;\n}\n\nfunction shortDate(value: string | null): string {\n if (!value) return \"—\";\n const date = new Date(`${value.slice(0, 10)}T12:00:00`);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleDateString(\"en-US\");\n}\n\nfunction defaultRange(days = 29): { from: string; to: string } {\n const to = new Date();\n const from = new Date(to);\n from.setDate(to.getDate() - days);\n const iso = (date: Date) => date.toISOString().slice(0, 10);\n return { from: iso(from), to: iso(to) };\n}\n\nfunction Surface({ appearance, className = \"\", style, children, surfaceRef }: {\n appearance?: MindBillReactAppearance | undefined;\n className?: string | undefined;\n style?: CSSProperties | undefined;\n children: ReactNode;\n surfaceRef?: Ref<HTMLDivElement> | undefined;\n}): ReactElement {\n return <div ref={surfaceRef} className={`mbow ${className}`.trim()} style={mindBillAppearanceStyle(appearance, style)}><style>{css}</style>{children}</div>;\n}\n\nfunction useAvailableViewportHeight() {\n const workspaceRef = useRef<HTMLDivElement>(null);\n const [availableHeight, setAvailableHeight] = useState<number | null>(null);\n useLayoutEffect(() => {\n const element = workspaceRef.current;\n if (!element || typeof window === \"undefined\") return;\n let frame = 0;\n const update = () => {\n window.cancelAnimationFrame(frame);\n frame = window.requestAnimationFrame(() => {\n const viewportHeight = window.visualViewport?.height ?? window.innerHeight;\n const top = Math.max(0, element.getBoundingClientRect().top);\n setAvailableHeight(Math.max(240, viewportHeight - top - 16));\n });\n };\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n window.visualViewport?.addEventListener(\"resize\", update);\n return () => {\n window.cancelAnimationFrame(frame);\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n window.visualViewport?.removeEventListener(\"resize\", update);\n };\n }, []);\n return { workspaceRef, availableHeight };\n}\n\nfunction useClient(options: BillingOperationsClientOptions) {\n return useMemo(() => createBillingOperationsClient(options), [options.apiBaseUrl, options.fetch, options.getSession, options.sessionEndpoint]);\n}\n\nexport type ConnectedBillSearchProps = ConnectedSurfaceProps & {\n initialQuery?: BillRegistryQuery;\n onSelectBill?: (bill: BillRegistryItem) => void;\n heading?: ReactNode;\n compact?: boolean;\n};\n\nfunction BillSearchContent({\n client,\n initialQuery,\n onSelectBill,\n heading,\n}: {\n client: ReturnType<typeof createBillingOperationsClient>;\n initialQuery?: BillRegistryQuery | undefined;\n onSelectBill?: ((bill: BillRegistryItem) => void) | undefined;\n heading?: ReactNode | undefined;\n}): ReactElement {\n const [query, setQuery] = useState<BillRegistryQuery>({ age: \"all\", page: 1, pageSize: 25, sort: \"submitted_desc\", ...initialQuery, status: initialQuery?.status === \"submitted\" ? \"sent\" : initialQuery?.status ?? \"all\" });\n const [draft, setDraft] = useState(initialQuery?.q ?? \"\");\n const [result, setResult] = useState<BillRegistryResult | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [loading, setLoading] = useState(true);\n const load = useCallback(async (signal?: AbortSignal) => {\n setLoading(true); setError(null);\n try { setResult(await client.getBills(query, signal)); }\n catch (cause) { if (!signal?.aborted) setError(cause instanceof Error ? cause : new Error(\"Bills could not be loaded.\")); }\n finally { if (!signal?.aborted) setLoading(false); }\n }, [client, query]);\n useEffect(() => { const controller = new AbortController(); void load(controller.signal); return () => controller.abort(); }, [load]);\n const update = (next: Partial<BillRegistryQuery>) => setQuery((current) => ({ ...current, ...next, page: next.page ?? 1 }));\n const pageCount = Math.max(1, Math.ceil((result?.total ?? 0) / (result?.pageSize ?? 25)));\n\n return <>\n {heading ? <div className=\"mbow-head\"><div>{typeof heading === \"string\" ? <h2>{heading}</h2> : heading}</div></div> : null}\n <form className=\"mbow-toolbar\" onSubmit={(event) => { event.preventDefault(); update({ q: draft.trim() }); }}>\n <input className=\"mbow-input\" value={draft} onChange={(event) => setDraft(event.target.value)} placeholder=\"Search patient, bill ID, claim, or external ID…\" aria-label=\"Search bills\" />\n <select className=\"mbow-select\" value={query.status ?? \"all\"} onChange={(event) => update({ status: event.target.value })} aria-label=\"Bill status\">\n <option value=\"all\">All statuses</option><option value=\"incomplete\">Incomplete</option><option value=\"sent\">Sent</option><option value=\"accepted\">Accepted</option><option value=\"accepted_no_response\">Accepted — response overdue</option><option value=\"rejected\">Rejected</option><option value=\"processed\">Processed</option><option value=\"paid\">Paid</option><option value=\"closed\">Closed</option>\n </select>\n <select className=\"mbow-select\" value={query.age ?? \"all\"} onChange={(event) => update({ age: event.target.value as BillRegistryAge })} aria-label=\"A/R age\">\n <option value=\"all\">All A/R ages</option><option value=\"0-30\">0–30 days</option><option value=\"31-60\">31–60 days</option><option value=\"61-90\">61–90 days</option><option value=\"91+\">91+ days</option><option value=\"91-180\">91–180 days</option><option value=\"181+\">181+ days</option>\n </select>\n <button className=\"mbow-button\" type=\"submit\">Search</button>\n <RenderingProviderFilter value={query.renderingProviderId ?? \"\"} options={result?.filters?.renderingProviders} onChange={(value) => update({ renderingProviderId: value })} />\n </form>\n <div className=\"mbow-card mbow-scroll\">\n {loading ? <div className=\"mbow-state\" role=\"status\">Loading bills…</div> : error ? <div className=\"mbow-state mbow-error\" role=\"alert\">{error.message} <button className=\"mbow-button\" type=\"button\" onClick={() => void load()}>Retry</button></div> : result?.items.length === 0 ? <div className=\"mbow-state\">No bills match these filters.</div> : <table className=\"mbow-table\">\n <thead><tr><th>Bill</th><th>Patient</th><th>DOS</th><th>Codes</th><th>Claims administrator</th><th>Status</th><th>Submitted / A/R age</th><th className=\"mbow-money\">Balance due</th></tr></thead>\n <tbody>{result?.items.map((bill) => <tr key={bill.id} className={onSelectBill ? \"clickable\" : \"\"} onClick={() => onSelectBill?.(bill)}>\n <td className=\"mbow-strong\">#{bill.billNumber}</td><td>{bill.patientName}</td><td>{shortDate(bill.dateOfService)}</td><td>{bill.procedureCodes.join(\", \") || \"—\"}</td><td>{bill.claimsAdministrator || \"—\"}</td><td><span className={`mbow-badge ${bill.status.tone ?? \"\"}`}>{bill.status.label}</span></td><td>{shortDate(bill.submittedAt)}<div className=\"mbow-muted\">{bill.arAgeDays == null ? \"—\" : `${bill.arAgeDays} days`}</div></td><td className=\"mbow-money mbow-strong\">{money(bill.balanceDue)}</td>\n </tr>)}</tbody>\n </table>}\n {result && !loading && !error ? <div className=\"mbow-pager\"><span>Showing {result.total === 0 ? 0 : (result.page - 1) * result.pageSize + 1}–{Math.min(result.page * result.pageSize, result.total)} of {result.total}</span><span><button className=\"mbow-button\" type=\"button\" disabled={result.page <= 1} onClick={() => update({ page: result.page - 1 })}>Previous</button> {result.page} / {pageCount} <button className=\"mbow-button\" type=\"button\" disabled={result.page >= pageCount} onClick={() => update({ page: result.page + 1 })}>Next</button></span></div> : null}\n </div>\n </>;\n}\n\nexport function ConnectedBillSearch({ appearance, className, style, initialQuery, onSelectBill, heading = \"All bills\", ...options }: ConnectedBillSearchProps): ReactElement {\n const client = useClient(options);\n return <Surface appearance={appearance} className={className} style={style}><BillSearchContent client={client} initialQuery={initialQuery} onSelectBill={onSelectBill} heading={heading} /></Surface>;\n}\n\nexport type ConnectedBillTasksDashboardProps = ConnectedSurfaceProps & {\n onDrillDown?: (query: BillRegistryQuery) => void;\n};\n\nfunction taskQuery(cell: BillTasksDashboardCell): BillRegistryQuery {\n const [taskType, taskLabel] = cell.rowId.split(\"::\", 2);\n const age = cell.bucketId === \"1-30\" ? \"0-30\" : cell.bucketId as BillRegistryAge | null;\n if (cell.sectionId === \"waiting_sent\" || cell.sectionId === \"waiting_accepted\") {\n return { status: cell.rowId, ...(age ? { age } : {}) };\n }\n return { status: \"all\", taskSection: cell.sectionId, ...(taskType ? { taskType } : {}), ...(taskLabel ? { taskLabel } : {}), ...(age ? { age } : {}) };\n}\n\nfunction BillTasksContent({ client, onDrillDown, appearance }: { client: ReturnType<typeof createBillingOperationsClient>; onDrillDown?: ((query: BillRegistryQuery) => void) | undefined; appearance?: MindBillReactAppearance | undefined }): ReactElement {\n const [claimsAdminId, setClaimsAdminId] = useState(\"\");\n const [renderingProviderId, setRenderingProviderId] = useState(\"\");\n const [result, setResult] = useState<BillTasksResult | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [loading, setLoading] = useState(true);\n const load = useCallback(async (signal?: AbortSignal) => { setLoading(true); setError(null); try { setResult(await client.getBillTasks(claimsAdminId || undefined, signal, renderingProviderId || undefined)); } catch (cause) { if (!signal?.aborted) setError(cause instanceof Error ? cause : new Error(\"Bill tasks could not be loaded.\")); } finally { if (!signal?.aborted) setLoading(false); } }, [claimsAdminId, renderingProviderId, client]);\n useEffect(() => { const controller = new AbortController(); void load(controller.signal); return () => controller.abort(); }, [load]);\n if (loading && !result) return <div className=\"mbow-state\">Loading bill tasks…</div>;\n if (error && !result) return <div className=\"mbow-state mbow-error\">{error.message}</div>;\n if (!result) return <></>;\n const selectionProps = loading || error ? {} : {\n onSelectCell: (cell: BillTasksDashboardCell) => onDrillDown?.({ ...taskQuery(cell), ...(claimsAdminId ? { claimsAdministrator: claimsAdminId } : {}), ...(renderingProviderId ? { renderingProviderId } : {}) }),\n };\n return <>\n <p className=\"mbow-task-note\">Open follow-up work grouped by task and age. {result.waiting ? \"Sent and accepted bills waiting for a payer are shown below.\" : \"Find sent and accepted bills in All bills.\"}</p>\n {loading ? <p role=\"status\">Updating bill tasks…</p> : null}\n {error ? <p role=\"alert\" className=\"mbow-error\">{error.message}</p> : null}\n <BillTasksDashboard data={result.dashboard} appearance={appearance ?? { preset: \"mindbill\" }} toolbar={<div className=\"mbow-toolbar\"><select aria-label=\"Claims administrator filter\" className=\"mbow-select\" value={claimsAdminId} onChange={(event) => setClaimsAdminId(event.target.value)}><option value=\"\">All claims administrators</option>{result.filters.claimsAdministrators.map((item) => <option key={item.id} value={item.id}>{item.name}</option>)}</select><RenderingProviderFilter value={renderingProviderId} options={result.filters.renderingProviders} onChange={setRenderingProviderId} /></div>} {...selectionProps} />\n {result.waiting ? <BillTasksDashboard data={result.waiting} appearance={appearance ?? { preset: \"mindbill\" }}\n heading=\"Bills waiting for payer\" totalLabel=\"Bill Total\" itemLabel=\"bills\" grandTotalLabel=\"Waiting Bills Total\" emptyLabel=\"No waiting bills\"\n {...selectionProps}\n footnote=\"Waiting bills can also have overdue follow-up tasks above. These bill totals are separate from task totals.\" /> : null}\n </>;\n}\n\nexport function ConnectedBillTasksDashboard({ appearance, className, style, onDrillDown, ...options }: ConnectedBillTasksDashboardProps): ReactElement {\n const client = useClient(options);\n return <Surface appearance={appearance} className={className} style={style}><BillTasksContent client={client} onDrillDown={onDrillDown} appearance={appearance} /></Surface>;\n}\n\ntype ReportProps = ConnectedSurfaceProps & { initialFrom?: string; initialTo?: string; onSelectBill?: (billId: string) => void };\n\nfunction RangeToolbar({ from, to, setFrom, setTo }: { from: string; to: string; setFrom: (value: string) => void; setTo: (value: string) => void }): ReactElement {\n return <div className=\"mbow-toolbar\"><label>From <input className=\"mbow-input\" type=\"date\" value={from} onChange={(event) => setFrom(event.target.value)} /></label><label>To <input className=\"mbow-input\" type=\"date\" value={to} onChange={(event) => setTo(event.target.value)} /></label></div>;\n}\n\nexport function ConnectedServiceLineItemsReport({ appearance, className, style, initialFrom, initialTo, onSelectBill, ...options }: ReportProps): ReactElement {\n const defaults = useMemo(() => defaultRange(), []); const client = useClient(options);\n const [from, setFrom] = useState(initialFrom ?? defaults.from); const [to, setTo] = useState(initialTo ?? defaults.to); const [data, setData] = useState<ServiceLineItemsReport | null>(null); const [error, setError] = useState<Error | null>(null);\n useEffect(() => { const controller = new AbortController(); setError(null); void client.getServiceLineItems({ from, to }, controller.signal).then(setData).catch((cause) => { if (!controller.signal.aborted) setError(cause instanceof Error ? cause : new Error(\"Report could not be loaded.\")); }); return () => controller.abort(); }, [client, from, to]);\n return <Surface appearance={appearance} className={className} style={style}><div className=\"mbow-head\"><div><h2>Original submissions by procedure</h2><p className=\"mbow-sub\">First payer submission for each patient and date of service.</p></div></div><RangeToolbar from={from} to={to} setFrom={setFrom} setTo={setTo} />{error ? <div className=\"mbow-state mbow-error\">{error.message}</div> : !data ? <div className=\"mbow-state\">Loading report…</div> : <><div className=\"mbow-metrics\"><Metric label=\"Original bills\" value={String(data.totalBills)} /><Metric label=\"Service lines\" value={String(data.totalLines)} /><Metric label=\"Total billed\" value={money(data.totalBilled)} /><Metric label=\"Report window\" value={data.windowLabel} /></div><div className=\"mbow-card mbow-scroll\"><div className=\"mbow-section-head\"><h3>Procedure summary</h3></div><table className=\"mbow-table\"><thead><tr><th>Procedure code</th><th>Bills</th><th>Service lines</th><th className=\"mbow-money\">Total billed</th></tr></thead><tbody>{data.cptRows.map((row) => <tr key={row.code}><td className=\"mbow-strong\">{row.code}</td><td>{row.bills}</td><td>{row.lines}</td><td className=\"mbow-money\">{money(row.billed)}</td></tr>)}</tbody></table></div><div className=\"mbow-card mbow-scroll\" style={{ marginTop: 16 }}><div className=\"mbow-section-head\"><h3>All original bills</h3></div><table className=\"mbow-table\"><thead><tr><th>Bill</th><th>First submitted</th><th>Patient · Claim</th><th>DOS</th><th>Claims administrator</th><th>Codes</th><th className=\"mbow-money\">Billed</th><th>Status</th></tr></thead><tbody>{data.billRows.map((row) => <tr key={row.billId} className={onSelectBill ? \"clickable\" : \"\"} onClick={() => onSelectBill?.(row.billId)}><td className=\"mbow-strong\">#{row.billNumber}</td><td>{shortDate(row.submittedDate)}</td><td>{row.patient}<div className=\"mbow-muted\">{row.claim}</div></td><td>{shortDate(row.dos)}</td><td>{row.claimsAdmin}</td><td>{row.codes.join(\", \")}</td><td className=\"mbow-money\">{money(row.billed)}</td><td>{row.status}</td></tr>)}</tbody></table></div></>}</Surface>;\n}\n\nfunction Metric({ label, value }: { label: string; value: string }): ReactElement { return <div className=\"mbow-metric\"><span>{label}</span><strong>{value}</strong></div>; }\n\nexport function ConnectedProductivityReport({ appearance, className, style, initialFrom, initialTo, ...options }: Omit<ReportProps, \"onSelectBill\">): ReactElement {\n const defaults = useMemo(() => defaultRange(13), []); const client = useClient(options);\n const [from, setFrom] = useState(initialFrom ?? defaults.from); const [to, setTo] = useState(initialTo ?? defaults.to); const [data, setData] = useState<ProductivityReport | null>(null); const [error, setError] = useState<Error | null>(null);\n useEffect(() => { const controller = new AbortController(); setError(null); void client.getProductivity({ from, to }, controller.signal).then(setData).catch((cause) => { if (!controller.signal.aborted) setError(cause instanceof Error ? cause : new Error(\"Report could not be loaded.\")); }); return () => controller.abort(); }, [client, from, to]);\n const maxSent = data ? Math.max(1, ...Object.values(data.sentTotal)) : 1;\n return <Surface appearance={appearance} className={className} style={style}><div className=\"mbow-head\"><div><h2>Productivity</h2><p className=\"mbow-sub\">Bills created and sent per biller, plus accepted-first-try rate.</p></div></div><RangeToolbar from={from} to={to} setFrom={setFrom} setTo={setTo} />{error ? <div className=\"mbow-state mbow-error\">{error.message}</div> : !data ? <div className=\"mbow-state\">Loading report…</div> : <><div className=\"mbow-metrics\"><Metric label=\"Bills created\" value={String(data.totalCreated)} /><Metric label=\"Transmissions\" value={String(data.totalSent)} /><Metric label=\"Bills submitted\" value={String(data.totalSubmitted)} /><Metric label=\"Accepted first try\" value={data.totalSubmitted ? `${Math.round(data.totalClean / data.totalSubmitted * 100)}%` : \"—\"} /></div><div className=\"mbow-card mbow-scroll\"><div className=\"mbow-section-head\"><h3>Per-biller summary</h3></div><table className=\"mbow-table\"><thead><tr><th>Biller</th><th>Created</th><th>Transmissions</th><th>Submitted</th><th>Accepted first try</th><th>Volume</th></tr></thead><tbody>{data.billers.map((biller) => { const sent = data.sentTotal[biller.name] ?? 0; const submitted = data.submittedTotal[biller.name] ?? 0; const clean = data.cleanTotal[biller.name] ?? 0; return <tr key={biller.name}><td className=\"mbow-strong\">{biller.name}</td><td>{data.createdTotal[biller.name] ?? 0}</td><td>{sent}</td><td>{submitted}</td><td>{submitted ? `${Math.round(clean / submitted * 100)}%` : \"—\"}</td><td><div className=\"mbow-bar\"><i style={{ width: `${sent / maxSent * 100}%` }} /></div></td></tr>; })}</tbody></table></div></>}</Surface>;\n}\n\nexport type ConnectedBillingWorkspaceProps = ConnectedSurfaceProps & {\n initialView?: \"tasks\" | \"bills\" | \"procedures\" | \"productivity\" | \"payments\";\n /** Optional host-owned payment entry action. Review itself is read-only. */\n onPostPayment?: () => void;\n onCreateBill?: () => void;\n /** Show simulation controls on selected sandbox bills. Never enables live simulations. */\n sandboxControls?: boolean;\n /** Return contacts for the selected bill only; never auto-selects recipients. */\n getCourtesyCopyRecipientOptions?: (billId: string) => readonly CourtesyCopyRecipientOption[];\n};\n\nexport function ConnectedBillingWorkspace({ appearance, className, style, initialView = \"tasks\", onCreateBill, onPostPayment, sandboxControls = false, getCourtesyCopyRecipientOptions, ...options }: ConnectedBillingWorkspaceProps): ReactElement {\n const client = useClient(options); const [view, setView] = useState(initialView); const [billQuery, setBillQuery] = useState<BillRegistryQuery>({ status: \"all\" }); const [selectedBillId, setSelectedBillId] = useState<string | null>(null);\n const { workspaceRef, availableHeight } = useAvailableViewportHeight();\n const workspaceClassName = [\"mbow-workspace\", className].filter(Boolean).join(\" \");\n const hasExplicitHeight = style?.height != null || style?.maxHeight != null;\n const workspaceStyle = availableHeight == null || hasExplicitHeight ? style : { ...style, maxHeight: availableHeight };\n if (selectedBillId) return <Surface surfaceRef={workspaceRef} appearance={appearance} className={workspaceClassName} style={workspaceStyle}><button className=\"mbow-button mbow-back\" type=\"button\" onClick={() => setSelectedBillId(null)}>← Back to bills</button><ConnectedBillLifecycle billId={selectedBillId} sandboxControls={sandboxControls} courtesyCopyRecipientOptions={getCourtesyCopyRecipientOptions?.(selectedBillId) ?? []} {...options} {...(appearance ? { appearance } : {})} /></Surface>;\n const selectView = (next: typeof view) => { setView(next); setSelectedBillId(null); };\n const appearanceProps = appearance ? { appearance } : {};\n return <Surface surfaceRef={workspaceRef} appearance={appearance} className={workspaceClassName} style={workspaceStyle}><div className=\"mbow-head\"><div><h2>Billing</h2><p className=\"mbow-sub\">Follow up on open work or find any bill and its current status.</p></div>{onCreateBill ? <div className=\"mbow-actions\"><button className=\"mbow-button primary\" type=\"button\" onClick={onCreateBill}>+ Add bill</button></div> : null}</div><div className=\"mbow-tabs\" role=\"tablist\">{([['tasks','Bill tasks'],['bills','All bills'],['procedures','Procedures'],['productivity','Productivity'],['payments','Payment review']] as const).map(([id,label]) => <button key={id} className={`mbow-tab ${view === id ? \"active\" : \"\"}`} type=\"button\" role=\"tab\" aria-selected={view === id} onClick={() => selectView(id)}>{label}</button>)}</div>{view === \"tasks\" ? <BillTasksContent client={client} onDrillDown={(query) => { setBillQuery(query); setView(\"bills\"); }} appearance={appearance} /> : view === \"bills\" ? <BillSearchContent client={client} initialQuery={billQuery} onSelectBill={(bill) => setSelectedBillId(bill.id)} /> : view === \"procedures\" ? <ConnectedServiceLineItemsReport {...options} {...appearanceProps} onSelectBill={setSelectedBillId} /> : view === \"payments\" ? <ConnectedPaymentReview {...options} {...appearanceProps} {...(onPostPayment ? { onPostPayment } : {})} onSelectBill={setSelectedBillId} /> : <ConnectedProductivityReport {...options} {...appearanceProps} />}</Surface>;\n}\n"],"mappings":"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","names":["document","useEffect","useRef","useEffect","useRef","useState","jsx","jsxs","value","useEffect","useState","jsx","jsxs","money","contacts","useState","useEffect","useEffect","useMemo","useRef","useState","useEffect","useMemo","useState","Fragment","jsx","jsxs","useEffect","useState","Fragment","jsx","jsxs","css","Fragment","jsx","jsxs","date","css","Field","useState","useEffect","useMemo","useRef","list","administrator","description","useMemo","useState","Fragment","jsx","jsxs","css","money","useMemo","useState","useMemo","jsx","jsxs","money","stateLabel","css","useMemo","BILL_TASKS_AGING_BUCKETS","Fragment","jsx","jsxs","css","Fragment","jsx","jsxs","css","useEffect","useState","REPORT_BILL_STATUS_OPTIONS","Fragment","jsx","jsxs","css","useState","useEffect","useCallback","useEffect","useId","useMemo","useRef","useState","Fragment","jsx","jsxs","useState","jsx","jsxs","document","useState","Fragment","jsx","jsxs","css","useMemo","useState","useId","useRef","useCallback","useEffect","error","useEffect","useMemo","useState","jsx","jsxs","date","money","css","useMemo","useState","useEffect","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","css","useId","useState","useRef","useEffect","useCallback","useEffect","useMemo","useRef","useState","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","Fragment","jsx","jsxs","responseError","normalizeSession","useMemo","useState","useRef","useEffect","useCallback","useEffect","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useEffect","contacts","useCallback","useEffect","useMemo","useRef","useState","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","useMemo","useState","Fragment","jsx","jsxs","css","money","useState","useMemo","createBillLifecycleClient","reportBillStatusContacts","secondReviewDeadline","Fragment","jsx","jsxs","DEFAULT_REFRESH_INTERVAL","DEFAULT_SESSION_ENDPOINT","DEFAULT_API_BASE_URL","useState","useRef","useMemo","useEffect","useCallback","document","courtesyCopyRecipientOptions","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","css","money","date","useRef","useState","useMemo","useCallback","useEffect","useRef","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/bill-courtesy-copy-form.tsx","../src/appearance.ts","../src/billing-profile-options.ts","../src/index.tsx","../src/native-bill-review.tsx","../src/bill-read-only-form.tsx","../src/bill-submission-form.tsx","../src/send-route-dialog.tsx","../src/claims-administrator-directory-dialog.tsx","../src/billing-catalog.ts","../src/billing-dashboard.tsx","../src/status-aging-matrix.tsx","../src/bill-tasks-dashboard.tsx","../src/bill-submissions-ribbon.tsx","../src/report-bill-status-dialog.tsx","../src/organization-onboarding.tsx","../src/tax-id-input.tsx","../src/w9-upload.tsx","../src/payment-review.tsx","../src/billing-operations-client.ts","../src/notification-settings.tsx","../src/notification-recipients.tsx","../src/connected-bill-status.tsx","../src/bill-lifecycle-surfaces.tsx","../src/connected-bill-lifecycle.tsx","../src/second-review-form.tsx","../src/second-review-corrections.ts","../src/connected-billing-workspace.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport type { BillCourtesyCopyInput, BillCourtesyCopyPreview, BillCourtesyCopyResult } from \"@mindbill/browser\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\n/** Host-provided suggestions only: never selected, saved, or emailed automatically. */\nexport type CourtesyCopyRecipientOption = { email: string; name?: string };\n\nexport function courtesyCopyRecipientOptions(options: readonly CourtesyCopyRecipientOption[]): CourtesyCopyRecipientOption[] {\n const seen = new Set<string>();\n return options.flatMap((option) => {\n const email = option.email.trim();\n const key = email.toLowerCase();\n // Convenience filtering only. The server remains authoritative for recipients.\n if (!/^[^\\s@,;<>]+@[^\\s@,;<>]+\\.[^\\s@,;<>]+$/.test(email) || seen.has(key)) return [];\n seen.add(key);\n const name = option.name?.trim();\n return [{ email, ...(name ? { name } : {}) }];\n });\n}\n\nexport type BillCourtesyCopyFormProps = {\n documents: { id: string; filename: string }[];\n recipientOptions?: readonly CourtesyCopyRecipientOption[];\n subject?: string;\n environment: \"sandbox\" | \"live\";\n appearance?: MindBillReactAppearance;\n onPreview: (input: BillCourtesyCopyInput) => Promise<BillCourtesyCopyPreview>;\n onSend: (input: BillCourtesyCopyInput & { packetHash: string }, idempotencyKey: string) => Promise<BillCourtesyCopyResult>;\n onSent?: (result: BillCourtesyCopyResult) => void;\n};\n\n/** A courtesy copy is never a payer submission. Preview and recipient confirmation are explicit. */\nexport function BillCourtesyCopyForm({ documents, recipientOptions = [], subject: initialSubject = \"Courtesy copy — bill packet\", environment, appearance, onPreview, onSend, onSent }: BillCourtesyCopyFormProps) {\n const [to, setTo] = useState(\"\");\n const [cc, setCc] = useState(\"\");\n const [subject, setSubject] = useState(initialSubject);\n const [bodyText, setBodyText] = useState(\"This is a courtesy copy of the bill and report for your records. No payment is being requested from your office.\");\n const [documentIds, setDocumentIds] = useState(documents.map((document) => document.id));\n const [includeCms1500, setIncludeCms1500] = useState(true);\n const [preview, setPreview] = useState<BillCourtesyCopyPreview | null>(null);\n const [pdfUrl, setPdfUrl] = useState(\"\");\n const [confirmed, setConfirmed] = useState(false);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(\"\");\n const [result, setResult] = useState<BillCourtesyCopyResult | null>(null);\n const retryKey = useRef(\"\");\n const addresses = (value: string) => value.split(/[,;\\n]/).map((email) => email.trim()).filter(Boolean);\n const input: BillCourtesyCopyInput = { to: addresses(to), cc: addresses(cc), subject, bodyText, documentIds, includeCms1500 };\n const choices = courtesyCopyRecipientOptions(recipientOptions);\n const selected = new Set([...input.to, ...(input.cc ?? [])].map((email) => email.toLowerCase()));\n const recipientPicker = (field: \"To\" | \"CC\", value: string, update: (value: string) => void) => choices.length ?\n <label>Add saved contact to {field}<select value=\"\" onChange={(event) => {\n const email = event.target.value;\n if (email && !selected.has(email.toLowerCase())) update([...addresses(value), email].join(\", \"));\n }}><option value=\"\">Choose a contact…</option>{choices.map((option) => <option key={option.email.toLowerCase()} value={option.email} disabled={selected.has(option.email.toLowerCase())}>{option.name ? `${option.name} — ${option.email}` : option.email}</option>)}</select></label> : null;\n const fingerprint = JSON.stringify(input);\n useEffect(() => { setPreview(null); setConfirmed(false); retryKey.current = \"\"; setResult(null); }, [fingerprint]);\n useEffect(() => {\n if (!preview) { setPdfUrl(\"\"); return; }\n const bytes = Uint8Array.from(atob(preview.pdfBase64), (character) => character.charCodeAt(0));\n const url = URL.createObjectURL(new Blob([bytes], { type: \"application/pdf\" }));\n setPdfUrl(url);\n return () => URL.revokeObjectURL(url);\n }, [preview]);\n const submit = async () => {\n setBusy(true); setError(\"\");\n try {\n if (!preview) { setPreview(await onPreview(input)); setConfirmed(false); }\n else {\n retryKey.current ||= crypto.randomUUID();\n const sent = await onSend({ ...input, packetHash: preview.packetHash }, retryKey.current);\n setResult(sent); onSent?.(sent);\n }\n } catch (cause) { setError(cause instanceof Error ? cause.message : \"The courtesy copy could not be completed.\"); }\n finally { setBusy(false); }\n };\n return <section className=\"mb-courtesy\" style={mindBillAppearanceStyle(appearance)}>\n <style>{COURTESY_STYLES}</style>\n <p>Email one combined PDF for the recipient’s records. This does not submit the bill or change its status.</p>\n {environment === \"sandbox\" ? <p role=\"status\" className=\"mb-courtesy-notice\">Sandbox preview — no email will be delivered.</p> : null}\n <form onSubmit={(event) => { event.preventDefault(); void submit(); }}>\n <fieldset disabled={busy || Boolean(result) || Boolean(error && retryKey.current)}>\n <div className=\"mb-courtesy-grid\"><div>\n <label>To<input required value={to} onChange={(event) => setTo(event.target.value)} placeholder=\"recipient@example.com\" autoComplete=\"off\" /></label>\n {recipientPicker(\"To\", to, setTo)}\n <label>CC <span>(optional)</span><input value={cc} onChange={(event) => setCc(event.target.value)} autoComplete=\"off\" /></label>\n {recipientPicker(\"CC\", cc, setCc)}\n <small>Separate multiple email addresses with commas. Replies return to the workspace inbox.</small>\n </div><div className=\"mb-courtesy-documents\"><h3>Combined PDF packet</h3>\n <label><input type=\"checkbox\" checked disabled />Proof of submission cover sheet — first page</label>\n <label><input type=\"checkbox\" checked={includeCms1500} onChange={(event) => setIncludeCms1500(event.target.checked)} />CMS-1500 bill</label>\n {documents.map((document) => <label key={document.id}><input type=\"checkbox\" checked={documentIds.includes(document.id)} onChange={(event) => setDocumentIds((ids) => event.target.checked ? [...ids, document.id] : ids.filter((id) => id !== document.id))} />{document.filename}</label>)}\n </div></div>\n <label>Subject<input required maxLength={200} value={subject} onChange={(event) => setSubject(event.target.value)} /></label>\n <label>Message<textarea required maxLength={10000} rows={4} value={bodyText} onChange={(event) => setBodyText(event.target.value)} /></label>\n </fieldset>\n {preview && pdfUrl ? <div className=\"mb-courtesy-preview\"><a href={pdfUrl} target=\"_blank\" rel=\"noreferrer\">Review combined PDF ({preview.documentCount} documents)</a><iframe title=\"Courtesy copy PDF preview\" src={pdfUrl} /><label><input type=\"checkbox\" checked={confirmed} disabled={busy || Boolean(result)} onChange={(event) => setConfirmed(event.target.checked)} />I reviewed the packet and verified all recipients may receive these records.</label></div> : null}\n {error ? <p role=\"alert\">{error} {retryKey.current ? \"Delivery may have completed. Retry here uses the same request; do not start a new copy or reopen this form until the delivery is confirmed.\" : \"No email was requested. Check the details and try the preview again.\"}</p> : null}\n {result ? <p role=\"status\">{result.sent ? \"Courtesy copy sent.\" : result.simulated ? \"Sandbox simulation complete. No email was sent.\" : \"Email delivery is disabled. No email was sent.\"}</p> : <button type=\"submit\" disabled={busy || Boolean(preview && !confirmed)}>{busy ? \"Preparing…\" : !preview ? \"Preview packet\" : environment === \"sandbox\" ? \"Simulate courtesy copy\" : \"Send courtesy copy\"}</button>}\n </form>\n </section>;\n}\n\nconst COURTESY_STYLES = `\n.mb-courtesy select{font:inherit;color:inherit;width:100%;min-width:0;max-width:100%;background:var(--mb-surface,#fff);border:1px solid var(--mb-border,#d7dfdd);border-radius:var(--mb-control-radius,8px);padding:10px 12px}.mb-courtesy select:focus-visible{outline:2px solid var(--mb-accent,#215b5c);outline-offset:3px}\n.mb-courtesy{color:var(--mb-text,#243f47);font:inherit;max-width:100%;min-width:0}.mb-courtesy *{box-sizing:border-box}.mb-courtesy p{line-height:1.5;color:var(--mb-muted,#61747b)}.mb-courtesy fieldset{border:0;padding:0;margin:0;min-width:0}.mb-courtesy label{display:grid;gap:8px;margin:16px 0;font-weight:600}.mb-courtesy input:not([type=checkbox]),.mb-courtesy textarea{font:inherit;color:inherit;width:100%;min-width:0;background:var(--mb-surface,#fff);border:1px solid var(--mb-border,#d7dfdd);border-radius:var(--mb-control-radius,8px);padding:10px 12px}.mb-courtesy input[type=checkbox]{accent-color:var(--mb-accent,#215b5c);width:16px;height:16px;flex:0 0 auto}.mb-courtesy input:focus-visible,.mb-courtesy textarea:focus-visible,.mb-courtesy button:focus-visible{outline:2px solid var(--mb-accent,#215b5c);outline-offset:3px}.mb-courtesy-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}.mb-courtesy h3{font-size:16px}.mb-courtesy-documents label,.mb-courtesy-preview label{display:flex;align-items:flex-start;gap:10px;overflow-wrap:anywhere;font-weight:400}.mb-courtesy small,.mb-courtesy label span{font-weight:400;color:var(--mb-muted,#61747b)}.mb-courtesy-notice{background:var(--mb-soft,#f4f6f4);padding:12px;border-radius:8px}.mb-courtesy-preview{padding:16px 0}.mb-courtesy-preview a{color:var(--mb-accent,#215b5c)}.mb-courtesy-preview iframe{display:block;width:100%;height:300px;border:1px solid var(--mb-border,#d7dfdd);margin-top:12px}.mb-courtesy button{font:inherit;background:var(--mb-accent,#215b5c);color:var(--mb-accent-contrast,#fff);border:0;border-radius:var(--mb-control-radius,8px);padding:11px 18px;cursor:pointer}.mb-courtesy button:disabled{opacity:.55;cursor:default}@media(max-width:640px){.mb-courtesy-grid{grid-template-columns:1fr;gap:8px}}\n`;\n","import type { CSSProperties } from \"react\";\nimport type { MindBillAppearance } from \"@mindbill/embed\";\n\nexport type MindBillThemePreset =\n | \"mindbill\"\n | \"qme-companion\"\n | \"calm-clinical\"\n | \"orange-bright\"\n | \"clinical-blue\"\n | \"midnight-cyan\";\n\nexport type MindBillReactAppearance = MindBillAppearance & {\n /** A complete starting point. Individual tokens below always win. */\n preset?: MindBillThemePreset;\n accentTextColor?: string;\n inputBackgroundColor?: string;\n controlRadius?: string;\n shadow?: string;\n dangerColor?: string;\n successColor?: string;\n warningColor?: string;\n /** Dashboard-only overrides. Omitted values follow the selected brand palette. */\n dashboard?: {\n borderColor?: string;\n borderWidth?: string;\n borderRadius?: string;\n sectionGap?: string;\n rowMinHeight?: string;\n linkColor?: string;\n /** Small status markers, not full-card border colors. */\n sectionColors?: Partial<Record<\"violet\" | \"red\" | \"blue\" | \"green\" | \"amber\" | \"neutral\", string>>;\n /** Backgrounds in bucket order; omitted entries use progressively stronger accent tints. */\n agingColors?: readonly string[];\n agingTextColor?: string;\n agingRadius?: string;\n };\n};\n\nexport const mindBillThemePresets = {\n mindbill: {\n accentColor: \"#238dbd\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#f3f8fa\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#203743\",\n mutedColor: \"#657982\",\n borderColor: \"#dbe6ea\",\n borderRadius: \"14px\",\n controlRadius: \"8px\",\n shadow: \"0 8px 24px rgba(28,58,72,.04)\",\n dangerColor: \"#b63d35\",\n successColor: \"#217449\",\n warningColor: \"#8a5c17\",\n },\n \"qme-companion\": {\n accentColor: \"#53b5dc\",\n accentTextColor: \"#173542\",\n backgroundColor: \"#f2f8fb\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#1d3440\",\n mutedColor: \"#617783\",\n borderColor: \"#d7e5eb\",\n borderRadius: \"12px\",\n controlRadius: \"8px\",\n shadow: \"0 1px 2px rgba(29,52,64,.05)\",\n dangerColor: \"#b83f3a\",\n successColor: \"#21835d\",\n warningColor: \"#9a6418\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"calm-clinical\": {\n accentColor: \"#52b4d7\",\n accentTextColor: \"#173542\",\n backgroundColor: \"#f2f8fb\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#20323c\",\n mutedColor: \"#687b84\",\n borderColor: \"#d8e4e9\",\n borderRadius: \"12px\",\n controlRadius: \"8px\",\n shadow: \"0 1px 2px rgba(32,50,60,.05)\",\n dangerColor: \"#b83f3a\",\n successColor: \"#21835d\",\n warningColor: \"#9a6418\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"orange-bright\": {\n accentColor: \"#f4510b\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#fffaf6\",\n surfaceColor: \"#fffefd\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#090f1f\",\n mutedColor: \"#626a73\",\n borderColor: \"#e7e1da\",\n borderRadius: \"16px\",\n controlRadius: \"10px\",\n shadow: \"0 12px 36px rgba(244,81,11,.08), 0 1px 2px rgba(9,15,31,.05)\",\n dangerColor: \"#c4322b\",\n successColor: \"#16835b\",\n warningColor: \"#a65f00\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"clinical-blue\": {\n accentColor: \"#1677ff\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#f5f7fa\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#1f2d3d\",\n mutedColor: \"#66788a\",\n borderColor: \"#d9e2ec\",\n borderRadius: \"8px\",\n controlRadius: \"6px\",\n shadow: \"0 2px 8px rgba(31,45,61,.06)\",\n dangerColor: \"#d4380d\",\n successColor: \"#389e0d\",\n warningColor: \"#d48806\",\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif\",\n },\n \"midnight-cyan\": {\n accentColor: \"#05092e\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#edf6ff\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#05092e\",\n mutedColor: \"#596078\",\n borderColor: \"#d9dae1\",\n borderRadius: \"10px\",\n controlRadius: \"6px\",\n shadow: \"0 1px 2px rgba(5,9,46,.04)\",\n dangerColor: \"#b42318\",\n successColor: \"#167a58\",\n warningColor: \"#9a6418\",\n fontFamily: \"Geist, Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n} as const satisfies Record<MindBillThemePreset, MindBillReactAppearance>;\n\nexport function resolveMindBillAppearance(\n appearance: MindBillReactAppearance | undefined,\n): MindBillReactAppearance {\n const preset = appearance?.preset ?? \"mindbill\";\n return { ...mindBillThemePresets[preset], ...appearance, preset };\n}\n\nexport function mindBillAppearanceStyle(\n appearance: MindBillReactAppearance | undefined,\n style?: CSSProperties,\n): CSSProperties {\n const resolved = resolveMindBillAppearance(appearance);\n const dashboard = resolved.dashboard;\n return {\n \"--mb-accent\": resolved.accentColor,\n \"--mb-accent-contrast\": resolved.accentTextColor,\n \"--mb-text\": resolved.textColor,\n \"--mb-muted\": resolved.mutedColor,\n \"--mb-border\": resolved.borderColor,\n \"--mb-soft\": resolved.backgroundColor,\n \"--mb-surface\": resolved.surfaceColor,\n \"--mb-input\": resolved.inputBackgroundColor,\n \"--mb-font\": resolved.fontFamily,\n \"--mb-radius\": resolved.borderRadius,\n \"--mb-control-radius\": resolved.controlRadius,\n \"--mb-shadow\": resolved.shadow,\n \"--mb-danger\": resolved.dangerColor,\n \"--mb-success\": resolved.successColor,\n \"--mb-warning\": resolved.warningColor,\n \"--mbtk-border\": dashboard?.borderColor ?? \"var(--mb-border)\",\n \"--mbtk-border-width\": dashboard?.borderWidth ?? \"1px\",\n \"--mbtk-radius\": dashboard?.borderRadius ?? \"var(--mb-radius)\",\n \"--mbtk-section-gap\": dashboard?.sectionGap ?? \"16px\",\n \"--mbtk-row-height\": dashboard?.rowMinHeight ?? \"44px\",\n // Brand accents can be intentionally pale. Counts remain legible on a surface.\n \"--mbtk-link\": dashboard?.linkColor ?? \"var(--mb-text)\",\n \"--mbtk-violet\": dashboard?.sectionColors?.violet ?? \"var(--mb-accent)\",\n \"--mbtk-red\": dashboard?.sectionColors?.red ?? \"var(--mb-danger)\",\n \"--mbtk-blue\": dashboard?.sectionColors?.blue ?? \"var(--mb-accent)\",\n \"--mbtk-green\": dashboard?.sectionColors?.green ?? \"var(--mb-success)\",\n \"--mbtk-amber\": dashboard?.sectionColors?.amber ?? \"var(--mb-warning)\",\n \"--mbtk-neutral\": dashboard?.sectionColors?.neutral ?? \"var(--mb-muted)\",\n \"--mbtk-aging-text\": dashboard?.agingTextColor ?? \"var(--mb-text)\",\n \"--mbtk-aging-radius\": dashboard?.agingRadius ?? \"var(--mb-control-radius)\",\n ...Object.fromEntries(Array.from({ length: 5 }, (_, index) => [\n `--mbtk-aging-${index + 1}`,\n dashboard?.agingColors?.[index] ?? `color-mix(in srgb,var(${index === 4 ? \"--mb-danger\" : \"--mb-accent\"}) ${[5, 8, 12, 16, 12][index]}%,var(--mb-surface))`,\n ])),\n ...style,\n } as CSSProperties;\n}\n","import type { OrganizationProfileData } from \"@mindbill/browser\";\nimport type { BillSubmissionInput } from \"./bill-submission-form\";\n\nexport type BillSubmissionProfileOption<K extends \"billingProvider\" | \"renderingProvider\" | \"serviceLocation\"> = {\n id: string;\n label: string;\n value: NonNullable<BillSubmissionInput[K]>;\n};\n\n/** Supply host-owned snapshots or convert a MindBill organization profile. SSNs use server-resolved references. */\nexport type BillSubmissionProfileOptions = {\n billingProviders?: readonly BillSubmissionProfileOption<\"billingProvider\">[];\n renderingProviders?: readonly BillSubmissionProfileOption<\"renderingProvider\">[];\n serviceLocations?: readonly BillSubmissionProfileOption<\"serviceLocation\">[];\n};\n\n/** Explicit adapter: does not fetch, auto-select, persist, or mutate existing bills. */\nexport function organizationProfileOptions(profile: OrganizationProfileData): BillSubmissionProfileOptions {\n return {\n billingProviders: profile.billingProviders.map((provider) => ({\n id: provider.id, label: provider.name,\n value: { name: provider.name,\n ...(provider.taxIdType === \"SSN\" ? { savedProviderId: provider.id, taxIdType: \"SSN\" as const, taxIdLast4: provider.taxIdLast4 ?? \"\" } : { taxId: provider.taxId ?? \"\", taxIdType: \"EIN\" as const }),\n npi: provider.npi, ...(provider.phone !== undefined ? { phone: provider.phone } : {}),\n address: { line1: provider.billingStreet ?? \"\", city: provider.billingCity ?? \"\", state: provider.billingState ?? \"\", postalCode: provider.billingZip ?? \"\" } },\n })),\n renderingProviders: (profile.renderingProviders ?? []).filter((provider) => provider.active !== false).map((provider) => ({\n id: provider.id, label: provider.name,\n value: { name: provider.name, npi: provider.npi,\n ...(provider.specialty !== undefined ? { specialty: provider.specialty } : {}),\n ...(provider.taxonomy !== undefined ? { taxonomy: provider.taxonomy } : {}),\n ...(provider.licenseNumber !== undefined ? { licenseNumber: provider.licenseNumber } : {}),\n ...(provider.licenseState !== undefined ? { licenseState: provider.licenseState } : {}),\n ...(provider.isQME !== undefined ? { isQme: provider.isQME } : {}),\n ...(provider.isAME !== undefined ? { isAme: provider.isAME } : {}) },\n })),\n serviceLocations: profile.locations.filter((location) => location.active !== false).map((location) => ({\n id: location.id, label: location.nickname || location.name,\n value: { name: location.name, placeOfServiceCode: location.posCode ?? \"\",\n address: { line1: location.street, city: location.city, state: location.state, postalCode: location.zip } },\n })),\n };\n}\n","\"use client\";\n\nexport { BillCourtesyCopyForm } from \"./bill-courtesy-copy-form\";\nexport type { BillCourtesyCopyFormProps, CourtesyCopyRecipientOption } from \"./bill-courtesy-copy-form\";\nexport type { BillCourtesyCopyInput, BillCourtesyCopyPreview, BillCourtesyCopyResult, BillTeamNote } from \"@mindbill/browser\";\nexport { organizationProfileOptions } from \"./billing-profile-options\";\nexport type { BillSubmissionProfileOptions, BillSubmissionProfileOption } from \"./billing-profile-options\";\n\nimport \"@mindbill/embed\";\nimport type { CSSProperties, ReactElement } from \"react\";\nimport { createElement, useEffect, useRef } from \"react\";\nimport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport type MindBillWidgetProps = {\n sessionToken: string;\n embedUrl: string;\n appearance?: MindBillAppearance;\n className?: string;\n style?: CSSProperties;\n onMindBill?: (event: CustomEvent<MindBillEventDetail>) => void;\n onMindBillError?: (event: CustomEvent<MindBillErrorDetail>) => void;\n};\n\nfunction widget(tagName: string, props: MindBillWidgetProps): ReactElement {\n const ref = useRef<HTMLElement | null>(null);\n const { onMindBill, onMindBillError } = props;\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n const handleEvent = (event: Event) =>\n onMindBill?.(event as CustomEvent<MindBillEventDetail>);\n const handleError = (event: Event) =>\n onMindBillError?.(event as CustomEvent<MindBillErrorDetail>);\n element.addEventListener(\"mindbill\", handleEvent);\n element.addEventListener(\"mindbill-error\", handleError);\n return () => {\n element.removeEventListener(\"mindbill\", handleEvent);\n element.removeEventListener(\"mindbill-error\", handleError);\n };\n }, [onMindBill, onMindBillError]);\n\n return createElement(tagName, {\n ref,\n \"session-token\": props.sessionToken,\n \"embed-url\": props.embedUrl,\n theme: props.appearance?.theme,\n \"accent-color\": props.appearance?.accentColor,\n \"background-color\": props.appearance?.backgroundColor,\n \"surface-color\": props.appearance?.surfaceColor,\n \"text-color\": props.appearance?.textColor,\n \"muted-color\": props.appearance?.mutedColor,\n \"border-color\": props.appearance?.borderColor,\n \"font-family\": props.appearance?.fontFamily,\n \"border-radius\": props.appearance?.borderRadius,\n locale: props.appearance?.locale,\n class: props.className,\n style: props.style,\n });\n}\n\nexport function MindBillBillTimeline(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-bill-timeline\", props);\n}\nexport function MindBillBillReview(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-bill-review\", props);\n}\n\n\nexport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport {\n mindBillAppearanceStyle,\n mindBillThemePresets,\n resolveMindBillAppearance,\n} from \"./appearance\";\nexport type {\n MindBillReactAppearance,\n MindBillThemePreset,\n} from \"./appearance\";\n\nexport {\n BillReviewForm,\n BillStatusSummary,\n buildBillReviewSaveInput,\n ensureTrailingProcedureLine,\n} from \"./native-bill-review\";\n\nexport { BillReadOnlyForm } from \"./bill-read-only-form\";\nexport type { BillReadOnlyFormProps } from \"./bill-read-only-form\";\n\nexport {\n applyBillSubmissionEvaluationDiagnoses,\n applyBillSubmissionEvaluationModifiers,\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BILL_SUBMISSION_REPORT_TYPES,\n BILL_SUBMISSION_REQUIRED_FIELDS,\n BillSubmissionActions,\n BillSubmissionAttachmentsSection,\n BillSubmissionClaimSection,\n BillSubmissionForm,\n BillSubmissionHeader,\n BillSubmissionPatientSection,\n BillSubmissionProvidersSection,\n BillSubmissionServiceLinesSection,\n chooseClaimsAdministrator,\n ensureTrailingBillSubmissionLine,\n exactClaimsAdministratorMatch,\n formatBillSubmissionDate,\n claimsAdministratorRecommendations,\n MED_LEGAL_REPORT_TYPE_CODE,\n normalizeClaimsAdministratorName,\n parseBillSubmissionDate,\n prepareBillSubmissionDocuments,\n PSYCH_QME_DEFAULT_DIAGNOSIS,\n submittedClaimsAdministrator,\n validateBillSubmission,\n} from \"./bill-submission-form\";\nexport type {\n BillSubmissionAddress,\n BillSubmissionAttachmentReportTypeMode,\n BillSubmissionDiagnosisOption,\n BillSubmissionDocumentType,\n BillSubmissionEvaluationType,\n BillSubmissionFormProps,\n BillSubmissionFormValue,\n BillSubmissionInput,\n BillSubmissionModifierOption,\n BillSubmissionPostalPlace,\n BillSubmissionProcedureOption,\n BillSubmissionReportTypeOption,\n BillSubmissionSectionId,\n BillSubmissionSourceAttachment,\n BillSubmissionTaxonomyOption,\n BillSubmissionUpload,\n BillSubmissionValidation,\n} from \"./bill-submission-form\";\nexport { extractSendRouteEmail, formatSendRouteFax, SendRouteDialog } from \"./send-route-dialog\";\nexport type { SendRouteDialogProps, SendRouteSubmission } from \"./send-route-dialog\";\n\nexport {\n BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS,\n calculateBillSubmissionAllowedAmount,\n DEFAULT_BILL_SUBMISSION_MODIFIERS,\n DEFAULT_BILL_SUBMISSION_PROCEDURES,\n DEFAULT_BILL_SUBMISSION_TAXONOMIES,\n} from \"./billing-catalog\";\nexport type {\n BillReviewAttachment,\n BillReviewBillingProvider,\n BillReviewClinician,\n BillReviewData,\n BillReviewDocumentType,\n BillReviewDraft,\n BillReviewFormProps,\n BillReviewFeatures,\n BillReviewLineItem,\n BillReviewLocation,\n BillReviewPayer,\n BillReviewSaveInput,\n BillStatusSummaryProps,\n BillStatusAction,\n BillSubmissionRoute,\n} from \"./native-bill-review\";\n\nexport {\n BillAgingSummary,\n BillingDashboard,\n BillingReport,\n BillList,\n billAgingBucket,\n billAgingDays,\n buildBillingReportCsv,\n buildBillingReportRows,\n summarizeBillingDashboard,\n} from \"./billing-dashboard\";\nexport type {\n BillAgingBucket,\n BillAgingBucketId,\n BillAgingSummaryProps,\n BillingComponentProps,\n BillingDashboardBill,\n BillingDashboardProps,\n BillingDashboardSummary,\n BillingReportDimension,\n BillingReportProps,\n BillingReportRow,\n BillListProps,\n} from \"./billing-dashboard\";\n\nexport {\n BILL_STATUS_AGING_BUCKETS,\n BillStatusAgingMatrix,\n buildBillStatusAgingCsv,\n buildBillStatusAgingMatrix,\n} from \"./status-aging-matrix\";\nexport type {\n BillStatusAgingCell,\n BillStatusAgingMatrixData,\n BillStatusAgingMatrixProps,\n BillStatusAgingRow,\n} from \"./status-aging-matrix\";\n\nexport {\n BILL_TASKS_AGING_BUCKETS,\n BillTasksDashboard,\n billTasksAgingBucketIndex,\n buildBillTasksDashboard,\n} from \"./bill-tasks-dashboard\";\nexport type {\n BillTasksAgingBucket,\n BillTasksDashboardCell,\n BillTasksDashboardData,\n BillTasksDashboardItem,\n BillTasksDashboardProps,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardSectionInput,\n BillTasksDashboardTone,\n} from \"./bill-tasks-dashboard\";\n\nexport {\n BillSubmissionsRibbon,\n billSubmissionsRibbonDeliveryLabel,\n billSubmissionsRibbonFromHistory,\n} from \"./bill-submissions-ribbon\";\nexport type {\n BillSubmissionRibbonItem,\n BillSubmissionsRibbonProps,\n} from \"./bill-submissions-ribbon\";\n\nexport {\n REPORT_BILL_STATUS_OPTIONS,\n ReportBillStatusDialog,\n} from \"./report-bill-status-dialog\";\nexport type {\n ReportBillStatusDialogProps,\n ReportBillStatusId,\n ReportBillStatusInput,\n} from \"./report-bill-status-dialog\";\n\nexport { BillingSettings, OrganizationOnboarding } from \"./organization-onboarding\";\nexport { W9Upload } from \"./w9-upload\";\nexport type { W9UploadProps, W9ExtractionStatus } from \"./w9-upload\";\nexport { ConnectedPaymentReview } from \"./payment-review\";\nexport type { ConnectedPaymentReviewProps, PaymentReviewRange } from \"./payment-review\";\nexport type { PaymentReviewItem, PaymentReviewQuery, PaymentReviewResult } from \"./billing-operations-client\";\nexport type { OrganizationOnboardingProps } from \"./organization-onboarding\";\n\nexport { ConnectedNotificationSettings, NotificationSettings } from \"./notification-settings\";\nexport { ConnectedNotificationRecipientsSettings, NotificationRecipientsSettings } from \"./notification-recipients\";\nexport type { NotificationRecipient, NotificationRecipientInvitation, NotificationRecipientsAdapter, NotificationRecipientsSettingsProps, NotificationRecipientsSnapshot } from \"./notification-recipients\";\nexport type { NotificationReportDigest } from \"./notification-settings\";\nexport type {\n NotificationAgingDay,\n NotificationPreferences,\n NotificationSettingsAdapter,\n NotificationSettingsProps,\n NotificationSettingsSnapshot,\n NotificationSettingsUpdate,\n} from \"./notification-settings\";\n\nexport {\n ConnectedBillStatus,\n createBillStatusClient,\n useBillStatus,\n} from \"./connected-bill-status\";\nexport type {\n BillClaimsAdministratorSource,\n BillReviewPayerOption,\n BillReviewPayerSuggestion,\n BrowserBillSubmissionResult,\n} from \"@mindbill/browser\";\n\nexport {\n BillActivityTimeline,\n BillExplanationOfReview,\n BillHistoryTable,\n BillLifecycleActions,\n BillLifecycleProgress,\n BillRejectionNotice,\n BillPaymentLedger,\n BillPayerContactCard,\n BillRemittanceCard,\n BillSnapshotSummary,\n billActivityEventLabel,\n billLifecycleDisplayLabel,\n billLifecycleStage,\n isBillLifecycleDraft,\n visibleBillLifecycleActions,\n} from \"./bill-lifecycle-surfaces\";\nexport type {\n BillActivityEvent,\n BillActivityTimelineProps,\n BillHistoryTableProps,\n BillExplanationOfReviewProps,\n BillLifecycleActionsProps,\n BillLifecycleProgressProps,\n BillLifecycleProgressStepsOptions,\n BillRejectionNoticeProps,\n BillLifecycleStage,\n BillPaymentLedgerProps,\n BillPayerContactCardProps,\n BillRemittanceCardProps,\n BillSnapshotSummaryProps,\n} from \"./bill-lifecycle-surfaces\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n reportBillStatusContacts,\n SECOND_REVIEW_REASON_TEMPLATE,\n SECOND_REVIEW_WINDOW_DAYS,\n secondReviewDeadline,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport { ClaimsAdministratorDirectoryDialog } from \"./claims-administrator-directory-dialog\";\nexport type { ClaimsAdministratorDirectoryDialogProps } from \"./claims-administrator-directory-dialog\";\nexport { SECOND_REVIEW_REASON_TEMPLATES, SecondReviewForm } from \"./second-review-form\";\nexport type { SecondReviewFormProps } from \"./second-review-form\";\nexport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPayer,\n BillClaimsAdministratorPattern,\n BillEorDocument,\n BillActivityRecord,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillSubmissionDetail,\n HistoricalBillReviewData,\n BillLifecycleDelivery,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n BillPaymentRecord,\n BillRemittanceSummary,\n BillRejection,\n CloseBillInput,\n ConnectedBillLifecycleProps,\n PostBillPaymentInput,\n ReopenBillInput,\n ReportBillStatusContacts,\n SecondReviewDeadline,\n SendDuplicateBillInput,\n SubmitSecondReviewInput,\n UseBillLifecycleOptions,\n UseBillLifecycleResult,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillStatusClient,\n BillStatusClientOptions,\n BillStatusData,\n BillStatusSession,\n BillStatusSessionProvider,\n BillStatusSessionRequest,\n ConnectedBillStatusProps,\n UseBillStatusOptions,\n UseBillStatusResult,\n} from \"./connected-bill-status\";\n\nexport {\n ConnectedBillingWorkspace,\n ConnectedBillSearch,\n ConnectedBillTasksDashboard,\n ConnectedProductivityReport,\n ConnectedServiceLineItemsReport,\n} from \"./connected-billing-workspace\";\nexport type {\n ConnectedBillingWorkspaceProps,\n ConnectedBillSearchProps,\n ConnectedBillTasksDashboardProps,\n} from \"./connected-billing-workspace\";\nexport { createBillingOperationsClient } from \"./billing-operations-client\";\nexport type {\n BillingOperationsClient,\n BillingOperationsClientOptions,\n BillRegistryAge,\n BillRegistryItem,\n BillRegistryQuery,\n BillRegistryResult,\n BillRegistrySort,\n BillRegistryStatus,\n BillTasksResult,\n ProductivityReport,\n ServiceLineItemsReport,\n} from \"./billing-operations-client\";\n","\"use client\";\n\nimport { sanitizeBillReviewSaveInput } from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\nimport type { CSSProperties, FormEvent, KeyboardEvent, ReactElement } from \"react\";\nimport { useEffect, useId, useMemo, useRef, useState } from \"react\";\n\nexport type BillReviewDocumentType =\n | \"final_report\"\n | \"letter_of_attestation\"\n | \"proof_of_service\"\n | \"form_122\"\n | \"return_to_work_voucher\"\n | \"w9\"\n | \"medical_records\"\n | \"appeal\"\n | \"other\";\n\nexport type BillReviewBillingProvider = {\n name: string;\n taxId: string;\n taxIdType?: \"EIN\" | \"SSN\";\n taxIdConfigured?: boolean;\n taxIdLast4?: string;\n npi: string;\n billType: \"Professional\" | \"Institutional\";\n phone?: string;\n billingStreet?: string;\n billingCity?: string;\n billingState?: string;\n billingZip?: string;\n};\n\nexport type BillReviewClinician = {\n name: string;\n specialty: string;\n npi: string;\n taxonomy?: string;\n licenseNumber?: string;\n licenseState?: string;\n signaturePng?: string;\n signatureKey?: string;\n isQME?: boolean;\n isAME?: boolean;\n email?: string;\n active?: boolean;\n};\n\nexport type BillReviewLocation = {\n billingProviderId?: string;\n name: string;\n nickname?: string;\n street: string;\n city: string;\n state: string;\n zip: string;\n county?: string;\n posCode?: string;\n isPrimary?: boolean;\n active?: boolean;\n};\n\nexport type BillReviewLineItem = {\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge: number;\n feeSchedule?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n};\n\nconst EMPTY_PROCEDURE_LINE: BillReviewLineItem = {\n code: \"\",\n modifiers: [],\n units: 1,\n charge: 0,\n};\n\nfunction isEmptyProcedureLine(line: BillReviewLineItem): boolean {\n return !line.code.trim() && line.modifiers.length === 0 && line.units === 1 && !line.serviceDate && !line.serviceDateEnd && !line.charge && !(line.diagnosisPointers?.length);\n}\n\n/** Keeps completed/partial lines plus one keyboard-ready empty row. */\nexport function ensureTrailingProcedureLine(\n lines: readonly BillReviewLineItem[],\n): BillReviewLineItem[] {\n const entered = lines\n .filter((line) => !isEmptyProcedureLine(line))\n .map((line) => ({ ...line, modifiers: [...line.modifiers] }));\n\n return entered.length < 50\n ? [...entered, { ...EMPTY_PROCEDURE_LINE, modifiers: [] }]\n : entered;\n}\n\nexport type BillReviewAttachment = {\n id: string;\n filename: string;\n description?: string | null;\n documentType: string;\n reportType?: string | null;\n source?: string;\n addedAt?: string;\n contentUrl?: string;\n};\n\nexport type BillReviewPayer = {\n id: string;\n name: string;\n hasElectronic?: boolean;\n states?: string[];\n confidence?: \"high\" | \"medium\" | \"directory\";\n recommended?: boolean;\n signals?: Array<{\n kind: \"name\" | \"claim_number\";\n state: \"match\" | \"warning\";\n label: string;\n }>;\n /** True when a bill for this claims administrator must name one of `payers`. */\n payerSelectionRequired?: boolean;\n /** Selectable payers (subpayors) under this claims administrator. */\n payers?: Array<{ id: string; label: string; default?: boolean }>;\n};\n\nexport type BillReviewFeatures = {\n authorizationNumber?: boolean;\n serviceDateRange?: boolean;\n wcabNumber?: boolean;\n codingPresets?: boolean;\n};\n\nexport type BillReviewClaimPatternStatus = {\n state: \"match\" | \"warning\" | \"unknown\";\n label: string;\n detail?: string;\n suggestion?: string;\n};\n\nexport type BillReviewData = {\n bill: {\n id: string;\n billingMode: \"med_legal\" | \"professional\";\n billNumber: string | number;\n status: string;\n transmissionState?: string;\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingSnapshot?: {\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n } | null;\n lineItems: BillReviewLineItem[];\n attachments: BillReviewAttachment[];\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n };\n patient: {\n name: string;\n firstName?: string;\n middleName?: string;\n lastName?: string;\n dob?: string;\n };\n injury: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n injuryEndDate?: string;\n cumulativeTrauma?: boolean;\n adjNumber?: string;\n claimsAdminId?: string;\n claimsAdminName?: string;\n claimPatternStatus?: BillReviewClaimPatternStatus;\n };\n};\n\nexport type BillReviewSaveInput = {\n claimsAdminId: string;\n /** The chosen payer (subpayor) when the claims administrator requires payer selection. */\n payerId?: string;\n patientOverrides?: {\n firstName: string;\n middleName?: string;\n lastName: string;\n dob?: string;\n };\n injuryOverrides?: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n injuryEndDate?: string;\n cumulativeTrauma?: boolean;\n adjNumber?: string;\n };\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n }>;\n};\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\n\nexport type BillDeliveryOption = {\n route: BillSubmissionRoute;\n label: string;\n detail: string;\n fallback: boolean;\n confidence: string;\n payerName: string;\n target?: string;\n chKey?: string;\n payerId?: string;\n printAndMail?: boolean;\n costUsd?: number;\n};\n\nexport type BillDeliveryOptions = {\n payerName: string;\n recommended: BillDeliveryOption;\n options: BillDeliveryOption[];\n contacts: {\n faxNumber?: string | null;\n claimsEmail?: string | null;\n portalUrl?: string | null;\n mailingAddress?: string | null;\n };\n};\n\nexport type BillSubmissionInput = {\n route: BillSubmissionRoute;\n destination?: {\n faxNumber?: string;\n email?: string;\n mailingAddress?: string;\n };\n attention?: string;\n subject?: string;\n note?: string;\n};\n\nexport type BillReviewFormProps = {\n data: BillReviewData;\n mode?: \"review\" | \"submission\";\n initialSubmission?: BillSubmissionInput;\n onSave?: (input: BillReviewSaveInput) => Promise<BillReviewData | void>;\n onSubmit: (\n input: BillReviewSaveInput,\n submission: BillSubmissionInput,\n ) => Promise<void>;\n onGetDeliveryOptions?: () => Promise<BillDeliveryOptions>;\n onAddAttachment: (\n file: File,\n documentType: BillReviewDocumentType,\n description?: string,\n ) => Promise<void>;\n onRemoveAttachment: (attachmentId: string) => Promise<void>;\n onOpenAttachment?: (attachment: BillReviewAttachment) => void;\n onSearchClaimsAdministrators?: (\n query: string,\n claimNumber?: string,\n ) => Promise<BillReviewPayer[]>;\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillReactAppearance;\n features?: BillReviewFeatures;\n disabled?: boolean;\n};\n\nexport type BillReviewDraft = {\n claimsAdminId: string;\n claimsAdminName: string;\n patientFirstName: string;\n patientMiddleName: string;\n patientLastName: string;\n patientDob: string;\n claimNumber: string;\n employer: string;\n doi: string;\n injuryEndDate: string;\n cumulativeTrauma: boolean;\n adjNumber: string;\n dos: string;\n dosEnd: string;\n authorizationNumber: string;\n billingProvider: BillReviewBillingProvider;\n clinician: BillReviewClinician;\n location: BillReviewLocation;\n lineItems: BillReviewLineItem[];\n};\n\nconst EMPTY_BILLING_PROVIDER: BillReviewBillingProvider = {\n name: \"\",\n taxId: \"\",\n npi: \"\",\n billType: \"Professional\",\n};\nconst EMPTY_CLINICIAN: BillReviewClinician = {\n name: \"\",\n specialty: \"\",\n npi: \"\",\n};\nconst EMPTY_LOCATION: BillReviewLocation = {\n name: \"\",\n street: \"\",\n city: \"\",\n state: \"\",\n zip: \"\",\n posCode: \"11\",\n};\n\nconst DOCUMENT_LABELS: Record<BillReviewDocumentType, string> = {\n final_report: \"Final medical-legal report\",\n letter_of_attestation: \"Letter of attestation\",\n proof_of_service: \"Proof of service\",\n form_122: \"DWC Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\",\n w9: \"W-9\",\n medical_records: \"Medical records\",\n appeal: \"Appeal or review support\",\n other: \"Other supporting document\",\n};\n\nconst US_STATES = [\"AL\",\"AK\",\"AZ\",\"AR\",\"CA\",\"CO\",\"CT\",\"DE\",\"FL\",\"GA\",\"HI\",\"ID\",\"IL\",\"IN\",\"IA\",\"KS\",\"KY\",\"LA\",\"ME\",\"MD\",\"MA\",\"MI\",\"MN\",\"MS\",\"MO\",\"MT\",\"NE\",\"NV\",\"NH\",\"NJ\",\"NM\",\"NY\",\"NC\",\"ND\",\"OH\",\"OK\",\"OR\",\"PA\",\"RI\",\"SC\",\"SD\",\"TN\",\"TX\",\"UT\",\"VT\",\"VA\",\"WA\",\"WV\",\"WI\",\"WY\",\"DC\"];\nconst PROCEDURES = [\n [\"ML200\", \"Missed med-legal appointment\"],\n [\"ML201\", \"Comprehensive med-legal evaluation\"],\n [\"ML202\", \"Follow-up med-legal evaluation\"],\n [\"ML203\", \"Supplemental med-legal evaluation\"],\n [\"ML204\", \"Medical-legal testimony\"],\n [\"ML205\", \"Sub rosa recording review\"],\n [\"MLPRR\", \"Medical record review\"],\n] as const;\nconst MODIFIERS = [\n [\"92\", \"Primary treating physician\"], [\"93\", \"Interpreter required\"],\n [\"94\", \"Agreed medical evaluator (AME)\"], [\"95\", \"Qualified medical evaluator (QME)\"],\n [\"96\", \"Psychiatric or psychological evaluation\"], [\"97\", \"Toxicology evaluation\"],\n [\"98\", \"Oncology evaluation\"],\n] as const;\ntype CodingPreset = \"qme\" | \"ame\" | \"psych_qme\";\nconst MANAGED_EVALUATOR_MODIFIERS = new Set([\"94\", \"95\", \"96\"]);\nconst MODIFIER_CODES: Record<string, readonly string[]> = {\n \"92\": [\"ML201\", \"ML202\", \"ML203\"],\n \"93\": [\"ML201\", \"ML202\"],\n \"94\": [\"ML201\", \"ML202\", \"ML203\"],\n \"95\": [\"ML200\", \"ML201\", \"ML202\", \"ML203\", \"MLPRR\"],\n \"96\": [\"ML201\", \"ML202\", \"ML203\"],\n \"97\": [\"ML201\", \"ML202\", \"ML203\"],\n \"98\": [\"ML201\", \"ML202\", \"ML203\"],\n};\n\nfunction toDraft(data: BillReviewData): BillReviewDraft {\n const snapshot = data.bill.billingSnapshot;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n return {\n claimsAdminId: data.injury.claimsAdminId || \"\",\n claimsAdminName: data.injury.claimsAdminName || \"\",\n patientFirstName: data.patient.firstName || nameParts[0] || \"\",\n patientMiddleName: data.patient.middleName || (nameParts.length > 2 ? nameParts.slice(1, -1).join(\" \") : \"\"),\n patientLastName: data.patient.lastName || (nameParts.length > 1 ? (nameParts.at(-1) || \"\") : \"\"),\n patientDob: data.patient.dob || \"\",\n claimNumber: data.injury.claimNumber || \"\",\n employer: data.injury.employer || \"\",\n doi: data.injury.doi || \"\",\n injuryEndDate: data.injury.injuryEndDate || \"\",\n cumulativeTrauma: Boolean(data.injury.cumulativeTrauma),\n adjNumber: data.injury.adjNumber || \"\",\n dos: data.bill.dos || \"\",\n dosEnd: data.bill.dosEnd || \"\",\n authorizationNumber: data.bill.authorizationNumber || \"\",\n billingProvider: {\n ...EMPTY_BILLING_PROVIDER,\n ...(snapshot?.billingProvider ?? {}),\n },\n clinician: { ...EMPTY_CLINICIAN, ...(snapshot?.renderingProvider ?? {}) },\n location: { ...EMPTY_LOCATION, ...(snapshot?.placeOfService ?? {}) },\n lineItems: ensureTrailingProcedureLine(data.bill.lineItems),\n };\n}\n\nexport function buildBillReviewSaveInput(\n draft: BillReviewDraft,\n): BillReviewSaveInput {\n return sanitizeBillReviewSaveInput({\n claimsAdminId: draft.claimsAdminId,\n patientOverrides: {\n firstName: draft.patientFirstName.trim(),\n ...(draft.patientMiddleName.trim() ? { middleName: draft.patientMiddleName.trim() } : {}),\n lastName: draft.patientLastName.trim(),\n ...(draft.patientDob ? { dob: draft.patientDob } : {}),\n },\n injuryOverrides: {\n ...(draft.claimNumber.trim() ? { claimNumber: draft.claimNumber.trim() } : {}),\n ...(draft.employer.trim() ? { employer: draft.employer.trim() } : {}),\n ...(draft.doi ? { doi: draft.doi } : {}),\n ...(draft.injuryEndDate ? { injuryEndDate: draft.injuryEndDate } : {}),\n cumulativeTrauma: draft.cumulativeTrauma,\n ...(draft.adjNumber.trim() ? { adjNumber: draft.adjNumber.trim().toUpperCase().replace(/\\s+/g, \"\") } : {}),\n },\n dos: draft.dos,\n dosEnd: draft.dosEnd || null,\n authorizationNumber: draft.authorizationNumber.trim() || null,\n billingProvider: { ...draft.billingProvider },\n renderingProvider: { ...draft.clinician },\n placeOfService: { ...draft.location },\n lineItems: draft.lineItems.filter((line) => line.code.trim()).map(({ id, code, modifiers, units, charge, serviceDate, serviceDateEnd, diagnosisPointers }) => ({\n ...(id ? { id } : {}),\n code: code.trim().toUpperCase(),\n modifiers,\n units,\n ...(charge ? { charge } : {}),\n ...(serviceDate ? { serviceDate } : {}),\n ...(serviceDateEnd ? { serviceDateEnd } : {}),\n ...(diagnosisPointers?.length ? { diagnosisPointers } : {}),\n })),\n });\n}\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(value);\n}\n\nfunction Field({\n label,\n value,\n onChange,\n type = \"text\",\n optional,\n required,\n disabled,\n hint,\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n type?: string;\n optional?: boolean;\n required?: boolean;\n disabled?: boolean;\n hint?: string;\n}): ReactElement {\n return (\n <label className=\"mb-native-field\">\n <span>\n {label}{required ? <span className=\"mb-native-required\" aria-hidden=\"true\"> *</span> : null}{optional ? <> <small>Optional</small></> : null}\n </span>\n <input\n type={type}\n value={value}\n required={required}\n disabled={disabled}\n autoComplete=\"off\"\n onChange={(event) => onChange(event.target.value)}\n />\n {hint ? <small className=\"mb-native-hint\">{hint}</small> : null}\n </label>\n );\n}\n\ntype ComboOption = {\n value: string;\n label: string;\n detail?: string;\n badge?: string;\n};\n\nfunction Combobox({ label, value, options, onChange, placeholder, required, disabled, name }: {\n label: string;\n value: string;\n options: ComboOption[];\n onChange: (value: string, option?: ComboOption) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n}): ReactElement {\n const listId = useId();\n const root = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [active, setActive] = useState(0);\n const filtered = useMemo(() => {\n const query = value.trim().toLowerCase();\n return options.filter((option) => !query || option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query)).slice(0, 40);\n }, [options, value]);\n useEffect(() => {\n const close = (event: MouseEvent) => {\n if (!root.current?.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", close);\n return () => document.removeEventListener(\"mousedown\", close);\n }, []);\n const select = (option: ComboOption) => {\n onChange(option.value, option);\n setOpen(false);\n setActive(0);\n };\n const keyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") { event.preventDefault(); setOpen(true); setActive((value) => Math.min(value + 1, filtered.length - 1)); }\n if (event.key === \"ArrowUp\") { event.preventDefault(); setActive((value) => Math.max(value - 1, 0)); }\n if (event.key === \"Enter\" && open && filtered[active]) { event.preventDefault(); select(filtered[active]); }\n if (event.key === \"Escape\") setOpen(false);\n };\n return <div className=\"mb-native-combo\" ref={root}>\n <label className=\"mb-native-field\">\n <span>{label}{required ? <span className=\"mb-native-required\" aria-hidden=\"true\"> *</span> : null}</span>\n <input\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-controls={listId}\n aria-expanded={open && filtered.length > 0}\n aria-activedescendant={open && filtered[active] ? `${listId}-${active}` : undefined}\n name={name || \"mindbill-search-value\"}\n autoComplete=\"new-password\"\n data-1p-ignore=\"true\"\n data-lpignore=\"true\"\n value={value}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n onFocus={() => setOpen(true)}\n onKeyDown={keyDown}\n onChange={(event) => { onChange(event.target.value); setOpen(true); setActive(0); }}\n />\n </label>\n {open && filtered.length ? <ul id={listId} role=\"listbox\" className=\"mb-native-combo-list\">\n {filtered.map((option, index) => <li id={`${listId}-${index}`} role=\"option\" aria-selected={index === active} key={`${option.value}-${index}`}>\n <button type=\"button\" className={index === active ? \"active\" : \"\"} onMouseDown={(event) => event.preventDefault()} onClick={() => select(option)}>\n <span className=\"mb-native-combo-title\"><strong>{option.label}</strong>{option.badge ? <em>{option.badge}</em> : null}</span>{option.detail ? <span>{option.detail}</span> : null}\n </button>\n </li>)}\n </ul> : null}\n </div>;\n}\n\nfunction StateCombobox({ label, value, onChange, required, disabled }: { label: string; value: string; onChange: (value: string) => void; required?: boolean; disabled?: boolean }): ReactElement {\n return <Combobox\n label={label}\n value={value}\n onChange={(next) => onChange(next.toUpperCase().slice(0, 2))}\n options={US_STATES.map((state) => ({ value: state, label: state }))}\n {...(required === undefined ? {} : { required })}\n {...(disabled === undefined ? {} : { disabled })}\n name=\"mindbill-state-value\"\n />;\n}\n\nfunction inferPreset(lines: BillReviewLineItem[]): CodingPreset {\n const modifiers = new Set(lines.flatMap((line) => line.modifiers));\n return modifiers.has(\"94\") ? \"ame\" : modifiers.has(\"96\") ? \"psych_qme\" : \"qme\";\n}\n\nfunction presetModifiersForCode(preset: CodingPreset, code: string): string[] {\n if (code === \"MLPRR\") return [\"95\"];\n if (preset === \"qme\" && [\"ML200\", \"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"95\"];\n if (preset === \"ame\" && [\"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"94\"];\n if (preset === \"psych_qme\") {\n if (code === \"ML200\") return [\"95\"];\n if ([\"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"96\"];\n }\n return [];\n}\n\nfunction modifierAppliesToCode(modifier: string, code: string): boolean {\n return !code || (MODIFIER_CODES[modifier]?.includes(code) ?? true);\n}\n\nfunction applyPreset(lines: BillReviewLineItem[], preset: CodingPreset): BillReviewLineItem[] {\n return lines.map((line) => {\n const preserved = line.modifiers.filter(\n (value) => !MANAGED_EVALUATOR_MODIFIERS.has(value) && modifierAppliesToCode(value, line.code),\n );\n return {\n ...line,\n modifiers: [...new Set([...presetModifiersForCode(preset, line.code), ...preserved])],\n };\n });\n}\n\nexport function BillReviewForm({\n data,\n mode = \"review\",\n initialSubmission = { route: \"ebill\" },\n onSave,\n onSubmit,\n onGetDeliveryOptions,\n onAddAttachment,\n onRemoveAttachment,\n onOpenAttachment,\n onSearchClaimsAdministrators,\n className,\n style,\n appearance,\n features,\n disabled = false,\n}: BillReviewFormProps): ReactElement {\n const [draft, setDraft] = useState(() => toDraft(data));\n const [payerQuery, setPayerQuery] = useState(\n () => data.injury.claimsAdminName || \"\",\n );\n const [payerResults, setPayerResults] = useState<BillReviewPayer[]>([]);\n const [payerBusy, setPayerBusy] = useState(false);\n const [deliveryOptions, setDeliveryOptions] = useState<BillDeliveryOptions | null>(null);\n const [submission, setSubmission] = useState<BillSubmissionInput>(initialSubmission);\n const [showSubmit, setShowSubmit] = useState(false);\n const [deliveryBusy, setDeliveryBusy] = useState(false);\n const [file, setFile] = useState<File | null>(null);\n const [documentType, setDocumentType] =\n useState<BillReviewDocumentType>(\"other\");\n const [busy, setBusy] = useState<\"save\" | \"submit\" | \"attachment\" | \"\">(\"\");\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n const editable = (mode === \"submission\" || data.bill.status === \"incomplete\") && !disabled;\n\n useEffect(() => {\n setDraft(toDraft(data));\n setPayerQuery(data.injury.claimsAdminName || \"\");\n }, [data]);\n\n useEffect(() => {\n const query = payerQuery.trim();\n const claimNumber = draft.claimNumber.trim();\n if (\n !onSearchClaimsAdministrators ||\n (query.length < 2 && claimNumber.length < 4)\n ) {\n setPayerResults([]);\n setPayerBusy(false);\n return;\n }\n let current = true;\n const timer = window.setTimeout(() => {\n setPayerBusy(true);\n void onSearchClaimsAdministrators(query, claimNumber)\n .then((results) => {\n if (!current) return;\n setPayerResults(results);\n const recommendation = results.find(\n (payer) => payer.recommended && payer.confidence === \"high\",\n );\n if (!draft.claimsAdminId && recommendation) {\n setDraft((currentDraft) => ({\n ...currentDraft,\n claimsAdminId: recommendation.id,\n claimsAdminName: recommendation.name,\n }));\n setPayerQuery(recommendation.name);\n setNotice(\n \"Claims administrator matched from the case data. Review and save to keep it on this bill.\",\n );\n }\n })\n .catch((cause) => {\n if (current) {\n setPayerResults([]);\n setError(\n cause instanceof Error\n ? cause.message\n : \"Claims administrator search is unavailable.\",\n );\n }\n })\n .finally(() => {\n if (current) setPayerBusy(false);\n });\n }, 200);\n return () => {\n current = false;\n window.clearTimeout(timer);\n };\n }, [\n draft.claimNumber,\n draft.claimsAdminId,\n onSearchClaimsAdministrators,\n payerQuery,\n ]);\n\n const selectedPayer = payerResults.find(\n (payer) => payer.id === draft.claimsAdminId,\n );\n\n const adjFormatValid =\n !draft.adjNumber ||\n /^ADJ\\d{7,}$/i.test(draft.adjNumber.replace(/[\\s-]/g, \"\"));\n const blockers = useMemo(() => {\n const result: string[] = [];\n if (!draft.patientFirstName.trim() || !draft.patientLastName.trim()) result.push(\"Patient name\");\n if (!draft.claimsAdminId) result.push(\"Claims administrator\");\n if (!draft.claimNumber.trim()) result.push(\"Claim number\");\n if (!draft.doi) result.push(\"Date of injury\");\n if (!adjFormatValid) result.push(\"Valid WCAB / ADJ number\");\n if (data.bill.billingMode === \"med_legal\" && !draft.dos) result.push(\"Date of service\");\n if (!draft.billingProvider.name.trim()) result.push(\"Practice name\");\n if (!draft.billingProvider.taxId.trim() && !(draft.billingProvider.taxIdType === \"SSN\" && draft.billingProvider.taxIdConfigured)) result.push(\"Tax ID\");\n if (!draft.billingProvider.npi.trim()) result.push(\"Billing NPI\");\n if (!draft.clinician.name.trim() || !draft.clinician.npi.trim()) result.push(\"Clinician and NPI\");\n if (![draft.location.name, draft.location.street, draft.location.city, draft.location.state, draft.location.zip].every((value) => value.trim())) result.push(\"Service location\");\n const completedLines = draft.lineItems.filter((line) => line.code.trim());\n if (!completedLines.length || completedLines.some((line) => line.units <= 0)) result.push(\"Valid procedure line\");\n if (data.bill.billingMode === \"professional\" && completedLines.some((line) => !line.serviceDate || line.charge <= 0)) {\n result.push(\"Service date and charge on every procedure line\");\n }\n return result;\n }, [adjFormatValid, data.bill.billingMode, draft]);\n const canSubmit = blockers.length === 0;\n\n const updateBillingProvider = <K extends keyof BillReviewBillingProvider>(\n key: K,\n value: BillReviewBillingProvider[K],\n ) =>\n setDraft((current) => ({\n ...current,\n billingProvider: { ...current.billingProvider, [key]: value },\n }));\n const updateClinician = <K extends keyof BillReviewClinician>(\n key: K,\n value: BillReviewClinician[K],\n ) =>\n setDraft((current) => ({\n ...current,\n clinician: { ...current.clinician, [key]: value },\n }));\n const updateLocation = <K extends keyof BillReviewLocation>(\n key: K,\n value: BillReviewLocation[K],\n ) =>\n setDraft((current) => ({\n ...current,\n location: { ...current.location, [key]: value },\n }));\n\n async function run(action: \"save\" | \"submit\", task: () => Promise<void>) {\n setBusy(action);\n setError(\"\");\n setNotice(\"\");\n try {\n await task();\n setNotice(action === \"save\" ? \"Changes saved.\" : \"Bill submitted.\");\n } catch (cause) {\n setError(\n cause instanceof Error\n ? cause.message\n : \"The billing request could not be completed.\",\n );\n } finally {\n setBusy(\"\");\n }\n }\n\n const handleSave = (event: FormEvent) => {\n event.preventDefault();\n if (mode === \"submission\") {\n if (!canSubmit) return;\n void run(\"submit\", () => onSubmit(buildBillReviewSaveInput(draft), initialSubmission));\n return;\n }\n if (!onSave) return;\n void run(\"save\", async () => {\n const updated = await onSave(buildBillReviewSaveInput(draft));\n if (updated) setDraft(toDraft(updated));\n });\n };\n\n const openSubmit = async () => {\n if (!onGetDeliveryOptions) return;\n setDeliveryBusy(true);\n setError(\"\");\n try {\n const next = await onGetDeliveryOptions();\n setDeliveryOptions(next);\n const recommended = next.recommended ?? next.options[0];\n if (!recommended) throw new Error(\"No delivery route is available for this payer.\");\n setSubmission({ route: recommended.route });\n setShowSubmit(true);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Delivery routes could not be loaded.\");\n } finally {\n setDeliveryBusy(false);\n }\n };\n\n const selectedDelivery = deliveryOptions?.options.find((option) => option.route === submission.route);\n const destinationLabel = submission.route === \"fax\"\n ? \"Fax number\"\n : submission.route === \"email\"\n ? \"Email address\"\n : submission.route === \"mail\"\n ? \"Mailing address\"\n : \"\";\n const destinationValue = submission.route === \"fax\"\n ? submission.destination?.faxNumber ?? selectedDelivery?.target ?? deliveryOptions?.contacts.faxNumber ?? \"\"\n : submission.route === \"email\"\n ? submission.destination?.email ?? selectedDelivery?.target ?? deliveryOptions?.contacts.claimsEmail ?? \"\"\n : submission.route === \"mail\"\n ? submission.destination?.mailingAddress ?? selectedDelivery?.target ?? deliveryOptions?.contacts.mailingAddress ?? \"\"\n : \"\";\n const setDestination = (value: string) => setSubmission((current) => {\n const destination = current.route === \"fax\"\n ? { faxNumber: value }\n : current.route === \"email\"\n ? { email: value }\n : { mailingAddress: value };\n return { ...current, destination };\n });\n const handleSubmit = () => run(\"submit\", async () => {\n await onSubmit(buildBillReviewSaveInput(draft), submission);\n setShowSubmit(false);\n });\n\n const attach = async () => {\n if (!file) return;\n setBusy(\"attachment\");\n setError(\"\");\n try {\n await onAddAttachment(file, documentType, DOCUMENT_LABELS[documentType]);\n setFile(null);\n setDocumentType(\"other\");\n setNotice(\"Document added to the payer packet.\");\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Document could not be attached.\");\n } finally {\n setBusy(\"\");\n }\n };\n\n const sectionClass = \"mb-native-section\";\n return (\n <form\n className={[\"mb-native-review\", className].filter(Boolean).join(\" \")}\n style={mindBillAppearanceStyle(appearance, style)}\n onSubmit={handleSave}\n >\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <style>{NATIVE_THEME_OVERRIDE_STYLES}</style>\n <style>{NATIVE_SUBMISSION_DIALOG_STYLES}</style>\n {mode === \"review\" ? <><header className=\"mb-native-heading\">\n <div>\n <span className=\"mb-native-eyebrow\">Billing review</span>\n <h2>Bill #{data.bill.billNumber}</h2>\n <p>Review the prefilled claim and payer packet, then submit.</p>\n </div>\n <div className=\"mb-native-total\">\n <span>{data.bill.status}</span>\n <strong>{money(data.bill.totalCharge)}</strong>\n </div>\n </header>\n\n <dl className=\"mb-native-summary\">\n <div><dt>Patient</dt><dd>{[draft.patientFirstName, draft.patientMiddleName, draft.patientLastName].filter(Boolean).join(\" \") || \"—\"}</dd></div>\n <div><dt>Claim</dt><dd>{draft.claimNumber || \"—\"}</dd></div>\n <div><dt>Employer</dt><dd>{draft.employer || \"—\"}</dd></div>\n <div><dt>Date of injury</dt><dd>{draft.doi || \"—\"}</dd></div>\n </dl></> : null}\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\">\n <div>\n <h3>Claims administrator</h3>\n <p>Select the carrier or administrator that should receive this bill.</p>\n </div>\n </div>\n <div className=\"mb-native-payer-picker\">\n <Combobox\n label=\"Insurance company or claims administrator\"\n required\n value={payerQuery}\n disabled={!editable}\n placeholder=\"Search by payer or administrator name\"\n name=\"mindbill-payer-query\"\n options={payerResults.map((payer) => ({\n value: payer.id,\n label: payer.name,\n ...(payer.recommended\n ? { badge: \"Recommended\" }\n : payer.confidence === \"medium\"\n ? { badge: \"Claim match\" }\n : {}),\n detail: [\n ...(payer.signals ?? []).map((signal) => signal.label),\n payer.hasElectronic\n ? \"Electronic billing available.\"\n : \"Billing route confirmed after review.\",\n ].join(\" \"),\n }))}\n onChange={(value, option) => {\n if (option) {\n setDraft((current) => ({ ...current, claimsAdminId: option.value, claimsAdminName: option.label }));\n setPayerQuery(option.label);\n setNotice(\"Claims administrator selected. Save changes to keep it on this bill.\");\n } else {\n setPayerQuery(value);\n setDraft((current) => value === current.claimsAdminName ? current : { ...current, claimsAdminId: \"\", claimsAdminName: \"\" });\n }\n }}\n />\n {payerBusy ? <span className=\"mb-native-payer-help\">Searching…</span> : null}\n {!payerBusy && payerQuery.trim().length > 1 && payerResults.length === 0 && !draft.claimsAdminId ? (\n <span className=\"mb-native-payer-help\">No matching administrator selected yet.</span>\n ) : null}\n {selectedPayer?.signals?.length ? (\n <div className=\"mb-native-payer-insight\" role=\"status\">\n {selectedPayer.signals.map((signal) => (\n <span className={signal.state} key={`${signal.kind}-${signal.label}`}>\n {signal.label}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Patient and claim</h3><p>Review the case details that will print on this bill.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Patient first name\" required disabled={!editable} value={draft.patientFirstName} onChange={(patientFirstName) => setDraft((current) => ({ ...current, patientFirstName }))} />\n <Field label=\"Middle name\" optional disabled={!editable} value={draft.patientMiddleName} onChange={(patientMiddleName) => setDraft((current) => ({ ...current, patientMiddleName }))} />\n <Field label=\"Patient last name\" required disabled={!editable} value={draft.patientLastName} onChange={(patientLastName) => setDraft((current) => ({ ...current, patientLastName }))} />\n <Field label=\"Date of birth\" type=\"date\" required disabled={!editable} value={draft.patientDob} onChange={(patientDob) => setDraft((current) => ({ ...current, patientDob }))} />\n <Field label=\"Claim number\" required disabled={!editable} value={draft.claimNumber} onChange={(claimNumber) => setDraft((current) => ({ ...current, claimNumber }))} {...((data.injury.claimPatternStatus?.detail || data.injury.claimPatternStatus?.label) ? { hint: data.injury.claimPatternStatus?.detail || data.injury.claimPatternStatus?.label || \"\" } : {})} />\n <Field label=\"Employer\" disabled={!editable} value={draft.employer} onChange={(employer) => setDraft((current) => ({ ...current, employer }))} />\n <Field label=\"Date of injury\" type=\"date\" required disabled={!editable} value={draft.doi} onChange={(doi) => setDraft((current) => ({ ...current, doi }))} />\n {draft.cumulativeTrauma ? <Field label=\"Cumulative trauma end date\" type=\"date\" required disabled={!editable} value={draft.injuryEndDate} onChange={(injuryEndDate) => setDraft((current) => ({ ...current, injuryEndDate }))} /> : null}\n {features?.wcabNumber === false ? null : <Field label=\"WCAB / ADJ number\" optional disabled={!editable} value={draft.adjNumber} onChange={(adjNumber) => setDraft((current) => ({ ...current, adjNumber }))} hint={adjFormatValid ? \"Use the EAMS case number shown as ADJ followed by digits.\" : \"Expected format: ADJ followed by at least 7 digits.\"} />}\n </div>\n {features?.wcabNumber === false ? null : <p className=\"mb-native-eams\">EAMS lookup requires California DWC verification. <a href=\"https://eams.dwc.ca.gov/WebEnhancement/\" target=\"_blank\" rel=\"noreferrer\">Verify in EAMS</a>.</p>}\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Service</h3><p>The service date and optional payer authorization printed on this bill.</p></div></div>\n <div className={`mb-native-grid ${features?.serviceDateRange || features?.authorizationNumber !== false ? \"three\" : \"one\"}`}>\n <Field label=\"Date of service\" type=\"date\" required disabled={!editable} value={draft.dos} onChange={(dos) => setDraft((current) => ({ ...current, dos }))} />\n {features?.serviceDateRange ? <Field label=\"Service end date\" type=\"date\" optional disabled={!editable} value={draft.dosEnd} onChange={(dosEnd) => setDraft((current) => ({ ...current, dosEnd }))} /> : null}\n {features?.authorizationNumber === false ? null : <Field label=\"Authorization number\" optional disabled={!editable} value={draft.authorizationNumber} onChange={(authorizationNumber) => setDraft((current) => ({ ...current, authorizationNumber }))} />}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Billing practice</h3><p>Payee identity and billing address for this claim.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Practice name\" required disabled={!editable} value={draft.billingProvider.name} onChange={(value) => updateBillingProvider(\"name\", value)} />\n <label className=\"mb-native-field\"><span>Tax ID type</span><select disabled={!editable} value={draft.billingProvider.taxIdType ?? \"EIN\"} onChange={(event) => setDraft((current) => ({ ...current, billingProvider: { ...current.billingProvider, taxIdType: event.target.value as \"EIN\" | \"SSN\", taxId: \"\", taxIdConfigured: false, taxIdLast4: \"\" } }))}><option value=\"EIN\">EIN (business)</option><option value=\"SSN\">SSN (individual)</option></select></label>\n <Field label=\"Tax ID\" type={draft.billingProvider.taxIdType === \"SSN\" ? \"password\" : \"text\"} required={!(draft.billingProvider.taxIdType === \"SSN\" && draft.billingProvider.taxIdConfigured)} disabled={!editable} value={draft.billingProvider.taxId} {...(draft.billingProvider.taxIdType === \"SSN\" && draft.billingProvider.taxIdConfigured ? { hint: `Saved SSN ending in ${draft.billingProvider.taxIdLast4 ?? \"••••\"}. Leave blank to keep this bill's saved number.` } : {})} onChange={(value) => updateBillingProvider(\"taxId\", value)} />\n <Field label=\"Billing NPI\" required disabled={!editable} value={draft.billingProvider.npi} onChange={(value) => updateBillingProvider(\"npi\", value)} />\n <Field label=\"Phone\" optional disabled={!editable} value={draft.billingProvider.phone || \"\"} onChange={(value) => updateBillingProvider(\"phone\", value)} />\n <Field label=\"Billing street\" required disabled={!editable} value={draft.billingProvider.billingStreet || \"\"} onChange={(value) => updateBillingProvider(\"billingStreet\", value)} />\n <Field label=\"City\" required disabled={!editable} value={draft.billingProvider.billingCity || \"\"} onChange={(value) => updateBillingProvider(\"billingCity\", value)} />\n <StateCombobox label=\"State\" required disabled={!editable} value={draft.billingProvider.billingState || \"\"} onChange={(value) => updateBillingProvider(\"billingState\", value)} />\n <Field label=\"ZIP\" required disabled={!editable} value={draft.billingProvider.billingZip || \"\"} onChange={(value) => updateBillingProvider(\"billingZip\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Clinician</h3><p>Provider identity printed on the claim.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Clinician name\" required disabled={!editable} value={draft.clinician.name} onChange={(value) => updateClinician(\"name\", value)} />\n <Field label=\"Specialty\" disabled={!editable} value={draft.clinician.specialty} onChange={(value) => updateClinician(\"specialty\", value)} />\n <Field label=\"NPI\" required disabled={!editable} value={draft.clinician.npi} onChange={(value) => updateClinician(\"npi\", value)} />\n <Field label=\"Taxonomy\" optional disabled={!editable} value={draft.clinician.taxonomy || \"\"} onChange={(value) => updateClinician(\"taxonomy\", value)} />\n <Field label=\"License number\" optional disabled={!editable} value={draft.clinician.licenseNumber || \"\"} onChange={(value) => updateClinician(\"licenseNumber\", value)} />\n <StateCombobox label=\"License state (optional)\" disabled={!editable} value={draft.clinician.licenseState || \"\"} onChange={(value) => updateClinician(\"licenseState\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Service location</h3><p>The exact place of service for this bill.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Location name\" required disabled={!editable} value={draft.location.name} onChange={(value) => updateLocation(\"name\", value)} />\n <Field label=\"Street\" required disabled={!editable} value={draft.location.street} onChange={(value) => updateLocation(\"street\", value)} />\n <Field label=\"City\" required disabled={!editable} value={draft.location.city} onChange={(value) => updateLocation(\"city\", value)} />\n <StateCombobox label=\"State\" required disabled={!editable} value={draft.location.state} onChange={(value) => updateLocation(\"state\", value)} />\n <Field label=\"ZIP\" required disabled={!editable} value={draft.location.zip} onChange={(value) => updateLocation(\"zip\", value)} />\n <Field label=\"Place of service code\" required disabled={!editable} value={draft.location.posCode || \"11\"} onChange={(value) => updateLocation(\"posCode\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Procedure lines</h3><p>{data.bill.billingMode === \"professional\" ? \"Enter the professional services billed. Each line may carry its own date, charge, and diagnosis pointers.\" : \"Choose a billing profile, then review the codes and modifiers.\"} A new row appears as you type.</p></div></div>\n {data.bill.billingMode === \"professional\" || features?.codingPresets === false ? null : <div className=\"mb-native-presets\" role=\"group\" aria-label=\"Evaluation billing profile\">\n {([['qme','QME'],['ame','AME'],['psych_qme','Psych QME']] as const).map(([value,label]) => <button type=\"button\" key={value} className={inferPreset(draft.lineItems) === value ? \"active\" : \"\"} disabled={!editable} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(applyPreset(current.lineItems, value)) }))}>{label}</button>)}\n <span>Sets evaluator modifiers across med-legal lines. You can still edit each line.</span>\n </div>}\n <div className=\"mb-native-lines\">\n {draft.lineItems.map((line, index) => (\n <div className={`mb-native-line ${data.bill.billingMode === \"professional\" ? \"professional\" : \"\"}`} key={line.id || index}>\n <label className=\"mb-native-field\"><span>Procedure<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span>{data.bill.billingMode === \"professional\" ? <input disabled={!editable} placeholder=\"CPT / HCPCS code\" value={line.code} onChange={(event) => {\n const code = event.target.value.toUpperCase();\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, code } : item)) }));\n }} /> : <select disabled={!editable} value={line.code} onChange={(event) => {\n const code = event.target.value;\n setDraft((current) => {\n const lineItems = current.lineItems.map((item, itemIndex) => {\n if (itemIndex !== index) return item;\n const presetLine = applyPreset([{ ...item, code }], inferPreset(current.lineItems))[0];\n return { ...item, code, modifiers: presetLine?.modifiers || [] };\n });\n return { ...current, lineItems: ensureTrailingProcedureLine(lineItems) };\n });\n }}><option value=\"\">Select code…</option>{PROCEDURES.map(([code,label]) => <option value={code} key={code}>{code} — {label}</option>)}</select>}{data.bill.billingMode === \"med_legal\" && line.code ? <small>{PROCEDURES.find(([code]) => code === line.code)?.[1]}</small> : null}</label>\n <div className=\"mb-native-modifiers\">{data.bill.billingMode === \"professional\" ? <label className=\"mb-native-field\"><span>Modifiers</span><input disabled={!editable} placeholder=\"e.g. 25, 59\" value={line.modifiers.join(\", \")} onChange={(event) => {\n const modifiers = event.target.value.toUpperCase().split(/[ ,]+/).map((value) => value.replace(/^-/, \"\")).filter(Boolean);\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers } : item)) }));\n }} /></label> : <label className=\"mb-native-field\"><span>Modifiers</span><select disabled={!editable} value=\"\" onChange={(event) => {\n const modifier = event.target.value;\n if (!modifier) return;\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: [...new Set([...item.modifiers, modifier])] } : item)) }));\n }}><option value=\"\">Add modifier…</option>{MODIFIERS.filter(([value]) => !line.modifiers.includes(value) && modifierAppliesToCode(value, line.code)).map(([value,label]) => <option value={value} key={value}>-{value} — {label}</option>)}</select></label>}<div className=\"mb-native-chips\">{data.bill.billingMode === \"med_legal\" ? line.modifiers.map((modifier) => <button type=\"button\" disabled={!editable} key={modifier} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: item.modifiers.filter((value) => value !== modifier) } : item)) }))}>-{modifier} ×</button>) : null}</div></div>\n <label className=\"mb-native-field\"><span>Units<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"number\" min=\"1\" required disabled={!editable} value={line.units} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, units: Number(event.target.value) } : item)) }))} /></label>\n {data.bill.billingMode === \"professional\" ? <>\n <label className=\"mb-native-field\"><span>Service date<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"date\" required={Boolean(line.code)} disabled={!editable} value={line.serviceDate || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, serviceDate: event.target.value } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>End date <small>Optional</small></span><input type=\"date\" disabled={!editable} value={line.serviceDateEnd || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, serviceDateEnd: event.target.value } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>Charge<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"number\" min=\"0.01\" step=\"0.01\" required={Boolean(line.code)} disabled={!editable} value={line.charge || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, charge: Number(event.target.value) } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>Diagnosis pointers <small>1–12</small></span><input inputMode=\"numeric\" disabled={!editable} value={(line.diagnosisPointers || []).join(\", \")} onChange={(event) => { const diagnosisPointers = event.target.value.split(/[ ,]+/).map(Number).filter((value) => Number.isInteger(value) && value >= 1 && value <= 12); setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, diagnosisPointers } : item)) })); }} /></label>\n </> : null}\n <div className=\"mb-native-allowed\"><span>Allowed</span><strong>{money(line.charge)}</strong></div>\n <button type=\"button\" className=\"mb-native-remove\" aria-label={`Remove ${line.code || \"procedure\"}`} disabled={!editable} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.filter((_, itemIndex) => itemIndex !== index)) }))}>×</button>\n </div>\n ))}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Payer billing packet</h3><p>Review exactly what will be sent with this bill.</p></div></div>\n <div className=\"mb-native-note\"><strong>Separate from attorney report service.</strong> Final reports, proof of service, and required billing forms may be preselected. Medical records are never silently attached.</div>\n <ul className=\"mb-native-documents\">\n {data.bill.attachments.map((attachment) => (\n <li key={attachment.id}>\n <span className=\"mb-native-file\">PDF</span>\n <div><strong>{attachment.filename}</strong><span>{DOCUMENT_LABELS[attachment.documentType as BillReviewDocumentType] || attachment.description || \"Supporting document\"}</span></div>\n {onOpenAttachment ? <button type=\"button\" className=\"mb-native-button quiet\" onClick={() => onOpenAttachment(attachment)}>View</button> : null}\n <button type=\"button\" className=\"mb-native-remove\" disabled={!editable || busy === \"attachment\"} aria-label={`Remove ${attachment.filename}`} onClick={() => void onRemoveAttachment(attachment.id).catch((cause) => setError(cause instanceof Error ? cause.message : \"Document could not be removed.\"))}>×</button>\n </li>\n ))}\n </ul>\n <div className=\"mb-native-attach\">\n <div><strong>Add supporting PDF</strong><span>Choose any additional document intentionally. Up to 25 MB.</span></div>\n <select aria-label=\"Document type\" value={documentType} disabled={!editable} onChange={(event) => setDocumentType(event.target.value as BillReviewDocumentType)}>{Object.entries(DOCUMENT_LABELS).map(([value, label]) => <option key={value} value={value}>{label}</option>)}</select>\n <input aria-label=\"Choose supporting PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={!editable} onChange={(event) => setFile(event.target.files?.[0] || null)} />\n <button className=\"mb-native-button secondary\" type=\"button\" disabled={!editable || !file || busy === \"attachment\"} onClick={() => void attach()}>{busy === \"attachment\" ? \"Attaching…\" : \"Attach document\"}</button>\n </div>\n </section>\n\n <section className=\"mb-native-submit\">\n <div><h3>Submit bill</h3><p>Submitting creates the bill as an immutable snapshot of the information and documents above.</p></div>\n {error ? <div className=\"mb-native-message error\" role=\"alert\">{error}</div> : null}\n {notice ? <div className=\"mb-native-message success\" role=\"status\">{notice}</div> : null}\n {!canSubmit ? <div className=\"mb-native-blockers\" role=\"status\"><strong>Before you can submit:</strong><span>{blockers.join(\" · \")}</span></div> : null}\n <div className=\"mb-native-actions\">\n {mode === \"submission\" ? <button className=\"mb-native-button primary\" type=\"submit\" disabled={!editable || !canSubmit || busy !== \"\"}>{busy === \"submit\" ? \"Submitting…\" : \"Submit bill\"}</button> : <>\n <button className=\"mb-native-button secondary\" type=\"submit\" disabled={!editable || busy !== \"\"}>{busy === \"save\" ? \"Saving…\" : \"Save changes\"}</button>\n <button className=\"mb-native-button primary\" type=\"button\" disabled={!editable || !canSubmit || busy !== \"\" || deliveryBusy} onClick={() => void openSubmit()}>{deliveryBusy ? \"Loading delivery…\" : \"Review delivery\"}</button>\n </>}\n </div>\n </section>\n {showSubmit && deliveryOptions ? <div className=\"mb-native-modal-backdrop\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget && busy !== \"submit\") setShowSubmit(false); }}>\n <section className=\"mb-native-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mb-native-submit-title\">\n <header><div><span className=\"mb-native-eyebrow\">Send bill</span><h3 id=\"mb-native-submit-title\">Choose a delivery route</h3><p>{deliveryOptions.payerName || \"Claims administrator\"}</p></div><button type=\"button\" className=\"mb-native-close\" aria-label=\"Close\" disabled={busy === \"submit\"} onClick={() => setShowSubmit(false)}>×</button></header>\n <fieldset className=\"mb-native-delivery-options\"><legend>Available delivery routes</legend>{deliveryOptions.options.map((option) => <label className={submission.route === option.route ? \"selected\" : \"\"} key={`${option.route}-${option.target || \"default\"}`}><input type=\"radio\" name=\"mindbill-delivery-route\" checked={submission.route === option.route} onChange={() => setSubmission({ route: option.route })} /><span><strong>{option.label}</strong><small>{option.detail}</small>{option.target ? <code>{option.target}</code> : null}</span>{deliveryOptions.recommended?.route === option.route ? <em>Recommended</em> : null}</label>)}</fieldset>\n {submission.route !== \"ebill\" ? <div className=\"mb-native-grid two\"><Field label={destinationLabel} required value={destinationValue} onChange={setDestination} hint=\"You can override the payer directory value for this submission.\" /><Field label=\"Attention\" optional value={submission.attention || \"\"} onChange={(attention) => setSubmission((current) => ({ ...current, attention }))} />{submission.route === \"email\" ? <Field label=\"Subject\" optional value={submission.subject || \"\"} onChange={(subject) => setSubmission((current) => ({ ...current, subject }))} /> : null}</div> : null}\n <Field label=\"Delivery note\" optional value={submission.note || \"\"} onChange={(note) => setSubmission((current) => ({ ...current, note }))} />\n <footer><button className=\"mb-native-button secondary\" type=\"button\" disabled={busy === \"submit\"} onClick={() => setShowSubmit(false)}>Cancel</button><button className=\"mb-native-button primary\" type=\"button\" disabled={busy === \"submit\" || (submission.route !== \"ebill\" && !destinationValue.trim())} onClick={() => void handleSubmit()}>{busy === \"submit\" ? \"Submitting…\" : `Send via ${selectedDelivery?.label || submission.route}`}</button></footer>\n </section>\n </div> : null}\n </form>\n );\n}\n\nexport type BillStatusSummaryProps = {\n status: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n updatedAt?: string | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n actions?: BillStatusAction[];\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillReactAppearance;\n};\n\nexport type BillStatusAction = {\n id: string;\n label: string;\n onClick: () => void;\n primary?: boolean;\n disabled?: boolean;\n};\n\nexport function BillStatusSummary({ status, submittedAt, agingDays, updatedAt, totalCharge, totalPaid, balanceDue, actions = [], className, style, appearance }: BillStatusSummaryProps): ReactElement {\n return <section className={[\"mb-native-status\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)}>\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <style>{NATIVE_THEME_OVERRIDE_STYLES}</style>\n <div className=\"mb-native-status-copy\"><span className=\"mb-native-eyebrow\">Bill status</span><h3>{status.replaceAll(\"_\", \" \")}</h3><p>{submittedAt ? `Submitted ${new Date(submittedAt).toLocaleDateString()}` : \"Not submitted\"}{agingDays == null ? \"\" : ` · ${agingDays} day${agingDays === 1 ? \"\" : \"s\"} old`}{updatedAt ? ` · Updated ${new Date(updatedAt).toLocaleDateString()}` : \"\"}</p></div>\n <dl><div><dt>Charged</dt><dd>{money(totalCharge)}</dd></div><div><dt>Paid</dt><dd>{money(totalPaid)}</dd></div><div><dt>Balance</dt><dd>{money(balanceDue)}</dd></div></dl>\n {actions.length ? <div className=\"mb-native-status-actions\">{actions.map((action) => <button key={action.id} type=\"button\" className={`mb-native-button ${action.primary ? \"primary\" : \"secondary\"}`} disabled={action.disabled} onClick={action.onClick}>{action.label}</button>)}</div> : null}\n </section>;\n}\n\nconst NATIVE_SUBMISSION_DIALOG_STYLES = `\n.mb-native-field select{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 12px}\n.mb-native-field select:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}\n.mb-native-line.professional{grid-template-columns:minmax(140px,1fr) minmax(140px,1fr) 86px 150px 150px 120px minmax(130px,1fr) 120px 28px;overflow-x:auto}\n.mb-native-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}\n.mb-native-modal-backdrop{position:fixed;z-index:9999;inset:0;display:grid;place-items:center;padding:20px;background:rgba(20,38,46,.55);backdrop-filter:blur(3px)}\n.mb-native-modal{display:grid;gap:18px;width:min(720px,100%);max-height:min(820px,calc(100vh - 40px));overflow:auto;padding:22px;border:1px solid var(--mb-border);border-radius:16px;background:#fff;box-shadow:0 28px 80px rgba(14,35,44,.3)}\n.mb-native-modal>header,.mb-native-modal>footer{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-native-modal>footer{justify-content:flex-end}.mb-native-modal h3{margin:3px 0;font-size:22px}.mb-native-modal p{margin:0;color:var(--mb-muted)}\n.mb-native-close{border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font-size:23px;line-height:1;padding:8px 12px}\n.mb-native-delivery-options{display:grid;gap:9px;margin:0;padding:0;border:0}.mb-native-delivery-options legend{margin-bottom:8px;font-weight:800}.mb-native-delivery-options label{display:grid;grid-template-columns:auto 1fr auto;align-items:start;gap:12px;padding:14px;border:1px solid var(--mb-border);border-radius:10px;cursor:pointer}.mb-native-delivery-options label.selected{border-color:var(--mb-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--mb-accent) 14%,transparent)}.mb-native-delivery-options label>span{display:grid;gap:2px}.mb-native-delivery-options small{color:var(--mb-muted)}.mb-native-delivery-options code{margin-top:4px;color:var(--mb-text);font:12px/1.4 ui-monospace,SFMono-Regular,monospace}.mb-native-delivery-options em{border-radius:999px;background:var(--mb-soft);color:var(--mb-accent-dark);font-size:10px;font-style:normal;font-weight:800;padding:5px 8px;text-transform:uppercase}\n@media(max-width:1100px){.mb-native-line.professional{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-line.professional .mb-native-allowed{text-align:left}}\n@media(max-width:620px){.mb-native-grid.two,.mb-native-line.professional{grid-template-columns:1fr}.mb-native-modal-backdrop{padding:0}.mb-native-modal{width:100%;max-height:100vh;border-radius:0;padding:18px}.mb-native-delivery-options label{grid-template-columns:auto 1fr}.mb-native-delivery-options em{grid-column:2}}\n`;\n\nconst NATIVE_BILL_REVIEW_STYLES = `\n.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review,.mb-native-status{--mb-accent:#238dbd;--mb-accent-dark:#176f98;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;color:var(--mb-text);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}.mb-native-review *,.mb-native-status *{box-sizing:border-box}.mb-native-review{display:grid;gap:16px}.mb-native-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:6px 2px}.mb-native-heading h2,.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{margin:3px 0 2px;line-height:1.2}.mb-native-heading h2{font-size:25px}.mb-native-heading p,.mb-native-section p,.mb-native-submit p,.mb-native-status p{margin:0;color:var(--mb-muted)}.mb-native-eyebrow{color:#59727d;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.mb-native-total{display:flex;align-items:center;gap:18px}.mb-native-total span,.mb-native-section-head>span{border-radius:999px;background:var(--mb-soft);color:#58717c;font-size:11px;font-weight:800;padding:6px 10px;text-transform:capitalize}.mb-native-total strong{font-size:24px}.mb-native-summary{display:grid;grid-template-columns:repeat(4,1fr);margin:0;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);overflow:hidden}.mb-native-summary div{padding:17px 20px;border-right:1px solid var(--mb-border)}.mb-native-summary div:last-child{border:0}.mb-native-summary dt,.mb-native-allowed span{color:#647982;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mb-native-summary dd{margin:5px 0 0;font-weight:750}.mb-native-section{padding:20px;border:1px solid var(--mb-border);border-radius:14px;background:var(--mb-surface);box-shadow:0 8px 24px rgba(28,58,72,.04)}.mb-native-section-head{display:flex;align-items:start;justify-content:space-between;gap:16px;margin-bottom:17px}.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{font-size:19px}.mb-native-grid{display:grid;gap:14px}.mb-native-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.mb-native-field{display:grid;gap:6px;min-width:0;color:var(--mb-text);font-size:12px;font-weight:750}.mb-native-required{color:#c5352e}.mb-native-field small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-native-field input,.mb-native-attach select,.mb-native-attach input{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 12px}.mb-native-field input:focus,.mb-native-attach select:focus,.mb-native-attach input:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}.mb-native-lines{display:grid;gap:10px}.mb-native-line{display:grid;grid-template-columns:1.1fr 1.1fr 110px 120px 28px;align-items:end;gap:12px;padding:13px;background:var(--mb-soft);border:1px solid #e3edf0;border-radius:10px}.mb-native-allowed{display:grid;gap:5px;padding:0 8px 11px;text-align:right}.mb-native-allowed strong{font-size:16px}.mb-native-remove{border:0;background:transparent;color:#667d86;cursor:pointer;font-size:20px;padding:7px}.mb-native-note{padding:13px 15px;border:1px solid #bdd9e4;border-radius:9px;background:#f2f9fc;color:#526d78}.mb-native-note strong{color:var(--mb-text);margin-right:12px}.mb-native-documents{list-style:none;margin:14px 0;padding:0}.mb-native-documents li{display:grid;grid-template-columns:42px 1fr auto 28px;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--mb-border)}.mb-native-documents li>div{display:grid}.mb-native-documents li span{color:var(--mb-muted);font-size:12px}.mb-native-file{display:grid;place-items:center;width:40px;height:40px;border-radius:8px;background:#eaf5f9;color:var(--mb-accent)!important;font-size:11px!important;font-weight:850}.mb-native-attach{display:grid;grid-template-columns:1fr 230px minmax(220px,1fr) auto;align-items:end;gap:12px;padding:15px;border-radius:10px;background:var(--mb-soft)}.mb-native-attach>div{display:grid;gap:3px}.mb-native-attach span{color:var(--mb-muted);font-size:12px}.mb-native-button{min-height:40px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-native-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-button.primary:hover{background:var(--mb-accent-dark)}.mb-native-button.secondary{background:#fff}.mb-native-button.quiet{min-height:auto;background:var(--mb-soft);padding:7px 11px}.mb-native-button:disabled,.mb-native-remove:disabled{cursor:not-allowed;opacity:.5}.mb-native-submit{display:grid;grid-template-columns:1fr auto;align-items:end;gap:18px;padding:22px;border:1px solid #bcd8e2;border-radius:14px;background:linear-gradient(135deg,#f3fafc,#eaf6fa)}.mb-native-submit fieldset{display:flex;gap:6px;margin:0;padding:0;border:0}.mb-native-submit legend{position:absolute;width:1px;height:1px;overflow:hidden}.mb-native-submit fieldset label{display:flex;align-items:center;gap:6px;padding:9px 11px;border:1px solid #c9dce3;border-radius:8px;background:#fff;font-weight:700}.mb-native-actions{display:flex;justify-content:flex-end;gap:10px;grid-column:1/-1}.mb-native-message{grid-column:1/-1;padding:10px 12px;border-radius:8px}.mb-native-message.error{background:#fff0ef;color:#9d3029}.mb-native-message.success{background:#edf9f2;color:#217449}.mb-native-status{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px;border:1px solid var(--mb-border);border-radius:12px;background:#fff}.mb-native-status h3{text-transform:capitalize}.mb-native-status dl{display:flex;margin:0}.mb-native-status dl div{min-width:110px;padding:0 18px;border-left:1px solid var(--mb-border)}.mb-native-status dt{color:var(--mb-muted);font-size:11px}.mb-native-status dd{margin:4px 0 0;font-size:17px;font-weight:800}@media(max-width:900px){.mb-native-grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-summary{grid-template-columns:repeat(2,1fr)}.mb-native-summary div:nth-child(2){border-right:0}.mb-native-summary div:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mb-native-line{grid-template-columns:1fr 1fr 90px}.mb-native-allowed{align-self:center}.mb-native-attach{grid-template-columns:1fr 1fr}.mb-native-submit{grid-template-columns:1fr}.mb-native-submit fieldset,.mb-native-actions{grid-column:1}.mb-native-actions{justify-content:start}}@media(max-width:620px){.mb-native-heading,.mb-native-total,.mb-native-status{align-items:start;flex-direction:column}.mb-native-grid.three,.mb-native-summary,.mb-native-line,.mb-native-attach{grid-template-columns:1fr}.mb-native-summary div,.mb-native-summary div:nth-child(2){border-right:0;border-bottom:1px solid var(--mb-border)}.mb-native-line{align-items:stretch}.mb-native-allowed{text-align:left}.mb-native-submit fieldset{display:grid;grid-template-columns:1fr 1fr}.mb-native-status dl{width:100%}.mb-native-status dl div{min-width:0;flex:1;padding:0 10px}.mb-native-status dl div:first-child{padding-left:0;border-left:0}}\n.mb-native-status-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.mb-native-status-copy{min-width:150px}.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review{padding:clamp(16px,2vw,24px)}\n.mb-native-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}\n.mb-native-payer-picker{position:relative;max-width:760px}\n.mb-native-payer-help{display:block;margin-top:7px;color:var(--mb-muted);font-size:12px}\n.mb-native-payer-results{position:absolute;z-index:5;top:calc(100% + 6px);right:0;left:0;max-height:280px;overflow:auto;list-style:none;margin:0;padding:6px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);box-shadow:0 16px 40px rgba(28,58,72,.16)}\n.mb-native-payer-results li{margin:0;padding:0}\n.mb-native-payer-results button{display:grid;width:100%;gap:2px;padding:11px 12px;border:0;border-radius:7px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}\n.mb-native-payer-results button:hover,.mb-native-payer-results button:focus{background:var(--mb-soft);outline:0}\n.mb-native-payer-results span{color:var(--mb-muted);font-size:12px}\n.mb-native-grid.one{grid-template-columns:minmax(0,1fr)}\n.mb-native-field select{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 36px 10px 12px}\n.mb-native-field select:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}\n.mb-native-field input:disabled,.mb-native-field select:disabled{cursor:not-allowed;background:#f6f8f9;color:#667982}\n.mb-native-hint{color:var(--mb-muted);font-size:12px;font-weight:500}\n.mb-native-combo{position:relative;min-width:0}\n.mb-native-combo-list{position:absolute;z-index:20;top:calc(100% + 6px);right:0;left:0;max-height:300px;overflow:auto;list-style:none;margin:0;padding:6px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);box-shadow:0 18px 42px rgba(28,58,72,.18)}\n.mb-native-combo-list li{margin:0;padding:0}.mb-native-combo-list button{display:grid;width:100%;gap:4px;padding:11px 12px;border:0;border-radius:7px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}.mb-native-combo-list button:hover,.mb-native-combo-list button.active{background:var(--mb-soft);outline:0}.mb-native-combo-list button>span{color:var(--mb-muted);font-size:12px;font-weight:500}.mb-native-combo-list .mb-native-combo-title{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--mb-text);font-size:14px}.mb-native-combo-title em{border-radius:999px;background:#e9f6f3;color:#24725f;font-size:10px;font-style:normal;font-weight:800;letter-spacing:.03em;padding:3px 7px;text-transform:uppercase}\n.mb-native-payer-insight{display:grid;gap:5px;margin-top:10px;padding:11px 13px;border:1px solid #c9dfe7;border-radius:9px;background:#f4fafc}.mb-native-payer-insight span{color:#426570;font-size:12px}.mb-native-payer-insight span.warning{color:#8a5c17}\n.mb-native-presets{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:-2px 0 14px}.mb-native-presets button{min-height:36px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:7px 13px}.mb-native-presets button.active{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-presets span{margin-left:5px;color:var(--mb-muted);font-size:12px}\n.mb-native-modifiers{display:grid;gap:7px}.mb-native-chips{display:flex;flex-wrap:wrap;gap:5px}.mb-native-chips button{border:1px solid #c9dce3;border-radius:999px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-size:11px;font-weight:750;padding:4px 8px}\n.mb-native-blockers{grid-column:1/-1;display:grid;gap:2px;padding:11px 13px;border:1px solid #e8cf9a;border-radius:8px;background:#fff9ea;color:#74531b}.mb-native-blockers span{font-size:12px}\n.mb-native-eams{margin-top:13px!important;font-size:12px}.mb-native-eams a{color:var(--mb-accent);font-weight:750}\n@media(max-width:620px){.mb-native-review{padding:12px}.mb-native-grid.two{grid-template-columns:1fr}}\n`;\n\nconst NATIVE_THEME_OVERRIDE_STYLES = `\n.mb-native-review,.mb-native-status{color:var(--mb-text);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review{background:var(--mb-soft)}\n.mb-native-heading>div:first-child>p,.mb-native-section>header p,.mb-native-total span,.mb-native-status-copy p,.mb-native-status dt{color:var(--mb-muted)}\n.mb-native-summary,.mb-native-section,.mb-native-status{border-color:var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n.mb-native-field input,.mb-native-field select,.mb-native-field textarea,.mb-native-attachment-form input,.mb-native-attachment-form select{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-native-line,.mb-native-note,.mb-native-file,.mb-native-attachment-form,.mb-native-payer-insight,.mb-native-blockers,.mb-native-message{border-radius:var(--mb-control-radius)}\n.mb-native-line,.mb-native-note,.mb-native-attachment-form,.mb-native-payer-insight{border-color:var(--mb-border);background:var(--mb-soft)}\n.mb-native-file{border-color:var(--mb-border);background:var(--mb-surface)}\n.mb-native-button.primary,.mb-native-presets button.active{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mb-native-button.primary:hover,.mb-native-presets button.active:hover{filter:brightness(.96)}\n.mb-native-button.secondary,.mb-native-presets button,.mb-native-chips button{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-native-message.error{background:color-mix(in srgb,var(--mb-danger) 10%,white);color:var(--mb-danger)}\n.mb-native-message.success{background:color-mix(in srgb,var(--mb-success) 10%,white);color:var(--mb-success)}\n.mb-native-blockers{border-color:color-mix(in srgb,var(--mb-warning) 35%,white);background:color-mix(in srgb,var(--mb-warning) 8%,white);color:var(--mb-warning)}\n.mb-native-combo-list{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n`;\n","\"use client\";\n\nimport { useEffect, useState, type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPattern,\n BillLifecycleDelivery,\n BillReviewAttachment,\n HistoricalBillReviewData,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\n\nexport type BillReadOnlyFormProps = {\n data: HistoricalBillReviewData & { delivery?: BillLifecycleDelivery };\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n onOpenAttachment?: (attachment: BillReviewAttachment) => void | Promise<void>;\n};\n\nfunction money(value: number | null): string {\n if (value == null) return \"Not recorded\";\n return new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nfunction date(value?: string | null): string {\n if (!value) return \"—\";\n const parsed = new Date(`${value.slice(0, 10)}T12:00:00`);\n return Number.isNaN(parsed.getTime()) ? value : new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" }).format(parsed);\n}\n\nfunction Value({ label, children, wide = false }: { label: string; children?: ReactNode; wide?: boolean }): ReactElement {\n return <div className={wide ? \"mb-read-value is-wide\" : \"mb-read-value\"}><dt>{label}</dt><dd>{children || \"—\"}</dd></div>;\n}\n\ntype PayerTab = \"main\" | \"bill-review\" | \"authorization\" | \"mailing\" | \"patterns\";\n\nconst PAYER_TABS: ReadonlyArray<readonly [PayerTab, string]> = [\n [\"main\", \"Main\"],\n [\"bill-review\", \"Bill Review\"],\n [\"authorization\", \"Authorization Info\"],\n [\"mailing\", \"Mailing Address\"],\n [\"patterns\", \"Claim Number Pattern\"],\n];\n\nfunction DirectoryEmpty({ children }: { children: ReactNode }): ReactElement {\n return <p className=\"mb-read-directory-empty\">{children}</p>;\n}\n\nfunction ContactTable({ contacts, empty }: { contacts: readonly BillClaimsAdministratorContact[]; empty: string }): ReactElement {\n if (!contacts.length) return <DirectoryEmpty>{empty}</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Name</th><th>Telephone</th><th>Portal / email</th><th>Fax</th><th>Address</th></tr></thead><tbody>{contacts.map((contact, index) => <tr key={`${contact.name || \"contact\"}-${index}`}><td>{contact.name || \"—\"}{contact.note ? <small>{contact.note}</small> : null}</td><td>{contact.phone || \"—\"}</td><td>{contact.portalUrl ? <a href={contact.portalUrl} target=\"_blank\" rel=\"noopener noreferrer\">Open portal</a> : contact.email || \"—\"}</td><td>{contact.fax || \"—\"}</td><td>{contact.address || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nfunction MailingTable({ addresses }: { addresses: readonly BillClaimsAdministratorMailingAddress[] }): ReactElement {\n if (!addresses.length) return <DirectoryEmpty>No mailing addresses are available for this directory entry.</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Company</th><th>Address</th><th>Notes</th><th>Submission types</th></tr></thead><tbody>{addresses.map((entry, index) => <tr key={`${entry.address}-${index}`}><td>{entry.company || \"—\"}</td><td>{entry.address}</td><td>{entry.notes || \"—\"}</td><td>{entry.submissionTypes?.join(\", \") || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nfunction PatternTable({ patterns }: { patterns: readonly BillClaimsAdministratorPattern[] }): ReactElement {\n if (!patterns.length) return <DirectoryEmpty>No claim-number pattern is available for this directory entry.</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Status</th><th>Length</th><th>Pattern</th><th>Example</th></tr></thead><tbody>{patterns.map((entry, index) => <tr key={`${entry.pattern}-${index}`}><td>{entry.matches === true ? <span className=\"mb-read-match is-match\">✓ Matches this claim</span> : entry.matches === false ? <span className=\"mb-read-match is-warning\">Review format</span> : \"Advisory\"}</td><td>{entry.length ?? \"—\"}</td><td>{entry.pattern}</td><td>{entry.example || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nexport function BillReadOnlyForm({ data, appearance, className, style, onOpenAttachment }: BillReadOnlyFormProps): ReactElement {\n const [payerOpen, setPayerOpen] = useState(false);\n const [payerTab, setPayerTab] = useState<PayerTab>(\"main\");\n const { bill, patient, injury } = data;\n const diagnoses = injury.diagnoses?.length\n ? injury.diagnoses\n : (injury.diagnosisCodes ?? []).map((code) => ({ code, description: \"\" }));\n const provider = bill.billingSnapshot?.billingProvider;\n const clinician = bill.billingSnapshot?.renderingProvider;\n const location = bill.billingSnapshot?.placeOfService;\n const address = patient.address;\n const patientAddress = [address?.line1, address?.city, address?.state, address?.postalCode].filter(Boolean).join(\", \");\n const billingAddress = provider ? [provider.billingStreet, provider.billingCity, provider.billingState, provider.billingZip].filter(Boolean).join(\", \") : \"\";\n const locationAddress = location ? [location.street, location.city, location.state, location.zip].filter(Boolean).join(\", \") : \"\";\n const payerName = data.delivery?.payerName || injury.claimsAdminName || \"—\";\n const contacts = data.delivery?.contacts;\n const directory = data.delivery?.directory;\n const fallbackContacts: readonly BillClaimsAdministratorContact[] = contacts && Object.values(contacts).some(Boolean) ? [{\n name: contacts.adjusterName || \"Claims contact\",\n ...(contacts.adjusterPhone ? { phone: contacts.adjusterPhone } : {}),\n ...(contacts.adjusterEmail || contacts.claimsEmail ? { email: contacts.adjusterEmail || contacts.claimsEmail } : {}),\n ...(contacts.faxNumber ? { fax: contacts.faxNumber } : {}),\n ...(contacts.portalUrl ? { portalUrl: contacts.portalUrl } : {}),\n ...(contacts.mailingAddress ? { address: contacts.mailingAddress } : {}),\n }] : [];\n const billReview = directory?.billReview?.length ? directory.billReview : fallbackContacts;\n const mailingAddresses: readonly BillClaimsAdministratorMailingAddress[] = directory?.mailingAddresses?.length\n ? directory.mailingAddresses\n : contacts?.mailingAddress ? [{ company: payerName, address: contacts.mailingAddress }] : [];\n useEffect(() => {\n if (!payerOpen) return;\n const close = (event: KeyboardEvent) => { if (event.key === \"Escape\") setPayerOpen(false); };\n window.addEventListener(\"keydown\", close);\n return () => window.removeEventListener(\"keydown\", close);\n }, [payerOpen]);\n\n return <section className={[\"mb-readonly-bill\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill details\">\n <style>{READ_ONLY_STYLES}</style>\n <header className=\"mb-readonly-heading\"><h2>Bill details</h2><strong>{money(bill.totalCharge)}</strong></header>\n\n <section className=\"mb-read-card\"><h3>Patient</h3><dl className=\"mb-read-grid\">\n <Value label=\"Name\">{patient.name || [patient.firstName, patient.middleName, patient.lastName].filter(Boolean).join(\" \")}</Value>\n <Value label=\"Date of birth\">{date(patient.dob)}</Value>\n <Value label=\"Phone\">{patient.phone}</Value>\n <Value label=\"Address\" wide>{patientAddress}</Value>\n </dl></section>\n\n <section className=\"mb-read-card\"><h3>Claim & injury</h3><dl className=\"mb-read-grid\">\n <Value label=\"Claim number\">{injury.claimNumber}</Value>\n <Value label=\"WCAB / ADJ number\">{injury.adjNumber}</Value>\n <Value label=\"Claims administrator\"><button type=\"button\" className=\"mb-read-payer\" onClick={() => { setPayerTab(\"main\"); setPayerOpen(true); }}>{payerName}</button></Value>\n <Value label=\"Employer\">{injury.employer}</Value>\n <Value label=\"Date of injury\">{date(injury.doi)}</Value>\n <Value label=\"Date of service\">{bill.dosEnd ? `${date(bill.dos)} – ${date(bill.dosEnd)}` : date(bill.dos)}</Value>\n <Value label=\"Injury description\" wide>{injury.injuryDescription}</Value>\n </dl>{diagnoses.length ? <div className=\"mb-read-diagnoses\" aria-label=\"Diagnoses\">{diagnoses.map((diagnosis) => <div key={diagnosis.code}><strong>{diagnosis.code}</strong>{diagnosis.description ? <span>{diagnosis.description}</span> : null}</div>)}</div> : null}</section>\n\n <section className=\"mb-read-card\"><h3>Providers & location</h3><dl className=\"mb-read-grid\">\n <Value label=\"Billing provider\">{provider?.name}</Value>\n <Value label=\"Billing NPI\">{provider?.npi}</Value>\n <Value label=\"Billing tax ID\">{provider?.taxId}</Value>\n <Value label=\"Billing phone\">{provider?.phone}</Value>\n <Value label=\"Billing address\" wide>{billingAddress}</Value>\n <Value label=\"Rendering provider\">{clinician?.name}</Value>\n <Value label=\"Rendering NPI\">{clinician?.npi}</Value>\n <Value label=\"Rendering taxonomy\">{clinician?.taxonomy}</Value>\n <Value label=\"Place of service code\">{location?.posCode}</Value>\n <Value label=\"Service address\" wide>{locationAddress}</Value>\n </dl></section>\n\n <section className=\"mb-read-card\"><h3>Service lines</h3><div className=\"mb-read-lines\" role=\"table\" aria-label=\"Service lines\">\n <div className=\"mb-read-line-header\" role=\"row\"><span>Procedure</span><span>Modifiers</span><span>Units</span><span>Charge</span></div>\n {bill.lineItems.map((line, index) => <div className=\"mb-read-line\" role=\"row\" key={line.id ?? `${line.code}-${index}`}>\n <strong>{line.code}</strong><div className=\"mb-read-chips\">{line.modifiers.length ? line.modifiers.map((modifier) => <span key={modifier}>{modifier}</span>) : \"—\"}</div><span>{line.units}</span><strong>{money(line.charge)}</strong>\n </div>)}\n <div className=\"mb-read-total\"><span>Paid {money(bill.totalPaid)}</span><strong>Balance {money(bill.balanceDue)}</strong></div>\n </div></section>\n\n <section className=\"mb-read-card\"><h3>Attachments</h3>{bill.attachments.length ? <ul className=\"mb-read-documents\">{bill.attachments.map((attachment) => <li key={attachment.id}><div><strong>{attachment.filename}</strong><span>{attachment.description || attachment.documentType.replace(/_/g, \" \")}</span></div>{onOpenAttachment ? <button type=\"button\" onClick={() => void onOpenAttachment(attachment)}>Preview</button> : null}</li>)}</ul> : <p className=\"mb-read-empty\">No attachments.</p>}</section>\n {payerOpen ? <div className=\"mb-read-dialog-backdrop\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget) setPayerOpen(false); }}><section className=\"mb-read-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mb-read-payer-title\"><header><div><h3 id=\"mb-read-payer-title\">{payerName}</h3><span>Claims administrator</span></div><button type=\"button\" aria-label=\"Close claims administrator details\" onClick={() => setPayerOpen(false)}>×</button></header>\n <label className=\"mb-read-dialog-mobile-nav\"><span>Information section</span><select aria-label=\"Claims administrator information section\" value={payerTab} onChange={(event) => setPayerTab(event.target.value as PayerTab)}>{PAYER_TABS.map(([id, label]) => <option value={id} key={id}>{label}</option>)}</select></label>\n <div className=\"mb-read-dialog-tabs\" role=\"tablist\" aria-label=\"Claims administrator information\">\n {PAYER_TABS.map(([id, label]) => <button type=\"button\" role=\"tab\" aria-selected={payerTab === id} key={id} onClick={() => setPayerTab(id)}>{label}</button>)}\n </div>\n <div className=\"mb-read-dialog-panel\" role=\"tabpanel\">\n {payerTab === \"main\" ? <dl className=\"mb-read-directory-main\"><Value label=\"Name\">{payerName}</Value><Value label=\"Type\">{directory?.type}</Value><Value label=\"Description\" wide>{directory?.description}</Value><Value label=\"Website\">{directory?.website ? <a href={directory.website} target=\"_blank\" rel=\"noopener noreferrer\">{directory.website}</a> : \"—\"}</Value><Value label=\"Hours of operation\">{directory?.hours}</Value><Value label=\"Also known as\" wide>{directory?.aliases?.join(\", \")}</Value><Value label=\"Affiliated entities\" wide>{directory?.affiliatedEntities?.join(\", \")}</Value></dl> : null}\n {payerTab === \"bill-review\" ? <ContactTable contacts={billReview} empty=\"No bill-review contacts are available for this directory entry.\" /> : null}\n {payerTab === \"authorization\" ? <ContactTable contacts={directory?.authorization ?? []} empty=\"No authorization contacts are available for this directory entry.\" /> : null}\n {payerTab === \"mailing\" ? <MailingTable addresses={mailingAddresses} /> : null}\n {payerTab === \"patterns\" ? <PatternTable patterns={directory?.claimNumberPatterns ?? []} /> : null}\n </div>\n </section></div> : null}\n </section>;\n}\n\nconst READ_ONLY_STYLES = `\n.mb-read-diagnoses{display:grid;gap:8px;margin-top:16px}.mb-read-diagnoses>div{display:grid;grid-template-columns:minmax(64px,max-content) 1fr;gap:12px;align-items:baseline;border:1px solid var(--mb-border);border-radius:9px;background:#f7f9f8;padding:9px 12px}.mb-read-diagnoses span{color:var(--mb-muted)}\n.mb-readonly-bill{--mb-accent:#176c70;--mb-border:#d7e0df;--mb-surface:#fff;--mb-muted:#607176;color:var(--mb-text,#17282d);font:inherit;display:grid;gap:16px}.mb-readonly-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.mb-readonly-heading h2,.mb-read-card h3{margin:0}.mb-readonly-heading>strong{font-size:1.35rem}.mb-read-card{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);padding:20px;box-shadow:0 1px 2px rgba(15,40,45,.04)}.mb-read-card h3{font-size:1.05rem;margin-bottom:16px}.mb-read-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px 28px;margin:0}.mb-read-value{min-width:0}.mb-read-value.is-wide{grid-column:1/-1}.mb-read-value dt{color:var(--mb-muted);font-size:.75rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.mb-read-value dd{font-weight:600;margin:5px 0 0;overflow-wrap:anywhere}.mb-read-payer{border:0;border-bottom:1px dotted currentColor;background:transparent;color:inherit;padding:0;font:inherit;font-weight:inherit;text-align:left;cursor:pointer}.mb-read-payer:hover{color:var(--mb-accent)}.mb-read-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}.mb-read-chips span{border:1px solid var(--mb-border);border-radius:999px;padding:3px 9px;font-size:.82rem;background:#f7f9f8}.mb-read-lines{border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}.mb-read-line-header,.mb-read-line{display:grid;grid-template-columns:1.2fr 1.5fr .45fr .7fr;gap:16px;align-items:center;padding:12px 14px}.mb-read-line-header{background:#f6f8f7;color:var(--mb-muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.mb-read-line{border-top:1px solid var(--mb-border)}.mb-read-line .mb-read-chips{margin:0}.mb-read-line>span:last-child,.mb-read-line>strong:last-child{text-align:right}.mb-read-total{display:flex;justify-content:flex-end;gap:24px;border-top:1px solid var(--mb-border);padding:13px 14px}.mb-read-documents{list-style:none;padding:0;margin:0;display:grid}.mb-read-documents li{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 0;border-top:1px solid var(--mb-border)}.mb-read-documents li:first-child{border-top:0;padding-top:0}.mb-read-documents li:last-child{padding-bottom:0}.mb-read-documents div{display:grid;gap:3px;min-width:0}.mb-read-documents strong{overflow-wrap:anywhere}.mb-read-documents span,.mb-read-empty{color:var(--mb-muted)}.mb-read-documents button{border:1px solid var(--mb-border);border-radius:8px;background:transparent;color:inherit;padding:8px 13px;font:inherit;font-weight:650;cursor:pointer}.mb-read-documents button:hover{border-color:var(--mb-accent);color:var(--mb-accent)}.mb-read-dialog-backdrop{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;background:rgba(11,28,32,.46);padding:20px}.mb-read-dialog{width:min(1040px,100%);min-height:min(620px,calc(100dvh - 40px));max-height:calc(100dvh - 40px);overflow:auto;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface);padding:22px;box-shadow:0 22px 70px rgba(8,25,29,.24)}.mb-read-dialog header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}.mb-read-dialog header span{display:block;margin-top:4px;color:var(--mb-muted);font-size:.78rem}.mb-read-dialog h3{margin:0;font-size:1.35rem}.mb-read-dialog header button{display:grid;place-items:center;width:44px;height:44px;border:0;background:transparent;color:inherit;font:inherit;font-size:1.7rem;line-height:1;cursor:pointer}.mb-read-dialog-mobile-nav{display:none}.mb-read-dialog-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-radius:10px;background:var(--mb-soft,#f4f7f6);padding:0 10px}.mb-read-dialog-tabs button{min-height:68px;border:0;border-top:4px solid transparent;background:transparent;color:var(--mb-muted);font:inherit;font-weight:750;cursor:pointer;padding:8px}.mb-read-dialog-tabs button[aria-selected=true]{border-color:var(--mb-accent);background:var(--mb-surface);color:var(--mb-text)}.mb-read-dialog-panel{padding-top:22px}.mb-read-directory-main{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 28px;margin:0}.mb-read-directory-main a,.mb-read-directory-table a{color:var(--mb-accent)}.mb-read-directory-table-wrap{border:1px solid var(--mb-border);border-radius:10px;overflow:auto}.mb-read-directory-table{width:100%;border-collapse:collapse;text-align:left}.mb-read-directory-table th,.mb-read-directory-table td{padding:13px 14px;vertical-align:top;border-top:1px solid var(--mb-border)}.mb-read-directory-table th{border-top:0;background:var(--mb-soft,#f4f7f6);color:var(--mb-muted);font-size:.78rem}.mb-read-directory-table td small{display:block;margin-top:4px;color:var(--mb-muted)}.mb-read-directory-empty{margin:0;padding:26px;border:1px dashed var(--mb-border);border-radius:10px;color:var(--mb-muted);text-align:center}.mb-read-match{display:inline-flex;border-radius:999px;padding:3px 8px;font-size:.78rem;font-weight:750}.mb-read-match.is-match{background:#eaf7ef;color:#237448}.mb-read-match.is-warning{background:#fff5df;color:#8a5b00}\n@media(max-width:700px){.mb-readonly-heading{align-items:flex-start}.mb-read-grid,.mb-read-directory-main{grid-template-columns:1fr}.mb-read-value.is-wide{grid-column:auto}.mb-read-card{padding:16px}.mb-read-line-header{display:none}.mb-read-line{grid-template-columns:1fr auto;gap:8px}.mb-read-line>*:nth-child(2){grid-column:1/-1}.mb-read-total{justify-content:space-between}.mb-readonly-heading>strong{font-size:1.05rem}.mb-read-dialog-backdrop{place-items:end center;padding:0}.mb-read-dialog{width:100%;min-height:0;max-height:calc(100dvh - 12px);border-radius:18px 18px 0 0;padding:20px 18px calc(20px + env(safe-area-inset-bottom))}.mb-read-dialog header{margin-bottom:14px}.mb-read-dialog-mobile-nav{display:grid;gap:6px;color:var(--mb-muted);font-size:.75rem;font-weight:750;letter-spacing:.05em;text-transform:uppercase}.mb-read-dialog-mobile-nav select{width:100%;min-height:48px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);color:var(--mb-text);font:inherit;font-size:1rem;font-weight:700;padding:10px 12px;text-transform:none}.mb-read-dialog-tabs{display:none}.mb-read-dialog-panel{padding-top:16px}.mb-read-directory-table-wrap{border:0;overflow:visible}.mb-read-directory-table,.mb-read-directory-table thead,.mb-read-directory-table tbody,.mb-read-directory-table tr,.mb-read-directory-table th,.mb-read-directory-table td{display:block}.mb-read-directory-table thead{display:none}.mb-read-directory-table tr{border:1px solid var(--mb-border);border-radius:10px;margin-bottom:10px;overflow:hidden}.mb-read-directory-table td{border-top:1px solid var(--mb-border)}.mb-read-directory-table td:first-child{border-top:0}}\n`;\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n createBillReferenceClient,\n createBillSubmissionClient,\n type BillDeliveryOptions,\n type BillClaimsAdministratorSource,\n type BillClaimsAdministratorDirectory,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionResult,\n type BillLifecycleSessionProvider,\n type BillReviewPayer,\n type BillReviewPayerListInput,\n type BillReviewPayerOption,\n type BillReviewPayerPage,\n type BillReviewPayerSuggestion,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { SendRouteDialog, type SendRouteSubmission } from \"./send-route-dialog\";\nimport { ClaimsAdministratorDirectoryDialog } from \"./claims-administrator-directory-dialog\";\nimport type { BillSubmissionProfileOptions } from \"./billing-profile-options\";\nimport {\n BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS,\n calculateBillSubmissionAllowedAmount,\n DEFAULT_BILL_SUBMISSION_MODIFIERS,\n DEFAULT_BILL_SUBMISSION_PROCEDURES,\n DEFAULT_BILL_SUBMISSION_TAXONOMIES,\n} from \"./billing-catalog\";\n\nexport const BILL_SUBMISSION_DOCUMENT_TYPES = [\n \"final_report\", \"proof_of_service\", \"letter_of_attestation\", \"form_122\",\n \"return_to_work_voucher\", \"w9\", \"medical_records\", \"appeal\", \"other\",\n] as const;\n\nexport type BillSubmissionDocumentType = (typeof BILL_SUBMISSION_DOCUMENT_TYPES)[number];\nexport type BillSubmissionAttachmentReportTypeMode = \"auto\" | \"hidden\" | \"visible\";\nexport type BillSubmissionReportTypeOption = { code: string; label: string };\nexport const MED_LEGAL_REPORT_TYPE_CODE = \"OZ:J4\";\nexport const BILL_SUBMISSION_REPORT_TYPES: readonly BillSubmissionReportTypeOption[] = [\n { code: \"OZ:J1\", label: \"Doctor's First Report (DLSR 5021)\" },\n { code: \"OZ:J2\", label: \"Supplemental Medical Report (BRs)\" },\n { code: \"OZ:J3\", label: \"Medical Permanent Impairment Report\" },\n { code: MED_LEGAL_REPORT_TYPE_CODE, label: \"Med-Legal Report\" },\n { code: \"OZ:J5\", label: \"Vocational Report\" },\n { code: \"OZ:J6\", label: \"Work Status Report\" },\n { code: \"OZ:J7\", label: \"Consultation Report\" },\n { code: \"OZ:J8\", label: \"Permanent Disability Report\" },\n { code: \"OZ:J9\", label: \"Itemized Statement\" },\n { code: \"03\", label: \"Justifying Treatment Beyond Utilization Guidelines\" },\n { code: \"04\", label: \"Drugs Administered\" }, { code: \"05\", label: \"Treatment Diagnosis\" },\n { code: \"06\", label: \"Initial Assessment\" }, { code: \"07\", label: \"Plan of Treatment\" },\n { code: \"08\", label: \"Plan of Treatment\" }, { code: \"09\", label: \"PR2 (Progress Report)\" },\n { code: \"10\", label: \"Continued Treatment\" }, { code: \"11\", label: \"Chemical Analysis\" },\n { code: \"13\", label: \"Certified Test Report\" }, { code: \"15\", label: \"Justification for Admission\" },\n { code: \"21\", label: \"Recovery Plan\" }, { code: \"A3\", label: \"Allergies/Sensitivities Document\" },\n { code: \"A4\", label: \"Autopsy Report\" }, { code: \"AM\", label: \"Ambulance Certification\" },\n { code: \"AS\", label: \"Admission Summary\" }, { code: \"B2\", label: \"Prescription\" },\n { code: \"B3\", label: \"Physician Order\" }, { code: \"B4\", label: \"Referral Form\" },\n { code: \"BR\", label: \"Benchmark Testing Results\" }, { code: \"BS\", label: \"Baseline\" },\n { code: \"BT\", label: \"Blanket Test Results\" }, { code: \"CB\", label: \"Chiropractic Justification\" },\n { code: \"CK\", label: \"Canceled Check\" }, { code: \"CT\", label: \"Certification\" },\n { code: \"D2\", label: \"Drug Profile Document\" }, { code: \"DA\", label: \"Dental Models\" },\n { code: \"DB\", label: \"Durable Medical Equipment RX\" }, { code: \"DG\", label: \"Diagnostic Report\" },\n { code: \"DJ\", label: \"Discharge Monitoring Report\" }, { code: \"DS\", label: \"Discharge Summary\" },\n { code: \"EB\", label: \"Explanation of Benefits\" }, { code: \"HC\", label: \"Health Clinic Records (HC)\" },\n { code: \"HR\", label: \"Health Clinic Records (HR)\" }, { code: \"I5\", label: \"Immunization Record\" },\n { code: \"IR\", label: \"State School Immunization Records\" }, { code: \"LA\", label: \"Laboratory Results\" },\n { code: \"M1\", label: \"Medical Record Attachment\" }, { code: \"MT\", label: \"Nursing Notes\" },\n { code: \"NN\", label: \"Minor Deviation Request\" }, { code: \"OB\", label: \"Operative Note\" },\n { code: \"OC\", label: \"Oxygen Content Averaging Report\" }, { code: \"OD\", label: \"Orders and Treatments Document\" },\n { code: \"OE\", label: \"Objective Physical Examination Doc\" }, { code: \"OX\", label: \"Oxygen Therapy Certification\" },\n { code: \"OZ\", label: \"Support Data for Bill\" }, { code: \"P4\", label: \"Pathology Report\" },\n { code: \"P5\", label: \"Patient Medical History Document\" }, { code: \"PE\", label: \"Periodontal Charts\" },\n { code: \"PN\", label: \"Physical Therapy Notes\" }, { code: \"PO\", label: \"Prosthetics or Orthotic Certification\" },\n { code: \"PQ\", label: \"Paramedical Results\" }, { code: \"PY\", label: \"Physician's Report\" },\n { code: \"PZ\", label: \"Physical Therapy Certification\" }, { code: \"RB\", label: \"Radiology Films\" },\n { code: \"RR\", label: \"Radiology Reports\" }, { code: \"RT\", label: \"Report of tests and Analysis Report\" },\n { code: \"RX\", label: \"Renewable Oxygen Content Averaging Report\" }, { code: \"SG\", label: \"Symptoms Document\" },\n { code: \"V5\", label: \"Death Notification\" }, { code: \"XP\", label: \"Photographs\" },\n] as const;\nexport type BillSubmissionEvaluationType = \"qme\" | \"ame\" | \"psych_qme\";\nexport type BillSubmissionAddress = { line1: string; line2?: string; city: string; state: string; postalCode: string };\nexport type BillSubmissionDiagnosisOption = { code: string; description: string };\nexport type BillSubmissionProcedureOption = { code: string; description: string; allowedAmount?: number };\nexport type BillSubmissionModifierOption = { code: string; description: string };\nexport type BillSubmissionTaxonomyOption = { code: string; description: string };\nexport type BillSubmissionPostalPlace = { city: string; state: string };\n\nexport type BillSubmissionInput = {\n externalId?: string;\n billingMode?: \"med_legal\" | \"professional\";\n patient: {\n id?: string; externalId?: string; firstName: string; middleName?: string; lastName: string;\n dateOfBirth: string; ssn?: string; gender?: \"M\" | \"F\" | \"X\"; phone?: string;\n address: BillSubmissionAddress;\n };\n claim: {\n id?: string; externalId?: string; claimNumber: string; adjNumber?: string; employer?: string;\n dateOfInjury?: string; injuryState?: string; description?: string;\n claimsAdministrator?: {\n id?: string;\n name: string;\n /** The chosen payer (subpayor) when the claims administrator requires payer selection. */\n payerId?: string;\n /** Directory metadata carried while editing; stripped from the submitted bill. */\n payerSelectionRequired?: boolean;\n payers?: BillReviewPayerOption[];\n };\n };\n service: { date: string; endDate?: string | null; authorizationNumber?: string | null };\n billingProvider?: {\n name?: string; taxId?: string; npi?: string; phone?: string; address?: BillSubmissionAddress;\n taxIdType?: \"EIN\" | \"SSN\"; savedProviderId?: string; sourceBillId?: string; taxIdLast4?: string;\n };\n renderingProvider?: {\n name?: string; specialty?: string; npi?: string; taxonomy?: string; licenseNumber?: string;\n licenseState?: string; isQme?: boolean; isAme?: boolean;\n };\n serviceLocation?: { name?: string; address?: BillSubmissionAddress; placeOfServiceCode?: string };\n diagnoses?: string[];\n serviceLines: Array<{\n code: string; modifiers?: string[]; units?: number; serviceDate?: string;\n serviceDateEnd?: string | null; charge?: number; diagnosisPointers?: number[];\n }>;\n};\n\n/** A validated, submission-ready bill. The form accepts partial provider data while editing,\n * but only emits this complete contract after every required field has passed validation. */\nexport type CompleteBillSubmissionInput = Omit<\n BillSubmissionInput,\n \"claim\" | \"billingProvider\" | \"renderingProvider\" | \"serviceLocation\" | \"diagnoses\" | \"serviceLines\"\n> & {\n claim: BillSubmissionInput[\"claim\"] & {\n employer: string;\n dateOfInjury: string;\n claimsAdministrator: { id: string; name: string; payerId?: string };\n };\n billingProvider: {\n name: string; taxId: string; taxIdType?: \"EIN\" | \"SSN\"; npi: string; phone: string; address: BillSubmissionAddress;\n } | { savedProviderId: string } | { sourceBillId: string };\n renderingProvider: NonNullable<BillSubmissionInput[\"renderingProvider\"]> & {\n name: string; npi: string; taxonomy: string;\n };\n serviceLocation: NonNullable<BillSubmissionInput[\"serviceLocation\"]> & {\n address: BillSubmissionAddress; placeOfServiceCode: string;\n };\n diagnoses: string[];\n serviceLines: BillSubmissionInput[\"serviceLines\"];\n};\n\nexport type BillSubmissionSourceAttachment = {\n id: string;\n fileName: string;\n documentType: BillSubmissionDocumentType;\n description?: string;\n /** @deprecated Source attachments shown in the form are included until removed. */\n selected?: boolean;\n /** Marks a document that the host selected by default. This does not imply that it is locked. */\n autoAttached?: boolean;\n /** Controls whether the user can remove the document from this submission packet. Defaults to false for auto-attached documents and true otherwise. */\n removable?: boolean;\n previewUrl?: string;\n /** Authenticated source loader used when the document is not available at a public URL. */\n loadBlob?: () => Promise<Blob>;\n reportTypeCode?: string;\n};\nexport type BillSubmissionUpload = { file: File; documentType: BillSubmissionDocumentType; description?: string; reportTypeCode?: string };\nexport type BillSubmissionFormValue = {\n bill: CompleteBillSubmissionInput;\n /** Delivery route explicitly confirmed by the biller, when the route picker is enabled. */\n submission?: SendRouteSubmission;\n sourceAttachmentIds: string[];\n sourceAttachmentReportTypes: Record<string, string>;\n uploads: BillSubmissionUpload[];\n};\n\nexport type BillSubmissionFormProps = {\n initialBill: BillSubmissionInput;\n /** Host-owned choices or organizationProfileOptions(profile). Selection copies a snapshot into this bill only. */\n profileOptions?: BillSubmissionProfileOptions;\n /** Compact keeps provider fields available behind an edit disclosure; validation errors expand it. */\n profileDisplay?: \"expanded\" | \"compact\";\n attachments?: BillSubmissionSourceAttachment[];\n /**\n * Legacy custom submission escape hatch. Connected forms should omit this so\n * the component owns PDF encoding and the Partner API wire contract.\n */\n onSubmit?: (value: BillSubmissionFormValue) => void | Promise<void>;\n /** Called after the connected component atomically creates and submits the bill. */\n onSubmitted?: (result: BrowserBillSubmissionResult) => void | Promise<void>;\n /** Short-lived partner browser session. Enables reference data and direct submission. */\n getSession?: BillLifecycleSessionProvider;\n sessionEndpoint?: string;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n /** Paginated claims-administrator directory. Empty queries return the alphabetical first page. */\n onListClaimsAdministrators?: (input?: BillReviewPayerListInput) => Promise<BillReviewPayerPage>;\n /** @deprecated Prefer onListClaimsAdministrators for browse and pagination support. */\n onSearchClaimsAdministrators?: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;\n onGetClaimsAdministratorDirectory?: (id: string, injuryState?: string) => Promise<BillClaimsAdministratorDirectory>;\n /** Host-system evidence shown without preselecting a canonical directory entry. EAMS evidence takes precedence. */\n claimsAdministratorSources?: readonly BillClaimsAdministratorSource[];\n /** @deprecated Prefer claimsAdministratorSources so the source label and optional URL remain explicit. */\n claimsAdministratorHint?: ReactNode;\n diagnosisOptions?: BillSubmissionDiagnosisOption[];\n onSearchDiagnoses?: (query: string, limit?: number, offset?: number) => Promise<BillSubmissionDiagnosisOption[]>;\n onLookupPostalCode?: (postalCode: string) => Promise<BillSubmissionPostalPlace | null>;\n procedureOptions?: BillSubmissionProcedureOption[];\n modifierOptions?: BillSubmissionModifierOption[];\n /** Common NUCC provider taxonomies are bundled; supplied values extend or replace matching codes. */\n taxonomyOptions?: BillSubmissionTaxonomyOption[];\n /**\n * The delivery-method dialog shown when the biller submits.\n * \"auto\" (default) shows it whenever the delivery preview is available;\n * \"required\" fails closed until the biller confirms a route; \"off\" submits\n * directly on MindBill's recommended route.\n */\n deliveryRoutePicker?: \"auto\" | \"required\" | \"off\";\n /** Heading for the delivery confirmation dialog. */\n deliveryRouteDialogTitle?: ReactNode;\n /** Auto hides and forces J4 for med-legal bills; treatment bills show the full report-type directory. */\n attachmentReportTypeMode?: BillSubmissionAttachmentReportTypeMode;\n attachmentReportTypes?: readonly BillSubmissionReportTypeOption[];\n defaultAttachmentReportType?: string;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n submitLabel?: string;\n heading?: ReactNode;\n description?: ReactNode;\n /** Rejected-field paths to visually call out while the user corrects the next submission. */\n attentionFields?: string[];\n attentionMessage?: ReactNode;\n /**\n * Optional composable layout. Use the exported section components as children;\n * the parent form continues to own validation, directory lookups, uploads, and submission.\n */\n children?: ReactNode;\n};\n\nexport const BILL_SUBMISSION_REQUIRED_FIELDS = [\n \"patient.firstName\", \"patient.lastName\", \"patient.dateOfBirth\", \"patient.address.line1\",\n \"patient.address.city\", \"patient.address.state\", \"patient.address.postalCode\",\n \"claim.claimNumber\", \"claim.employer\", \"claim.dateOfInjury\", \"claim.claimsAdministrator\", \"service.date\",\n \"billingProvider.name\", \"billingProvider.taxId\", \"billingProvider.npi\", \"billingProvider.phone\",\n \"billingProvider.address.line1\", \"billingProvider.address.city\", \"billingProvider.address.state\", \"billingProvider.address.postalCode\",\n \"renderingProvider.name\", \"renderingProvider.npi\", \"renderingProvider.taxonomy\",\n \"serviceLocation.placeOfServiceCode\", \"serviceLocation.address.line1\", \"serviceLocation.address.city\",\n \"serviceLocation.address.state\", \"serviceLocation.address.postalCode\",\n \"diagnoses[]\",\n \"serviceLines[].code\", \"serviceLines[].units\",\n] as const;\n\nexport type BillSubmissionValidation = { valid: boolean; fieldErrors: Record<string, string> };\n\nconst documentLabels: Record<BillSubmissionDocumentType, string> = {\n final_report: \"Final report\", proof_of_service: \"Proof of service\",\n letter_of_attestation: \"Letter of attestation\", form_122: \"Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\", w9: \"W-9\",\n medical_records: \"Medical records\", appeal: \"Appeal\", other: \"Other\",\n};\nconst MAX_PDF_BYTES = 25 * 1024 * 1024;\nconst MAX_UPLOAD_BYTES = 100 * 1024 * 1024;\nconst MAX_DOCUMENTS = 25;\nconst DIAGNOSIS_PAGE_SIZE = 100;\nconst PAYER_PAGE_SIZE = 50;\nconst EMPTY_ATTACHMENTS: BillSubmissionSourceAttachment[] = [];\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let offset = 0; offset < bytes.length; offset += 32_768) {\n binary += String.fromCharCode(...bytes.subarray(offset, offset + 32_768));\n }\n return globalThis.btoa(binary);\n}\n\nasync function pdfDocument(\n blob: Blob,\n input: Omit<BrowserBillSubmissionDocument, \"contentBase64\">,\n): Promise<BrowserBillSubmissionDocument> {\n if (blob.size > MAX_PDF_BYTES) throw new Error(`${input.filename} is larger than 25 MB.`);\n const bytes = new Uint8Array(await blob.arrayBuffer());\n if (\n bytes.length < 5\n || bytes[0] !== 0x25\n || bytes[1] !== 0x50\n || bytes[2] !== 0x44\n || bytes[3] !== 0x46\n || bytes[4] !== 0x2d\n ) {\n throw new Error(`${input.filename} is not a valid PDF.`);\n }\n return { ...input, contentBase64: bytesToBase64(bytes) };\n}\n\nexport async function prepareBillSubmissionDocuments({\n attachments,\n selectedIds,\n uploads,\n reportTypeCodeByAttachmentId = {},\n defaultReportTypeCode,\n fetch: fetchOverride,\n}: {\n attachments: BillSubmissionSourceAttachment[];\n selectedIds: string[];\n uploads: BillSubmissionUpload[];\n reportTypeCodeByAttachmentId?: Record<string, string>;\n defaultReportTypeCode?: string;\n fetch?: typeof globalThis.fetch;\n}): Promise<BrowserBillSubmissionDocument[]> {\n const fetcher = fetchOverride ?? globalThis.fetch;\n const selected = selectedIds.map((id) => attachments.find((item) => item.id === id)).filter((item): item is BillSubmissionSourceAttachment => Boolean(item));\n const sourceDocuments = await Promise.all(selected.map(async (attachment) => {\n let blob: Blob;\n if (attachment.loadBlob) blob = await attachment.loadBlob();\n else {\n if (!attachment.previewUrl) throw new Error(`${attachment.fileName} cannot be submitted because its document URL is missing.`);\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n const response = await fetcher(attachment.previewUrl, { credentials: \"same-origin\" });\n if (!response.ok) throw new Error(`${attachment.fileName} could not be loaded for submission.`);\n blob = await response.blob();\n }\n return pdfDocument(blob, {\n externalId: attachment.id,\n filename: attachment.fileName,\n documentType: attachment.documentType,\n ...((reportTypeCodeByAttachmentId[attachment.id] || attachment.reportTypeCode || defaultReportTypeCode) ? { reportTypeCode: reportTypeCodeByAttachmentId[attachment.id] || attachment.reportTypeCode || defaultReportTypeCode } : {}),\n ...(attachment.description ? { description: attachment.description } : {}),\n });\n }));\n const uploadedDocuments = await Promise.all(uploads.map(({ file, documentType, description, reportTypeCode }) => pdfDocument(file, {\n filename: file.name,\n documentType,\n ...((reportTypeCode || defaultReportTypeCode) ? { reportTypeCode: reportTypeCode || defaultReportTypeCode } : {}),\n ...(description ? { description } : {}),\n })));\n return [...sourceDocuments, ...uploadedDocuments];\n}\n\nfunction previewUploadedPdf(file: File): void {\n const url = URL.createObjectURL(file);\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n window.setTimeout(() => URL.revokeObjectURL(url), 60_000);\n}\n\nfunction blankLine(): BillSubmissionInput[\"serviceLines\"][number] {\n return { code: \"\", modifiers: [], units: 1 };\n}\nfunction lineHasContent(line: BillSubmissionInput[\"serviceLines\"][number]): boolean {\n return Boolean(line.code.trim() || line.modifiers?.length || line.charge != null);\n}\nexport function ensureTrailingBillSubmissionLine(\n lines: BillSubmissionInput[\"serviceLines\"],\n): BillSubmissionInput[\"serviceLines\"] {\n const normalized: BillSubmissionInput[\"serviceLines\"] = lines.length ? lines.map((line) => ({ ...line, modifiers: [...(line.modifiers ?? [])], units: line.units ?? 1 })) : [];\n while (normalized.length > 1 && !lineHasContent(normalized.at(-1)!) && !lineHasContent(normalized.at(-2)!)) normalized.pop();\n if (!normalized.length || lineHasContent(normalized.at(-1)!)) normalized.push(blankLine());\n return normalized;\n}\n\nexport function parseBillSubmissionDate(value: string): string | undefined {\n const trimmed = value.trim();\n const iso = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(trimmed);\n const us = /^(\\d{1,2})[/-](\\d{1,2})[/-](\\d{4})$/.exec(trimmed);\n const digits = /^(\\d{2})(\\d{2})(\\d{4})$/.exec(trimmed.replace(/\\D/g, \"\"));\n const match = iso ? [iso[2], iso[3], iso[1]] : us ? [us[1], us[2], us[3]] : digits ? [digits[1], digits[2], digits[3]] : null;\n if (!match) return undefined;\n const month = Number(match[0]); const day = Number(match[1]); const year = Number(match[2]);\n const date = new Date(Date.UTC(year, month - 1, day));\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return undefined;\n return `${String(year).padStart(4, \"0\")}-${String(month).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}`;\n}\nexport function formatBillSubmissionDate(value: string | null | undefined): string {\n const parsed = value ? parseBillSubmissionDate(value) : undefined;\n if (!parsed) return \"\";\n const [year, month, day] = parsed.split(\"-\");\n return `${month}/${day}/${year}`;\n}\n\nfunction evaluationModifier(type: BillSubmissionEvaluationType, code: string): string | undefined {\n if (!/^ML(?:200|201|202|203|PRR)$/.test(code.toUpperCase())) return undefined;\n if (type === \"ame\") return code.toUpperCase() === \"ML200\" || code.toUpperCase() === \"MLPRR\" ? undefined : \"94\";\n if (type === \"psych_qme\") return code.toUpperCase() === \"ML200\" ? \"95\" : code.toUpperCase() === \"MLPRR\" ? undefined : \"96\";\n return \"95\";\n}\nexport function applyBillSubmissionEvaluationModifiers(\n lines: BillSubmissionInput[\"serviceLines\"], type: BillSubmissionEvaluationType,\n): BillSubmissionInput[\"serviceLines\"] {\n return lines.map((line) => {\n const auto = evaluationModifier(type, line.code);\n const modifiers = (line.modifiers ?? []).filter((item) => ![\"94\", \"95\", \"96\"].includes(item.replace(/^-/, \"\")));\n return { ...line, modifiers: auto ? [auto, ...modifiers] : modifiers };\n });\n}\n\nexport const PSYCH_QME_DEFAULT_DIAGNOSIS = \"Z04.6\";\n\n/** Seed Psych QME's general examination code only when no diagnosis was supplied. */\nexport function applyBillSubmissionEvaluationDiagnoses(\n diagnoses: string[] | undefined,\n type: BillSubmissionEvaluationType,\n): string[] {\n const current = [...(diagnoses ?? [])];\n return type === \"psych_qme\" && !current.some((code) => code.trim())\n ? [PSYCH_QME_DEFAULT_DIAGNOSIS]\n : current;\n}\n\nfunction initialEvaluationType(bill: BillSubmissionInput): BillSubmissionEvaluationType {\n if (bill.renderingProvider?.isAme) return \"ame\";\n return bill.renderingProvider?.specialty?.toLowerCase().includes(\"psych\") ? \"psych_qme\" : \"qme\";\n}\n\nfunction cloneInitialBill(bill: BillSubmissionInput): BillSubmissionInput {\n const cloned = cloneBill(bill);\n cloned.diagnoses = applyBillSubmissionEvaluationDiagnoses(cloned.diagnoses, initialEvaluationType(bill));\n return cloned;\n}\n\nfunction stableInitializationValue(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableInitializationValue);\n if (!value || typeof value !== \"object\") return typeof value === \"function\" ? undefined : value;\n return Object.fromEntries(Object.entries(value)\n .filter(([, entry]) => typeof entry !== \"function\")\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, stableInitializationValue(entry)]));\n}\n\n/**\n * Identifies the source draft represented by the host props. Hosts may rebuild\n * equivalent objects during polling; that must not erase in-progress edits.\n */\nexport function billSubmissionInitializationKey(\n initialBill: BillSubmissionInput,\n attachments: BillSubmissionSourceAttachment[] = EMPTY_ATTACHMENTS,\n sourceClaimsAdministratorName = \"\",\n): string {\n return JSON.stringify(stableInitializationValue({\n attachments,\n initialBill,\n sourceClaimsAdministratorName,\n }));\n}\n\nfunction submittedLines(lines: BillSubmissionInput[\"serviceLines\"]): BillSubmissionInput[\"serviceLines\"] {\n return lines.filter(lineHasContent).map((line) => ({ ...line, code: line.code.trim(), modifiers: [...(line.modifiers ?? [])] }));\n}\nfunction cloneBill(bill: BillSubmissionInput): BillSubmissionInput {\n return {\n ...bill,\n patient: { ...bill.patient, address: { ...bill.patient.address } },\n claim: { ...bill.claim, ...(bill.claim.claimsAdministrator ? { claimsAdministrator: { ...bill.claim.claimsAdministrator } } : {}) },\n service: { ...bill.service },\n ...(bill.billingProvider ? { billingProvider: { ...bill.billingProvider, ...(bill.billingProvider.address ? { address: { ...bill.billingProvider.address } } : {}) } } : {}),\n ...(bill.renderingProvider ? { renderingProvider: { ...bill.renderingProvider } } : {}),\n ...(bill.serviceLocation ? { serviceLocation: { ...bill.serviceLocation, ...(bill.serviceLocation.address ? { address: { ...bill.serviceLocation.address } } : {}) } } : {}),\n diagnoses: [...(bill.diagnoses ?? [])],\n serviceLines: ensureTrailingBillSubmissionLine(bill.serviceLines),\n };\n}\nexport function validateBillSubmission(bill: BillSubmissionInput): BillSubmissionValidation {\n const errors: Record<string, string> = {};\n const required = (path: string, value: unknown, message: string) => { if (typeof value !== \"string\" || !value.trim()) errors[path] = message; };\n required(\"patient.firstName\", bill.patient.firstName, \"Enter the patient's first name.\");\n required(\"patient.lastName\", bill.patient.lastName, \"Enter the patient's last name.\");\n required(\"patient.dateOfBirth\", bill.patient.dateOfBirth, \"Enter the patient's date of birth.\");\n required(\"patient.address.line1\", bill.patient.address.line1, \"Enter the patient's street address.\");\n required(\"patient.address.city\", bill.patient.address.city, \"Enter the patient's city.\");\n required(\"patient.address.state\", bill.patient.address.state, \"Enter the patient's 2-letter state code.\");\n required(\"patient.address.postalCode\", bill.patient.address.postalCode, \"Enter the patient's ZIP code.\");\n required(\"claim.claimNumber\", bill.claim.claimNumber, \"Enter the claim number.\");\n required(\"claim.employer\", bill.claim.employer, \"Enter the employer name.\");\n required(\"claim.dateOfInjury\", bill.claim.dateOfInjury, \"Enter the date of injury.\");\n required(\"claim.claimsAdministrator\", bill.claim.claimsAdministrator?.name, \"Select a claims administrator so MindBill can route this bill.\");\n required(\"service.date\", bill.service.date, \"Enter the date of service.\");\n if (!bill.billingProvider?.savedProviderId?.trim() && !bill.billingProvider?.sourceBillId?.trim()) {\n required(\"billingProvider.name\", bill.billingProvider?.name, \"Enter the billing provider name.\");\n required(\"billingProvider.taxId\", bill.billingProvider?.taxId, \"Enter the billing provider Tax ID (EIN or SSN).\");\n required(\"billingProvider.npi\", bill.billingProvider?.npi, \"Enter the billing provider NPI.\");\n required(\"billingProvider.phone\", bill.billingProvider?.phone, \"Enter the billing provider phone number.\");\n required(\"billingProvider.address.line1\", bill.billingProvider?.address?.line1, \"Enter the billing provider street address.\");\n required(\"billingProvider.address.city\", bill.billingProvider?.address?.city, \"Enter the billing provider city.\");\n required(\"billingProvider.address.state\", bill.billingProvider?.address?.state, \"Enter the billing provider 2-letter state code.\");\n required(\"billingProvider.address.postalCode\", bill.billingProvider?.address?.postalCode, \"Enter the billing provider ZIP code.\");\n }\n required(\"renderingProvider.name\", bill.renderingProvider?.name, \"Enter the rendering provider name.\");\n required(\"renderingProvider.npi\", bill.renderingProvider?.npi, \"Enter the rendering provider NPI.\");\n required(\"renderingProvider.taxonomy\", bill.renderingProvider?.taxonomy, \"Enter the rendering provider taxonomy code.\");\n required(\"serviceLocation.placeOfServiceCode\", bill.serviceLocation?.placeOfServiceCode, \"Enter the 2-digit place of service code.\");\n required(\"serviceLocation.address.line1\", bill.serviceLocation?.address?.line1, \"Enter the service facility street address.\");\n required(\"serviceLocation.address.city\", bill.serviceLocation?.address?.city, \"Enter the service facility city.\");\n required(\"serviceLocation.address.state\", bill.serviceLocation?.address?.state, \"Enter the service facility 2-letter state code.\");\n required(\"serviceLocation.address.postalCode\", bill.serviceLocation?.address?.postalCode, \"Enter the service facility ZIP code.\");\n if (!(bill.diagnoses ?? []).some((code) => code.trim())) {\n errors.diagnoses = \"Select at least one ICD-10 diagnosis code.\";\n }\n if (bill.claim.claimsAdministrator?.name && !bill.claim.claimsAdministrator.id) {\n errors[\"claim.claimsAdministrator\"] = \"Select a claims administrator from the payer directory.\";\n }\n if (bill.claim.claimsAdministrator?.payerSelectionRequired && !bill.claim.claimsAdministrator.payerId?.trim()) {\n errors[\"claim.claimsAdministrator.payerId\"] = \"Select the payer for this claims administrator.\";\n }\n if (bill.patient.dateOfBirth && !parseBillSubmissionDate(bill.patient.dateOfBirth)) errors[\"patient.dateOfBirth\"] = \"Use MM/DD/YYYY\";\n if (bill.claim.dateOfInjury && !parseBillSubmissionDate(bill.claim.dateOfInjury)) errors[\"claim.dateOfInjury\"] = \"Use MM/DD/YYYY\";\n if (bill.patient.address.state.trim().length !== 2) errors[\"patient.address.state\"] = \"Use a 2-letter state code\";\n if (!bill.billingProvider?.savedProviderId && !bill.billingProvider?.sourceBillId && bill.billingProvider?.address?.state && bill.billingProvider.address.state.trim().length !== 2) errors[\"billingProvider.address.state\"] = \"Use a 2-letter state code.\";\n if (bill.serviceLocation?.address?.state && bill.serviceLocation.address.state.trim().length !== 2) errors[\"serviceLocation.address.state\"] = \"Use a 2-letter state code.\";\n const digits = (value?: string) => value?.replace(/\\D/g, \"\") ?? \"\";\n if (!bill.billingProvider?.savedProviderId && !bill.billingProvider?.sourceBillId && bill.billingProvider?.taxId && digits(bill.billingProvider.taxId).length !== 9) errors[\"billingProvider.taxId\"] = \"Enter a valid 9-digit EIN or SSN.\";\n if (!bill.billingProvider?.savedProviderId && !bill.billingProvider?.sourceBillId && bill.billingProvider?.npi && !/^\\d{10}$/.test(digits(bill.billingProvider.npi))) errors[\"billingProvider.npi\"] = \"Enter a valid 10-digit NPI.\";\n if (bill.renderingProvider?.npi && !/^\\d{10}$/.test(digits(bill.renderingProvider.npi))) errors[\"renderingProvider.npi\"] = \"Enter a valid 10-digit NPI.\";\n if (bill.renderingProvider?.taxonomy && !/^[A-Za-z0-9]{10}$/.test(bill.renderingProvider.taxonomy.trim())) errors[\"renderingProvider.taxonomy\"] = \"Enter a valid 10-character taxonomy code.\";\n if (bill.serviceLocation?.placeOfServiceCode && !/^\\d{2}$/.test(bill.serviceLocation.placeOfServiceCode.trim())) errors[\"serviceLocation.placeOfServiceCode\"] = \"Enter a valid 2-digit place of service code.\";\n const lines = submittedLines(bill.serviceLines);\n if (!lines.length) errors.serviceLines = \"Add at least one service line\";\n lines.forEach((line, index) => {\n required(`serviceLines.${index}.code`, line.code, \"Select a procedure code.\");\n if (!Number.isInteger(line.units) || (line.units ?? 0) < 1) errors[`serviceLines.${index}.units`] = \"Enter at least 1 unit\";\n if (bill.billingMode === \"professional\" && (!Number.isFinite(line.charge) || (line.charge ?? 0) < 0)) errors[`serviceLines.${index}.charge`] = \"Enter the billed charge\";\n });\n return { valid: Object.keys(errors).length === 0, fieldErrors: errors };\n}\n\nconst css = `\n.mbsf{display:grid;gap:20px;color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbsf *{box-sizing:border-box}\n.mbsf-attention{padding:14px 16px;border-left:4px solid var(--mb-danger);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 8%,var(--mb-surface));color:var(--mb-text)}.mbsf [data-attention=true] .mbsf-input,.mbsf [data-attention=true] .mbsf-select,.mbsf [data-attention=true].mbsf-lines{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf [data-attention=true]>.mbsf-label{color:var(--mb-danger)}\n.mbsf-head,.mbsf-section-head,.mbsf-attach-row,.mbsf-actions{display:flex;align-items:center;justify-content:space-between;gap:16px}.mbsf-title{margin:0;font-size:24px}.mbsf-copy,.mbsf-help{color:var(--mb-muted);margin:5px 0 0}.mbsf-required{font-size:13px;color:var(--mb-muted);white-space:nowrap}.mbsf-star,.mbsf-error{color:var(--mb-danger)}\n.mbsf-card{min-width:0;margin:0;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}.mbsf-card[data-invalid=true]{border-color:var(--mb-danger)}.mbsf-legend{padding:0 10px;font-size:18px;font-weight:760}.mbsf-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px}.mbsf-subhead{grid-column:1/-1;margin:6px 0 -2px;padding-top:14px;border-top:1px solid var(--mb-border);font-size:15px;font-weight:780;letter-spacing:.01em}.mbsf-subhead:first-child{margin-top:0;padding-top:0;border-top:0}.mbsf-span{grid-column:1/-1}.mbsf-field{display:grid;align-content:start;gap:7px;min-width:0}.mbsf-label{font-weight:680}.mbsf-input,.mbsf-select{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbsf-input:focus,.mbsf-select:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}.mbsf-field[data-invalid=true] .mbsf-input,.mbsf-field[data-invalid=true] .mbsf-select,.mbsf-invalid-control .mbsf-input{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf-field[data-invalid=true] .mbsf-input:focus,.mbsf-field[data-invalid=true] .mbsf-select:focus{outline-color:color-mix(in srgb,var(--mb-danger) 24%,transparent)}\n.mbsf-combo{position:relative}.mbsf-menu{position:absolute;z-index:20;top:calc(100% + 5px);left:0;right:0;max-height:min(420px,52vh);overflow:auto;overscroll-behavior:contain;padding:7px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);box-shadow:0 14px 35px rgba(17,38,49,.16)}.mbsf-option{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:14px;width:100%;padding:11px 12px;border:0;border-radius:8px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}.mbsf-option+.mbsf-option{border-top:1px solid color-mix(in srgb,var(--mb-border) 65%,transparent)}.mbsf-option:hover,.mbsf-option:focus{background:color-mix(in srgb,var(--mb-accent) 9%,var(--mb-surface));outline:0}.mbsf-option-main{display:grid;gap:5px;min-width:0}.mbsf-option small{color:var(--mb-muted);overflow-wrap:anywhere;line-height:1.35}.mbsf-option-route{align-self:start;margin-top:2px;color:var(--mb-accent);font-size:13px;font-weight:750;white-space:nowrap}.mbsf-option-badges{display:flex;flex-wrap:wrap;gap:5px}.mbsf-option-badge{padding:2px 7px;border:1px solid var(--mb-border);border-radius:999px;color:var(--mb-muted);font-size:11px;line-height:1.35}.mbsf-option-affiliates{display:block}.mbsf-option-affiliates strong{color:var(--mb-text);font-size:12px}.mbsf-menu-status{padding:12px;text-align:center;color:var(--mb-muted);font-size:13px}.mbsf-directory-link{justify-self:start;border:0;padding:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:700;text-align:left;text-decoration:underline;cursor:pointer}\n.mbsf-payer-status{display:flex;align-items:center;gap:7px;color:#087f5b;font-size:13px;font-weight:650}.mbsf-payer-intro{margin:4px 0 0;color:var(--mb-muted)}.mbsf-payer-list{display:grid;gap:8px}.mbsf-payer-option{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface))}.mbsf-payer-option-main{display:grid;gap:5px;min-width:0}.mbsf-payer-option-main strong{overflow-wrap:anywhere}.mbsf-payer-signals{display:flex;flex-wrap:wrap;gap:6px}.mbsf-payer-signal{padding:2px 7px;border:1px solid var(--mb-border);border-radius:999px;color:var(--mb-muted);font-size:12px}.mbsf-payer-signal[data-state=match]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));color:#087f5b}.mbsf-payer-signal[data-state=warning]{border-color:color-mix(in srgb,#c56a00 55%,var(--mb-border));color:#9a5200}\n.mbsf-source-evidence{display:grid;gap:4px;color:var(--mb-muted);font-size:13px}.mbsf-source-evidence a{color:var(--mb-accent);font-weight:700}.mbsf-source-evidence q{color:var(--mb-text)}.mbsf-suggestions{display:flex;align-items:center;flex-wrap:wrap;gap:7px;color:var(--mb-muted);font-size:13px}.mbsf-suggestion{padding:5px 10px;border:1px solid color-mix(in srgb,var(--mb-accent) 55%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface));color:var(--mb-accent);font:inherit;font-weight:700;cursor:pointer}.mbsf-suggestion:hover,.mbsf-suggestion:focus{outline:2px solid color-mix(in srgb,var(--mb-accent) 25%,transparent)}.mbsf-claim-patterns{display:grid;gap:4px;margin-top:2px;font-size:13px}.mbsf-claim-patterns[data-state=match]{color:#087f5b}.mbsf-claim-patterns[data-state=warning]{color:#9a5200}.mbsf-claim-pattern-list{color:var(--mb-muted)}\n.mbsf-chips,.mbsf-quick-picks{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:8px}.mbsf-chip,.mbsf-quick-pick{display:inline-flex;align-items:center;gap:7px;padding:5px 9px;border:1px solid var(--mb-border);border-radius:999px;background:var(--mb-input)}.mbsf-chip button{border:0;background:transparent;color:var(--mb-muted);cursor:pointer;font:inherit}.mbsf-quick-pick{color:var(--mb-text);font:inherit;cursor:pointer}.mbsf-quick-pick[data-selected=true]{border-color:var(--mb-accent);color:var(--mb-accent)}\n.mbsf-segments{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);overflow:hidden}.mbsf-segment{min-height:44px;border:0;border-right:1px solid var(--mb-border);background:var(--mb-input);color:var(--mb-text);font:inherit;font-weight:700;cursor:pointer}.mbsf-segment:last-child{border-right:0}.mbsf-segment[aria-pressed=true]{background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mbsf-lines{margin-top:18px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);overflow:visible}.mbsf-lines[data-invalid=true]{border-color:var(--mb-danger)}.mbsf-line-head,.mbsf-line{display:grid;grid-template-columns:minmax(190px,1.05fr) minmax(190px,1.3fr) minmax(112px,.7fr) 100px 120px 42px;gap:12px;align-items:start;padding:12px}.mbsf-line-head{color:var(--mb-muted);font-size:13px;font-weight:700;border-bottom:1px solid var(--mb-border)}.mbsf-line{border-bottom:1px solid var(--mb-border)}.mbsf-line:last-child{border-bottom:0}.mbsf-line [data-invalid=true] .mbsf-input{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf-money{padding-top:12px;text-align:right;font-variant-numeric:tabular-nums}.mbsf-dx{display:flex;flex-wrap:wrap;gap:5px;padding-top:6px}.mbsf-dx-chip{width:30px;height:30px;border:1px solid var(--mb-border);border-radius:8px;background:var(--mb-surface);color:var(--mb-muted);font:inherit;font-size:13px;font-weight:750;cursor:pointer}.mbsf-dx-chip[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-accent)}.mbsf-total{display:flex;justify-content:flex-end;gap:45px;padding:16px 56px 16px 16px;font-size:17px;font-weight:760}\n.mbsf-icon-btn{width:40px;height:42px;border:0;background:transparent;color:var(--mb-text);font-size:22px;cursor:pointer}.mbsf-secondary{min-height:40px;padding:8px 14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}.mbsf-attach-list{display:grid;gap:10px;margin-bottom:18px}.mbsf-attach-row{padding:14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius)}.mbsf-attach-row[data-auto=true]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));background:color-mix(in srgb,#159447 5%,var(--mb-surface))}.mbsf-attach-main{display:flex;align-items:center;gap:12px;min-width:0;flex:1}.mbsf-attach-type{width:min(360px,32vw);flex:0 1 360px}.mbsf-attach-type .mbsf-label{display:block;margin-bottom:6px;font-size:12px}.mbsf-attach-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}.mbsf-file{min-width:0}.mbsf-file strong{overflow-wrap:anywhere}.mbsf-badge{display:inline-block;margin-left:8px;padding:2px 7px;border:1px solid var(--mb-border);border-radius:7px;color:var(--mb-muted);font-size:12px;font-weight:600}.mbsf-drop{display:grid;width:100%;place-items:center;min-height:210px;padding:30px;border:2px dashed color-mix(in srgb,var(--mb-muted) 55%,transparent);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));color:var(--mb-text);font:inherit;text-align:center;cursor:pointer}.mbsf-drop[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface))}.mbsf-alert{padding:12px 14px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger)}.mbsf-actions{justify-content:flex-end}.mbsf-submit{min-width:180px;min-height:48px;padding:11px 24px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:780;cursor:pointer}\n@media(max-width:820px){.mbsf{gap:16px}.mbsf-grid{grid-template-columns:1fr}.mbsf-span{grid-column:auto}.mbsf-card{padding:18px 16px}.mbsf-line-head{display:none}.mbsf-line{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 86px;gap:14px;padding:18px 16px}.mbsf-line>div:before{display:block;margin-bottom:6px;color:var(--mb-muted);font-size:12px;font-weight:700;content:attr(data-label)}.mbsf-line>div:nth-child(1),.mbsf-line>div:nth-child(2),.mbsf-line>div:nth-child(3){grid-column:1/-1}.mbsf-money{align-self:end;padding:0 0 12px;text-align:right}.mbsf-line .mbsf-icon-btn{position:absolute;right:8px;bottom:3px}.mbsf-total{padding:16px 18px;gap:24px}.mbsf-head{align-items:flex-start}.mbsf-segments{grid-template-columns:repeat(3,minmax(0,1fr))}.mbsf-segment{min-width:0;padding:8px 4px;border-right:1px solid var(--mb-border);border-bottom:0;font-size:13px}.mbsf-segment:last-child{border-right:0}.mbsf-payer-option{align-items:flex-start}.mbsf-attach-row{align-items:flex-start;flex-wrap:wrap}.mbsf-attach-main{align-items:flex-start;flex-basis:calc(100% - 150px)}.mbsf-attach-type{width:100%;flex-basis:100%;order:3}.mbsf-attach-actions{margin-left:auto}.mbsf-drop{min-height:190px;padding:24px 18px}.mbsf-actions{position:sticky;bottom:86px;z-index:10}.mbsf.mbsf-lifecycle-correction .mbsf-actions{position:static;bottom:auto}.mbsf-submit{width:100%}}\n`;\n\nfunction RequiredMark(): ReactElement { return <span className=\"mbsf-star\"> *</span>; }\nfunction Field({ label, required, error, invalid, path, span, children }: { label: string; required?: boolean; error?: string | undefined; invalid?: boolean; path?: string; span?: boolean; children: ReactNode }): ReactElement {\n return <label className={`mbsf-field${span ? \" mbsf-span\" : \"\"}`} data-field-path={path} data-invalid={Boolean(error) || invalid}><span className=\"mbsf-label\">{label}{required ? <RequiredMark /> : null}</span>{children}{error ? <small className=\"mbsf-error\" role=\"alert\">{error}</small> : null}</label>;\n}\nfunction TextDateInput({ value, onChange, disabled, required, ariaLabel }: { value?: string | null | undefined; onChange: (value: string) => void; disabled: boolean; required?: boolean; ariaLabel: string }): ReactElement {\n const [display, setDisplay] = useState(() => formatBillSubmissionDate(value));\n const [invalid, setInvalid] = useState(false);\n useEffect(() => { setDisplay(formatBillSubmissionDate(value)); setInvalid(false); }, [value]);\n return <><input className=\"mbsf-input\" type=\"text\" inputMode=\"numeric\" autoComplete=\"off\" placeholder=\"MM/DD/YYYY\" aria-label={ariaLabel} aria-invalid={invalid} required={required} disabled={disabled} value={display} onChange={(event) => {\n const next = event.target.value; const parsed = parseBillSubmissionDate(next); setDisplay(next); setInvalid(Boolean(next && !parsed));\n if (!next.trim()) onChange(\"\"); else if (parsed) onChange(parsed);\n }} onBlur={() => setInvalid(Boolean(display && !parseBillSubmissionDate(display)))} />{invalid ? <small className=\"mbsf-error\">Use MM/DD/YYYY</small> : null}</>;\n}\n\ntype ComboOption = { id: string; label: string; detail?: string; badges?: string[]; affiliatedEntities?: string[]; trailing?: string };\nfunction ComboBox({ value, placeholder, options, disabled, loading, loadingMore, invalid, preserveValueOnOpen = false, filterOptions = true, onOpen, onQuery, onEndReached, onSelect, createOption, ariaLabel }: { value: string; placeholder: string; options: ComboOption[]; disabled: boolean; loading?: boolean; loadingMore?: boolean; invalid?: boolean; preserveValueOnOpen?: boolean; filterOptions?: boolean; onOpen?: () => void; onQuery?: (query: string) => void; onEndReached?: () => void; onSelect: (option: ComboOption) => void; createOption?: (query: string) => ComboOption | null; ariaLabel: string }): ReactElement {\n const [open, setOpen] = useState(false); const [query, setQuery] = useState(\"\");\n const visible = useMemo(() => {\n const q = query.trim().toLowerCase();\n const matches = q && filterOptions ? options.filter((option) => `${option.id} ${option.label} ${option.detail ?? \"\"} ${(option.badges ?? []).join(\" \")} ${(option.affiliatedEntities ?? []).join(\" \")} ${option.trailing ?? \"\"}`.toLowerCase().includes(q)) : options;\n const custom = createOption?.(query) ?? null;\n return custom && !matches.some((option) => option.id.toUpperCase() === custom.id.toUpperCase()) ? [...matches, custom] : matches;\n }, [createOption, filterOptions, options, query]);\n const showMenu = open;\n return <div className=\"mbsf-combo\"><input className=\"mbsf-input\" role=\"combobox\" aria-label={ariaLabel} aria-invalid={invalid} aria-expanded={showMenu} autoComplete=\"off\" disabled={disabled} placeholder={placeholder} value={open ? query : value} onFocus={() => { const next = preserveValueOnOpen ? value : \"\"; setOpen(true); setQuery(next); onOpen?.(); if (next) onQuery?.(next); }} onChange={(event) => { setOpen(true); setQuery(event.target.value); onQuery?.(event.target.value); }} onBlur={() => setTimeout(() => setOpen(false), 120)} />{showMenu ? <div className=\"mbsf-menu\" role=\"listbox\" onScroll={(event) => { const menu = event.currentTarget; if (menu.scrollHeight - menu.scrollTop - menu.clientHeight < 120) onEndReached?.(); }}>{loading && !visible.length ? <div className=\"mbsf-menu-status\">Loading…</div> : visible.length ? visible.map((option) => <button className=\"mbsf-option\" type=\"button\" role=\"option\" key={option.id} onMouseDown={(event) => event.preventDefault()} onClick={() => { onSelect(option); setOpen(false); setQuery(\"\"); }}><span className=\"mbsf-option-main\"><strong>{option.label}</strong>{option.detail ? <small>{option.detail}</small> : null}{option.badges?.length ? <span className=\"mbsf-option-badges\">{option.badges.map((badge) => <span className=\"mbsf-option-badge\" key={badge}>{badge}</span>)}</span> : null}{option.affiliatedEntities?.length ? <small className=\"mbsf-option-affiliates\"><strong>Affiliated entities:</strong> {option.affiliatedEntities.join(\", \")}</small> : null}</span>{option.trailing ? <span className=\"mbsf-option-route\">{option.trailing}</span> : null}</button>) : <div className=\"mbsf-option\">No matches</div>}{loadingMore ? <div className=\"mbsf-menu-status\">Loading more…</div> : null}</div> : null}</div>;\n}\n\nfunction focusFirstInvalid(form: HTMLFormElement): void {\n const field = form.querySelector<HTMLElement>('[data-invalid=\"true\"]');\n if (!field) return;\n const control = field.querySelector<HTMLElement>('input,select,textarea,button,[tabindex]:not([tabindex=\"-1\"])');\n control?.focus({ preventScroll: true });\n const fieldRect = field.getBoundingClientRect();\n let scrollParent: HTMLElement | null = field.parentElement;\n while (scrollParent) {\n const style = window.getComputedStyle(scrollParent);\n if (/(auto|scroll)/.test(style.overflowY) && scrollParent.scrollHeight > scrollParent.clientHeight) break;\n scrollParent = scrollParent.parentElement;\n }\n if (scrollParent) {\n const parentRect = scrollParent.getBoundingClientRect();\n scrollParent.scrollTo({ top: Math.max(0, scrollParent.scrollTop + fieldRect.top - parentRect.top - 24), behavior: \"smooth\" });\n } else {\n window.scrollTo({ top: Math.max(0, window.scrollY + fieldRect.top - 24), behavior: \"smooth\" });\n }\n}\n\nfunction customProcedureOption(query: string): ComboOption | null {\n const code = query.trim().toUpperCase().replace(/\\s+/g, \"\");\n if (!/^(?:\\d{5}|[A-Z]\\d{4}|ML(?:20[0-5]|PRR))$/.test(code)) return null;\n return { id: code, label: code, detail: \"Use this CPT, HCPCS, or medical-legal code\" };\n}\n\nfunction mergeOptions<T extends { code: string }>(defaults: T[], supplied: T[] | undefined): T[] {\n const map = new Map(defaults.map((item) => [item.code.toUpperCase(), item]));\n supplied?.forEach((item) => map.set(item.code.toUpperCase(), item)); return [...map.values()];\n}\n\nfunction mergeDiagnosisOptions(options: BillSubmissionDiagnosisOption[]): BillSubmissionDiagnosisOption[] {\n return [...new Map(options.map((item) => [item.code.toUpperCase(), item])).values()]\n .sort((left, right) => left.code.localeCompare(right.code, undefined, { numeric: true }));\n}\n\nexport function normalizeClaimsAdministratorName(value: string): string {\n return value.toUpperCase().replace(/\\[[^\\]]*]/g, \" \").replace(/\\b(?:INCORPORATED|INC|COMPANY|CO|CORPORATION|CORP|GROUP|INSURANCE|SERVICES)\\b/g, \" \").replace(/[^A-Z0-9]+/g, \" \").trim().replace(/\\s+/g, \" \");\n}\n\nexport function exactClaimsAdministratorMatch(results: BillReviewPayer[], suppliedName: string): BillReviewPayer | undefined {\n const normalized = normalizeClaimsAdministratorName(suppliedName);\n return results.find((payer) => normalizeClaimsAdministratorName(payer.name) === normalized)\n ?? results.find((payer) => payer.confidence === \"high\" && payer.recommended);\n}\n\nexport function claimsAdministratorRecommendations(results: BillReviewPayer[], limit = 5): BillReviewPayer[] {\n return [...results]\n .sort((left, right) => Number(Boolean(right.recommended)) - Number(Boolean(left.recommended)))\n .slice(0, Math.max(0, limit));\n}\n\nexport function claimNumberPatternMatches(\n pattern: NonNullable<BillReviewPayer[\"claimNumberPatterns\"]>[number],\n claimNumber: string,\n): boolean | null {\n const example = pattern.example?.trim();\n if (example && /9{2,}/.test(example)) {\n const expression = [...example].map((character) => character === \"9\"\n ? \"\\\\d\"\n : character.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"\");\n return new RegExp(`^${expression}$`, \"i\").test(claimNumber.trim());\n }\n return pattern.matches ?? null;\n}\n\n/**\n * Form-state claims administrator for a directory pick. When the administrator\n * requires payer selection it carries the payer (routing payer) choices and\n * requires an explicit user choice; administrators without routing payers stay a\n * plain `{ id, name }` reference.\n */\nexport function chooseClaimsAdministrator(\n payer: Pick<BillReviewPayer, \"id\" | \"name\" | \"payerSelectionRequired\" | \"payers\">,\n selectedPayerId?: string,\n): NonNullable<BillSubmissionInput[\"claim\"][\"claimsAdministrator\"]> {\n if (!payer.payerSelectionRequired) return { id: payer.id, name: payer.name };\n const payers = (payer.payers ?? []).map((option) => ({ ...option }));\n const resolvedPayerId = selectedPayerId && payers.some((option) => option.id === selectedPayerId)\n ? selectedPayerId\n : undefined;\n return {\n id: payer.id,\n name: payer.name,\n payerSelectionRequired: true,\n ...(payers.length ? { payers } : {}),\n ...(resolvedPayerId ? { payerId: resolvedPayerId } : {}),\n };\n}\n\n/**\n * The claims administrator reference exactly as submitted to MindBill: picker\n * metadata (payerSelectionRequired, payers) stays client-side and the chosen\n * payerId rides on the wire only when set.\n */\nexport function submittedClaimsAdministrator(\n administrator: NonNullable<BillSubmissionInput[\"claim\"][\"claimsAdministrator\"]>,\n): { id: string; name: string; payerId?: string } {\n return {\n id: administrator.id ?? \"\",\n name: administrator.name,\n ...(administrator.payerId ? { payerId: administrator.payerId } : {}),\n };\n}\n\nexport type BillSubmissionSectionId =\n | \"header\"\n | \"patient\"\n | \"claim\"\n | \"providers\"\n | \"serviceLines\"\n | \"attachments\"\n | \"actions\";\n\ntype BillSubmissionSections = Record<BillSubmissionSectionId, ReactNode>;\nconst BillSubmissionSectionsContext = createContext<BillSubmissionSections | null>(null);\n\nfunction BillSubmissionSection({ id }: { id: BillSubmissionSectionId }): ReactElement {\n const sections = useContext(BillSubmissionSectionsContext);\n if (!sections) throw new Error(\"Bill submission sections must be rendered inside BillSubmissionForm.\");\n return <>{sections[id]}</>;\n}\n\nexport function BillSubmissionHeader(): ReactElement { return <BillSubmissionSection id=\"header\" />; }\nexport function BillSubmissionPatientSection(): ReactElement { return <BillSubmissionSection id=\"patient\" />; }\nexport function BillSubmissionClaimSection(): ReactElement { return <BillSubmissionSection id=\"claim\" />; }\nexport function BillSubmissionProvidersSection(): ReactElement { return <BillSubmissionSection id=\"providers\" />; }\nexport function BillSubmissionServiceLinesSection(): ReactElement { return <BillSubmissionSection id=\"serviceLines\" />; }\nexport function BillSubmissionAttachmentsSection(): ReactElement { return <BillSubmissionSection id=\"attachments\" />; }\nexport function BillSubmissionActions(): ReactElement { return <BillSubmissionSection id=\"actions\" />; }\n\nexport function BillSubmissionForm({\n initialBill, attachments = EMPTY_ATTACHMENTS, onSubmit, onSubmitted, getSession, sessionEndpoint, apiBaseUrl,\n profileOptions, profileDisplay = \"expanded\",\n fetch: fetchOverride, onListClaimsAdministrators, onSearchClaimsAdministrators, onGetClaimsAdministratorDirectory, claimsAdministratorSources, claimsAdministratorHint,\n diagnosisOptions = [], onSearchDiagnoses,\n onLookupPostalCode, procedureOptions, modifierOptions, taxonomyOptions, deliveryRoutePicker = \"auto\", deliveryRouteDialogTitle = \"Send bill\", attachmentReportTypeMode = \"auto\",\n attachmentReportTypes = BILL_SUBMISSION_REPORT_TYPES, defaultAttachmentReportType,\n appearance, className = \"bill-submission-form\",\n style, disabled = false, submitLabel = \"Submit bill\", heading = \"Bill information\",\n description = \"Review the bill details, add attachments, and submit.\",\n attentionFields = [], attentionMessage,\n children,\n}: BillSubmissionFormProps): ReactElement {\n const [bill, setBill] = useState(() => cloneInitialBill(initialBill));\n const [providerEditing, setProviderEditing] = useState(false);\n const [selectedIds, setSelectedIds] = useState(() => attachments.map((item) => item.id));\n const [removedSourceIds, setRemovedSourceIds] = useState<string[]>([]);\n const [uploads, setUploads] = useState<BillSubmissionUpload[]>([]); const [errors, setErrors] = useState<Record<string, string>>({});\n const [sourceAttachmentReportTypes, setSourceAttachmentReportTypes] = useState<Record<string, string>>(() => Object.fromEntries(attachments.flatMap((item) => item.reportTypeCode ? [[item.id, item.reportTypeCode]] : [])));\n const [validationActive, setValidationActive] = useState(false);\n const [formError, setFormError] = useState<string | null>(null); const [submitting, setSubmitting] = useState(false);\n // The delivery-method dialog staged with the validated bill.\n const [routeDialog, setRouteDialog] = useState<{ delivery: BillDeliveryOptions; value: BillSubmissionFormValue } | null>(null);\n const [routeError, setRouteError] = useState<string | null>(null);\n const [payerResults, setPayerResults] = useState<BillReviewPayer[]>([]); const [payerLoading, setPayerLoading] = useState(false);\n const [payerSuggestions, setPayerSuggestions] = useState<BillReviewPayerSuggestion[]>([]);\n const [selectedPayerMetadata, setSelectedPayerMetadata] = useState<BillReviewPayer | null>(null);\n const [payerLoadingMore, setPayerLoadingMore] = useState(false); const [payerQuery, setPayerQuery] = useState<string | null>(null); const [payerHasMore, setPayerHasMore] = useState(true);\n const [directoryOpen, setDirectoryOpen] = useState(false);\n const [directory, setDirectory] = useState<BillClaimsAdministratorDirectory | null>(null);\n const [directoryLoading, setDirectoryLoading] = useState(false);\n const [directoryError, setDirectoryError] = useState<string | null>(null);\n const [diagnosisResults, setDiagnosisResults] = useState<BillSubmissionDiagnosisOption[]>([]);\n const [diagnosisLoading, setDiagnosisLoading] = useState(false); const [diagnosisLoadingMore, setDiagnosisLoadingMore] = useState(false);\n const [diagnosisQuery, setDiagnosisQuery] = useState<string | null>(null); const [diagnosisHasMore, setDiagnosisHasMore] = useState(true);\n const [postalStatus, setPostalStatus] = useState<string | null>(null); const [dragActive, setDragActive] = useState(false);\n const formRef = useRef<HTMLFormElement>(null); const fileInput = useRef<HTMLInputElement>(null);\n const diagnosisRequest = useRef(0); const diagnosisAppendPending = useRef(false); const payerRequest = useRef(0); const payerAppendPending = useRef(false);\n const procedures = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_PROCEDURES, procedureOptions), [procedureOptions]);\n const orderedClaimsAdministratorSources = useMemo(() => [...(claimsAdministratorSources ?? [])]\n .filter((source) => source.name.trim())\n .sort((left, right) => Number(right.source.toLowerCase() === \"eams\") - Number(left.source.toLowerCase() === \"eams\")), [claimsAdministratorSources]);\n const sourceClaimsAdministratorName = orderedClaimsAdministratorSources[0]?.name.trim() ?? \"\";\n const initializationKey = useMemo(\n () => billSubmissionInitializationKey(initialBill, attachments, sourceClaimsAdministratorName),\n [initialBill, attachments, sourceClaimsAdministratorName],\n );\n const previousInitializationKey = useRef(initializationKey);\n const modifiers = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_MODIFIERS, modifierOptions), [modifierOptions]);\n const taxonomies = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_TAXONOMIES, taxonomyOptions), [taxonomyOptions]);\n const [evaluationType, setEvaluationType] = useState<BillSubmissionEvaluationType>(() => initialEvaluationType(initialBill));\n const connected = !onSubmit;\n const referenceClient = useMemo(() => (getSession || sessionEndpoint || connected) ? createBillReferenceClient({ getSession, sessionEndpoint, apiBaseUrl, fetch: fetchOverride }) : null, [getSession, sessionEndpoint, apiBaseUrl, fetchOverride, connected]);\n const submissionClient = useMemo(() => connected ? createBillSubmissionClient({ getSession, sessionEndpoint, apiBaseUrl, fetch: fetchOverride }) : null, [getSession, sessionEndpoint, apiBaseUrl, fetchOverride, connected]);\n const locked = disabled || submitting;\n const showAttachmentReportTypes = attachmentReportTypeMode === \"visible\" || (attachmentReportTypeMode === \"auto\" && bill.billingMode !== \"med_legal\");\n const forcedAttachmentReportType = showAttachmentReportTypes ? undefined : (defaultAttachmentReportType ?? MED_LEGAL_REPORT_TYPE_CODE);\n const reportTypeOptions = useMemo(() => attachmentReportTypes.map((item) => ({ id: item.code, label: item.code.replace(/^OZ:/, \"\"), detail: item.label })), [attachmentReportTypes]);\n const missingAttachmentReportType = showAttachmentReportTypes && (\n selectedIds.some((id) => !(sourceAttachmentReportTypes[id] || attachments.find((item) => item.id === id)?.reportTypeCode || defaultAttachmentReportType))\n || uploads.some((upload) => !(upload.reportTypeCode || defaultAttachmentReportType))\n );\n\n useEffect(() => {\n if (previousInitializationKey.current === initializationKey) return;\n previousInitializationKey.current = initializationKey;\n setBill(cloneInitialBill(initialBill)); setEvaluationType(initialEvaluationType(initialBill)); setSelectedIds(attachments.map((item) => item.id));\n setRemovedSourceIds([]); setUploads([]); setSourceAttachmentReportTypes(Object.fromEntries(attachments.flatMap((item) => item.reportTypeCode ? [[item.id, item.reportTypeCode]] : []))); setErrors({}); setValidationActive(false); setFormError(null); setDiagnosisResults([]);\n setDiagnosisQuery(null); setDiagnosisHasMore(true); diagnosisRequest.current += 1; diagnosisAppendPending.current = false;\n setPayerResults([]); setPayerSuggestions([]); setSelectedPayerMetadata(null); setPayerQuery(null); setPayerHasMore(true); payerRequest.current += 1; payerAppendPending.current = false;\n }, [initialBill, attachments, initializationKey]);\n useEffect(() => {\n if (!validationActive) return;\n const next = validateBillSubmission(bill).fieldErrors;\n setErrors(missingAttachmentReportType ? { ...next, attachments: \"Select a report type for every attachment.\" } : next);\n }, [bill, missingAttachmentReportType, validationActive]);\n useEffect(() => {\n const root = formRef.current;\n if (!root) return;\n const nodes = Array.from(root.querySelectorAll<HTMLElement>(\"[data-field-path]\"));\n nodes.forEach((node) => node.removeAttribute(\"data-attention\"));\n for (const requested of attentionFields) {\n const normalized = requested.replace(/\\[\\]/g, \"\");\n for (const node of nodes) {\n const actual = node.dataset.fieldPath ?? \"\";\n if (actual === requested || actual === normalized || actual.startsWith(`${normalized}.`) || normalized.startsWith(`${actual}.`)) {\n node.dataset.attention = \"true\";\n }\n }\n }\n }, [attentionFields]);\n\n const addFiles = useCallback((fileList: FileList | File[]) => {\n const files = Array.from(fileList); if (!files.length) return; setFormError(null);\n const invalid = files.find((file) => file.type !== \"application/pdf\" && !file.name.toLowerCase().endsWith(\".pdf\"));\n if (invalid) return setFormError(`${invalid.name} is not a PDF.`);\n const oversized = files.find((file) => file.size > MAX_PDF_BYTES); if (oversized) return setFormError(`${oversized.name} is larger than 25 MB.`);\n const nextBytes = [...uploads.map((item) => item.file), ...files].reduce((sum, file) => sum + file.size, 0);\n if (nextBytes > MAX_UPLOAD_BYTES) return setFormError(\"Attachments exceed the 100 MB upload limit.\");\n if (selectedIds.length + uploads.length + files.length > MAX_DOCUMENTS) return setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n setUploads((current) => [...current, ...files.map((file) => ({ file, documentType: \"other\" as const, ...(defaultAttachmentReportType ? { reportTypeCode: defaultAttachmentReportType } : {}) }))]);\n }, [defaultAttachmentReportType, selectedIds.length, uploads]);\n useEffect(() => {\n const over = (event: DragEvent) => { if (event.dataTransfer?.types.includes(\"Files\")) { event.preventDefault(); setDragActive(true); } };\n const leave = (event: DragEvent) => { if (!event.relatedTarget) setDragActive(false); };\n const drop = (event: DragEvent) => { if (event.dataTransfer?.files.length) { event.preventDefault(); setDragActive(false); addFiles(event.dataTransfer.files); } };\n window.addEventListener(\"dragover\", over); window.addEventListener(\"dragleave\", leave); window.addEventListener(\"drop\", drop);\n return () => { window.removeEventListener(\"dragover\", over); window.removeEventListener(\"dragleave\", leave); window.removeEventListener(\"drop\", drop); };\n }, [addFiles]);\n\n const setAddress = (patch: Partial<BillSubmissionAddress>) => setBill((current) => ({ ...current, patient: { ...current.patient, address: { ...current.patient.address, ...patch } } }));\n const setLine = (index: number, patch: Partial<BillSubmissionInput[\"serviceLines\"][number]>) => setBill((current) => ({ ...current, serviceLines: ensureTrailingBillSubmissionLine(current.serviceLines.map((line, lineIndex) => {\n if (lineIndex !== index) return line;\n const next = { ...line, ...patch };\n const charge = calculateBillSubmissionAllowedAmount(next, procedures);\n if (charge != null) return { ...next, charge };\n if (Object.hasOwn(patch, \"code\")) { const withoutCharge = { ...next }; delete withoutCharge.charge; return withoutCharge; }\n return next;\n })) }));\n const text = (value: string | null | undefined, onChange: (value: string) => void, options: Pick<React.InputHTMLAttributes<HTMLInputElement>, \"placeholder\" | \"maxLength\" | \"type\" | \"inputMode\"> = {}) => <input className=\"mbsf-input\" disabled={locked} value={value ?? \"\"} onChange={(event) => onChange(event.target.value)} {...options} />;\n const loadPayers = useCallback((query: string, append = false): void => {\n const trimmed = query.trim();\n const list = onListClaimsAdministrators ?? referenceClient?.listClaimsAdministrators;\n const legacySearch = onSearchClaimsAdministrators ?? referenceClient?.searchClaimsAdministrators;\n if (!list && !legacySearch) return;\n const continuing = append && payerQuery === trimmed;\n if (continuing && (!payerHasMore || payerAppendPending.current)) return;\n const offset = continuing ? payerResults.length : 0;\n const request = ++payerRequest.current;\n if (continuing) { payerAppendPending.current = true; setPayerLoadingMore(true); }\n else { setPayerLoading(true); setPayerLoadingMore(false); setPayerQuery(trimmed); setPayerHasMore(true); }\n const page: Promise<BillReviewPayerPage> = list\n ? list({ query: trimmed, claimNumber: bill.claim.claimNumber, ...(sourceClaimsAdministratorName ? { sourceClaimsAdministratorName } : {}), ...(bill.claim.employer ? { employerName: bill.claim.employer } : {}), limit: PAYER_PAGE_SIZE, offset })\n : legacySearch!(trimmed, bill.claim.claimNumber).then((results): BillReviewPayerPage => ({ results, total: results.length }));\n void page.then((result) => {\n if (request !== payerRequest.current) return;\n setPayerResults((current) => {\n const combined = continuing ? [...current, ...result.results] : result.results;\n return [...new Map(combined.map((payer) => [payer.id, payer])).values()];\n });\n if (!continuing) setPayerSuggestions(result.suggestions ?? []);\n setPayerHasMore(result.nextOffset != null ? result.nextOffset > offset : offset + result.results.length < result.total);\n }).catch((caught: unknown) => {\n if (request === payerRequest.current) setFormError(caught instanceof Error ? caught.message : \"Claims administrator search is unavailable.\");\n }).finally(() => {\n if (request !== payerRequest.current) return;\n payerAppendPending.current = false; setPayerLoading(false); setPayerLoadingMore(false);\n });\n }, [bill.claim.claimNumber, bill.claim.employer, onListClaimsAdministrators, onSearchClaimsAdministrators, payerHasMore, payerQuery, payerResults.length, referenceClient, sourceClaimsAdministratorName]);\n const searchPayers = (query: string) => {\n setSelectedPayerMetadata(null);\n setBill((current) => {\n const selected = current.claim.claimsAdministrator;\n if (selected?.id && selected.name === query) return current;\n return { ...current, claim: { ...current.claim, claimsAdministrator: { name: query } } };\n });\n loadPayers(query);\n };\n const loadDiagnoses = (query: string, append = false) => {\n const trimmed = query.trim();\n const search = onSearchDiagnoses ?? referenceClient?.searchDiagnosisCodes;\n if (!search) { setDiagnosisResults(mergeDiagnosisOptions(diagnosisOptions)); setDiagnosisHasMore(false); setDiagnosisQuery(trimmed); return; }\n const continuing = append && diagnosisQuery === trimmed;\n if (continuing && (!diagnosisHasMore || diagnosisAppendPending.current)) return;\n const offset = continuing ? diagnosisResults.length : 0;\n const request = ++diagnosisRequest.current;\n if (continuing) { diagnosisAppendPending.current = true; setDiagnosisLoadingMore(true); }\n else { setDiagnosisLoading(true); setDiagnosisLoadingMore(false); setDiagnosisQuery(trimmed); setDiagnosisHasMore(true); }\n void search(trimmed, DIAGNOSIS_PAGE_SIZE, offset).then((page) => {\n if (request !== diagnosisRequest.current) return;\n setDiagnosisResults((current) => mergeDiagnosisOptions(continuing ? [...current, ...page] : page));\n setDiagnosisHasMore(page.length >= DIAGNOSIS_PAGE_SIZE);\n }).catch(() => {\n if (request === diagnosisRequest.current && !continuing) setDiagnosisResults([]);\n }).finally(() => {\n if (request !== diagnosisRequest.current) return;\n diagnosisAppendPending.current = false; setDiagnosisLoading(false); setDiagnosisLoadingMore(false);\n });\n };\n const searchDiagnoses = (query: string) => loadDiagnoses(query);\n const diagnosisChoices = useMemo(() => mergeDiagnosisOptions([...diagnosisOptions, ...diagnosisResults]), [diagnosisOptions, diagnosisResults]);\n const updatePostalCode = (postalCode: string) => {\n setAddress({ postalCode }); setPostalStatus(null); const lookup = onLookupPostalCode ?? referenceClient?.lookupPostalCode;\n if (!lookup || !/^\\d{5}$/.test(postalCode)) return;\n setPostalStatus(\"Looking up ZIP…\"); void lookup(postalCode).then((place) => { if (!place) return setPostalStatus(\"ZIP not found\"); setAddress({ city: place.city, state: place.state.toUpperCase() }); setPostalStatus(`${place.city}, ${place.state.toUpperCase()} filled from ZIP`); }).catch(() => setPostalStatus(\"ZIP lookup unavailable\"));\n };\n const changeEvaluation = (type: BillSubmissionEvaluationType) => {\n setEvaluationType(type); setBill((current) => ({ ...current, diagnoses: applyBillSubmissionEvaluationDiagnoses(current.diagnoses, type), renderingProvider: { ...current.renderingProvider, isAme: type === \"ame\", isQme: type !== \"ame\", ...(type === \"psych_qme\" && !current.renderingProvider?.specialty ? { specialty: \"Psychiatry\" } : {}) }, serviceLines: applyBillSubmissionEvaluationModifiers(current.serviceLines, type) }));\n };\n const lineCharge = (line: BillSubmissionInput[\"serviceLines\"][number]) => calculateBillSubmissionAllowedAmount(line, procedures) ?? (Number.isFinite(line.charge) ? Number(line.charge) : undefined);\n const total = submittedLines(bill.serviceLines).reduce((sum, line) => sum + (lineCharge(line) ?? 0), 0);\n\n async function submit(): Promise<void> {\n const clean: BillSubmissionInput = { ...cloneBill(bill), serviceLines: submittedLines(bill.serviceLines).map((line) => { const charge = lineCharge(line); return charge == null ? line : { ...line, charge }; }) };\n const validation = validateBillSubmission(clean);\n const fieldErrors = missingAttachmentReportType ? { ...validation.fieldErrors, attachments: \"Select a report type for every attachment.\" } : validation.fieldErrors;\n setValidationActive(true); setErrors(fieldErrors); setFormError(null);\n if (Object.keys(fieldErrors).length) {\n const count = Object.keys(fieldErrors).length;\n const first = Object.values(fieldErrors)[0];\n setFormError(`Fix ${count} highlighted field${count === 1 ? \"\" : \"s\"} before submitting. ${first}`);\n window.requestAnimationFrame(() => { if (formRef.current) focusFirstInvalid(formRef.current); });\n return;\n }\n if (selectedIds.length + uploads.length > MAX_DOCUMENTS) return setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n const administrator = clean.claim.claimsAdministrator;\n const complete = {\n ...clean,\n ...(clean.billingProvider?.savedProviderId ? { billingProvider: { savedProviderId: clean.billingProvider.savedProviderId } } : {}),\n ...(clean.billingProvider?.sourceBillId ? { billingProvider: { sourceBillId: clean.billingProvider.sourceBillId } } : {}),\n claim: {\n ...clean.claim,\n ...(administrator ? { claimsAdministrator: submittedClaimsAdministrator(administrator) } : {}),\n },\n } as CompleteBillSubmissionInput;\n const value: BillSubmissionFormValue = { bill: complete, sourceAttachmentIds: selectedIds, sourceAttachmentReportTypes, uploads };\n // Show the delivery-method dialog (e-bill / email / fax / mail with\n // recipient overrides) before either connected or host-owned submission.\n // Required mode deliberately fails closed so correction workflows cannot\n // silently reuse the previous route when previewing the newly selected\n // claims administrator fails.\n if (deliveryRoutePicker !== \"off\" && referenceClient) {\n setSubmitting(true);\n try {\n const delivery = await referenceClient.getDeliveryPreview({\n claimsAdministratorId: complete.claim.claimsAdministrator.id,\n ...(complete.claim.claimsAdministrator.payerId ? { payerId: complete.claim.claimsAdministrator.payerId } : {}),\n ...(complete.claim.injuryState ? { injuryState: complete.claim.injuryState } : {}),\n });\n setSubmitting(false);\n setRouteError(null);\n setRouteDialog({ delivery, value });\n return;\n } catch (caught) {\n setSubmitting(false);\n if (deliveryRoutePicker === \"required\") {\n setFormError(caught instanceof Error ? caught.message : \"Delivery routes could not be loaded. Nothing was sent.\");\n return;\n }\n }\n }\n if (deliveryRoutePicker === \"required\") {\n setFormError(\"Delivery confirmation is unavailable. Nothing was sent.\");\n return;\n }\n await performSubmit(value);\n }\n\n async function performSubmit(value: BillSubmissionFormValue): Promise<void> {\n setSubmitting(true);\n try {\n if (onSubmit) {\n await onSubmit(value);\n setRouteDialog(null);\n setRouteError(null);\n return;\n }\n if (!submissionClient) throw new Error(\"The connected billing client is unavailable.\");\n const documents = await prepareBillSubmissionDocuments({\n attachments,\n selectedIds,\n uploads,\n reportTypeCodeByAttachmentId: sourceAttachmentReportTypes,\n ...(forcedAttachmentReportType ? { defaultReportTypeCode: forcedAttachmentReportType } : {}),\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n });\n const result = await submissionClient.submitBill({\n bill: value.bill,\n ...(value.submission ? { submission: value.submission } : {}),\n documents,\n });\n setRouteDialog(null);\n setRouteError(null);\n await onSubmitted?.(result);\n } catch (caught) {\n const message = caught instanceof Error ? caught.message : \"Unable to submit the bill.\";\n if (value.submission) setRouteError(message); else setFormError(message);\n }\n finally { setSubmitting(false); }\n }\n\n const claimsAdministratorError = errors[\"claim.claimsAdministrator\"];\n const choosePayer = (payer: BillReviewPayer, selectedPayerId?: string) => {\n setSelectedPayerMetadata(payer);\n setBill((current) => ({ ...current, claim: { ...current.claim, claimsAdministrator: chooseClaimsAdministrator(payer, selectedPayerId) } }));\n };\n const administrator = bill.claim.claimsAdministrator;\n const displayedPayerMetadata = selectedPayerMetadata?.id === administrator?.id ? selectedPayerMetadata : null;\n const displayedClaimPatterns = (displayedPayerMetadata?.claimNumberPatterns ?? []).map((pattern) => ({\n ...pattern,\n matches: claimNumberPatternMatches(pattern, bill.claim.claimNumber),\n }));\n const evaluatedClaimPatterns = displayedClaimPatterns.filter((pattern) => pattern.matches != null);\n const claimNumberMatches = evaluatedClaimPatterns.some((pattern) => pattern.matches);\n const claimNumberPatternState = evaluatedClaimPatterns.length ? (claimNumberMatches ? \"match\" : \"warning\") : null;\n const subpayorOptions = administrator?.payerSelectionRequired ? administrator.payers ?? [] : [];\n const subpayorError = errors[\"claim.claimsAdministrator.payerId\"];\n const selectedSubpayor = subpayorOptions.find((option) => option.id === administrator?.payerId);\n const chooseSubpayor = (payerId: string) => setBill((current) => current.claim.claimsAdministrator\n ? { ...current, claim: { ...current.claim, claimsAdministrator: { ...current.claim.claimsAdministrator, payerId } } }\n : current);\n const openAdministratorDirectory = async (): Promise<void> => {\n if (!administrator?.id) return;\n setDirectoryOpen(true); setDirectory(null); setDirectoryError(null); setDirectoryLoading(true);\n try {\n const load = onGetClaimsAdministratorDirectory ?? referenceClient?.getClaimsAdministratorDirectory;\n if (!load) throw new Error(\"Claims administrator details are unavailable.\");\n setDirectory(await load(administrator.id, bill.claim.injuryState));\n } catch (caught) {\n setDirectoryError(caught instanceof Error ? caught.message : \"Unable to load claims administrator details.\");\n } finally {\n setDirectoryLoading(false);\n }\n };\n\n const headerSection = <div className=\"mbsf-head\"><div><h3 className=\"mbsf-title\">{heading}</h3><p className=\"mbsf-copy\">{description}</p></div><span className=\"mbsf-required\"><RequiredMark /> Required</span></div>;\n\n const patientSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Patient</legend><div className=\"mbsf-grid\">\n <Field path=\"patient.firstName\" label=\"First name\" required error={errors[\"patient.firstName\"]}>{text(bill.patient.firstName, (firstName) => setBill((c) => ({ ...c, patient: { ...c.patient, firstName } })))}</Field>\n <Field path=\"patient.lastName\" label=\"Last name\" required error={errors[\"patient.lastName\"]}>{text(bill.patient.lastName, (lastName) => setBill((c) => ({ ...c, patient: { ...c.patient, lastName } })))}</Field>\n <Field label=\"Middle name\">{text(bill.patient.middleName, (middleName) => setBill((c) => ({ ...c, patient: { ...c.patient, middleName } })))}</Field>\n <Field label=\"Phone (optional)\">{text(bill.patient.phone, (phone) => setBill((c) => ({ ...c, patient: { ...c.patient, phone } })), { type: \"tel\" })}</Field>\n <Field path=\"patient.dateOfBirth\" label=\"Date of birth\" required error={errors[\"patient.dateOfBirth\"]}><TextDateInput ariaLabel=\"Date of birth\" value={bill.patient.dateOfBirth} disabled={locked} required onChange={(dateOfBirth) => setBill((c) => ({ ...c, patient: { ...c.patient, dateOfBirth } }))} /></Field>\n <Field path=\"patient.address.line1\" label=\"Address\" required span error={errors[\"patient.address.line1\"]}>{text(bill.patient.address.line1, (line1) => setAddress({ line1 }), { placeholder: \"Street address\" })}</Field>\n <Field path=\"patient.address.postalCode\" label=\"ZIP\" required error={errors[\"patient.address.postalCode\"]}>{text(bill.patient.address.postalCode, updatePostalCode, { maxLength: 10 })}{postalStatus ? <small className=\"mbsf-help\">{postalStatus}</small> : null}</Field>\n <Field path=\"patient.address.city\" label=\"City\" required error={errors[\"patient.address.city\"]}>{text(bill.patient.address.city, (city) => setAddress({ city }))}</Field>\n <Field path=\"patient.address.state\" label=\"State\" required error={errors[\"patient.address.state\"]}>{text(bill.patient.address.state, (state) => setAddress({ state: state.toUpperCase() }), { maxLength: 2 })}</Field>\n </div></fieldset>;\n\n const claimSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Injury & claim</legend><div className=\"mbsf-grid\">\n <Field path=\"service.date\" label=\"Date of service\" required error={errors[\"service.date\"]}><TextDateInput ariaLabel=\"Date of service\" value={bill.service.date} disabled={locked} required onChange={(date) => setBill((c) => ({ ...c, service: { ...c.service, date } }))} /></Field>\n <Field label=\"Treatment authorization # (optional)\">{text(bill.service.authorizationNumber, (authorizationNumber) => setBill((c) => ({ ...c, service: { ...c.service, authorizationNumber } })), { placeholder: \"Utilization-review authorization number\" })}<small className=\"mbsf-help\">Rides on the bill as CMS-1500 Box 23 / 837 REF*G1.</small></Field>\n <Field path=\"claim.dateOfInjury\" label=\"Date of injury\" required error={errors[\"claim.dateOfInjury\"]}><TextDateInput ariaLabel=\"Date of injury\" value={bill.claim.dateOfInjury} disabled={locked} required onChange={(dateOfInjury) => setBill((c) => ({ ...c, claim: { ...c.claim, dateOfInjury } }))} /></Field>\n <Field path=\"claim.employer\" label=\"Employer name\" required error={errors[\"claim.employer\"]}>{text(bill.claim.employer, (employer) => setBill((c) => ({ ...c, claim: { ...c.claim, employer } })))}</Field>\n <Field path=\"claim.claimNumber\" label=\"Claim number\" required error={errors[\"claim.claimNumber\"]}>{text(bill.claim.claimNumber, (claimNumber) => setBill((c) => ({ ...c, claim: { ...c.claim, claimNumber } })))}\n {displayedClaimPatterns.length ? <div className=\"mbsf-claim-patterns\" data-state={claimNumberPatternState ?? undefined} role=\"status\">\n {claimNumberPatternState === \"match\" ? <strong>✓ Matches a known claim number pattern</strong> : claimNumberPatternState === \"warning\" ? <strong>⚠ Does not match the known claim number patterns</strong> : <strong>Known claim number patterns</strong>}\n <span className=\"mbsf-claim-pattern-list\">{displayedClaimPatterns.map((pattern) => `${pattern.pattern}${pattern.example ? ` (example: ${pattern.example})` : \"\"}`).join(\" · \")}</span>\n </div> : null}\n </Field>\n <Field label=\"WCAB / ADJ number (optional)\">{text(bill.claim.adjNumber, (adjNumber) => setBill((c) => ({ ...c, claim: { ...c.claim, adjNumber } })))}</Field>\n <Field path=\"claim.claimsAdministrator\" label=\"Claims administrator\" required span error={claimsAdministratorError} invalid={!administrator?.id}>\n <ComboBox ariaLabel=\"Claims administrator\" invalid={Boolean(claimsAdministratorError) || !administrator?.id} disabled={locked} loading={payerLoading} loadingMore={payerLoadingMore} filterOptions={false} value={administrator?.name ?? \"\"} placeholder=\"Browse or search claims administrators…\" options={payerResults.map((payer) => { const patternDetail = payer.claimNumberPatterns?.map((pattern) => `${pattern.pattern}${pattern.example ? ` (example: ${pattern.example})` : \"\"}`).join(\" · \") ?? payer.claimNumberHint ?? \"\"; return { id: payer.id, label: payer.name, detail: [payer.aliases?.length ? `Also known as ${payer.aliases.join(\", \")}` : \"\", patternDetail].filter(Boolean).join(\" · \") || \"Claims administrator\", ...(payer.affiliatedEntities?.length ? { affiliatedEntities: payer.affiliatedEntities } : {}), ...(payer.route ? { trailing: payer.route } : {}) }; })} onOpen={() => { if (payerQuery !== \"\") loadPayers(\"\"); }} onQuery={searchPayers} onEndReached={() => loadPayers(payerQuery ?? \"\", true)} onSelect={(option) => choosePayer(payerResults.find((payer) => payer.id === option.id) ?? { id: option.id, name: option.label })} />\n {orderedClaimsAdministratorSources.length ? <div className=\"mbsf-source-evidence\">{orderedClaimsAdministratorSources.map((source, index) => <span key={`${source.source}-${source.name}-${index}`}>{source.url ? <a href={source.url} target=\"_blank\" rel=\"noopener noreferrer\">{source.label}</a> : <strong>{source.label}</strong>}: <q>{source.name}</q></span>)}</div> : null}\n {claimsAdministratorHint ? <small className=\"mbsf-help\">Claims administrator in your system: {claimsAdministratorHint}</small> : null}\n {payerSuggestions.length ? <div className=\"mbsf-suggestions\"><strong>Suggested:</strong>{payerSuggestions.slice(0, 5).map((suggestion) => { const suggestedSubpayor = suggestion.payers?.find((option) => option.id === suggestion.selectedPayerId); return <button className=\"mbsf-suggestion\" type=\"button\" key={`${suggestion.id}-${suggestion.selectedPayerId ?? \"admin\"}`} title={suggestion.reason} onClick={() => choosePayer(suggestion, suggestion.selectedPayerId)}>{suggestion.name}{suggestedSubpayor ? ` · ${suggestedSubpayor.label}` : \"\"}</button>; })}</div> : null}\n {administrator?.id ? <button className=\"mbsf-directory-link\" type=\"button\" onClick={() => { void openAdministratorDirectory(); }}>View contacts and routing details for {administrator.name}</button> : <small className=\"mbsf-help\">Search the directory and choose a claims administrator.</small>}\n </Field>\n {administrator?.payerSelectionRequired ? <Field path=\"claim.claimsAdministrator.payerId\" label=\"Payer\" required span error={subpayorError}>\n {subpayorOptions.length ? <ComboBox ariaLabel=\"Payer\" invalid={Boolean(subpayorError)} disabled={locked} value={selectedSubpayor?.label ?? \"\"} placeholder=\"Select the payer named on the claim or report…\" options={subpayorOptions.map((option) => ({ id: option.id, label: option.label, ...(option.hint ? { detail: option.hint } : {}), ...(option.affiliatedEntities?.length ? { affiliatedEntities: option.affiliatedEntities } : {}) }))} onSelect={(option) => chooseSubpayor(option.id)} /> : <div className=\"mbsf-error\" role=\"alert\">No routing payers are available for {administrator.name}. Electronic submission remains blocked; contact support to correct the payer directory.</div>}\n {selectedSubpayor ? <div className=\"mbsf-payer-status\" role=\"status\"><strong>✓ Payer set:</strong> {selectedSubpayor.label}</div> : <small className=\"mbsf-help\">{administrator.name} administers multiple payers. Choose the payer named on the claim or report so MindBill can route the bill correctly.</small>}\n </Field> : null}\n <Field label=\"Injury description (optional)\" span>{text(bill.claim.description, (description) => setBill((c) => ({ ...c, claim: { ...c.claim, description } })))}</Field>\n <Field path=\"diagnoses\" label=\"Diagnosis codes (ICD-10)\" required span error={errors.diagnoses}>\n <div className=\"mbsf-quick-picks\" aria-label=\"Common diagnosis codes\">{BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS.map((option) => { const selected = (bill.diagnoses ?? []).includes(option.code); return <button className=\"mbsf-quick-pick\" data-selected={selected} type=\"button\" key={option.code} aria-pressed={selected} title={`${option.code} — ${option.description}`} onClick={() => setBill((current) => ({ ...current, diagnoses: selected ? (current.diagnoses ?? []).filter((code) => code !== option.code) : [...new Set([...(current.diagnoses ?? []), option.code])] }))}>{selected ? \"✓\" : \"+\"} {option.label}</button>; })}</div>\n <div className=\"mbsf-chips\">{(bill.diagnoses ?? []).map((code) => { const option = [...BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS, ...diagnosisChoices].find((item) => item.code === code); return <span className=\"mbsf-chip\" key={code}><strong>{code}</strong>{option?.description ? ` ${option.description}` : \"\"}<button type=\"button\" aria-label={`Remove ${code}`} onClick={() => setBill((c) => ({ ...c, diagnoses: (c.diagnoses ?? []).filter((item) => item !== code) }))}>×</button></span>; })}</div>\n <ComboBox ariaLabel=\"Add diagnosis code\" invalid={Boolean(errors.diagnoses)} disabled={locked} loading={diagnosisLoading} loadingMore={diagnosisLoadingMore} value=\"\" placeholder={(bill.diagnoses?.length ?? 0) ? `${bill.diagnoses!.length} selected — add more…` : \"Search ICD-10 codes…\"} options={diagnosisChoices.filter((item) => !(bill.diagnoses ?? []).includes(item.code)).map((item) => ({ id: item.code, label: item.code, detail: item.description }))} onOpen={() => { if (diagnosisQuery !== \"\") loadDiagnoses(\"\"); }} onQuery={searchDiagnoses} onEndReached={() => loadDiagnoses(diagnosisQuery ?? \"\", true)} onSelect={(option) => setBill((c) => ({ ...c, diagnoses: [...new Set([...(c.diagnoses ?? []), option.id])] }))} />\n </Field>\n </div></fieldset>;\n\n const compactProviders = profileDisplay === \"compact\";\n const providerErrors = Object.keys(errors).some((path) => /^(billingProvider|renderingProvider|serviceLocation)\\./.test(path));\n const providersSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Providers & place of service</legend>\n <div className=\"mbsf-grid\">\n {([ [\"billingProviders\", \"billingProvider\", \"Billing provider\"], [\"renderingProviders\", \"renderingProvider\", \"Rendering provider\"], [\"serviceLocations\", \"serviceLocation\", \"Service location\"] ] as const).map(([collection, key, label]) => {\n const options = profileOptions?.[collection];\n return options?.length ? <Field key={key} label={`Saved ${label.toLowerCase()}`}>\n <ComboBox ariaLabel={`Saved ${label.toLowerCase()}`} disabled={locked} value=\"\" placeholder={bill[key]?.name || `Choose ${label.toLowerCase()}…`} options={options.map(({ id, label: optionLabel }) => ({ id, label: optionLabel }))} onSelect={({ id }) => {\n const option = options.find((candidate) => candidate.id === id);\n if (option) setBill((current) => ({ ...current, [key]: structuredClone(option.value) }));\n }} />\n <small className=\"mbsf-help\">{bill[key]?.name ? `Current: ${bill[key]?.name}` : \"Select a profile or enter details below.\"}</small>\n </Field> : null;\n })}\n </div>\n {compactProviders ? <p className=\"mbsf-help\">{[bill.billingProvider?.name, bill.renderingProvider?.name, bill.serviceLocation?.name].filter(Boolean).join(\" · \") || \"Enter provider details or choose saved profiles.\"}</p> : null}\n <details open={!compactProviders || providerEditing || providerErrors}>\n <summary hidden={!compactProviders} onClick={(event) => { event.preventDefault(); setProviderEditing((current) => !current); }} style={{ cursor: \"pointer\", marginBottom: 12 }}>Review or edit provider details</summary>\n <div className=\"mbsf-grid\">\n <h4 className=\"mbsf-subhead\">Billing provider</h4>\n {bill.billingProvider?.savedProviderId || bill.billingProvider?.sourceBillId ? <div className=\"mbsf-span\"><p>Using {bill.billingProvider.sourceBillId ? \"this bill’s original\" : \"saved\"} billing provider: {bill.billingProvider.name}. SSN ending in {bill.billingProvider.taxIdLast4 || \"••••\"} stays on MindBill’s server.</p><button type=\"button\" className=\"mbsf-secondary\" disabled={locked} onClick={() => setBill((c) => {\n const billingProvider = { ...c.billingProvider, taxIdType: \"EIN\" as const, taxId: \"\" };\n delete billingProvider.savedProviderId;\n delete billingProvider.sourceBillId;\n delete billingProvider.taxIdLast4;\n return { ...c, billingProvider };\n })}>Enter different billing provider details</button></div> : null}\n <fieldset disabled={locked || Boolean(bill.billingProvider?.savedProviderId || bill.billingProvider?.sourceBillId)} style={{ display: \"contents\" }}>\n <Field path=\"billingProvider.name\" label=\"Billing provider name\" required error={errors[\"billingProvider.name\"]}>{text(bill.billingProvider?.name, (name) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, name } })))}</Field>\n <Field label=\"Tax ID type\"><select className=\"mbsf-select\" value={bill.billingProvider?.taxIdType ?? \"EIN\"} onChange={(event) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, taxIdType: event.target.value as \"EIN\" | \"SSN\", taxId: \"\" } }))}><option value=\"EIN\">EIN (business)</option><option value=\"SSN\">SSN (individual)</option></select></Field>\n <Field path=\"billingProvider.taxId\" label={bill.billingProvider?.taxIdType === \"SSN\" ? \"SSN\" : \"EIN\"} required error={errors[\"billingProvider.taxId\"]}><input className=\"mbsf-input\" autoComplete=\"off\" type={bill.billingProvider?.taxIdType === \"SSN\" ? \"password\" : \"text\"} inputMode=\"numeric\" value={bill.billingProvider?.taxId ?? \"\"} onChange={(event) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, taxId: event.target.value } }))} /></Field>\n <Field path=\"billingProvider.npi\" label=\"Billing provider NPI\" required error={errors[\"billingProvider.npi\"]}>{text(bill.billingProvider?.npi, (npi) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, npi } })), { inputMode: \"numeric\", maxLength: 10 })}</Field>\n <Field path=\"billingProvider.phone\" label=\"Billing provider phone\" required error={errors[\"billingProvider.phone\"]}>{text(bill.billingProvider?.phone, (phone) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, phone } })), { type: \"tel\" })}</Field>\n <Field path=\"billingProvider.address.line1\" label=\"Billing address line 1\" required span error={errors[\"billingProvider.address.line1\"]}>{text(bill.billingProvider?.address?.line1, (line1) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1, line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field label=\"Billing address line 2 (optional)\" span>{text(bill.billingProvider?.address?.line2, (line2) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2, city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"billingProvider.address.city\" label=\"Billing city\" required error={errors[\"billingProvider.address.city\"]}>{text(bill.billingProvider?.address?.city, (city) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city, state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"billingProvider.address.state\" label=\"Billing state\" required error={errors[\"billingProvider.address.state\"]}>{text(bill.billingProvider?.address?.state, (state) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: state.toUpperCase(), postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })), { maxLength: 2 })}</Field>\n <Field path=\"billingProvider.address.postalCode\" label=\"Billing ZIP\" required error={errors[\"billingProvider.address.postalCode\"]}>{text(bill.billingProvider?.address?.postalCode, (postalCode) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode } } })))}</Field>\n </fieldset>\n <h4 className=\"mbsf-subhead\">Rendering provider</h4>\n <Field path=\"renderingProvider.name\" label=\"Rendering provider name\" required error={errors[\"renderingProvider.name\"]}>{text(bill.renderingProvider?.name, (name) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, name } })))}</Field>\n <Field path=\"renderingProvider.npi\" label=\"Rendering provider NPI\" required error={errors[\"renderingProvider.npi\"]}>{text(bill.renderingProvider?.npi, (npi) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, npi } })), { inputMode: \"numeric\", maxLength: 10 })}</Field>\n <Field path=\"renderingProvider.taxonomy\" label=\"Rendering taxonomy\" required error={errors[\"renderingProvider.taxonomy\"]}><ComboBox ariaLabel=\"Rendering taxonomy\" invalid={Boolean(errors[\"renderingProvider.taxonomy\"])} disabled={locked} preserveValueOnOpen value={bill.renderingProvider?.taxonomy ?? \"\"} placeholder=\"Search specialty name or taxonomy code…\" options={taxonomies.map((item) => ({ id: item.code, label: item.description, detail: item.code }))} createOption={(query) => { const code = query.trim().toUpperCase(); return /^[A-Z0-9]{10}$/.test(code) ? { id: code, label: code, detail: \"Use this taxonomy code\" } : null; }} onSelect={(option) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, taxonomy: option.id } }))} /><small className=\"mbsf-help\">Search by specialty name or 10-character taxonomy code.</small></Field>\n <h4 className=\"mbsf-subhead\">Service facility</h4>\n <Field path=\"serviceLocation.placeOfServiceCode\" label=\"Place of service code\" required error={errors[\"serviceLocation.placeOfServiceCode\"]}>{text(bill.serviceLocation?.placeOfServiceCode, (placeOfServiceCode) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, placeOfServiceCode } })), { inputMode: \"numeric\", maxLength: 2, placeholder: \"11\" })}</Field>\n <Field path=\"serviceLocation.address.line1\" label=\"Service address line 1\" required span error={errors[\"serviceLocation.address.line1\"]}>{text(bill.serviceLocation?.address?.line1, (line1) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1, line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field label=\"Service address line 2 (optional)\" span>{text(bill.serviceLocation?.address?.line2, (line2) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2, city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"serviceLocation.address.city\" label=\"Service city\" required error={errors[\"serviceLocation.address.city\"]}>{text(bill.serviceLocation?.address?.city, (city) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city, state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"serviceLocation.address.state\" label=\"Service state\" required error={errors[\"serviceLocation.address.state\"]}>{text(bill.serviceLocation?.address?.state, (state) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: state.toUpperCase(), postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })), { maxLength: 2 })}</Field>\n <Field path=\"serviceLocation.address.postalCode\" label=\"Service ZIP\" required error={errors[\"serviceLocation.address.postalCode\"]}>{text(bill.serviceLocation?.address?.postalCode, (postalCode) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode } } })))}</Field>\n </div></details></fieldset>;\n\n const serviceLinesSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Evaluation & service lines</legend>\n <p className=\"mbsf-help\">Sets the evaluator/specialty modifier on medical-legal evaluation lines.</p>\n <div className=\"mbsf-segments\" role=\"group\" aria-label=\"Evaluation type\">{([ [\"qme\", \"QME (default)\"], [\"ame\", \"AME\"], [\"psych_qme\", \"Psych QME\"] ] as const).map(([type, label]) => <button className=\"mbsf-segment\" type=\"button\" key={type} aria-pressed={evaluationType === type} onClick={() => changeEvaluation(type)}>{label}</button>)}</div>\n <p className=\"mbsf-help\">{evaluationType === \"ame\" ? \"Agreed Medical Evaluator — eligible ML evaluation codes default to modifier -94.\" : evaluationType === \"psych_qme\" ? \"Psychiatric QME — eligible ML evaluation codes default to modifier -96 (-95 for ML200).\" : \"Qualified Medical Evaluator — eligible ML evaluation codes default to modifier -95.\"}</p>\n <div className=\"mbsf-lines\" data-field-path=\"serviceLines\" data-invalid={Boolean(errors.serviceLines)}><div className=\"mbsf-line-head\"><span>Procedure code<RequiredMark /></span><span>Modifiers</span><span>Dx</span><span>Units<RequiredMark /></span><span>Allowed</span><span /> </div>\n {bill.serviceLines.map((line, index) => <div className=\"mbsf-line\" key={index}>\n <div data-label=\"Procedure code\" data-field-path={`serviceLines.${index}.code`} data-invalid={Boolean(errors[`serviceLines.${index}.code`])}><ComboBox ariaLabel={`Procedure code ${index + 1}`} invalid={Boolean(errors[`serviceLines.${index}.code`])} disabled={locked} value={line.code} placeholder=\"Search or enter code…\" options={procedures.map((item) => ({ id: item.code, label: item.code, detail: item.description }))} createOption={customProcedureOption} onSelect={(option) => { const auto = evaluationModifier(evaluationType, option.id); setLine(index, { code: option.id, ...(auto ? { modifiers: [auto, ...(line.modifiers ?? []).filter((item) => ![\"94\", \"95\", \"96\"].includes(item.replace(/^-/, \"\")))] } : line.modifiers ? { modifiers: line.modifiers } : {}) }); }} />{line.code ? <small className=\"mbsf-help\">{procedures.find((item) => item.code === line.code)?.description ?? \"Custom CPT, HCPCS, or medical-legal code\"}</small> : null}{errors[`serviceLines.${index}.code`] ? <small className=\"mbsf-error\" role=\"alert\">{errors[`serviceLines.${index}.code`]}</small> : null}</div>\n <div data-label=\"Modifiers\"><div className=\"mbsf-chips\">{(line.modifiers ?? []).map((modifier) => <span className=\"mbsf-chip\" key={modifier}>−{modifier.replace(/^-/, \"\")}<button type=\"button\" aria-label={`Remove modifier ${modifier}`} onClick={() => setLine(index, { modifiers: (line.modifiers ?? []).filter((item) => item !== modifier) })}>×</button></span>)}</div><ComboBox ariaLabel={`Modifiers ${index + 1}`} disabled={locked} value=\"\" placeholder={(line.modifiers?.length ?? 0) ? `${line.modifiers!.length} modifier${line.modifiers!.length === 1 ? \"\" : \"s\"}` : \"Add modifiers…\"} options={modifiers.filter((item) => !(line.modifiers ?? []).includes(item.code)).map((item) => ({ id: item.code, label: `−${item.code}`, detail: item.description }))} onSelect={(option) => setLine(index, { modifiers: [...new Set([...(line.modifiers ?? []), option.id])] })} /></div>\n <div data-label=\"Dx\"><div className=\"mbsf-dx\">{(bill.diagnoses ?? []).length ? (bill.diagnoses ?? []).map((code, dxIndex) => { const pointer = dxIndex + 1; const active = (line.diagnosisPointers ?? []).includes(pointer); return <button type=\"button\" key={code} className=\"mbsf-dx-chip\" data-active={active} title={`${String.fromCharCode(64 + pointer)} — ${code}`} aria-pressed={active} aria-label={`Point line ${index + 1} at diagnosis ${code}`} onClick={() => setLine(index, { diagnosisPointers: active ? (line.diagnosisPointers ?? []).filter((item) => item !== pointer) : [...(line.diagnosisPointers ?? []), pointer].sort((left, right) => left - right) })}>{String.fromCharCode(64 + pointer)}</button>; }) : <small className=\"mbsf-help\">Add diagnoses above</small>}</div></div>\n <div data-label=\"Units\" data-field-path={`serviceLines.${index}.units`} data-invalid={Boolean(errors[`serviceLines.${index}.units`])}><input className=\"mbsf-input\" aria-label={`Units ${index + 1}`} aria-invalid={Boolean(errors[`serviceLines.${index}.units`])} type=\"number\" min={1} value={line.units ?? 1} onChange={(event) => setLine(index, { units: Number(event.target.value) })} />{errors[`serviceLines.${index}.units`] ? <small className=\"mbsf-error\" role=\"alert\">{errors[`serviceLines.${index}.units`]}</small> : null}</div>\n <div className=\"mbsf-money\" data-label=\"Allowed\">{lineCharge(line) == null ? \"—\" : lineCharge(line)!.toLocaleString(undefined, { style: \"currency\", currency: \"USD\" })}</div>\n <button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove service line ${index + 1}`} disabled={locked || (!lineHasContent(line) && index === bill.serviceLines.length - 1)} onClick={() => setBill((c) => ({ ...c, serviceLines: ensureTrailingBillSubmissionLine(c.serviceLines.filter((_, itemIndex) => itemIndex !== index)) }))}>×</button>\n </div>)}\n <div className=\"mbsf-total\"><span>Total</span><span>{total.toLocaleString(undefined, { style: \"currency\", currency: \"USD\" })}</span></div>\n </div>{errors.serviceLines ? <p className=\"mbsf-error\" role=\"alert\">{errors.serviceLines}</p> : null}\n </fieldset>;\n\n const attachmentsSection = <fieldset className=\"mbsf-card\" data-field-path=\"attachments\" data-invalid={Boolean(errors.attachments)} disabled={locked}><legend className=\"mbsf-legend\">Attachments</legend><div className=\"mbsf-attach-list\">\n {attachments.filter((attachment) => !removedSourceIds.includes(attachment.id)).map((attachment) => { const auto = attachment.autoAttached || attachment.documentType === \"w9\"; const removable = attachment.removable ?? !auto; const reportTypeCode = sourceAttachmentReportTypes[attachment.id] || attachment.reportTypeCode || defaultAttachmentReportType || \"\"; return <div className=\"mbsf-attach-row\" data-auto={auto} key={attachment.id}><div className=\"mbsf-attach-main\">{auto ? <span aria-label=\"Auto-attached\" role=\"img\">✓</span> : null}<span className=\"mbsf-file\"><strong>{attachment.fileName}</strong><span className=\"mbsf-badge\">{auto ? \"Auto-attached\" : documentLabels[attachment.documentType]}</span><span className=\"mbsf-help\" style={{ display: \"block\" }}>{attachment.description || (auto ? \"Included automatically with every bill.\" : documentLabels[attachment.documentType])}</span></span></div>{showAttachmentReportTypes ? <div className=\"mbsf-attach-type\"><ComboBox ariaLabel={`Report type for ${attachment.fileName}`} invalid={!reportTypeCode} disabled={locked} preserveValueOnOpen value={reportTypeCode} placeholder=\"Select report type…\" options={reportTypeOptions} onSelect={(option) => setSourceAttachmentReportTypes((current) => ({ ...current, [attachment.id]: option.id }))} /></div> : null}<div className=\"mbsf-attach-actions\">{attachment.previewUrl ? <a className=\"mbsf-secondary\" href={attachment.previewUrl} target=\"_blank\" rel=\"noopener noreferrer\">Preview</a> : null}{removable ? <button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove ${attachment.fileName}`} disabled={locked} onClick={() => { setSelectedIds((current) => current.filter((id) => id !== attachment.id)); setRemovedSourceIds((current) => [...new Set([...current, attachment.id])]); }}>×</button> : null}</div></div>; })}\n {uploads.map((upload, index) => { const reportTypeCode = upload.reportTypeCode || defaultAttachmentReportType || \"\"; return <div className=\"mbsf-attach-row\" key={`${upload.file.name}-${index}`}><div className=\"mbsf-attach-main\"><span className=\"mbsf-file\"><strong>{upload.file.name}</strong><span className=\"mbsf-help\" style={{ display: \"block\" }}>{(upload.file.size / 1024 / 1024).toFixed(1)} MB</span></span></div>{showAttachmentReportTypes ? <div className=\"mbsf-attach-type\"><ComboBox ariaLabel={`Report type for ${upload.file.name}`} invalid={!reportTypeCode} disabled={locked} preserveValueOnOpen value={reportTypeCode} placeholder=\"Select report type…\" options={reportTypeOptions} onSelect={(option) => setUploads((current) => current.map((item, itemIndex) => itemIndex === index ? { ...item, reportTypeCode: option.id } : item))} /></div> : null}<div className=\"mbsf-attach-actions\"><button className=\"mbsf-secondary\" type=\"button\" onClick={() => previewUploadedPdf(upload.file)}>Preview</button><button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove ${upload.file.name}`} onClick={() => setUploads((current) => current.filter((_, itemIndex) => itemIndex !== index))}>×</button></div></div>; })}\n </div>{errors.attachments ? <p className=\"mbsf-error\" role=\"alert\">{errors.attachments}</p> : null}<input ref={fileInput} hidden type=\"file\" accept=\"application/pdf,.pdf\" multiple onChange={(event) => { if (event.target.files) addFiles(event.target.files); event.target.value = \"\"; }} /><button className=\"mbsf-drop\" data-active={dragActive} type=\"button\" onClick={() => fileInput.current?.click()}><span><strong style={{ fontSize: 18 }}>Drop additional PDF files here, or click to choose</strong><span className=\"mbsf-help\" style={{ display: \"block\", marginTop: 8 }}>Add supporting documents anywhere on this screen.</span></span></button></fieldset>;\n\n const actionsSection = <>{formError ? <div className=\"mbsf-alert\" role=\"alert\">{formError}</div> : null}<div className=\"mbsf-actions\"><button className=\"mbsf-submit\" type=\"submit\" disabled={locked}>{submitting ? \"Submitting…\" : submitLabel}</button></div></>;\n const sections: BillSubmissionSections = {\n header: headerSection,\n patient: patientSection,\n claim: claimSection,\n providers: providersSection,\n serviceLines: serviceLinesSection,\n attachments: attachmentsSection,\n actions: actionsSection,\n };\n const defaultLayout = <>\n <BillSubmissionHeader />\n <BillSubmissionPatientSection />\n <BillSubmissionClaimSection />\n <BillSubmissionProvidersSection />\n <BillSubmissionServiceLinesSection />\n <BillSubmissionAttachmentsSection />\n <BillSubmissionActions />\n </>;\n\n return <BillSubmissionSectionsContext.Provider value={sections}>\n <form ref={formRef} className={`${className} mbsf`} style={{ ...mindBillAppearanceStyle(appearance), ...style }} onSubmit={(event) => { event.preventDefault(); void submit(); }} noValidate>\n <style>{css}</style>\n {attentionMessage ? <div className=\"mbsf-attention\" role=\"status\">{attentionMessage}</div> : null}\n {children ?? defaultLayout}\n {routeDialog ? (\n <SendRouteDialog\n title={deliveryRouteDialogTitle}\n delivery={routeDialog.delivery}\n submitting={submitting}\n error={routeError}\n onCancel={() => { if (!submitting) { setRouteDialog(null); setRouteError(null); } }}\n onConfirm={(submission) => { void performSubmit({ ...routeDialog.value, submission }); }}\n />\n ) : null}\n </form>\n <ClaimsAdministratorDirectoryDialog\n open={directoryOpen}\n directory={directory}\n loading={directoryLoading}\n error={directoryError}\n onClose={() => {\n setDirectoryOpen(false);\n setDirectory(null);\n setDirectoryError(null);\n }}\n />\n </BillSubmissionSectionsContext.Provider>;\n}\n","\"use client\";\n\n// Delivery-method picker shown when a bill is submitted: one\n// card per route (e-bill / email / fax / mail), the selected card expands\n// inline with its destination sub-form, and the primary button names the\n// channel. Rendered by BillSubmissionForm by default in connected mode; also\n// exported for hosts that submit through their own server.\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { BillDeliveryOptions, BillSubmissionRoute, SubmitBillInput } from \"@mindbill/browser\";\n\nconst EMAIL_RE = /[A-Za-z0-9._%+'-]+@[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*\\.[A-Za-z]{2,}/;\n\n/** First plausible email address inside a raw contact string, or null. */\nexport function extractSendRouteEmail(raw: string | null | undefined): string | null {\n if (!raw) return null;\n const match = raw.match(EMAIL_RE);\n return match ? match[0] : null;\n}\n\n/** \"(213) 555-0199\" for 10/11-digit US numbers; anything else trimmed as-is. */\nexport function formatSendRouteFax(raw: string | null | undefined): string {\n if (!raw) return \"\";\n const digits = raw.replace(/\\D/g, \"\");\n const ten = digits.length === 11 && digits.startsWith(\"1\") ? digits.slice(1) : digits;\n if (ten.length === 10) return `(${ten.slice(0, 3)}) ${ten.slice(3, 6)}-${ten.slice(6)}`;\n return raw.trim();\n}\n\n/**\n * Live format-as-you-type for the fax input: digits render progressively as\n * \"(213) 555-0199\" whether typed bare or pasted pre-formatted. A leading \"+\"\n * (international) or an overflowing value is left as typed.\n */\nexport function formatSendRouteFaxInput(raw: string): string {\n const trimmed = raw.trimStart();\n if (trimmed.startsWith(\"+\")) return raw;\n const all = trimmed.replace(/\\D/g, \"\");\n const digits = all.length === 11 && all.startsWith(\"1\") ? all.slice(1) : all;\n if (digits.length > 10 || (all.length === 11 && !all.startsWith(\"1\")) || all.length > 11) return raw;\n if (digits.length === 0) return \"\";\n if (digits.length <= 3) return `(${digits}`;\n if (digits.length <= 6) return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n}\n\nexport type SendRouteSubmission = Pick<\n SubmitBillInput,\n \"route\" | \"destination\" | \"attention\" | \"subject\" | \"note\" | \"cc\"\n>;\n\nexport type SendRouteDialogProps = {\n /** Dialog heading, e.g. \"Send bill\". */\n title?: ReactNode;\n delivery: BillDeliveryOptions;\n submitting?: boolean;\n /** Disables the confirm button while the caller uploads documents. */\n disabled?: boolean;\n error?: string | null;\n onCancel: () => void;\n onConfirm: (submission: SendRouteSubmission) => void;\n};\n\nconst css = `\n.mbrd-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,30,40,.45)}\n.mbrd{display:grid;gap:16px;width:min(560px,100%);max-height:min(86vh,860px);overflow:auto;overscroll-behavior:contain;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);color:var(--mb-text);font-family:var(--mb-font);font-size:15px;box-shadow:0 24px 60px rgba(17,38,49,.28)}\n.mbrd *{box-sizing:border-box}\n.mbrd-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.mbrd-title{margin:0;font-size:20px;font-weight:760}\n.mbrd-copy{margin:4px 0 0;color:var(--mb-muted);font-size:14px}\n.mbrd-close{border:0;background:transparent;color:var(--mb-muted);font-size:22px;line-height:1;cursor:pointer}\n.mbrd-cards{display:grid;gap:10px}\n.mbrd-card{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);transition:border-color .12s ease,background .12s ease}\n.mbrd-card[data-selected=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}\n.mbrd-card[data-disabled=true]{opacity:.55}\n.mbrd-card-main{display:flex;align-items:center;gap:12px;width:100%;padding:13px 14px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}\n.mbrd-card[data-disabled=true] .mbrd-card-main{cursor:not-allowed}\n.mbrd-radio{flex:0 0 auto;width:18px;height:18px;border:2px solid var(--mb-border);border-radius:50%;display:grid;place-items:center}\n.mbrd-card[data-selected=true] .mbrd-radio{border-color:var(--mb-accent)}\n.mbrd-card[data-selected=true] .mbrd-radio:after{content:\"\";width:9px;height:9px;border-radius:50%;background:var(--mb-accent)}\n.mbrd-card-text{min-width:0;flex:1}\n.mbrd-card-title{font-weight:700;line-height:1.3;overflow-wrap:anywhere}\n.mbrd-card-detail{margin-top:2px;color:var(--mb-muted);font-size:13px;line-height:1.35;overflow-wrap:anywhere}\n.mbrd-badges{display:flex;flex:0 0 auto;gap:6px}\n.mbrd-badge{padding:2px 8px;border:1px solid var(--mb-border);border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap}\n.mbrd-badge[data-tone=verified]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));background:color-mix(in srgb,#159447 8%,var(--mb-surface));color:#0c7a48}\n.mbrd-badge[data-tone=auto]{border-color:color-mix(in srgb,var(--mb-accent) 45%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-accent)}\n.mbrd-sub{display:grid;gap:12px;padding:12px 14px;border-top:1px solid var(--mb-border);background:color-mix(in srgb,var(--mb-accent) 2%,var(--mb-surface));border-radius:0 0 var(--mb-control-radius) var(--mb-control-radius)}\n.mbrd-choice{border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-surface)}\n.mbrd-choice[data-selected=true]{border-color:var(--mb-accent)}\n.mbrd-choice[data-disabled=true]{opacity:.55}\n.mbrd-choice-main{display:flex;align-items:center;gap:10px;width:100%;padding:9px 11px;border:0;background:transparent;color:inherit;font:inherit;font-size:13px;text-align:left;cursor:pointer}\n.mbrd-choice[data-disabled=true] .mbrd-choice-main{cursor:not-allowed}\n.mbrd-choice-title{font-weight:650;overflow-wrap:anywhere}\n.mbrd-choice-detail{margin-top:1px;color:var(--mb-muted);font-size:12px}\n.mbrd-choice-body{display:grid;gap:8px;padding:10px 11px;border-top:1px solid var(--mb-border)}\n.mbrd-field{display:grid;gap:5px;font-size:13px}\n.mbrd-label{font-weight:650}\n.mbrd-star{color:var(--mb-danger)}\n.mbrd-input,.mbrd-textarea{width:100%;padding:9px 11px;border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-input);color:var(--mb-text);font:inherit;font-size:14px}\n.mbrd-textarea{resize:vertical;min-height:74px}\n.mbrd-input:focus,.mbrd-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbrd-error{color:var(--mb-danger);font-size:12px}\n.mbrd-help{color:var(--mb-muted);font-size:12px}\n.mbrd-alert{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}\n.mbrd-actions{display:flex;justify-content:flex-end;gap:10px}\n.mbrd-cancel{min-height:42px;padding:9px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}\n.mbrd-confirm{min-height:42px;min-width:130px;padding:9px 18px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:760;cursor:pointer}\n.mbrd-confirm:disabled,.mbrd-cancel:disabled{opacity:.6;cursor:not-allowed}\n`;\n\nconst CONFIRM_LABELS: Record<BillSubmissionRoute, string> = {\n ebill: \"Send Bill\",\n email: \"Email Bill\",\n fax: \"Fax Bill\",\n mail: \"Mail Bill\",\n};\n\nfunction RouteCard({\n selected,\n disabled,\n title,\n detail,\n badges,\n onSelect,\n children,\n}: {\n selected: boolean;\n disabled?: boolean;\n title: ReactNode;\n detail?: ReactNode;\n badges?: ReactNode;\n onSelect: () => void;\n children?: ReactNode;\n}): ReactElement {\n return (\n <div className=\"mbrd-card\" data-selected={selected} data-disabled={Boolean(disabled)}>\n <button\n className=\"mbrd-card-main\"\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onSelect}\n >\n <span className=\"mbrd-radio\" aria-hidden />\n <span className=\"mbrd-card-text\">\n <span className=\"mbrd-card-title\">{title}</span>\n {detail ? <span className=\"mbrd-card-detail\" style={{ display: \"block\" }}>{detail}</span> : null}\n </span>\n {badges ? <span className=\"mbrd-badges\">{badges}</span> : null}\n </button>\n {selected && children ? <div className=\"mbrd-sub\">{children}</div> : null}\n </div>\n );\n}\n\nfunction RecipientChoice({\n selected,\n disabled,\n title,\n detail,\n onSelect,\n children,\n}: {\n selected: boolean;\n disabled?: boolean;\n title: ReactNode;\n detail?: ReactNode;\n onSelect: () => void;\n children?: ReactNode;\n}): ReactElement {\n return (\n <div className=\"mbrd-choice\" data-selected={selected} data-disabled={Boolean(disabled)}>\n <button\n className=\"mbrd-choice-main\"\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onSelect}\n >\n <span className=\"mbrd-radio\" aria-hidden style={{ width: 15, height: 15 }} />\n <span className=\"mbrd-card-text\">\n <span className=\"mbrd-choice-title\">{title}</span>\n {detail ? <span className=\"mbrd-choice-detail\" style={{ display: \"block\" }}>{detail}</span> : null}\n </span>\n </button>\n {selected && children ? <div className=\"mbrd-choice-body\">{children}</div> : null}\n </div>\n );\n}\n\nexport function SendRouteDialog({\n title = \"Send bill\",\n delivery,\n submitting = false,\n disabled = false,\n error = null,\n onCancel,\n onConfirm,\n}: SendRouteDialogProps): ReactElement {\n const ebillOption = delivery.options.find((option) => option.route === \"ebill\");\n const mailOption = delivery.options.find((option) => option.route === \"mail\");\n const recommendedRoute = delivery.recommended.route;\n const onFileEmail = extractSendRouteEmail(delivery.contacts.claimsEmail);\n const onFileFax = delivery.contacts.faxNumber?.trim() || null;\n const onFileFaxDisplay = formatSendRouteFax(onFileFax);\n const onFileMail = delivery.contacts.mailingAddress?.trim() || \"\";\n\n const [route, setRoute] = useState<BillSubmissionRoute>(recommendedRoute);\n const [emailMode, setEmailMode] = useState<\"onfile\" | \"alt\">(onFileEmail ? \"onfile\" : \"alt\");\n const [faxMode, setFaxMode] = useState<\"onfile\" | \"alt\">(onFileFax ? \"onfile\" : \"alt\");\n const [emailTo, setEmailTo] = useState(\"\");\n const [subject, setSubject] = useState(\"\");\n const [message, setMessage] = useState(\"\");\n const [ccInput, setCcInput] = useState(\"\");\n const [faxTo, setFaxTo] = useState(\"\");\n const [attention, setAttention] = useState(\"\");\n const [mailTo, setMailTo] = useState(onFileMail);\n\n useEffect(() => {\n setRoute(recommendedRoute);\n setEmailMode(onFileEmail ? \"onfile\" : \"alt\");\n setFaxMode(onFileFax ? \"onfile\" : \"alt\");\n setMailTo(onFileMail);\n }, [recommendedRoute, onFileEmail, onFileFax, onFileMail]);\n\n // Close on Escape (unless a submit is in flight — the caller owns that state).\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !submitting) onCancel();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onCancel, submitting]);\n\n const effectiveEmail = emailMode === \"onfile\" && onFileEmail ? onFileEmail : emailTo.trim();\n const effectiveFax = faxMode === \"onfile\" && onFileFax ? onFileFax : faxTo;\n const faxDigits = effectiveFax.replace(/\\D/g, \"\");\n const emailValid = EMAIL_RE.test(effectiveEmail);\n const ccList = ccInput.split(/[,;]/).map((entry) => entry.trim()).filter(Boolean);\n const ccValid = ccList.every((entry) => EMAIL_RE.test(entry));\n const faxValid = faxDigits.length >= 10;\n const mailValid = mailTo.trim().length > 2;\n const confirmDisabled =\n submitting\n || disabled\n || (route === \"email\" && (!emailValid || !ccValid))\n || (route === \"fax\" && !faxValid)\n || (route === \"mail\" && !mailValid);\n\n const submission = useMemo((): SendRouteSubmission => {\n if (route === \"email\") {\n return {\n route,\n destination: { email: effectiveEmail },\n ...(subject.trim() ? { subject: subject.trim() } : {}),\n ...(message.trim() ? { note: message.trim() } : {}),\n ...(ccList.length ? { cc: ccList } : {}),\n };\n }\n if (route === \"fax\") {\n return {\n route,\n destination: { faxNumber: effectiveFax.trim() },\n ...(attention.trim() ? { attention: attention.trim() } : {}),\n };\n }\n if (route === \"mail\") {\n return { route, destination: { mailingAddress: mailTo.trim() } };\n }\n return { route };\n // ccList derives from ccInput.\n }, [route, effectiveEmail, subject, message, ccInput, effectiveFax, attention, mailTo]);\n\n return (\n <div className=\"mbrd-overlay\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget && !submitting) onCancel(); }}>\n <style>{css}</style>\n <div className=\"mbrd\" role=\"dialog\" aria-modal=\"true\" aria-label={typeof title === \"string\" ? title : \"Send bill\"}>\n <div className=\"mbrd-head\">\n <div>\n <h3 className=\"mbrd-title\">{title}</h3>\n <p className=\"mbrd-copy\">Select the delivery method.</p>\n </div>\n <button className=\"mbrd-close\" type=\"button\" aria-label=\"Close\" disabled={submitting} onClick={onCancel}>×</button>\n </div>\n\n <div className=\"mbrd-cards\" role=\"radiogroup\" aria-label=\"Delivery method\">\n {(() => {\n const ebillCard = ebillOption ? (\n <RouteCard\n key=\"ebill\"\n selected={route === \"ebill\"}\n title={ebillOption.printAndMail ? ebillOption.label : `e-Bill to ${ebillOption.payerName || delivery.payerName}`}\n detail={[\n ebillOption.detail || null,\n !ebillOption.printAndMail && ebillOption.label.startsWith(\"e-bill \")\n ? ebillOption.label.slice(\"e-bill \".length)\n : null,\n ].filter(Boolean).join(\" · \")}\n badges={<>\n {!ebillOption.fallback ? <span className=\"mbrd-badge\" data-tone=\"verified\">Verified Route</span> : null}\n {recommendedRoute === \"ebill\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n </>}\n onSelect={() => setRoute(\"ebill\")}\n />\n ) : null;\n\n const emailCard = (\n <RouteCard\n key=\"email\"\n selected={route === \"email\"}\n title=\"Email Bill\"\n detail={onFileEmail ?? \"No claims email on file — enter a recipient.\"}\n badges={recommendedRoute === \"email\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"email\")}\n >\n <div role=\"radiogroup\" aria-label=\"Email recipient\" style={{ display: \"grid\", gap: 8 }}>\n <RecipientChoice\n selected={emailMode === \"onfile\"}\n disabled={!onFileEmail}\n title={onFileEmail ?? \"Claims email on file\"}\n detail={onFileEmail ? \"Claims contact on file\" : \"No claims email exists on file for this payer.\"}\n onSelect={() => setEmailMode(\"onfile\")}\n />\n <RecipientChoice\n selected={emailMode === \"alt\"}\n title=\"Alternative email recipient\"\n onSelect={() => setEmailMode(\"alt\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Alternative email address <span className=\"mbrd-star\">*</span></span>\n <input className=\"mbrd-input\" type=\"email\" value={emailTo} placeholder=\"user@mail.com\" onChange={(event) => setEmailTo(event.target.value)} />\n {emailTo.trim() && !EMAIL_RE.test(emailTo.trim()) ? <span className=\"mbrd-error\">Enter a valid email address.</span> : null}\n </label>\n </RecipientChoice>\n </div>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Cc — optional</span>\n <input className=\"mbrd-input\" value={ccInput} placeholder=\"adjuster@payer.com, supervisor@payer.com\" onChange={(event) => setCcInput(event.target.value)} />\n {!ccValid ? <span className=\"mbrd-error\">Each Cc entry must be a valid email address (separate with commas).</span> : null}\n </label>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Email subject — optional</span>\n <input className=\"mbrd-input\" value={subject} maxLength={255} onChange={(event) => setSubject(event.target.value)} />\n </label>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Message — optional</span>\n <textarea className=\"mbrd-textarea\" value={message} maxLength={5000} placeholder=\"Added at the top of the email body, above the bill summary.\" onChange={(event) => setMessage(event.target.value)} />\n </label>\n </RouteCard>\n );\n\n const faxCard = (\n <RouteCard\n key=\"fax\"\n selected={route === \"fax\"}\n title=\"Fax Bill\"\n detail={onFileFax ? `${onFileFaxDisplay} — payer fax on file` : \"No fax on file — enter a number.\"}\n badges={recommendedRoute === \"fax\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"fax\")}\n >\n <div role=\"radiogroup\" aria-label=\"Fax recipient\" style={{ display: \"grid\", gap: 8 }}>\n <RecipientChoice\n selected={faxMode === \"onfile\"}\n disabled={!onFileFax}\n title={onFileFax ? onFileFaxDisplay : \"Payer fax on file\"}\n detail={onFileFax ? \"Payer fax on file\" : \"No fax number exists on file for this payer.\"}\n onSelect={() => setFaxMode(\"onfile\")}\n />\n <RecipientChoice\n selected={faxMode === \"alt\"}\n title=\"Alternative fax recipient\"\n onSelect={() => setFaxMode(\"alt\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Alternative fax number <span className=\"mbrd-star\">*</span></span>\n <input className=\"mbrd-input\" inputMode=\"tel\" value={faxTo} placeholder=\"(000) 000-0000\" onChange={(event) => setFaxTo(formatSendRouteFaxInput(event.target.value))} />\n {faxTo.trim() && faxTo.replace(/\\D/g, \"\").length < 10 ? <span className=\"mbrd-error\">Enter a valid fax number (10 digits).</span> : null}\n </label>\n </RecipientChoice>\n </div>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Attention — optional</span>\n <input className=\"mbrd-input\" value={attention} maxLength={120} placeholder=\"Recipient name\" onChange={(event) => setAttention(event.target.value)} />\n <span className=\"mbrd-help\">Printed as ATTENTION on the fax cover sheet.</span>\n </label>\n </RouteCard>\n );\n\n const mailCard = (\n <RouteCard\n key=\"mail\"\n selected={route === \"mail\"}\n title=\"Mail Bill\"\n detail={onFileMail ? onFileMail.replace(/\\n/g, \", \") : \"Physical mail — enter the payer's mailing address.\"}\n badges={recommendedRoute === \"mail\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"mail\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Mailing address <span className=\"mbrd-star\">*</span></span>\n <textarea className=\"mbrd-textarea\" value={mailTo} placeholder={\"Payer Claims Dept\\nPO Box 1234\\nCity, ST 00000\"} onChange={(event) => setMailTo(event.target.value)} />\n {!mailValid ? <span className=\"mbrd-error\">Enter a mailing address.</span> : null}\n <span className=\"mbrd-help\">\n {mailOption?.printAndMail\n ? mailOption.detail\n : \"Sent as physical mail — printed and mailed to this address.\"}\n </span>\n </label>\n </RouteCard>\n );\n\n // Preference order: ebill (only when the payer has an e-route) → fax\n // and email WITH a contact on file → mail (always) → the rest last.\n const cards: ReactNode[] = [];\n if (ebillCard) cards.push(ebillCard);\n if (onFileFax) cards.push(faxCard);\n if (onFileEmail) cards.push(emailCard);\n cards.push(mailCard);\n if (!onFileFax) cards.push(faxCard);\n if (!onFileEmail) cards.push(emailCard);\n return cards;\n })()}\n </div>\n\n {error ? <div className=\"mbrd-alert\" role=\"alert\">{error}</div> : null}\n\n <div className=\"mbrd-actions\">\n <button className=\"mbrd-cancel\" type=\"button\" disabled={submitting} onClick={onCancel}>Cancel</button>\n <button\n className=\"mbrd-confirm\"\n type=\"button\"\n disabled={confirmDisabled}\n onClick={() => onConfirm(submission)}\n >\n {submitting ? \"Submitting…\" : CONFIRM_LABELS[route]}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorPayer,\n} from \"@mindbill/browser\";\n\nexport type ClaimsAdministratorDirectoryDialogProps = {\n open: boolean;\n directory?: BillClaimsAdministratorDirectory | null;\n loading?: boolean;\n error?: string | null;\n onClose: () => void;\n};\n\ntype Tab = \"main\" | \"bill-review\" | \"authorization\" | \"mailing\" | \"patterns\";\n\nconst css = `\n.mbcad-backdrop{position:fixed;z-index:1000;inset:0;display:grid;place-items:center;padding:24px;background:rgba(17,28,38,.44)}\n.mbcad-dialog{--mbcad-accent:var(--mb-accent,#176c70);--mbcad-border:var(--mb-border,#d7e0df);--mbcad-surface:var(--mb-surface,#fff);--mbcad-text:var(--mb-text,#17282d);--mbcad-muted:var(--mb-muted,#607176);display:grid;grid-template-rows:auto auto minmax(0,1fr);width:min(1180px,100%);max-height:min(860px,92vh);overflow:hidden;border:1px solid var(--mbcad-border);border-radius:14px;background:var(--mbcad-surface);color:var(--mbcad-text);box-shadow:0 28px 80px rgba(14,31,43,.28);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mbcad-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 22px;border-bottom:1px solid var(--mbcad-border)}.mbcad-head h2{margin:0;font-size:24px;line-height:1.2}.mbcad-close{width:40px;height:40px;border:0;border-radius:9px;background:color-mix(in srgb,var(--mbcad-muted) 9%,var(--mbcad-surface));color:var(--mbcad-accent);font:inherit;font-size:28px;line-height:1;cursor:pointer}\n.mbcad-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));margin:18px 22px 0;border-radius:10px;background:color-mix(in srgb,var(--mbcad-muted) 8%,var(--mbcad-surface));overflow:hidden}.mbcad-tab{min-height:64px;padding:10px;border:0;border-right:1px solid var(--mbcad-border);border-top:4px solid transparent;background:transparent;color:var(--mbcad-muted);font:inherit;font-weight:750;cursor:pointer}.mbcad-tab:last-child{border-right:0}.mbcad-tab[aria-selected=true]{border-top-color:var(--mbcad-accent);background:var(--mbcad-surface);color:var(--mbcad-text)}\n.mbcad-body{overflow:auto;padding:24px 22px 28px}.mbcad-grid{display:grid;gap:0;border:1px solid var(--mbcad-border);border-radius:10px;overflow:hidden}.mbcad-row{display:grid;grid-template-columns:minmax(180px,.8fr) minmax(0,2fr);gap:18px;padding:11px 14px;border-bottom:1px solid var(--mbcad-border)}.mbcad-row:last-child{border-bottom:0}.mbcad-row strong{font-weight:750}.mbcad-list{display:grid;gap:5px;margin:0;padding:0;list-style:none}.mbcad-list a,.mbcad-table a{color:var(--mbcad-accent);overflow-wrap:anywhere}.mbcad-payers{display:grid;gap:9px;margin:0;padding:0;list-style:none}.mbcad-payer{display:grid;gap:7px;padding:12px;border:1px solid var(--mbcad-border);border-radius:9px;background:color-mix(in srgb,var(--mbcad-muted) 3%,var(--mbcad-surface))}.mbcad-payer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mbcad-payer-route{color:var(--mbcad-accent);font-size:13px;font-weight:750;white-space:nowrap}.mbcad-payer-meta{display:flex;flex-wrap:wrap;gap:6px}.mbcad-payer-meta span{padding:3px 7px;border:1px solid var(--mbcad-border);border-radius:999px;color:var(--mbcad-muted);font-size:12px}.mbcad-payer-note{margin:0;color:var(--mbcad-muted);font-size:13px}.mbcad-table{width:100%;border-collapse:collapse;border:1px solid var(--mbcad-border);border-radius:10px;overflow:hidden}.mbcad-table th,.mbcad-table td{padding:13px 14px;border-bottom:1px solid var(--mbcad-border);text-align:left;vertical-align:top}.mbcad-table th{background:color-mix(in srgb,var(--mbcad-muted) 7%,var(--mbcad-surface));font-size:13px}.mbcad-empty{padding:36px;text-align:center;color:var(--mbcad-muted)}.mbcad-notice{padding:14px 16px;border:1px solid color-mix(in srgb,var(--mbcad-accent) 70%,var(--mbcad-border));border-radius:9px;background:color-mix(in srgb,var(--mbcad-accent) 5%,var(--mbcad-surface));font-weight:650}\n@media(max-width:760px){.mbcad-backdrop{padding:8px}.mbcad-dialog{max-height:96vh}.mbcad-head{padding:14px}.mbcad-head h2{font-size:19px}.mbcad-tabs{display:flex;overflow-x:auto;margin:10px 12px 0}.mbcad-tab{min-width:145px}.mbcad-body{padding:14px 12px 18px}.mbcad-row{grid-template-columns:1fr;gap:5px}.mbcad-table{display:block;overflow-x:auto}}\n`;\n\nfunction outbound(value: string, kind: \"phone\" | \"email\" | \"url\"): ReactElement {\n const href = kind === \"phone\" ? `tel:${value.replace(/[^+\\d]/g, \"\")}` : kind === \"email\" ? `mailto:${value}` : /^https?:\\/\\//i.test(value) ? value : `https://${value}`;\n return <a href={href} {...(kind === \"url\" ? { target: \"_blank\", rel: \"noreferrer\" } : {})}>{value}</a>;\n}\n\nfunction list(values: string[] | undefined, kind?: \"phone\" | \"email\" | \"url\"): ReactNode {\n return values?.length ? <ul className=\"mbcad-list\">{values.map((value, index) => <li key={`${value}-${index}`}>{kind ? outbound(value, kind) : value}</li>)}</ul> : \"—\";\n}\n\nfunction payerDetails(payer: BillClaimsAdministratorPayer, index: number): ReactElement {\n const identifiers = Object.entries(payer.clearinghousePayerIds ?? {}).map(([name, id]) => `${name.replace(/_/g, \" \")}: ${id}`);\n const metadata = [\n payer.optionType ? `Type: ${payer.optionType}` : null,\n payer.deliveryType ? `Delivery: ${payer.deliveryType}` : null,\n payer.clearinghouse && payer.payerId ? `${payer.clearinghouse}: ${payer.payerId}` : null,\n payer.sourceClearinghouse && payer.sourcePayerId ? `Catalog route: ${payer.sourceClearinghouse} ${payer.sourcePayerId}` : null,\n ...identifiers,\n payer.preferredClearinghouse ? `Preferred: ${payer.preferredClearinghouse}` : null,\n ].filter((value): value is string => Boolean(value));\n return <li className=\"mbcad-payer\" key={`${payer.name}-${index}`}>\n <div className=\"mbcad-payer-head\"><strong>{payer.name}</strong>{payer.route ? <span className=\"mbcad-payer-route\">{payer.route}</span> : null}</div>\n {payer.aliases?.length ? <p className=\"mbcad-payer-note\">Also known as {payer.aliases.join(\", \")}</p> : null}\n {payer.hint ? <p className=\"mbcad-payer-note\">{payer.hint}</p> : null}\n {payer.affiliatedEntities?.length ? <p className=\"mbcad-payer-note\">Affiliated with {payer.affiliatedEntities.join(\", \")}</p> : null}\n {metadata.length ? <div className=\"mbcad-payer-meta\">{metadata.map((item) => <span key={item}>{item}</span>)}</div> : null}\n </li>;\n}\n\nfunction Main({ directory }: { directory: BillClaimsAdministratorDirectory }): ReactElement {\n return <div className=\"mbcad-grid\">\n {([\n [\"Name\", directory.name ?? \"—\"], [\"Description\", directory.description ?? \"—\"], [\"Type\", directory.type ?? \"—\"],\n [\"Website\", directory.website ? outbound(directory.website, \"url\") : \"—\"],\n [\"Also known as\", list(directory.aliases)], [\"Affiliated entities\", list(directory.affiliatedEntities)],\n [\"Hours of operation\", directory.hours ?? \"—\"], [\"Telephone numbers\", list(directory.telephoneNumbers, \"phone\")],\n [\"Email addresses\", list(directory.emailAddresses, \"email\")], [\"Web portals\", list(directory.webPortals, \"url\")],\n [\"Payers\", directory.payers?.length ? <ul className=\"mbcad-payers\">{directory.payers.map(payerDetails)}</ul> : \"—\"],\n [\"Bill processing workflow\", directory.billProcessingWorkflow ?? \"—\"],\n [\"Bill processing workflow notes\", directory.billProcessingWorkflowNotes ?? \"—\"],\n [\"Claim number hint\", directory.claimNumberHint ?? \"—\"],\n ] as Array<[string, ReactNode]>).map(([label, value]) => <div className=\"mbcad-row\" key={label}><strong>{label}</strong><div>{value}</div></div>)}\n </div>;\n}\n\nfunction contacts(items: BillClaimsAdministratorContact[] | undefined, empty: string): ReactElement {\n if (!items?.length) return <div className=\"mbcad-empty\">{empty}</div>;\n return <table className=\"mbcad-table\"><thead><tr><th>Name</th><th>Telephone</th><th>Web portal</th><th>Email</th><th>Fax</th><th>Address / note</th></tr></thead><tbody>{items.map((item, index) => <tr key={`${item.name ?? \"contact\"}-${index}`}><td>{item.name ?? \"—\"}</td><td>{item.phone ? outbound(item.phone, \"phone\") : \"—\"}</td><td>{item.portalUrl ? outbound(item.portalUrl, \"url\") : \"—\"}</td><td>{item.email ? outbound(item.email, \"email\") : \"—\"}</td><td>{item.fax ?? \"—\"}</td><td>{[item.address, item.note].filter(Boolean).join(\" · \") || \"—\"}</td></tr>)}</tbody></table>;\n}\n\nexport function ClaimsAdministratorDirectoryDialog({ open, directory, loading = false, error, onClose }: ClaimsAdministratorDirectoryDialogProps): ReactElement | null {\n const [tab, setTab] = useState<Tab>(\"main\");\n useEffect(() => { if (open) setTab(\"main\"); }, [open, directory?.id]);\n useEffect(() => {\n if (!open) return;\n const close = (event: KeyboardEvent) => { if (event.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", close); return () => window.removeEventListener(\"keydown\", close);\n }, [onClose, open]);\n if (!open) return null;\n const title = directory?.name ?? \"Claims administrator directory\";\n return <div className=\"mbcad-backdrop\" onMouseDown={(event) => { if (event.target === event.currentTarget) onClose(); }}><style>{css}</style><section className=\"mbcad-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mbcad-title\">\n <header className=\"mbcad-head\"><h2 id=\"mbcad-title\">{title}</h2><button className=\"mbcad-close\" type=\"button\" aria-label=\"Close claims administrator details\" onClick={onClose}>×</button></header>\n <div className=\"mbcad-tabs\" role=\"tablist\">{([\n [\"main\", \"Main\"], [\"bill-review\", \"Bill Review\"], [\"authorization\", \"Authorization Info\"], [\"mailing\", \"Mailing Address\"], [\"patterns\", \"Claim Number Pattern\"],\n ] as Array<[Tab, string]>).map(([id, label]) => <button className=\"mbcad-tab\" type=\"button\" role=\"tab\" aria-selected={tab === id} onClick={() => setTab(id)} key={id}>{label}</button>)}</div>\n <div className=\"mbcad-body\" role=\"tabpanel\">{loading ? <div className=\"mbcad-empty\">Loading directory details…</div> : error ? <div className=\"mbcad-empty\" role=\"alert\">{error}</div> : !directory ? <div className=\"mbcad-empty\">Directory details are unavailable.</div> : tab === \"main\" ? <Main directory={directory} /> : tab === \"bill-review\" ? contacts(directory.billReview, \"No bill-review contacts are listed.\") : tab === \"authorization\" ? <>{directory.authorizationNotice ? <p className=\"mbcad-notice\">{directory.authorizationNotice}</p> : null}{contacts(directory.authorization, \"No authorization contacts are listed.\")}</> : tab === \"mailing\" ? directory.mailingAddresses?.length ? <table className=\"mbcad-table\"><thead><tr><th>Company</th><th>Address</th><th>Notes</th><th>Bill treatment types</th><th>Submission type</th></tr></thead><tbody>{directory.mailingAddresses.map((item, index) => <tr key={`${item.address}-${index}`}><td>{item.company ?? \"—\"}</td><td>{item.address}</td><td>{item.notes ?? \"—\"}</td><td>{item.billTreatmentTypes?.join(\", \") || \"—\"}</td><td>{item.submissionTypes?.join(\", \") || \"—\"}</td></tr>)}</tbody></table> : <div className=\"mbcad-empty\">No mailing addresses are listed.</div> : directory.claimNumberPatterns?.length ? <table className=\"mbcad-table\"><thead><tr><th>Length</th><th>Pattern</th><th>Example</th></tr></thead><tbody>{directory.claimNumberPatterns.map((item, index) => <tr key={`${item.pattern}-${index}`}><td>{item.length ?? \"—\"}</td><td>{item.pattern}</td><td>{item.example ?? \"—\"}</td></tr>)}</tbody></table> : <div className=\"mbcad-empty\">No claim-number patterns are listed.</div>}</div>\n </section></div>;\n}\n","import type {\n BillSubmissionDiagnosisOption,\n BillSubmissionModifierOption,\n BillSubmissionProcedureOption,\n BillSubmissionTaxonomyOption,\n} from \"./bill-submission-form\";\n\n/** Public-domain and MindBill-owned metadata. CPT descriptions are intentionally limited to the curated catalog. */\nexport const DEFAULT_BILL_SUBMISSION_PROCEDURES: BillSubmissionProcedureOption[] = [\n { code: \"ML200\", description: \"Missed appointment for a medical-legal evaluation\", allowedAmount: 503.75 },\n { code: \"ML201\", description: \"Comprehensive medical-legal evaluation\", allowedAmount: 2015 },\n { code: \"ML202\", description: \"Follow-up medical-legal evaluation\", allowedAmount: 1316.25 },\n { code: \"ML203\", description: \"Supplemental medical-legal evaluation\", allowedAmount: 650 },\n { code: \"ML204\", description: \"Medical-legal testimony\", allowedAmount: 113.75 },\n { code: \"ML205\", description: \"Review of sub rosa recordings\", allowedAmount: 81.25 },\n { code: \"MLPRR\", description: \"Medical-legal record review\", allowedAmount: 3 },\n { code: \"90791\", description: \"Psychiatric diagnostic evaluation\" },\n { code: \"90792\", description: \"Psychiatric diagnostic evaluation with medical services\" },\n { code: \"90832\", description: \"Psychotherapy, 30 minutes\" },\n { code: \"90834\", description: \"Psychotherapy, 45 minutes\" },\n { code: \"90837\", description: \"Psychotherapy, 60 minutes\" },\n { code: \"90846\", description: \"Family psychotherapy without patient\" },\n { code: \"90847\", description: \"Family psychotherapy with patient\" },\n { code: \"90853\", description: \"Group psychotherapy\" },\n { code: \"90785\", description: \"Interactive complexity\" },\n { code: \"90833\", description: \"Psychotherapy add-on, 30 minutes\" },\n { code: \"90836\", description: \"Psychotherapy add-on, 45 minutes\" },\n { code: \"90838\", description: \"Psychotherapy add-on, 60 minutes\" },\n { code: \"99202\", description: \"New patient office visit, level 2\" },\n { code: \"99203\", description: \"New patient office visit, level 3\" },\n { code: \"99204\", description: \"New patient office visit, level 4\" },\n { code: \"99205\", description: \"New patient office visit, level 5\", allowedAmount: 349.48 },\n { code: \"99211\", description: \"Established patient office visit, level 1\" },\n { code: \"99212\", description: \"Established patient office visit, level 2\" },\n { code: \"99213\", description: \"Established patient office visit, level 3\" },\n { code: \"99214\", description: \"Established patient office visit, level 4\" },\n { code: \"99215\", description: \"Established patient office visit, level 5\" },\n { code: \"96130\", description: \"Psychological testing evaluation, first hour\" },\n { code: \"96131\", description: \"Psychological testing evaluation, each additional hour\", allowedAmount: 131.96 },\n { code: \"96136\", description: \"Psychological or neuropsychological testing, first 30 minutes\" },\n { code: \"96137\", description: \"Psychological or neuropsychological testing, each additional 30 minutes\" },\n { code: \"97161\", description: \"Physical therapy evaluation, low complexity\" },\n { code: \"97162\", description: \"Physical therapy evaluation, moderate complexity\" },\n { code: \"97163\", description: \"Physical therapy evaluation, high complexity\" },\n { code: \"97110\", description: \"Therapeutic exercises\" },\n { code: \"97112\", description: \"Neuromuscular reeducation\" },\n { code: \"97140\", description: \"Manual therapy techniques\" },\n { code: \"97530\", description: \"Therapeutic activities\" },\n { code: \"98940\", description: \"Chiropractic manipulative treatment, 1-2 regions\" },\n { code: \"98941\", description: \"Chiropractic manipulative treatment, 3-4 regions\" },\n { code: \"98942\", description: \"Chiropractic manipulative treatment, 5 regions\" },\n { code: \"72100\", description: \"Spine radiograph, lumbosacral, 2-3 views\" },\n { code: \"73030\", description: \"Shoulder radiograph, complete\" },\n { code: \"72141\", description: \"MRI cervical spine without contrast\" },\n { code: \"72148\", description: \"MRI lumbar spine without contrast\" },\n { code: \"73721\", description: \"MRI lower-extremity joint without contrast\" },\n { code: \"20610\", description: \"Major joint injection or aspiration\" },\n { code: \"20552\", description: \"Trigger point injection, 1-2 muscles\" },\n { code: \"64483\", description: \"Transforaminal epidural injection, lumbar or sacral\" },\n { code: \"64635\", description: \"Destruction by neurolytic agent, paravertebral facet joint nerve\" },\n { code: \"99070\", description: \"Supplies and materials\" },\n { code: \"L0650\", description: \"Lumbar orthosis\" },\n { code: \"A4556\", description: \"Electrodes\" },\n];\n\nexport const DEFAULT_BILL_SUBMISSION_MODIFIERS: BillSubmissionModifierOption[] = [\n { code: \"92\", description: \"Primary Treating Physician evaluation\" },\n { code: \"93\", description: \"Interpreter required\" },\n { code: \"94\", description: \"Agreed Medical Evaluator\" },\n { code: \"95\", description: \"Qualified Medical Evaluator\" },\n { code: \"96\", description: \"Psychiatric/psychological evaluation\" },\n { code: \"97\", description: \"Toxicology evaluation\" },\n { code: \"98\", description: \"Oncology evaluation\" },\n { code: \"59\", description: \"Distinct procedural service\" },\n { code: \"XE\", description: \"Separate encounter\" },\n { code: \"XS\", description: \"Separate structure\" },\n { code: \"XP\", description: \"Separate practitioner\" },\n { code: \"XU\", description: \"Unusual non-overlapping service\" },\n];\n\n/** Common NUCC provider taxonomies. Consumers can extend this catalog through taxonomyOptions. */\nexport const DEFAULT_BILL_SUBMISSION_TAXONOMIES: BillSubmissionTaxonomyOption[] = [\n { code: \"103G00000X\", description: \"Clinical Neuropsychologist\" },\n { code: \"103T00000X\", description: \"Psychologist\" },\n { code: \"111N00000X\", description: \"Chiropractor\" },\n { code: \"122300000X\", description: \"Dentist\" },\n { code: \"133V00000X\", description: \"Dietitian, Registered\" },\n { code: \"163W00000X\", description: \"Registered Nurse\" },\n { code: \"183500000X\", description: \"Pharmacist\" },\n { code: \"207L00000X\", description: \"Anesthesiology\" },\n { code: \"207P00000X\", description: \"Emergency Medicine\" },\n { code: \"207Q00000X\", description: \"Family Medicine\" },\n { code: \"207R00000X\", description: \"Internal Medicine\" },\n { code: \"207RC0000X\", description: \"Cardiovascular Disease\" },\n { code: \"207RN0300X\", description: \"Nephrology\" },\n { code: \"207RP1001X\", description: \"Pulmonary Disease\" },\n { code: \"207RR0500X\", description: \"Rheumatology\" },\n { code: \"207T00000X\", description: \"Neurological Surgery\" },\n { code: \"207X00000X\", description: \"Orthopaedic Surgery\" },\n { code: \"207XS0117X\", description: \"Orthopaedic Surgery of the Spine\" },\n { code: \"207Y00000X\", description: \"Otolaryngology\" },\n { code: \"208000000X\", description: \"Pediatrics\" },\n { code: \"208100000X\", description: \"Physical Medicine & Rehabilitation\" },\n { code: \"2083X0100X\", description: \"Occupational Medicine\" },\n { code: \"2084N0400X\", description: \"Neurology\" },\n { code: \"2084P0800X\", description: \"Psychiatry\" },\n { code: \"2084P0802X\", description: \"Addiction Psychiatry\" },\n { code: \"2084P0804X\", description: \"Child & Adolescent Psychiatry\" },\n { code: \"2084S0012X\", description: \"Sleep Medicine\" },\n { code: \"2085R0202X\", description: \"Diagnostic Radiology\" },\n { code: \"208600000X\", description: \"Surgery\" },\n { code: \"2086S0105X\", description: \"Surgery of the Hand\" },\n { code: \"208D00000X\", description: \"General Practice\" },\n { code: \"208M00000X\", description: \"Hospitalist\" },\n { code: \"208VP0000X\", description: \"Pain Medicine\" },\n { code: \"213E00000X\", description: \"Podiatrist\" },\n { code: \"225100000X\", description: \"Physical Therapist\" },\n { code: \"225X00000X\", description: \"Occupational Therapist\" },\n { code: \"363A00000X\", description: \"Physician Assistant\" },\n { code: \"363L00000X\", description: \"Nurse Practitioner\" },\n];\n\nexport const BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS: Array<BillSubmissionDiagnosisOption & { label: string }> = [\n { label: \"Psych\", code: \"Z04.6\", description: \"General psychiatric examination requested by authority\" },\n { label: \"Back\", code: \"M54.50\", description: \"Low back pain, unspecified\" },\n { label: \"Neck\", code: \"M54.2\", description: \"Cervicalgia\" },\n { label: \"Left hand\", code: \"M79.642\", description: \"Pain in left hand\" },\n { label: \"Right hand\", code: \"M79.641\", description: \"Pain in right hand\" },\n { label: \"Left knee\", code: \"M25.562\", description: \"Pain in left knee\" },\n { label: \"Right knee\", code: \"M25.561\", description: \"Pain in right knee\" },\n];\n\nconst COMPOSITE_MULTIPLIERS: Record<string, number> = {\n \"93+94+96\": 2.45, \"93+94+97\": 1.95, \"93+94+98\": 1.95,\n \"92+93\": 1.1, \"93+95\": 1.1, \"93+94\": 1.45, \"93+96\": 2.1,\n \"93+97\": 1.6, \"93+98\": 1.6, \"94+96\": 2.35, \"94+97\": 1.85, \"94+98\": 1.85,\n};\n\nconst MED_LEGAL_MODIFIER_MULTIPLIERS: Record<string, number> = {\n \"92\": 1,\n \"93\": 1.1,\n \"94\": 1.35,\n \"95\": 1,\n \"96\": 2,\n \"97\": 1.5,\n \"98\": 1.5,\n};\n\nfunction medicalLegalMultiplier(modifiers: string[]): number {\n const priced = modifiers.filter((item) => MED_LEGAL_MODIFIER_MULTIPLIERS[item] !== 1);\n if (priced.length === 0) return 1;\n const composite = COMPOSITE_MULTIPLIERS[priced.join(\"+\")];\n if (composite != null) return composite;\n return priced.reduce((total, item) => total * (MED_LEGAL_MODIFIER_MULTIPLIERS[item] ?? 1), 1);\n}\n\nexport function calculateBillSubmissionAllowedAmount(\n line: { code: string; modifiers?: string[]; units?: number },\n procedures: BillSubmissionProcedureOption[] = DEFAULT_BILL_SUBMISSION_PROCEDURES,\n): number | undefined {\n const procedure = procedures.find((item) => item.code.toUpperCase() === line.code.trim().toUpperCase());\n if (procedure?.allowedAmount == null) return undefined;\n const code = procedure.code.toUpperCase();\n const units = Math.max(1, line.units ?? 1);\n const normalized = [...new Set((line.modifiers ?? []).map((item) => item.replace(/^-/, \"\").toUpperCase()))].sort();\n const multiplier = [\"ML200\", \"ML201\", \"ML202\", \"ML203\"].includes(code)\n ? medicalLegalMultiplier(normalized)\n : 1;\n return Math.round(procedure.allowedAmount * units * multiplier * 100) / 100;\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useMemo, useState } from \"react\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport type BillingDashboardBill = {\n id: string;\n billNumber?: string | number;\n externalId?: string;\n patientName: string;\n claimNumber?: string;\n payerName?: string;\n state: string;\n submittedAt?: string;\n updatedAt?: string;\n agingDays?: number;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n href?: string;\n workItemLabel?: string;\n};\n\nexport type BillAgingBucketId = \"current\" | \"31-60\" | \"61-90\" | \"91+\";\nexport type BillAgingBucket = {\n id: BillAgingBucketId;\n label: string;\n count: number;\n balance: number;\n};\nexport type BillingDashboardSummary = {\n totalBilled: number;\n totalPaid: number;\n outstanding: number;\n openCount: number;\n bills: number;\n aging: BillAgingBucket[];\n};\n\nexport type BillingComponentProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillListProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n onSelectBill?: (bill: BillingDashboardBill) => void;\n emptyState?: ReactNode;\n};\n\nexport type BillAgingSummaryProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n};\n\nexport type BillingDashboardProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n description?: ReactNode;\n onSelectBill?: (bill: BillingDashboardBill) => void;\n initialSearch?: string;\n initialState?: string;\n hideFilters?: boolean;\n};\n\nexport type BillingReportDimension = \"status\" | \"payer\" | \"aging\";\nexport type BillingReportRow = {\n key: string;\n label: string;\n billCount: number;\n totalBilled: number;\n totalPaid: number;\n balanceDue: number;\n};\nexport type BillingReportProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n groupBy?: BillingReportDimension;\n heading?: ReactNode;\n description?: ReactNode;\n};\n\nconst css = `\n.mbdash{display:grid;gap:20px;color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbdash *{box-sizing:border-box}.mbdash h2,.mbdash h3,.mbdash p{margin:0}.mbdash-copy{color:var(--mb-muted);margin-top:5px!important}.mbdash-card{min-width:0;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n.mbdash-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px}.mbdash-head h2{font-size:24px}.mbdash-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.mbdash-stat{display:grid;gap:7px;padding:20px 22px;border-right:1px solid var(--mb-border)}.mbdash-stat:last-child{border:0}.mbdash-label{color:var(--mb-muted);font-size:12px;font-weight:760;letter-spacing:.06em;text-transform:uppercase}.mbdash-value{font-size:24px;font-weight:780;font-variant-numeric:tabular-nums}.mbdash-aging{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.mbdash-aging-item{display:grid;gap:5px;padding:16px 20px;border-right:1px solid var(--mb-border)}.mbdash-aging-item:last-child{border:0}.mbdash-aging-item strong{font-size:18px;font-variant-numeric:tabular-nums}.mbdash-aging-item span:last-child{color:var(--mb-muted);font-size:13px}\n.mbdash-filters{display:grid;grid-template-columns:minmax(240px,1fr) minmax(180px,260px);gap:12px}.mbdash-control{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbdash-control:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbdash-table-wrap{overflow:auto}.mbdash-table{width:100%;border-collapse:collapse}.mbdash-table th{padding:13px 16px;border-bottom:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px;letter-spacing:.04em;text-align:left;text-transform:uppercase;white-space:nowrap}.mbdash-table td{padding:16px;border-bottom:1px solid var(--mb-border);vertical-align:top}.mbdash-table tr:last-child td{border-bottom:0}.mbdash-table tbody tr[data-clickable=true]{cursor:pointer}.mbdash-table tbody tr[data-clickable=true]:hover{background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}.mbdash-primary{display:block;color:var(--mb-text);font-weight:720;text-decoration:none}.mbdash-secondary{display:block;margin-top:4px;color:var(--mb-muted);font-size:13px}.mbdash-state{display:inline-flex;padding:4px 9px;border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-text);font-size:12px;font-weight:720}.mbdash-money{text-align:right!important;font-variant-numeric:tabular-nums;white-space:nowrap}.mbdash-empty{padding:46px 22px;color:var(--mb-muted);text-align:center}.mbdash-mobile-list{display:none}.mbdash-mobile-card{display:grid;gap:14px;padding:18px;border-bottom:1px solid var(--mb-border)}.mbdash-mobile-card:last-child{border:0}.mbdash-mobile-top,.mbdash-mobile-money{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mbdash-mobile-money>span{display:grid;gap:3px}.mbdash-mobile-money small{color:var(--mb-muted)}\n.mbdash-report-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 22px;border-bottom:1px solid var(--mb-border)}.mbdash-report-total td{font-weight:780;background:var(--mb-soft)}\n@media(max-width:900px){.mbdash-summary{grid-template-columns:repeat(2,1fr)}.mbdash-stat:nth-child(2){border-right:0}.mbdash-stat:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mbdash-aging{grid-template-columns:repeat(2,1fr)}.mbdash-aging-item:nth-child(2){border-right:0}.mbdash-aging-item:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}}\n@media(max-width:700px){.mbdash{gap:16px}.mbdash-head{align-items:flex-start;flex-direction:column}.mbdash-filters{grid-template-columns:1fr}.mbdash-table-wrap{display:none}.mbdash-mobile-list{display:block}.mbdash-value{font-size:20px}.mbdash-stat,.mbdash-aging-item{padding:16px}.mbdash-report .mbdash-table-wrap{display:block}.mbdash-report .mbdash-table th:nth-child(2),.mbdash-report .mbdash-table td:nth-child(2),.mbdash-report .mbdash-table th:nth-child(3),.mbdash-report .mbdash-table td:nth-child(3){display:none}}\n`;\n\nconst terminalStates = new Set([\"closed\", \"voided\", \"cancelled\"]);\nconst money = (value: number) => Number(value || 0).toLocaleString(undefined, { style: \"currency\", currency: \"USD\" });\nconst stateLabel = (state: string) => state.replaceAll(\"_\", \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n\nexport function billAgingDays(bill: BillingDashboardBill, now = new Date()): number {\n if (Number.isFinite(bill.agingDays)) return Math.max(0, Math.floor(bill.agingDays!));\n if (!bill.submittedAt) return 0;\n const submitted = new Date(bill.submittedAt);\n if (Number.isNaN(submitted.valueOf())) return 0;\n return Math.max(0, Math.floor((now.valueOf() - submitted.valueOf()) / 86_400_000));\n}\n\nexport function billAgingBucket(bill: BillingDashboardBill, now = new Date()): BillAgingBucketId {\n const days = billAgingDays(bill, now);\n if (days <= 30) return \"current\";\n if (days <= 60) return \"31-60\";\n if (days <= 90) return \"61-90\";\n return \"91+\";\n}\n\nexport function summarizeBillingDashboard(bills: BillingDashboardBill[], now = new Date()): BillingDashboardSummary {\n const aging: BillAgingBucket[] = [\n { id: \"current\", label: \"0–30 days\", count: 0, balance: 0 },\n { id: \"31-60\", label: \"31–60 days\", count: 0, balance: 0 },\n { id: \"61-90\", label: \"61–90 days\", count: 0, balance: 0 },\n { id: \"91+\", label: \"91+ days\", count: 0, balance: 0 },\n ];\n let totalBilled = 0; let totalPaid = 0; let outstanding = 0; let openCount = 0;\n for (const bill of bills) {\n totalBilled += Number(bill.totalCharge || 0); totalPaid += Number(bill.totalPaid || 0); outstanding += Number(bill.balanceDue || 0);\n if (!terminalStates.has(bill.state.toLowerCase()) && bill.balanceDue > 0) {\n openCount += 1; const bucket = aging.find((item) => item.id === billAgingBucket(bill, now))!;\n bucket.count += 1; bucket.balance += Number(bill.balanceDue || 0);\n }\n }\n return { totalBilled, totalPaid, outstanding, openCount, bills: bills.length, aging };\n}\n\nfunction Shell({ appearance, className = \"\", style, children }: BillingComponentProps & { children: ReactNode }): ReactElement {\n return <div className={`mbdash ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}><style>{css}</style>{children}</div>;\n}\n\nfunction BillIdentity({ bill }: { bill: BillingDashboardBill }): ReactElement {\n const label = bill.billNumber == null ? bill.externalId ?? \"Bill\" : `Bill #${bill.billNumber}`;\n const content = <><span className=\"mbdash-primary\">{label}</span><span className=\"mbdash-secondary\">{[bill.patientName, bill.claimNumber ? `Claim ${bill.claimNumber}` : null].filter(Boolean).join(\" · \")}</span></>;\n return bill.href ? <a href={bill.href} className=\"mbdash-primary\">{content}</a> : <>{content}</>;\n}\n\nfunction BillListContent({ bills, onSelectBill, emptyState = \"No bills match these filters.\" }: BillListProps): ReactElement {\n if (!bills.length) return <div className=\"mbdash-card mbdash-empty\">{emptyState}</div>;\n return <div className=\"mbdash-card\">\n <div className=\"mbdash-table-wrap\"><table className=\"mbdash-table\"><thead><tr><th>Bill</th><th>Payer</th><th>Status</th><th>Age</th><th className=\"mbdash-money\">Billed</th><th className=\"mbdash-money\">Paid</th><th className=\"mbdash-money\">Balance</th></tr></thead><tbody>\n {bills.map((bill) => <tr key={bill.id} data-clickable={Boolean(onSelectBill)} onClick={() => onSelectBill?.(bill)}><td><BillIdentity bill={bill} /></td><td>{bill.payerName || \"—\"}</td><td><span className=\"mbdash-state\">{stateLabel(bill.state)}</span></td><td>{billAgingDays(bill)} days</td><td className=\"mbdash-money\">{money(bill.totalCharge)}</td><td className=\"mbdash-money\">{money(bill.totalPaid)}</td><td className=\"mbdash-money\"><strong>{money(bill.balanceDue)}</strong></td></tr>)}\n </tbody></table></div>\n <div className=\"mbdash-mobile-list\">{bills.map((bill) => <article className=\"mbdash-mobile-card\" key={bill.id} onClick={() => onSelectBill?.(bill)}><div className=\"mbdash-mobile-top\"><div><BillIdentity bill={bill} /></div><span className=\"mbdash-state\">{stateLabel(bill.state)}</span></div><div className=\"mbdash-mobile-money\"><span><small>Age</small>{billAgingDays(bill)} days</span><span><small>Paid</small>{money(bill.totalPaid)}</span><span><small>Balance</small><strong>{money(bill.balanceDue)}</strong></span></div></article>)}</div>\n </div>;\n}\n\nexport function BillList(props: BillListProps): ReactElement {\n const shellProps = {\n ...(props.appearance === undefined ? {} : { appearance: props.appearance }),\n ...(props.className === undefined ? {} : { className: props.className }),\n ...(props.style === undefined ? {} : { style: props.style }),\n };\n return <Shell {...shellProps}><BillListContent {...props} /></Shell>;\n}\n\nfunction AgingContent({ bills, heading = \"Accounts receivable\" }: Pick<BillAgingSummaryProps, \"bills\" | \"heading\">): ReactElement {\n const summary = useMemo(() => summarizeBillingDashboard(bills), [bills]);\n return <><div className=\"mbdash-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">Current balances and aging at a glance.</p></div></div><div className=\"mbdash-card mbdash-summary\"><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Outstanding</span><span className=\"mbdash-value\">{money(summary.outstanding)}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Open bills</span><span className=\"mbdash-value\">{summary.openCount}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Collected</span><span className=\"mbdash-value\">{money(summary.totalPaid)}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Total billed</span><span className=\"mbdash-value\">{money(summary.totalBilled)}</span></div></div><div className=\"mbdash-card mbdash-aging\">{summary.aging.map((bucket) => <div className=\"mbdash-aging-item\" key={bucket.id}><span className=\"mbdash-label\">{bucket.label}</span><strong>{money(bucket.balance)}</strong><span>{bucket.count} bill{bucket.count === 1 ? \"\" : \"s\"}</span></div>)}</div></>;\n}\n\nexport function BillAgingSummary(props: BillAgingSummaryProps): ReactElement {\n const shellProps = {\n ...(props.appearance === undefined ? {} : { appearance: props.appearance }),\n ...(props.className === undefined ? {} : { className: props.className }),\n ...(props.style === undefined ? {} : { style: props.style }),\n };\n return <Shell {...shellProps}><AgingContent bills={props.bills} {...(props.heading === undefined ? {} : { heading: props.heading })} /></Shell>;\n}\n\nexport function BillingDashboard({ bills, heading = \"Billing\", description = \"Track submitted bills, payments, and outstanding balances.\", onSelectBill, initialSearch = \"\", initialState = \"all\", hideFilters = false, appearance, className, style }: BillingDashboardProps): ReactElement {\n const [search, setSearch] = useState(initialSearch); const [state, setState] = useState(initialState);\n const states = useMemo(() => [...new Set(bills.map((bill) => bill.state))].sort((a, b) => a.localeCompare(b)), [bills]);\n const filtered = useMemo(() => { const query = search.trim().toLowerCase(); return bills.filter((bill) => (state === \"all\" || bill.state === state) && (!query || [bill.billNumber, bill.externalId, bill.patientName, bill.claimNumber, bill.payerName, bill.workItemLabel].some((value) => String(value ?? \"\").toLowerCase().includes(query)))); }, [bills, search, state]);\n const shellProps = {\n ...(appearance === undefined ? {} : { appearance }),\n ...(className === undefined ? {} : { className }),\n ...(style === undefined ? {} : { style }),\n };\n const listProps = { bills: filtered, ...(onSelectBill === undefined ? {} : { onSelectBill }) };\n return <Shell {...shellProps}><div className=\"mbdash-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">{description}</p></div></div><AgingContent bills={filtered} heading=\"Receivables\" />{hideFilters ? null : <div className=\"mbdash-filters\"><input className=\"mbdash-control\" type=\"search\" value={search} onChange={(event) => setSearch(event.target.value)} placeholder=\"Search patient, claim, payer, or bill…\" aria-label=\"Search bills\" /><select className=\"mbdash-control\" value={state} onChange={(event) => setState(event.target.value)} aria-label=\"Filter bills by status\"><option value=\"all\">All statuses</option>{states.map((item) => <option value={item} key={item}>{stateLabel(item)}</option>)}</select></div>}<BillListContent {...listProps} /></Shell>;\n}\n\nexport function buildBillingReportRows(bills: BillingDashboardBill[], groupBy: BillingReportDimension = \"status\"): BillingReportRow[] {\n const rows = new Map<string, BillingReportRow>();\n for (const bill of bills) {\n const key = groupBy === \"payer\" ? bill.payerName || \"Unassigned payer\" : groupBy === \"aging\" ? billAgingBucket(bill) : bill.state;\n const label = groupBy === \"status\" ? stateLabel(key) : groupBy === \"aging\" ? ({ current: \"0–30 days\", \"31-60\": \"31–60 days\", \"61-90\": \"61–90 days\", \"91+\": \"91+ days\" } as Record<string, string>)[key] ?? key : key;\n const row = rows.get(key) ?? { key, label, billCount: 0, totalBilled: 0, totalPaid: 0, balanceDue: 0 };\n row.billCount += 1; row.totalBilled += Number(bill.totalCharge || 0); row.totalPaid += Number(bill.totalPaid || 0); row.balanceDue += Number(bill.balanceDue || 0); rows.set(key, row);\n }\n return [...rows.values()].sort((a, b) => a.label.localeCompare(b.label, undefined, { numeric: true }));\n}\n\nexport function buildBillingReportCsv(bills: BillingDashboardBill[], groupBy: BillingReportDimension = \"status\"): string {\n const escape = (value: string | number) => `\"${String(value).replaceAll('\"', '\"\"')}\"`;\n return [[\"Group\", \"Bills\", \"Total billed\", \"Total paid\", \"Balance due\"].map(escape).join(\",\"), ...buildBillingReportRows(bills, groupBy).map((row) => [row.label, row.billCount, row.totalBilled.toFixed(2), row.totalPaid.toFixed(2), row.balanceDue.toFixed(2)].map(escape).join(\",\"))].join(\"\\n\");\n}\n\nexport function BillingReport({ bills, groupBy = \"status\", heading = \"Billing report\", description = \"Billed, paid, and outstanding totals.\", appearance, className, style }: BillingReportProps): ReactElement {\n const rows = useMemo(() => buildBillingReportRows(bills, groupBy), [bills, groupBy]); const total = useMemo(() => summarizeBillingDashboard(bills), [bills]);\n const shellProps = {\n ...(appearance === undefined ? {} : { appearance }),\n className: `mbdash-report ${className ?? \"\"}`.trim(),\n ...(style === undefined ? {} : { style }),\n };\n return <Shell {...shellProps}><div className=\"mbdash-card\"><div className=\"mbdash-report-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">{description}</p></div><span className=\"mbdash-state\">By {groupBy}</span></div><div className=\"mbdash-table-wrap\"><table className=\"mbdash-table\"><thead><tr><th>Group</th><th>Bills</th><th className=\"mbdash-money\">Billed</th><th className=\"mbdash-money\">Paid</th><th className=\"mbdash-money\">Balance</th></tr></thead><tbody>{rows.map((row) => <tr key={row.key}><td><strong>{row.label}</strong></td><td>{row.billCount}</td><td className=\"mbdash-money\">{money(row.totalBilled)}</td><td className=\"mbdash-money\">{money(row.totalPaid)}</td><td className=\"mbdash-money\">{money(row.balanceDue)}</td></tr>)}<tr className=\"mbdash-report-total\"><td>Total</td><td>{total.bills}</td><td className=\"mbdash-money\">{money(total.totalBilled)}</td><td className=\"mbdash-money\">{money(total.totalPaid)}</td><td className=\"mbdash-money\">{money(total.outstanding)}</td></tr></tbody></table></div></div></Shell>;\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useMemo } from \"react\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { billAgingBucket, type BillAgingBucketId, type BillingDashboardBill } from \"./billing-dashboard\";\n\nexport type BillStatusAgingCell = {\n state: string;\n bucket: BillAgingBucketId | \"total\";\n count: number;\n balance: number;\n bills: BillingDashboardBill[];\n};\n\nexport type BillStatusAgingRow = {\n state: string;\n label: string;\n cells: BillStatusAgingCell[];\n total: BillStatusAgingCell;\n};\n\nexport type BillStatusAgingMatrixData = {\n rows: BillStatusAgingRow[];\n columnTotals: BillStatusAgingCell[];\n grandTotal: BillStatusAgingCell;\n};\n\nexport type BillStatusAgingMatrixProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n description?: ReactNode;\n /** Lifecycle-first row order; unknown states append alphabetically. */\n stateOrder?: string[];\n /** Show outstanding balance under each count. Default true. */\n showBalances?: boolean;\n onSelectCell?: (cell: BillStatusAgingCell) => void;\n};\n\nexport const BILL_STATUS_AGING_BUCKETS: { id: BillAgingBucketId; label: string }[] = [\n { id: \"current\", label: \"0–30 days\" },\n { id: \"31-60\", label: \"31–60 days\" },\n { id: \"61-90\", label: \"61–90 days\" },\n { id: \"91+\", label: \"91+ days\" },\n];\n\nconst DEFAULT_STATE_ORDER = [\n \"draft\",\n \"incomplete\",\n \"created\",\n \"sent\",\n \"submitted\",\n \"accepted\",\n \"processed\",\n \"paid\",\n \"underpaid\",\n \"denied\",\n \"rejected\",\n \"appealing\",\n \"second_review\",\n \"ibr\",\n \"lien\",\n \"closed\",\n];\n\nconst money = (value: number) => Number(value || 0).toLocaleString(undefined, { style: \"currency\", currency: \"USD\" });\nconst stateLabel = (state: string) => state.replaceAll(\"_\", \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n\nconst emptyCell = (state: string, bucket: BillAgingBucketId | \"total\"): BillStatusAgingCell => ({ state, bucket, count: 0, balance: 0, bills: [] });\n\nexport function buildBillStatusAgingMatrix(\n bills: BillingDashboardBill[],\n stateOrder: string[] = DEFAULT_STATE_ORDER,\n now = new Date(),\n): BillStatusAgingMatrixData {\n const orderIndex = new Map(stateOrder.map((state, index) => [state.toLowerCase(), index]));\n const states = [...new Set(bills.map((bill) => bill.state))].sort((a, b) => {\n const left = orderIndex.get(a.toLowerCase()) ?? stateOrder.length;\n const right = orderIndex.get(b.toLowerCase()) ?? stateOrder.length;\n return left - right || a.localeCompare(b);\n });\n const columnTotals = BILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(\"all\", bucket.id));\n const grandTotal = emptyCell(\"all\", \"total\");\n const rows = states.map((state) => {\n const cells = BILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(state, bucket.id));\n const total = emptyCell(state, \"total\");\n return { state, label: stateLabel(state), cells, total };\n });\n const rowByState = new Map(rows.map((row) => [row.state, row]));\n for (const bill of bills) {\n const row = rowByState.get(bill.state)!;\n const bucketIndex = BILL_STATUS_AGING_BUCKETS.findIndex((bucket) => bucket.id === billAgingBucket(bill, now));\n const balance = Number(bill.balanceDue || 0);\n for (const cell of [row.cells[bucketIndex]!, row.total, columnTotals[bucketIndex]!, grandTotal]) {\n cell.count += 1;\n cell.balance += balance;\n cell.bills.push(bill);\n }\n }\n return { rows, columnTotals, grandTotal };\n}\n\nexport function buildBillStatusAgingCsv(bills: BillingDashboardBill[], stateOrder?: string[]): string {\n const matrix = buildBillStatusAgingMatrix(bills, stateOrder);\n const escape = (value: string | number) => `\"${String(value).replaceAll('\"', '\"\"')}\"`;\n const header = [\"Status\", ...BILL_STATUS_AGING_BUCKETS.map((bucket) => bucket.label), \"Total\"];\n const lines = matrix.rows.map((row) => [row.label, ...row.cells.map((cell) => cell.count), row.total.count]);\n lines.push([\"Total\", ...matrix.columnTotals.map((cell) => cell.count), matrix.grandTotal.count]);\n return [header, ...lines].map((line) => line.map(escape).join(\",\")).join(\"\\n\");\n}\n\nconst css = `\n.mbmx{color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbmx *{box-sizing:border-box}.mbmx h2,.mbmx p{margin:0}\n.mbmx-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:16px}.mbmx-head h2{font-size:24px}.mbmx-copy{color:var(--mb-muted);margin-top:5px!important}\n.mbmx-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);overflow:auto}\n.mbmx-table{width:100%;border-collapse:collapse;min-width:640px}\n.mbmx-table th{padding:13px 16px;border-bottom:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;text-align:right}\n.mbmx-table th:first-child{text-align:left}\n.mbmx-table td{padding:0;border-bottom:1px solid var(--mb-border);border-left:1px solid color-mix(in srgb,var(--mb-border) 55%,transparent);text-align:right;vertical-align:middle}\n.mbmx-table td:first-child{border-left:0;padding:14px 16px;text-align:left;white-space:nowrap}\n.mbmx-table tr:last-child td{border-bottom:0}\n.mbmx-state{display:inline-flex;padding:4px 9px;border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-text);font-size:12px;font-weight:720}\n.mbmx-cell{display:block;width:100%;min-height:56px;padding:9px 16px;border:0;background:none;color:var(--mb-text);font:inherit;text-align:right}\n.mbmx-cell[data-clickable=true]{cursor:pointer}.mbmx-cell[data-clickable=true]:hover{background:color-mix(in srgb,var(--mb-accent) 8%,var(--mb-surface))}\n.mbmx-count{display:block;font-size:17px;font-weight:760;font-variant-numeric:tabular-nums}\n.mbmx-balance{display:block;margin-top:2px;color:var(--mb-muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}\n.mbmx-zero{color:var(--mb-muted)}\n.mbmx-total td,.mbmx-table td.mbmx-rowtotal{background:var(--mb-soft);font-weight:760}\n`;\n\nexport function BillStatusAgingMatrix({\n bills,\n heading = \"Bills by status and age\",\n description = \"Every bill grouped by lifecycle status, then by days outstanding.\",\n stateOrder,\n showBalances = true,\n onSelectCell,\n appearance,\n className = \"\",\n style,\n}: BillStatusAgingMatrixProps): ReactElement {\n const matrix = useMemo(() => buildBillStatusAgingMatrix(bills, stateOrder), [bills, stateOrder]);\n const clickable = Boolean(onSelectCell);\n const cell = (data: BillStatusAgingCell, key: string, isTotal = false): ReactElement => (\n <td key={key} className={isTotal ? \"mbmx-rowtotal\" : undefined}>\n <button\n type=\"button\"\n className=\"mbmx-cell\"\n data-clickable={clickable && data.count > 0}\n onClick={() => data.count > 0 && onSelectCell?.(data)}\n disabled={!clickable || data.count === 0}\n aria-label={`${stateLabel(data.state)} · ${data.bucket === \"total\" ? \"all ages\" : data.bucket}: ${data.count} bills`}\n >\n <span className={`mbmx-count ${data.count === 0 ? \"mbmx-zero\" : \"\"}`.trim()}>{data.count === 0 ? \"—\" : data.count}</span>\n {showBalances && data.count > 0 ? <span className=\"mbmx-balance\">{money(data.balance)}</span> : null}\n </button>\n </td>\n );\n return (\n <div className={`mbmx ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}>\n <style>{css}</style>\n <div className=\"mbmx-head\"><div><h2>{heading}</h2><p className=\"mbmx-copy\">{description}</p></div></div>\n <div className=\"mbmx-card\">\n <table className=\"mbmx-table\">\n <thead><tr><th>Status</th>{BILL_STATUS_AGING_BUCKETS.map((bucket) => <th key={bucket.id}>{bucket.label}</th>)}<th>Total</th></tr></thead>\n <tbody>\n {matrix.rows.map((row) => (\n <tr key={row.state}>\n <td><span className=\"mbmx-state\">{row.label}</span></td>\n {row.cells.map((data) => cell(data, `${row.state}-${data.bucket}`))}\n {cell(row.total, `${row.state}-total`, true)}\n </tr>\n ))}\n <tr className=\"mbmx-total\">\n <td>Total</td>\n {matrix.columnTotals.map((data) => cell(data, `all-${data.bucket}`))}\n {cell(matrix.grandTotal, \"all-total\", true)}\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","\"use client\";\n\n// \"Bill Tasks\" dashboard: one theme-aware card with a semantic marker per\n// task section (Payment Due, No Response, Denied, …), rows bucketed by age in\n// days with accent-tinted bucket headers, per-cell click-through counts, and a\n// closing grand-total card. Purely props-driven: hosts aggregate their own\n// work items with buildBillTasksDashboard (re-exported from @mindbill/browser)\n// so MindBill itself can dogfood the surface without the partner API.\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport {\n BILL_TASKS_AGING_BUCKETS,\n type BillTasksAgingBucket,\n type BillTasksDashboardData,\n type BillTasksDashboardRow,\n type BillTasksDashboardSection,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport {\n BILL_TASKS_AGING_BUCKETS,\n billTasksAgingBucketIndex,\n buildBillTasksDashboard,\n} from \"@mindbill/browser\";\nexport type {\n BillTasksAgingBucket,\n BillTasksDashboardData,\n BillTasksDashboardItem,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardSectionInput,\n BillTasksDashboardTone,\n} from \"@mindbill/browser\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillTasksDashboardCell = {\n sectionId: string;\n rowId: string;\n /** Null for a row's \"Task Total\" cell (all buckets). */\n bucketId: string | null;\n refs: string[];\n count: number;\n};\n\nexport type BillTasksDashboardProps = SurfaceProps & {\n data: BillTasksDashboardData;\n /** Must match the buckets passed to buildBillTasksDashboard. */\n buckets?: BillTasksAgingBucket[];\n heading?: ReactNode;\n grandTotalLabel?: string;\n /** Column heading; use \"Bill Total\" when displaying bills without tasks. */\n totalLabel?: string;\n /** Plural noun for accessible count labels, for example \"bills\". */\n itemLabel?: string;\n emptyLabel?: string;\n onSelectCell?: (cell: BillTasksDashboardCell) => void;\n /** Rendered above the sections — hosts pass their own filters. */\n toolbar?: ReactNode;\n footnote?: ReactNode;\n};\n\nconst css = `\n.mbtk{color:var(--mb-text);font-family:var(--mb-font);font-size:14px}.mbtk *{box-sizing:border-box}.mbtk h2,.mbtk p{margin:0}\n.mbtk-heading{margin-bottom:14px}.mbtk-heading h2{font-size:18px;font-weight:650;line-height:1.4}\n.mbtk-toolbar{margin-bottom:14px}\n.mbtk-section{margin-bottom:var(--mbtk-section-gap);border:var(--mbtk-border-width) solid var(--mbtk-border);border-radius:var(--mbtk-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);overflow:hidden}\n.mbtk-grid{display:grid;grid-template-columns:var(--mbtk-cols);gap:0 10px;align-items:center;padding:0 16px}\n.mbtk-head{padding:12px 16px;border-bottom:1px solid var(--mb-border)}\n.mbtk-title{display:flex;align-items:center;gap:9px;min-width:0}\n.mbtk-dot{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--mbtk-tone,var(--mb-muted))}\n.mbtk-title-text{min-width:0}\n.mbtk-title-text strong{display:block;font-size:14px;line-height:1.3}\n.mbtk-basis{display:block;color:var(--mb-muted);font-size:12px;line-height:1.35}\n.mbtk-pill{justify-self:stretch;padding:5px 6px;border-radius:var(--mbtk-aging-radius);background:var(--mb-soft);background:var(--mbtk-pill);color:var(--mbtk-aging-text);font-size:11px;font-weight:750;line-height:1.25;text-align:center;white-space:nowrap}\n.mbtk-colhead{justify-self:stretch;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;text-align:center;white-space:nowrap}\n.mbtk-row{border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);min-height:var(--mbtk-row-height)}\n.mbtk-row:first-of-type{border-top:0}\n.mbtk-rowlabel{color:var(--mb-muted);font-size:13px;line-height:1.35;padding:9px 0;overflow-wrap:anywhere}\n.mbtk-count{text-align:center;font-variant-numeric:tabular-nums}\n.mbtk-zero{color:var(--mb-muted)}\n.mbtk-bal{display:block;color:var(--mb-muted);font-size:11px;font-weight:550;line-height:1.35;white-space:nowrap;font-variant-numeric:tabular-nums}\n.mbtk-link{border:0;background:none;padding:6px 8px;min-height:44px;min-width:44px;color:var(--mbtk-link);font:inherit;font-weight:750;font-variant-numeric:tabular-nums;cursor:pointer;border-radius:var(--mb-control-radius)}\n.mbtk-link:hover{text-decoration:underline;background:color-mix(in srgb,var(--mb-accent) 8%,transparent)}\n.mbtk-link:focus-visible{outline:2px solid var(--mbtk-link);outline-offset:2px;text-decoration:underline}\n.mbtk-total{text-align:center}\n.mbtk-totals{background:var(--mb-soft);border-top:1px solid var(--mb-border);font-weight:760}\n.mbtk-totals .mbtk-rowlabel{color:var(--mb-text);font-weight:760}\n.mbtk-empty{padding:22px 16px;color:var(--mb-muted);text-align:center}\n.mbtk-grand .mbtk-rowlabel{color:var(--mb-text);font-size:14px;font-weight:800}\n.mbtk-grand{min-height:52px}\n.mbtk-footnote{margin-top:12px;color:var(--mb-muted);font-size:12.5px}\n@media(max-width:760px){.mbtk-pill,.mbtk-colhead,.mbtk-count{display:none}.mbtk-grid{grid-template-columns:minmax(0,1fr) auto}}\n`;\n\nconst USD = new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" });\n\nfunction cellBody(count: number, balance: number | undefined): ReactNode {\n return <><span>{count}</span>{count > 0 && balance !== undefined && Number.isFinite(balance)\n ? <span className=\"mbtk-bal\">{USD.format(balance)}</span> : null}</>;\n}\n\nfunction cellButton(\n key: string,\n count: number,\n className: string,\n label: string,\n onSelect: (() => void) | null,\n balance: number | undefined,\n): ReactElement {\n const ariaLabel = count > 0 && balance !== undefined && Number.isFinite(balance)\n ? `${label} · ${USD.format(balance)} due` : label;\n if (count > 0 && onSelect) {\n return (\n <span key={key} className={className}>\n <button type=\"button\" className=\"mbtk-link\" aria-label={ariaLabel} onClick={onSelect}>{cellBody(count, balance)}</button>\n </span>\n );\n }\n return <span key={key} className={`${className}${count === 0 ? \" mbtk-zero\" : \"\"}`}>{cellBody(count, balance)}</span>;\n}\n\nfunction TaskRow({\n sectionId,\n row,\n buckets,\n onSelectCell,\n itemLabel,\n}: {\n sectionId: string;\n row: BillTasksDashboardRow;\n buckets: BillTasksAgingBucket[];\n onSelectCell?: ((cell: BillTasksDashboardCell) => void) | undefined;\n itemLabel: string;\n}): ReactElement {\n const allRefs = row.refs.flat();\n return (\n <div className=\"mbtk-grid mbtk-row\">\n <span className=\"mbtk-rowlabel\">{row.label}</span>\n {buckets.map((bucket, index) => {\n const count = row.counts[index] ?? 0;\n return cellButton(\n bucket.id,\n count,\n \"mbtk-count\",\n `${row.label} · ${bucket.label}: ${count} ${itemLabel}`,\n onSelectCell\n ? () => onSelectCell({ sectionId, rowId: row.id, bucketId: bucket.id, refs: row.refs[index] ?? [], count })\n : null,\n row.balances?.[index],\n );\n })}\n {cellButton(\n \"task-total\",\n row.total,\n \"mbtk-total\",\n `${row.label} · all ages: ${row.total} ${itemLabel}`,\n onSelectCell\n ? () => onSelectCell({ sectionId, rowId: row.id, bucketId: null, refs: allRefs, count: row.total })\n : null,\n row.balanceTotal,\n )}\n </div>\n );\n}\n\nfunction SectionCard({\n section,\n buckets,\n emptyLabel,\n onSelectCell,\n totalLabel,\n itemLabel,\n}: {\n section: BillTasksDashboardSection;\n buckets: BillTasksAgingBucket[];\n emptyLabel: ReactNode;\n onSelectCell?: ((cell: BillTasksDashboardCell) => void) | undefined;\n totalLabel: string;\n itemLabel: string;\n}): ReactElement {\n return (\n <section\n className=\"mbtk-section\"\n style={{ \"--mbtk-tone\": `var(--mbtk-${section.tone})` } as CSSProperties}\n aria-label={section.label}\n >\n <div className=\"mbtk-grid mbtk-head\">\n <span className=\"mbtk-title\">\n <i className=\"mbtk-dot\" aria-hidden=\"true\" />\n <span className=\"mbtk-title-text\">\n <strong>{section.label}</strong>\n <span className=\"mbtk-basis\">by {section.agingBasisLabel}</span>\n </span>\n </span>\n {buckets.map((bucket, index) => (\n <span\n key={bucket.id}\n className=\"mbtk-pill\"\n style={{ \"--mbtk-pill\": `var(--mbtk-aging-${Math.min(index + 1, 5)})` } as CSSProperties}\n >\n {bucket.label}\n </span>\n ))}\n <span className=\"mbtk-colhead\">{totalLabel}</span>\n </div>\n {section.empty ? (\n <p className=\"mbtk-empty\">{emptyLabel}</p>\n ) : (\n <>\n {section.rows.map((row) => (\n <TaskRow key={row.id} sectionId={section.id} row={row} buckets={buckets} onSelectCell={onSelectCell} itemLabel={itemLabel} />\n ))}\n <div className=\"mbtk-grid mbtk-row mbtk-totals\">\n <span className=\"mbtk-rowlabel\">Total</span>\n {buckets.map((bucket, index) => (\n <span key={bucket.id} className=\"mbtk-count\">{cellBody(section.totals[index] ?? 0, section.balanceTotals?.[index])}</span>\n ))}\n <span className=\"mbtk-total\">{cellBody(section.total, section.balanceTotal)}</span>\n </div>\n </>\n )}\n </section>\n );\n}\n\nexport function BillTasksDashboard({\n data,\n buckets = BILL_TASKS_AGING_BUCKETS,\n heading,\n grandTotalLabel = \"Bill Tasks Total\",\n totalLabel = \"Task Total\",\n itemLabel = \"tasks\",\n emptyLabel = \"No Tasks\",\n onSelectCell,\n toolbar,\n footnote,\n appearance,\n className = \"\",\n style,\n}: BillTasksDashboardProps): ReactElement {\n const columns = `minmax(150px,1.6fr) repeat(${buckets.length},minmax(84px,1fr)) minmax(84px,1fr)`;\n return (\n <div\n className={`mbtk ${className}`.trim()}\n style={{ ...mindBillAppearanceStyle(appearance), \"--mbtk-cols\": columns, ...style } as CSSProperties}\n >\n <style>{css}</style>\n {heading ? <div className=\"mbtk-heading\">{typeof heading === \"string\" ? <h2>{heading}</h2> : heading}</div> : null}\n {toolbar ? <div className=\"mbtk-toolbar\">{toolbar}</div> : null}\n {data.sections.map((section) => (\n <SectionCard\n key={section.id}\n section={section}\n buckets={buckets}\n emptyLabel={emptyLabel}\n onSelectCell={onSelectCell}\n totalLabel={totalLabel}\n itemLabel={itemLabel}\n />\n ))}\n <section className=\"mbtk-section is-grand\" aria-label={grandTotalLabel}>\n <div className=\"mbtk-grid mbtk-row mbtk-grand mbtk-totals\">\n <span className=\"mbtk-rowlabel\">{grandTotalLabel}</span>\n {buckets.map((bucket, index) => (\n <span key={bucket.id} className=\"mbtk-count\">{cellBody(data.grandTotals[index] ?? 0, data.grandBalanceTotals?.[index])}</span>\n ))}\n <span className=\"mbtk-total\">{cellBody(data.grandTotal, data.grandBalanceTotal)}</span>\n </div>\n </section>\n {footnote ? <p className=\"mbtk-footnote\">{footnote}</p> : null}\n </div>\n );\n}\n","\"use client\";\n\n// Submissions ribbon: a horizontal scrollable row of chips —\n// one per bill submission (Original Bill, Second Review, Duplicate Bill, …) —\n// each with an optional deadline badge and up to three small label/value meta\n// pairs (delivery route, sent date, acknowledgement). Purely presentational;\n// billSubmissionsRibbonFromHistory maps MindBill's presented history rows\n// (kind === \"submission\") into ribbon items.\n\nimport type { CSSProperties, ReactElement } from \"react\";\nimport type { BillAttemptSummary, BillHistoryEntry } from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillSubmissionRibbonItem = {\n id: string;\n /** Submission history row to reveal when this attempt is selected. */\n historyEntryId?: string;\n /** \"Original Bill\" | \"Second Review\" | \"Duplicate Bill\" | … */\n label: string;\n /** Small rounded badge, e.g. \"Denial in 3 working days\". */\n badge?: string;\n /** Semantic color for the status badge. */\n badgeTone?: \"neutral\" | \"success\" | \"warning\" | \"danger\";\n /** Up to three label/value pairs rendered under the label. */\n meta?: Array<{ label: string; value: string }>;\n active?: boolean;\n href?: string;\n};\n\nexport type BillSubmissionsRibbonProps = SurfaceProps & {\n items: BillSubmissionRibbonItem[];\n onSelect?: (item: BillSubmissionRibbonItem) => void;\n};\n\n/** Maps a presented-history submission summary to its delivery route word. */\nexport function billSubmissionsRibbonDeliveryLabel(summary: string): string {\n if (/electronically sent/i.test(summary)) return \"e-Bill (837)\";\n if (/faxed/i.test(summary)) return \"Fax\";\n if (/emailed/i.test(summary)) return \"Email\";\n if (/mailed/i.test(summary)) return \"Mail\";\n return \"Sent\";\n}\n\nfunction ribbonDate(iso: string): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return iso;\n return new Intl.DateTimeFormat(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }).format(parsed);\n}\n\nfunction attemptStatus(\n entries: readonly BillHistoryEntry[],\n attempt?: BillAttemptSummary,\n): Pick<BillSubmissionRibbonItem, \"badge\" | \"badgeTone\" | \"meta\"> {\n // Each attempt's server-resolved status includes events after its ACK.\n // This applies to historical attempts as well as the current bill.\n if (attempt?.status) return {\n badge: attempt.status.replaceAll(\"_\", \" \"),\n badgeTone: attempt.status === \"rejected\" ? \"danger\" : /accepted|processed|paid/.test(attempt.status) ? \"success\" : \"neutral\",\n };\n const latestAck = [...entries].reverse().find((entry) => entry.kind === \"ack\");\n const closed = [...entries].reverse().find((entry) => entry.kind === \"close\");\n if (closed) return { badge: \"Closed\", badgeTone: \"neutral\", meta: [{ label: \"Closed\", value: ribbonDate(closed.date) }] };\n const processed = [...entries].reverse().find((entry) => entry.kind === \"eor\" || entry.kind === \"payment\");\n if (processed) return { badge: \"Processed\", badgeTone: \"success\", meta: [{ label: \"Processed\", value: ribbonDate(processed.date) }] };\n const rejected = latestAck && [latestAck].find((entry) =>\n entry.kind === \"ack\" && (/reject|deni|error/i.test(entry.action) || entry.tone === \"problem\"),\n );\n if (rejected) return {\n badge: rejected.action,\n badgeTone: \"danger\",\n meta: [{ label: \"Rejected\", value: ribbonDate(rejected.date) }],\n };\n\n const complianceDueDate = entries\n .flatMap((entry) => entry.details?.complianceDueDates ?? [])\n .find((due) => /payment|working day/i.test(due.text));\n if (complianceDueDate) return {\n badge: complianceDueDate.text,\n badgeTone: \"warning\",\n meta: [{ label: \"Effective date\", value: ribbonDate(complianceDueDate.date) }],\n };\n\n const accepted = latestAck && [latestAck].find((entry) =>\n entry.kind === \"ack\" && (/accept/i.test(entry.action) || entry.tone === \"success\"),\n );\n if (accepted) return {\n badge: accepted.action,\n badgeTone: \"success\",\n meta: [{ label: \"Accepted\", value: ribbonDate(accepted.date) }],\n };\n\n if (attempt?.ackLabel) return {\n badge: attempt.ackLabel,\n badgeTone: /reject|deni|error/i.test(attempt.ackLabel) ? \"danger\" : /accept/i.test(attempt.ackLabel) ? \"success\" : \"neutral\",\n ...(attempt.ackAt ? { meta: [{ label: /reject|deni|error/i.test(attempt.ackLabel) ? \"Rejected\" : \"Acknowledged\", value: ribbonDate(attempt.ackAt) }] } : {}),\n };\n\n return {};\n}\n\n/**\n * Builds one item per immutable submission attempt. Each card summarizes the\n * payer events following that attempt, while the full history remains unified.\n */\nexport function billSubmissionsRibbonFromHistory(\n history: BillHistoryEntry[],\n attempts: BillAttemptSummary[] = [],\n): BillSubmissionRibbonItem[] {\n if (attempts.length) {\n return attempts.map((attempt) => {\n const attemptEntries = history.filter((entry) => entry.attemptId === attempt.id);\n const submission = attemptEntries.find((entry) => entry.kind === \"submission\");\n const status = attemptStatus(attemptEntries, attempt);\n return {\n id: attempt.id,\n ...(submission ? { historyEntryId: submission.id } : {}),\n label: attempt.label,\n ...(status.badge ? { badge: status.badge } : {}),\n ...(status.badgeTone ? { badgeTone: status.badgeTone } : {}),\n meta: [\n { label: \"Delivery\", value: attempt.deliveryLabel ?? (submission ? billSubmissionsRibbonDeliveryLabel(submission.summary) : \"—\") },\n { label: \"Sent\", value: attempt.sentAt ? ribbonDate(attempt.sentAt) : submission ? ribbonDate(submission.date) : \"—\" },\n ...(status.meta ?? []),\n ],\n active: attempt.isCurrent,\n };\n });\n }\n\n const submissions = history\n .map((entry, index) => ({ entry, index }))\n .filter(({ entry }) => entry.kind === \"submission\");\n\n return submissions.map(({ entry, index }, submissionIndex) => {\n const nextSubmissionIndex = submissions[submissionIndex + 1]?.index ?? history.length;\n const status = attemptStatus(history.slice(index, nextSubmissionIndex));\n return {\n id: entry.id,\n historyEntryId: entry.id,\n label: entry.action,\n ...(status.badge ? { badge: status.badge } : {}),\n ...(status.badgeTone ? { badgeTone: status.badgeTone } : {}),\n meta: [\n { label: \"Delivery\", value: billSubmissionsRibbonDeliveryLabel(entry.summary) },\n { label: \"Sent\", value: ribbonDate(entry.date) },\n ...(status.meta ?? []),\n ],\n };\n });\n}\n\nconst css = `\n.mbsr{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;color:var(--mb-text);font-family:var(--mb-font);font-size:13px}\n.mbsr *{box-sizing:border-box}\n.mbsr-chip{flex:0 0 240px;display:grid;gap:7px;width:240px;min-width:min(240px,85vw);max-width:280px;padding:11px 13px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer}\n.mbsr-chip:hover{border-color:var(--mb-accent)}\n.mbsr-chip[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface));box-shadow:0 0 0 1px var(--mb-accent) inset}\n.mbsr-top{display:grid;grid-template-columns:minmax(0,1fr);gap:6px;min-width:0}\n.mbsr-label{min-width:0;font-size:13.5px;font-weight:760;line-height:1.3;overflow-wrap:normal;word-break:normal}\n.mbsr-badge{justify-self:start;max-width:100%;padding:2px 8px;border:1px solid color-mix(in srgb,var(--mb-muted) 45%,var(--mb-border));border-radius:999px;background:var(--mb-soft);font-size:11px;font-weight:700;white-space:normal}\n.mbsr-badge[data-tone=success]{border-color:color-mix(in srgb,#23876f 52%,var(--mb-border));background:color-mix(in srgb,#23876f 11%,var(--mb-surface));color:#176452}\n.mbsr-badge[data-tone=warning]{border-color:color-mix(in srgb,var(--mb-warning) 55%,var(--mb-border));background:color-mix(in srgb,var(--mb-warning) 12%,var(--mb-surface))}\n.mbsr-badge[data-tone=danger]{border-color:color-mix(in srgb,var(--mb-danger) 45%,var(--mb-border));background:color-mix(in srgb,var(--mb-danger) 9%,var(--mb-surface));color:var(--mb-danger)}\n.mbsr-meta{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,auto);gap:2px 14px;justify-content:start}\n.mbsr-meta>span{display:grid;gap:1px;min-width:0}\n.mbsr-meta i{color:var(--mb-muted);font-size:10.5px;font-style:normal;font-weight:800;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap}\n.mbsr-meta b{font-size:12.5px;font-weight:700;white-space:nowrap}\n`;\n\nexport function BillSubmissionsRibbon({\n items,\n onSelect,\n appearance,\n className = \"\",\n style,\n}: BillSubmissionsRibbonProps): ReactElement {\n return (\n <div\n className={`mbsr ${className}`.trim()}\n style={mindBillAppearanceStyle(appearance, style)}\n role=\"list\"\n aria-label=\"Bill submissions\"\n >\n <style>{css}</style>\n {items.map((item) => {\n const content = (\n <>\n <span className=\"mbsr-top\">\n <span className=\"mbsr-label\">{item.label}</span>\n {item.badge ? <span className=\"mbsr-badge\" data-tone={item.badgeTone ?? \"neutral\"}>{item.badge}</span> : null}\n </span>\n {item.meta?.length ? (\n <span className=\"mbsr-meta\">\n {item.meta.slice(0, 3).map((pair) => (\n <span key={pair.label}><i>{pair.label}</i><b>{pair.value}</b></span>\n ))}\n </span>\n ) : null}\n </>\n );\n return item.href ? (\n <a\n key={item.id}\n className=\"mbsr-chip\"\n data-active={Boolean(item.active)}\n aria-current={item.active ? \"true\" : undefined}\n href={item.href}\n role=\"listitem\"\n onClick={() => onSelect?.(item)}\n >\n {content}\n </a>\n ) : (\n <button\n key={item.id}\n type=\"button\"\n className=\"mbsr-chip\"\n data-active={Boolean(item.active)}\n aria-pressed={Boolean(item.active)}\n role=\"listitem\"\n onClick={() => onSelect?.(item)}\n >\n {content}\n </button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\n// \"Report Bill Status\" dialog: call the Claims Administrator /\n// Bill Review vendor (contacts in section 1), verify the submission receipt\n// the host renders in section 2, then record the reported payment status plus\n// the call details in section 3. Presentational: the host posts the resulting\n// ReportBillStatusInput through its own lifecycle action call.\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport {\n REPORT_BILL_STATUS_OPTIONS,\n type BillClaimsAdministratorContact,\n type BillClaimsAdministratorDirectory,\n type ReportBillStatusId,\n type ReportBillStatusInput,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\n// The five status options and their input shape are framework-neutral and live\n// in @mindbill/browser; re-exported here so existing imports keep working.\nexport { REPORT_BILL_STATUS_OPTIONS } from \"@mindbill/browser\";\nexport type { ReportBillStatusId, ReportBillStatusInput } from \"@mindbill/browser\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type ReportBillStatusDialogProps = SurfaceProps & {\n title?: ReactNode;\n claimsAdmin?: {\n name: string;\n hoursOfOperation?: string;\n phones?: Array<{ label: string; value: string }>;\n };\n billReview?: { name: string; phone?: string };\n /** Complete partner-safe payer directory details shown before the biller calls. */\n directory?: BillClaimsAdministratorDirectory;\n /** Host renders its submission receipt, e.g. a BillHistoryTable. */\n receipt?: ReactNode;\n submitting?: boolean;\n error?: string | null;\n onCancel: () => void;\n onSave: (input: ReportBillStatusInput) => void;\n};\n\nconst css = `\n.mbbs-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,30,40,.45)}\n.mbbs{display:grid;gap:18px;width:min(860px,100%);max-height:min(90vh,960px);overflow:auto;overscroll-behavior:contain;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);color:var(--mb-text);font-family:var(--mb-font);font-size:14px;box-shadow:0 24px 60px rgba(17,38,49,.28)}\n.mbbs *{box-sizing:border-box}\n.mbbs-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.mbbs-title{margin:0;font-size:20px;font-weight:760}\n.mbbs-close{border:0;background:transparent;color:var(--mb-muted);font-size:22px;line-height:1;cursor:pointer}\n.mbbs-section h4{margin:0 0 4px;font-size:15px}\n.mbbs-copy{margin:0 0 10px;color:var(--mb-muted);font-size:13px}\n.mbbs-contacts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n.mbbs-contact{border:1px solid var(--mb-border);border-left:4px solid var(--mb-accent);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));padding:12px 14px}\n.mbbs-contact h5{margin:0 0 6px;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}\n.mbbs-contact dl{display:grid;gap:4px;margin:0}\n.mbbs-contact dl>div{display:grid;grid-template-columns:130px minmax(0,1fr);gap:10px}\n.mbbs-contact dt{color:var(--mb-muted);font-size:12.5px}\n.mbbs-contact dd{margin:0;font-weight:700;overflow-wrap:anywhere}\n.mbbs-contact a,.mbbs-directory a{color:var(--mb-accent);text-decoration-thickness:1px;text-underline-offset:2px}\n.mbbs-directory{display:grid;gap:10px}\n.mbbs-directory-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}\n.mbbs-directory-card{min-width:0;padding:12px 14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface))}\n.mbbs-directory-card.wide{grid-column:1/-1}\n.mbbs-directory-card h5{margin:0 0 8px;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}\n.mbbs-directory-card dl{display:grid;gap:7px;margin:0}\n.mbbs-directory-card dl>div{display:grid;grid-template-columns:120px minmax(0,1fr);gap:10px}\n.mbbs-directory-card dt{color:var(--mb-muted);font-size:12px}\n.mbbs-directory-card dd{min-width:0;margin:0;font-weight:650;overflow-wrap:anywhere}\n.mbbs-directory-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}\n.mbbs-directory-list li{display:grid;gap:2px;padding-top:8px;border-top:1px solid var(--mb-border)}\n.mbbs-directory-list li:first-child{padding-top:0;border-top:0}\n.mbbs-directory-list small{color:var(--mb-muted);line-height:1.4}\n.mbbs-receipt{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:10px}\n.mbbs-report{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:18px}\n.mbbs-options{display:grid;gap:8px;align-content:start}\n.mbbs-option{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);cursor:pointer}\n.mbbs-option[data-selected=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}\n.mbbs-option input{margin-top:3px;accent-color:var(--mb-accent)}\n.mbbs-option-label{display:block;font-weight:750;line-height:1.35}\n.mbbs-option-copy{display:block;margin-top:2px;color:var(--mb-muted);font-size:12.5px;line-height:1.4}\n.mbbs-fields{display:grid;gap:10px;align-content:start}\n.mbbs-field{display:grid;gap:5px;font-size:13px}\n.mbbs-label{font-weight:650}\n.mbbs-input,.mbbs-textarea{width:100%;padding:9px 11px;border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-input);color:var(--mb-text);font:inherit;font-size:14px}\n.mbbs-textarea{resize:vertical;min-height:74px}\n.mbbs-input:focus,.mbbs-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbbs-alert{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}\n.mbbs-actions{display:flex;justify-content:flex-end;gap:10px}\n.mbbs-cancel{min-height:42px;padding:9px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}\n.mbbs-save{min-height:42px;min-width:130px;padding:9px 18px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:760;cursor:pointer}\n.mbbs-save:disabled,.mbbs-cancel:disabled{opacity:.6;cursor:not-allowed}\n@media(max-width:700px){.mbbs-contacts,.mbbs-directory-grid,.mbbs-report{grid-template-columns:1fr}.mbbs-directory-card.wide{grid-column:auto}.mbbs-directory-card dl>div{grid-template-columns:1fr;gap:2px}}\n`;\n\nfunction externalHref(value: string): string {\n return /^https?:\\/\\//i.test(value) ? value : `https://${value}`;\n}\n\nfunction contactLine(contact: BillClaimsAdministratorContact, key: number): ReactElement {\n return <li key={key}>\n <strong>{contact.name || \"Contact\"}</strong>\n <span>\n {contact.phone ? <><a href={`tel:${contact.phone}`}>{contact.phone}</a>{\" \"}</> : null}\n {contact.email ? <><a href={`mailto:${contact.email}`}>{contact.email}</a>{\" \"}</> : null}\n {contact.portalUrl ? <><a href={externalHref(contact.portalUrl)} target=\"_blank\" rel=\"noreferrer\">Open portal</a>{\" \"}</> : null}\n {contact.fax ? <>Fax {contact.fax}{\" \"}</> : null}\n {contact.address || null}\n </span>\n {contact.note ? <small>{contact.note}</small> : null}\n </li>;\n}\n\nfunction DirectoryDetails({ directory }: { directory: BillClaimsAdministratorDirectory }): ReactElement {\n const aliases = directory.aliases?.filter(Boolean).join(\", \");\n const affiliates = directory.affiliatedEntities?.filter(Boolean).join(\", \");\n return <div className=\"mbbs-directory-grid\">\n <section className=\"mbbs-directory-card wide\"><h5>Claims administrator</h5><dl>\n {directory.name ? <div><dt>Name</dt><dd>{directory.name}</dd></div> : null}\n {directory.type ? <div><dt>Type</dt><dd>{directory.type}</dd></div> : null}\n {directory.description ? <div><dt>Description</dt><dd>{directory.description}</dd></div> : null}\n {directory.website ? <div><dt>Website</dt><dd><a href={externalHref(directory.website)} target=\"_blank\" rel=\"noreferrer\">{directory.website}</a></dd></div> : null}\n {directory.hours ? <div><dt>Hours</dt><dd>{directory.hours}</dd></div> : null}\n {directory.telephoneNumbers?.length ? <div><dt>Phone</dt><dd>{directory.telephoneNumbers.map((value, index) => <span key={value}>{index ? \", \" : \"\"}<a href={`tel:${value}`}>{value}</a></span>)}</dd></div> : null}\n {directory.emailAddresses?.length ? <div><dt>Email</dt><dd>{directory.emailAddresses.map((value, index) => <span key={value}>{index ? \", \" : \"\"}<a href={`mailto:${value}`}>{value}</a></span>)}</dd></div> : null}\n {directory.webPortals?.length ? <div><dt>Portals</dt><dd>{directory.webPortals.map((value, index) => <span key={value}>{index ? \", \" : \"\"}<a href={externalHref(value)} target=\"_blank\" rel=\"noreferrer\">Open portal {index + 1}</a></span>)}</dd></div> : null}\n {aliases ? <div><dt>Also known as</dt><dd>{aliases}</dd></div> : null}\n {affiliates ? <div><dt>Affiliates</dt><dd>{affiliates}</dd></div> : null}\n {directory.claimNumberHint ? <div><dt>Claim number</dt><dd>{directory.claimNumberHint}</dd></div> : null}\n {directory.billProcessingWorkflow ? <div><dt>Workflow</dt><dd>{directory.billProcessingWorkflow}</dd></div> : null}\n {directory.billProcessingWorkflowNotes ? <div><dt>Workflow notes</dt><dd>{directory.billProcessingWorkflowNotes}</dd></div> : null}\n </dl></section>\n {directory.billReview?.length ? <section className=\"mbbs-directory-card\"><h5>Bill review</h5><ul className=\"mbbs-directory-list\">{directory.billReview.map(contactLine)}</ul></section> : null}\n {directory.authorization?.length || directory.authorizationNotice ? <section className=\"mbbs-directory-card\"><h5>Authorization</h5>{directory.authorizationNotice ? <p className=\"mbbs-copy\">{directory.authorizationNotice}</p> : null}<ul className=\"mbbs-directory-list\">{(directory.authorization ?? []).map(contactLine)}</ul></section> : null}\n {directory.mailingAddresses?.length ? <section className=\"mbbs-directory-card\"><h5>Mailing addresses</h5><ul className=\"mbbs-directory-list\">{directory.mailingAddresses.map((entry, index) => <li key={index}><strong>{entry.company || \"Mailing address\"}</strong><span>{entry.address}</span>{entry.notes ? <small>{entry.notes}</small> : null}{entry.submissionTypes?.length ? <small>Submission types: {entry.submissionTypes.join(\", \")}</small> : null}</li>)}</ul></section> : null}\n {directory.claimNumberPatterns?.length ? <section className=\"mbbs-directory-card\"><h5>Claim number patterns</h5><ul className=\"mbbs-directory-list\">{directory.claimNumberPatterns.map((entry, index) => <li key={index}><strong>{entry.pattern}</strong><span>{entry.length ? `Length ${entry.length}` : \"\"}{entry.example ? `${entry.length ? \" · \" : \"\"}Example ${entry.example}` : \"\"}</span></li>)}</ul></section> : null}\n {directory.payers?.length ? <section className=\"mbbs-directory-card wide\"><h5>Electronic billing routes</h5><ul className=\"mbbs-directory-list\">{directory.payers.map((payer, index) => <li key={`${payer.name}-${payer.payerId ?? index}`}><strong>{payer.name}</strong><span>{[payer.deliveryType || payer.route, payer.clearinghouse, payer.payerId ? `Payer ID ${payer.payerId}` : null].filter(Boolean).join(\" · \")}</span>{payer.hint ? <small>{payer.hint}</small> : null}</li>)}</ul></section> : null}\n </div>;\n}\n\nexport function ReportBillStatusDialog({\n title = \"Report Bill Status\",\n claimsAdmin,\n billReview,\n directory,\n receipt,\n submitting = false,\n error = null,\n onCancel,\n onSave,\n appearance,\n className = \"\",\n style,\n}: ReportBillStatusDialogProps): ReactElement {\n const [status, setStatus] = useState<ReportBillStatusId | null>(null);\n const [company, setCompany] = useState(\"\");\n const [representativeName, setRepresentativeName] = useState(\"\");\n const [representativeRole, setRepresentativeRole] = useState(\"\");\n const [phone, setPhone] = useState(\"\");\n const [callReference, setCallReference] = useState(\"\");\n const [note, setNote] = useState(\"\");\n\n // Close on Escape (unless a save is in flight — the caller owns that state).\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !submitting) onCancel();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onCancel, submitting]);\n\n const save = () => {\n if (!status) return;\n onSave({\n status,\n ...(company.trim() ? { company: company.trim() } : {}),\n ...(representativeName.trim() ? { representativeName: representativeName.trim() } : {}),\n ...(representativeRole.trim() ? { representativeRole: representativeRole.trim() } : {}),\n ...(phone.trim() ? { phone: phone.trim() } : {}),\n ...(callReference.trim() ? { callReference: callReference.trim() } : {}),\n ...(note.trim() ? { note: note.trim() } : {}),\n });\n };\n\n const field = (\n label: string,\n value: string,\n onChange: (next: string) => void,\n ): ReactElement => (\n <label className=\"mbbs-field\" key={label}>\n <span className=\"mbbs-label\">{label}</span>\n <input className=\"mbbs-input\" value={value} disabled={submitting} onChange={(event) => onChange(event.target.value)} />\n </label>\n );\n\n return (\n <div\n className=\"mbbs-overlay\"\n role=\"presentation\"\n onMouseDown={(event) => { if (event.target === event.currentTarget && !submitting) onCancel(); }}\n >\n <style>{css}</style>\n <div\n className={`mbbs ${className}`.trim()}\n style={mindBillAppearanceStyle(appearance, style)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={typeof title === \"string\" ? title : \"Report Bill Status\"}\n >\n <div className=\"mbbs-head\">\n <h3 className=\"mbbs-title\">{title}</h3>\n <button className=\"mbbs-close\" type=\"button\" aria-label=\"Close\" disabled={submitting} onClick={onCancel}>×</button>\n </div>\n\n {directory || claimsAdmin || billReview ? (\n <div className=\"mbbs-section\">\n <h4>1. Call Claims Administrator or Bill Review</h4>\n <p className=\"mbbs-copy\">Contact the payer to request the payment status of this bill.</p>\n {directory ? <DirectoryDetails directory={directory} /> : <div className=\"mbbs-contacts\">\n {claimsAdmin ? (\n <div className=\"mbbs-contact\">\n <h5>Claims Admin</h5>\n <dl>\n <div><dt>Name</dt><dd>{claimsAdmin.name}</dd></div>\n {claimsAdmin.hoursOfOperation ? <div><dt>Hours of Operation</dt><dd>{claimsAdmin.hoursOfOperation}</dd></div> : null}\n {(claimsAdmin.phones ?? []).map((entry) => (\n <div key={`${entry.label}-${entry.value}`}><dt>{entry.label}</dt><dd>{entry.value}</dd></div>\n ))}\n </dl>\n </div>\n ) : null}\n {billReview ? (\n <div className=\"mbbs-contact\">\n <h5>Bill Review</h5>\n <dl>\n <div><dt>Name</dt><dd>{billReview.name}</dd></div>\n {billReview.phone ? <div><dt>Phone</dt><dd>{billReview.phone}</dd></div> : null}\n </dl>\n </div>\n ) : null}\n </div>}\n </div>\n ) : null}\n\n {receipt ? (\n <div className=\"mbbs-section\">\n <h4>2. Review Bill Submission Receipt</h4>\n <p className=\"mbbs-copy\">Reference the submission receipt below when the payer asks how and when the bill was sent.</p>\n <div className=\"mbbs-receipt\">{receipt}</div>\n </div>\n ) : null}\n\n <div className=\"mbbs-section\">\n <h4>3. Report Bill Payment Status</h4>\n <p className=\"mbbs-copy\">Select the status reported by the payer, then record who provided it.</p>\n <div className=\"mbbs-report\">\n <div className=\"mbbs-options\" role=\"radiogroup\" aria-label=\"Reported bill payment status\">\n {REPORT_BILL_STATUS_OPTIONS.map((option) => (\n <label key={option.id} className=\"mbbs-option\" data-selected={status === option.id}>\n <input\n type=\"radio\"\n name=\"mbbs-status\"\n value={option.id}\n checked={status === option.id}\n disabled={submitting}\n onChange={() => setStatus(option.id)}\n />\n <span>\n <span className=\"mbbs-option-label\">{option.label}</span>\n <span className=\"mbbs-option-copy\">{option.description}</span>\n </span>\n </label>\n ))}\n </div>\n <div className=\"mbbs-fields\">\n {field(\"Company\", company, setCompany)}\n {field(\"Name\", representativeName, setRepresentativeName)}\n {field(\"Role\", representativeRole, setRepresentativeRole)}\n {field(\"Phone Number\", phone, setPhone)}\n {field(\"Call Reference Number\", callReference, setCallReference)}\n <label className=\"mbbs-field\">\n <span className=\"mbbs-label\">Message Note</span>\n <textarea className=\"mbbs-textarea\" value={note} disabled={submitting} onChange={(event) => setNote(event.target.value)} />\n </label>\n </div>\n </div>\n </div>\n\n {error ? <div className=\"mbbs-alert\" role=\"alert\">{error}</div> : null}\n\n <div className=\"mbbs-actions\">\n <button className=\"mbbs-cancel\" type=\"button\" disabled={submitting} onClick={onCancel}>Cancel</button>\n <button className=\"mbbs-save\" type=\"button\" disabled={submitting || !status} onClick={save}>\n {submitting ? \"Saving…\" : \"Save\"}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport {\n createOrganizationClient,\n type BillLifecycleSessionProvider,\n type OrganizationBillingProviderInput,\n type OrganizationClient,\n type OrganizationLocationInput,\n type OrganizationProfileData,\n type OrganizationRenderingProviderInput,\n} from \"@mindbill/browser\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { TaxIdInput, taxIdWrite } from \"./tax-id-input\";\nimport { W9Upload } from \"./w9-upload\";\n\n// Embeddable organization onboarding (INC-1470): capture the practice name,\n// tax ID, group NPI, billing provider, locations, and W-9 ONCE, saved straight\n// to MindBill through the partner browser session — the partner's users never\n// visit the MindBill dashboard. `BillingSettings` is the compact\n// edit-after-setup variant of the same surface.\n\nexport type OrganizationOnboardingProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n sessionEndpoint?: string;\n getSession?: BillLifecycleSessionProvider;\n apiBaseUrl?: string;\n heading?: ReactNode;\n description?: ReactNode;\n /** \"onboarding\" renders a stepper; \"settings\" stacks every section for editing. */\n variant?: \"onboarding\" | \"settings\";\n onSaved?: (profile: OrganizationProfileData) => void;\n onCompleted?: (profile: OrganizationProfileData) => void;\n onError?: (error: Error) => void;\n};\n\ntype StepId = \"practice\" | \"rendering\" | \"locations\" | \"w9\" | \"review\";\nconst STEPS: Array<{ id: StepId; label: string }> = [\n { id: \"practice\", label: \"Practice & billing\" },\n { id: \"rendering\", label: \"Rendering providers\" },\n { id: \"locations\", label: \"Locations\" },\n { id: \"w9\", label: \"W-9\" },\n { id: \"review\", label: \"Review\" },\n];\n\nconst css = `\n.mbob{color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbob *{box-sizing:border-box}.mbob h2,.mbob h3,.mbob p{margin:0}\n.mbob-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);padding:24px}\n.mbob-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:18px}.mbob-head h2{font-size:22px}.mbob-copy{color:var(--mb-muted);margin-top:5px!important}\n.mbob-steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}\n.mbob-step{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--mb-border);border-radius:999px;background:var(--mb-surface);padding:7px 13px;color:var(--mb-muted);font:inherit;font-size:13px;font-weight:700;cursor:pointer}\n.mbob-step[data-active=true]{border-color:var(--mb-accent);color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 8%,var(--mb-surface))}\n.mbob-step[data-done=true] i{color:var(--mb-success);font-style:normal}\n.mbob-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 22px;align-items:start}.mbob-span{grid-column:1/-1}\n.mbob-tax-id label{display:grid;gap:7px}.mbob-tax-id small{color:var(--mb-muted);font-weight:450;line-height:1.5}.mbob-tax-id button{justify-self:start;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);padding:8px 10px;font:inherit;cursor:pointer}\n.mbob-field{display:grid;gap:7px;font-size:13px;font-weight:720}\n.mbob-field input,.mbob-field select{width:100%;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);padding:10px 12px;color:var(--mb-text);font:inherit;font-weight:450}\n.mbob-field input:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbob-subhead{margin:20px 0 12px!important;padding-top:16px;border-top:1px solid var(--mb-border);font-size:15px}\n.mbob-loc{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:end;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding:16px 0}\n.mbob-loc:first-of-type{border-top:0}\n.mbob-primary{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--mb-muted);white-space:nowrap;padding-bottom:12px}\n.mbob-remove{border:0;background:transparent;color:var(--mb-muted);font-size:20px;cursor:pointer;padding-bottom:8px}\n.mbob-add,.mbob-secondary{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);padding:10px 14px;color:var(--mb-text);font:inherit;font-weight:700;cursor:pointer}\n.mbob-drop{display:grid;place-content:center;gap:6px;min-height:150px;border:2px dashed color-mix(in srgb,var(--mb-muted) 55%,transparent);border-radius:var(--mb-control-radius);text-align:center;cursor:pointer;position:relative}\n.mbob-drop input{position:absolute;inset:0;opacity:0;cursor:pointer}\n.mbob-drop span{color:var(--mb-muted);font-size:13px}\n.mbob-w9-current{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid color-mix(in srgb,var(--mb-success) 35%,var(--mb-border));border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-success) 8%,var(--mb-surface));padding:12px 14px;margin-bottom:14px}\n.mbob-w9-current span{color:var(--mb-muted);font-size:13px}\n.mbob-check{display:grid;gap:9px}\n.mbob-check-item{display:flex;align-items:center;gap:10px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:11px 14px}\n.mbob-check-item[data-complete=true]{border-color:color-mix(in srgb,var(--mb-success) 35%,var(--mb-border));background:color-mix(in srgb,var(--mb-success) 8%,var(--mb-surface))}\n.mbob-check-item i{font-style:normal}\n.mbob-actions{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:20px}\n.mbob-save{min-width:170px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);padding:12px 22px;font:inherit;font-weight:780;cursor:pointer}\n.mbob-save:disabled{opacity:.6;cursor:wait}\n.mbob-error{margin-top:14px;border-left:4px solid var(--mb-danger);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 8%,var(--mb-surface));padding:12px 14px;color:var(--mb-danger)}\n.mbob-status{color:var(--mb-muted)}\n.mbob-done{color:var(--mb-success);font-weight:750}\n@media(max-width:820px){.mbob-grid{grid-template-columns:1fr}.mbob-span{grid-column:auto}.mbob-loc{grid-template-columns:1fr 1fr;align-items:center}.mbob-loc>*{grid-column:auto}}\n`;\n\nconst blankLocation = (): OrganizationLocationInput => ({ name: \"\", street: \"\", city: \"\", state: \"\", zip: \"\", isPrimary: false });\nconst blankRendering = (): OrganizationRenderingProviderInput => ({ name: \"\", npi: \"\", specialty: \"\", taxonomy: \"\", active: true });\n\nasync function fileToBase64(file: File): Promise<string> {\n const buffer = new Uint8Array(await file.arrayBuffer());\n let binary = \"\";\n for (const byte of buffer) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\nexport function OrganizationOnboarding({\n appearance,\n className = \"\",\n style,\n sessionEndpoint = \"/api/mindbill/session\",\n getSession,\n apiBaseUrl,\n heading = \"Billing setup\",\n description = \"Practice identity, locations, and the W-9 — saved once, used on every bill.\",\n variant = \"onboarding\",\n onSaved,\n onCompleted,\n onError,\n}: OrganizationOnboardingProps): ReactElement {\n const client: OrganizationClient = useMemo(\n () =>\n createOrganizationClient({\n sessionEndpoint,\n ...(getSession ? { getSession } : {}),\n ...(apiBaseUrl ? { apiBaseUrl } : {}),\n }),\n [sessionEndpoint, getSession, apiBaseUrl],\n );\n\n const [profile, setProfile] = useState<OrganizationProfileData | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [step, setStep] = useState<StepId>(\"practice\");\n const [identity, setIdentity] = useState<{ name: string; legalName: string; taxId: string; npi: string; phone: string; email: string; taxIdType?: \"EIN\" | \"SSN\"; taxIdLast4?: string; taxIdConfigured?: boolean }>({ name: \"\", legalName: \"\", taxId: \"\", npi: \"\", phone: \"\", email: \"\" });\n const [provider, setProvider] = useState<OrganizationBillingProviderInput>({ name: \"\", taxId: \"\", npi: \"\", billType: \"Professional\", phone: \"\", billingStreet: \"\", billingCity: \"\", billingState: \"\", billingZip: \"\" });\n const [locations, setLocations] = useState<OrganizationLocationInput[]>([blankLocation()]);\n const [rendering, setRendering] = useState<OrganizationRenderingProviderInput>(blankRendering);\n const primaryGroup = useId();\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [savedStep, setSavedStep] = useState<Record<string, boolean>>({});\n const completedFired = useRef(false);\n\n const adoptProfile = useCallback((next: OrganizationProfileData) => {\n setProfile(next);\n setIdentity((current) => ({\n name: next.practiceIdentity.name ?? current.name,\n legalName: next.practiceIdentity.legalName ?? current.legalName,\n taxId: next.practiceIdentity.taxId ?? \"\",\n taxIdType: next.practiceIdentity.taxIdType ?? \"EIN\",\n taxIdLast4: next.practiceIdentity.taxIdLast4 ?? \"\",\n taxIdConfigured: next.practiceIdentity.taxIdConfigured ?? false,\n npi: next.practiceIdentity.npi ?? current.npi,\n phone: next.practiceIdentity.phone ?? current.phone,\n email: next.practiceIdentity.email ?? current.email,\n }));\n if (next.billingProviders[0]) setProvider({ billType: \"Professional\", ...next.billingProviders[0] });\n if (next.renderingProviders?.[0]) setRendering({ ...next.renderingProviders[0] });\n if (next.locations.length) setLocations(next.locations.map((item) => ({ ...item })));\n if (next.onboarding.complete && !completedFired.current) {\n completedFired.current = true;\n onCompleted?.(next);\n }\n }, [onCompleted]);\n\n useEffect(() => {\n let alive = true;\n client.getOrganization()\n .then((next) => { if (alive) { setLoadError(null); adoptProfile(next); } })\n .catch((caught) => {\n if (!alive) return;\n const failure = caught instanceof Error ? caught : new Error(\"The organization could not be loaded.\");\n setLoadError(failure.message);\n onError?.(failure);\n });\n return () => { alive = false; };\n }, [client, adoptProfile, onError]);\n\n const run = async (work: () => Promise<OrganizationProfileData>, stepId: StepId) => {\n setSaving(true);\n setError(null);\n try {\n const next = await work();\n adoptProfile(next);\n setSavedStep((current) => ({ ...current, [stepId]: true }));\n onSaved?.(next);\n if (variant === \"onboarding\") {\n const order: StepId[] = STEPS.map((item) => item.id);\n const nextStep = order[order.indexOf(stepId) + 1];\n if (nextStep) setStep(nextStep);\n }\n } catch (caught) {\n const failure = caught instanceof Error ? caught : new Error(\"Saving failed.\");\n setError(failure.message);\n onError?.(failure);\n } finally {\n setSaving(false);\n }\n };\n\n const savePractice = () =>\n run(() => {\n return client.saveBillingProfile({\n practiceIdentity: taxIdWrite(identity),\n ...(provider.name.trim() || provider.taxId?.trim() || provider.npi.trim() ? { billingProviders: [taxIdWrite(provider)] } : {}),\n });\n }, \"practice\");\n const saveLocations = () =>\n run(() => client.saveLocations(locations.filter((item) => item.name.trim() || item.street.trim())), \"locations\");\n const saveW9 = async (file: File) => {\n setSaving(true);\n try {\n const next = await client.saveW9({ filename: file.name, contentBase64: await fileToBase64(file) });\n adoptProfile(next);\n setSavedStep((current) => ({ ...current, w9: true }));\n onSaved?.(next);\n if (variant === \"onboarding\") setStep(\"review\");\n } catch (error) {\n onError?.(error instanceof Error ? error : new Error(\"The W-9 could not be saved.\"));\n throw error;\n } finally { setSaving(false); }\n };\n\n const field = (label: string, value: string, onChange: (value: string) => void, span = false, placeholder = \"\") => (\n <label className={`mbob-field${span ? \" mbob-span\" : \"\"}`}>{label}\n <input value={value} placeholder={placeholder} onChange={(event) => onChange(event.target.value)} disabled={saving} />\n </label>\n );\n\n const setLocation = (index: number, patch: Partial<OrganizationLocationInput>) =>\n setLocations((current) => current.map((item, itemIndex) => {\n if (itemIndex !== index) return patch.isPrimary ? { ...item, isPrimary: false } : item;\n return { ...item, ...patch };\n }));\n\n const practiceSection = (\n <div>\n <p className=\"mbob-status\">Choose EIN for a business or SSN for an individual. Saved SSNs are encrypted and shown only by their last four digits.</p>\n <div className=\"mbob-grid\">\n {field(\"Practice name\", identity.name, (name) => setIdentity((c) => ({ ...c, name })))}\n {field(\"Legal name\", identity.legalName, (legalName) => setIdentity((c) => ({ ...c, legalName })))}\n <TaxIdInput label=\"Practice tax ID\" value={identity} disabled={saving} onChange={(patch) => setIdentity((c) => ({ ...c, ...patch }))} />\n {field(\"Group NPI\", identity.npi, (npi) => setIdentity((c) => ({ ...c, npi })))}\n {field(\"Phone\", identity.phone, (phone) => setIdentity((c) => ({ ...c, phone })))}\n {field(\"Email\", identity.email, (email) => setIdentity((c) => ({ ...c, email })))}\n </div>\n <h3 className=\"mbob-subhead\">Billing provider (pay-to)</h3>\n <label className=\"mbob-field\">Saved billing provider\n <select disabled={saving} value={provider.id ?? \"\"} onChange={(event) => setProvider({ ...(profile?.billingProviders.find((item) => item.id === event.target.value) ?? { name: \"\", taxId: \"\", npi: \"\" }) })}>\n <option value=\"\">Add a billing provider</option>\n {profile?.billingProviders.map((item) => <option key={item.id} value={item.id}>{item.name}</option>)}\n </select>\n </label>\n <div className=\"mbob-grid\">\n {field(\"Billing provider name\", provider.name, (name) => setProvider((c) => ({ ...c, name })))}\n <TaxIdInput label=\"Billing tax ID\" value={provider} disabled={saving} onChange={(patch) => setProvider((c) => ({ ...c, ...patch }))} />\n {field(\"Billing NPI\", provider.npi, (npi) => setProvider((c) => ({ ...c, npi })))}\n {field(\"Billing phone\", provider.phone ?? \"\", (phone) => setProvider((c) => ({ ...c, phone })))}\n {field(\"Street\", provider.billingStreet ?? \"\", (billingStreet) => setProvider((c) => ({ ...c, billingStreet })), true)}\n {field(\"City\", provider.billingCity ?? \"\", (billingCity) => setProvider((c) => ({ ...c, billingCity })))}\n {field(\"State\", provider.billingState ?? \"\", (billingState) => setProvider((c) => ({ ...c, billingState: billingState.toUpperCase().slice(0, 2) })))}\n {field(\"ZIP\", provider.billingZip ?? \"\", (billingZip) => setProvider((c) => ({ ...c, billingZip })))}\n </div>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"practice\"] ? \"Saved to MindBill.\" : \"Saved once, used on every bill.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving} onClick={savePractice}>{saving ? \"Saving…\" : \"Save practice\"}</button></div>\n </div>\n );\n\n const renderingSection = <div>\n <label className=\"mbob-field\">Saved rendering provider\n <select disabled={saving} value={rendering.id ?? \"\"} onChange={(event) => setRendering({ ...(profile?.renderingProviders?.find((item) => item.id === event.target.value) ?? blankRendering()) })}>\n <option value=\"\">Add a rendering provider</option>\n {profile?.renderingProviders?.map((item) => <option key={item.id} value={item.id}>{item.name}{item.active === false ? \" (inactive)\" : \"\"}</option>)}\n </select>\n </label>\n <div className=\"mbob-grid\" style={{ marginTop: 16 }}>\n {field(\"Rendering provider name\", rendering.name, (name) => setRendering((c) => ({ ...c, name })))}\n {field(\"Rendering NPI\", rendering.npi, (npi) => setRendering((c) => ({ ...c, npi })))}\n {field(\"Taxonomy\", rendering.taxonomy ?? \"\", (taxonomy) => setRendering((c) => ({ ...c, taxonomy })))}\n {field(\"Specialty\", rendering.specialty ?? \"\", (specialty) => setRendering((c) => ({ ...c, specialty })))}\n {field(\"License number\", rendering.licenseNumber ?? \"\", (licenseNumber) => setRendering((c) => ({ ...c, licenseNumber })))}\n {field(\"License state\", rendering.licenseState ?? \"\", (licenseState) => setRendering((c) => ({ ...c, licenseState: licenseState.toUpperCase().slice(0, 2) })))}\n <label><input disabled={saving} type=\"checkbox\" checked={rendering.active !== false} onChange={(event) => setRendering((c) => ({ ...c, active: event.target.checked }))} /> Available for new bills</label>\n </div>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"rendering\"] ? \"Saved to MindBill.\" : \"Saved profiles do not change previously submitted bills.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving || !rendering.name.trim()} onClick={() => run(() => client.saveBillingProfile({ renderingProviders: [rendering] }), \"rendering\")}>{saving ? \"Saving…\" : \"Save rendering provider\"}</button></div>\n </div>;\n\n const locationsSection = (\n <div>\n {locations.map((location, index) => (\n <div className=\"mbob-loc\" key={location.id ?? index}>\n {field(\"Name\", location.name ?? \"\", (name) => setLocation(index, { name }))}\n {field(\"Street\", location.street, (street) => setLocation(index, { street }))}\n {field(\"City\", location.city, (city) => setLocation(index, { city }))}\n {field(\"State\", location.state, (state) => setLocation(index, { state: state.toUpperCase().slice(0, 2) }))}\n {field(\"ZIP\", location.zip, (zip) => setLocation(index, { zip }))}\n {field(\"Place of service code\", location.posCode ?? \"\", (posCode) => setLocation(index, { posCode }), false, \"11\")}\n <label className=\"mbob-primary\"><input disabled={saving || location.active === false} type=\"radio\" name={primaryGroup} checked={location.isPrimary === true} onChange={() => setLocation(index, { isPrimary: true })} /> Primary</label>\n {location.id ? <button className=\"mbob-secondary\" disabled={saving} type=\"button\" onClick={() => setLocation(index, { active: location.active === false, ...(location.active !== false ? { isPrimary: false } : {}) })}>{location.active === false ? \"Restore\" : \"Archive\"}</button> : <button className=\"mbob-remove\" disabled={saving} type=\"button\" aria-label=\"Remove location\" onClick={() => setLocations((current) => current.filter((_, itemIndex) => itemIndex !== index))}>×</button>}\n </div>\n ))}\n <button className=\"mbob-add\" type=\"button\" onClick={() => setLocations((current) => [...current, blankLocation()])}>+ Add location</button>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"locations\"] ? \"Saved to MindBill.\" : \"Where evaluations happen.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving} onClick={saveLocations}>{saving ? \"Saving…\" : \"Save locations\"}</button></div>\n </div>\n );\n\n const w9Section = <div><p className=\"mbob-status\">The saved W-9 is auto-attached to every submission.</p><W9Upload {...(appearance ? { appearance } : {})} {...(profile?.w9 ? { document: { filename: profile.w9.filename, addedAt: profile.w9.addDate } } : {})} onUpload={saveW9} disabled={saving} /></div>;\n\n const reviewSection = (\n <div className=\"mbob-check\">\n {(profile?.onboarding.checklist ?? []).map((item) => (\n <div className=\"mbob-check-item\" key={item.id} data-complete={item.complete}>\n <i>{item.complete ? \"✓\" : \"•\"}</i><span>{item.label}</span>\n </div>\n ))}\n {profile?.onboarding.complete ? <p className=\"mbob-done\">Billing setup is complete — bills submitted from your product carry this profile automatically.</p> : <p className=\"mbob-status\">Items above complete themselves as each section is saved.</p>}\n </div>\n );\n\n const sections: Record<StepId, ReactElement> = { practice: practiceSection, rendering: renderingSection, locations: locationsSection, w9: w9Section, review: reviewSection };\n\n return (\n <div className={`mbob ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}>\n <style>{css}</style>\n <div className=\"mbob-card\">\n <div className=\"mbob-head\"><div><h2>{heading}</h2><p className=\"mbob-copy\">{description}</p></div></div>\n {loadError ? <div className=\"mbob-error\" role=\"alert\">{loadError}</div> : null}\n {variant === \"onboarding\" ? (\n <>\n <div className=\"mbob-steps\">\n {STEPS.map((item) => (\n <button className=\"mbob-step\" type=\"button\" key={item.id} data-active={step === item.id} data-done={Boolean(savedStep[item.id])} onClick={() => setStep(item.id)}>\n <i>{savedStep[item.id] ? \"✓\" : \"\"}</i>{item.label}\n </button>\n ))}\n </div>\n {sections[step]}\n </>\n ) : (\n <>\n {practiceSection}\n <h3 className=\"mbob-subhead\">Rendering providers</h3>\n {renderingSection}\n <h3 className=\"mbob-subhead\">Locations</h3>\n {locationsSection}\n <h3 className=\"mbob-subhead\">Practice W-9</h3>\n {w9Section}\n <h3 className=\"mbob-subhead\">Checklist</h3>\n {reviewSection}\n </>\n )}\n {error ? <div className=\"mbob-error\" role=\"alert\">{error}</div> : null}\n </div>\n </div>\n );\n}\n\n/** Compact edit-after-setup variant of {@link OrganizationOnboarding}. */\nexport function BillingSettings(props: Omit<OrganizationOnboardingProps, \"variant\">): ReactElement {\n return (\n <OrganizationOnboarding\n heading=\"Billing settings\"\n description=\"Practice identity, locations, and the W-9 used on every bill.\"\n {...props}\n variant=\"settings\"\n />\n );\n}\n","import type { OrganizationPracticeIdentity } from \"@mindbill/browser\";\nexport { organizationTaxIdWrite as taxIdWrite } from \"@mindbill/browser\";\n\ntype TaxIdFields = Pick<OrganizationPracticeIdentity, \"taxId\" | \"taxIdType\" | \"taxIdLast4\" | \"taxIdConfigured\">;\n\nexport function TaxIdInput({ label, value, onChange, disabled }: {\n label: string; value: TaxIdFields; onChange: (patch: TaxIdFields) => void; disabled: boolean;\n}) {\n const saved = value.taxIdType === \"SSN\" && value.taxIdConfigured;\n return <div className=\"mbob-field mbob-tax-id\">\n <label>{label} type<select disabled={disabled} value={value.taxIdType ?? \"EIN\"} onChange={(event) => onChange({ taxIdType: event.target.value as \"EIN\" | \"SSN\", taxId: \"\", taxIdConfigured: false, taxIdLast4: \"\" })}><option value=\"EIN\">EIN (business)</option><option value=\"SSN\">SSN (individual)</option></select></label>\n <label>{label}<input disabled={disabled} autoComplete=\"off\" inputMode=\"numeric\" type={value.taxIdType === \"SSN\" ? \"password\" : \"text\"} value={value.taxId ?? \"\"} placeholder={saved ? \"Leave blank to keep saved SSN\" : \"\"} onChange={(event) => onChange({ taxId: event.target.value })} /></label>\n {saved ? <><small>Saved SSN ending in {value.taxIdLast4 ?? \"••••\"}. The full number is not returned to your browser.</small><button type=\"button\" disabled={disabled} onClick={() => onChange({ taxId: \"\", taxIdConfigured: false, taxIdLast4: \"\" })}>Clear saved SSN on save</button></> : null}\n </div>;\n}\n","\"use client\";\n\nimport { useState, type CSSProperties, type ReactElement } from \"react\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport type W9ExtractionStatus = \"idle\" | \"queued\" | \"processing\" | \"complete\" | \"not_found\" | \"failed\";\nexport type W9UploadProps = {\n document?: { filename: string; addedAt?: string };\n /** Extraction and storage remain owned by your authorized server adapter. */\n extractionStatus?: W9ExtractionStatus;\n onUpload: (file: File) => Promise<void>;\n onView?: () => void;\n onRetryExtraction?: () => void | Promise<void>;\n maxSizeBytes?: number;\n disabled?: boolean;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport function validateW9File(file: Pick<File, \"name\" | \"size\" | \"type\">, maxSizeBytes = 20 * 1024 * 1024): string | null {\n if (!file.name.toLowerCase().endsWith(\".pdf\") || (file.type && file.type !== \"application/pdf\")) return \"Choose a PDF file for the W-9.\";\n if (file.size === 0) return \"The selected PDF is empty.\";\n if (file.size > maxSizeBytes) return `Choose a PDF smaller than ${Math.round(maxSizeBytes / 1024 / 1024)} MB.`;\n return null;\n}\n\nconst extractionLabels: Record<W9ExtractionStatus, string> = {\n idle: \"\",\n queued: \"W-9 saved. Tax ID and address extraction is queued.\",\n processing: \"Reading the tax ID and remittance address…\",\n complete: \"Extraction complete. Review the tax ID and remittance address before saving your billing settings.\",\n not_found: \"The tax ID or address could not be read. Enter the missing billing details manually.\",\n failed: \"Extraction failed. Your W-9 is still saved; enter the billing details manually or retry.\",\n};\n\n/** Reusable upload UI without a second source of truth for practice documents or tax IDs. */\nexport function W9Upload({ document, extractionStatus = \"idle\", onUpload, onView, onRetryExtraction, maxSizeBytes = 20 * 1024 * 1024, disabled = false, appearance, className = \"\", style }: W9UploadProps): ReactElement {\n const [file, setFile] = useState<File | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saved, setSaved] = useState(false);\n const choose = (next: File | null) => {\n if (busy || disabled) return;\n const failure = next ? validateW9File(next, maxSizeBytes) : null;\n setError(failure); setSaved(false); setFile(failure ? null : next);\n };\n const upload = async () => {\n if (!file || busy || disabled) return;\n setBusy(true); setError(null); setSaved(false);\n try { await onUpload(file); setFile(null); setSaved(true); }\n catch { setError(\"The W-9 could not be uploaded. Please try again.\"); }\n finally { setBusy(false); }\n };\n const retry = async () => {\n setBusy(true); setError(null);\n try { await onRetryExtraction?.(); }\n catch { setError(\"Extraction could not be restarted. Please try again.\"); }\n finally { setBusy(false); }\n };\n return <section className={`mbw9 ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }} aria-label=\"Practice W-9\">\n <style>{`.mbw9{font:inherit;color:var(--mb-text)}.mbw9 *{box-sizing:border-box}.mbw9 p{margin:0;color:var(--mb-muted);font-size:13px;line-height:1.6}.mbw9-current,.mbw9-actions{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.mbw9-current{padding:12px 14px;background:var(--mb-soft);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);margin-bottom:12px}.mbw9-current strong{overflow-wrap:anywhere}.mbw9 button{font:inherit;color:var(--mb-text);background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:9px 14px;cursor:pointer}.mbw9 button:disabled{opacity:.55;cursor:default}.mbw9-drop{display:grid;gap:8px;padding:20px;border:1px dashed var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface)}.mbw9-drop input{font:inherit;max-width:100%;color:var(--mb-muted)}.mbw9-actions{margin-top:12px}.mbw9 button.mbw9-primary{background:var(--mb-accent);color:var(--mb-accent-contrast);border-color:var(--mb-accent)}.mbw9 [role=alert]{color:var(--mb-danger);margin-top:12px}.mbw9 button:focus-visible,.mbw9 input:focus-visible{outline:2px solid var(--mb-accent);outline-offset:3px}.mbw9{min-width:0}.mbw9-drop{grid-template-columns:minmax(0,1fr);min-width:0;white-space:normal}.mbw9-drop>*{min-width:0;overflow-wrap:anywhere}.mbw9-drop input{width:100%}.mbw9-current>div{min-width:0;max-width:100%}`}</style>\n {document ? <div className=\"mbw9-current\"><div><strong>{document.filename}</strong>{document.addedAt ? <p>Added {document.addedAt}</p> : null}</div>{onView ? <button type=\"button\" disabled={busy || disabled} onClick={onView}>View W-9</button> : null}</div> : null}\n <label className=\"mbw9-drop\" onDragOver={(event) => event.preventDefault()} onDrop={(event) => { event.preventDefault(); choose(event.dataTransfer.files[0] ?? null); }}>\n <strong>{document ? \"Replace practice W-9\" : \"Upload practice W-9\"}</strong>\n <p>Choose or drop a PDF, up to {Math.round(maxSizeBytes / 1024 / 1024)} MB. Your server securely stores the document for billing.</p>\n <input aria-label=\"W-9 PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={busy || disabled} onChange={(event) => { choose(event.target.files?.[0] ?? null); event.target.value = \"\"; }} />\n {file ? <p>{file.name}</p> : null}\n </label>\n <div className=\"mbw9-actions\"><p role=\"status\">{busy ? \"Working…\" : extractionLabels[extractionStatus] || (saved ? \"W-9 saved.\" : \"\")}</p><div>{onRetryExtraction && (extractionStatus === \"failed\" || extractionStatus === \"not_found\") ? <button type=\"button\" disabled={busy || disabled} onClick={() => void retry()}>Retry extraction</button> : null} <button className=\"mbw9-primary\" type=\"button\" disabled={!file || busy || disabled} onClick={() => void upload()}>{busy ? \"Please wait…\" : \"Upload W-9\"}</button></div></div>\n {error ? <p role=\"alert\">{error}</p> : null}\n </section>;\n}\n","\"use client\";\n\nimport { useEffect, useMemo, useState, type CSSProperties, type ReactElement } from \"react\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { createBillingOperationsClient, type BillingOperationsClientOptions, type PaymentReviewItem, type PaymentReviewQuery, type PaymentReviewResult } from \"./billing-operations-client\";\n\nexport type PaymentReviewRange = \"today\" | \"week\" | \"month\" | \"year\" | \"all\";\nconst localDate = (date: Date) => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, \"0\")}-${String(date.getDate()).padStart(2, \"0\")}`;\nexport function paymentReviewDateRange(range: PaymentReviewRange, now = new Date()): Pick<PaymentReviewQuery, \"receivedFrom\" | \"receivedTo\"> {\n if (range === \"all\") return {};\n const start = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n if (range === \"week\") start.setDate(start.getDate() - (start.getDay() + 6) % 7);\n if (range === \"month\") start.setDate(1);\n if (range === \"year\") { start.setMonth(0); start.setDate(1); }\n return { receivedFrom: localDate(start), receivedTo: localDate(now) };\n}\nconst money = (value: number) => new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" }).format(value);\nconst dateLabel = (value: string | null) => value ? value.slice(0, 10) : \"—\";\n/** Ledger entry IDs are unique within a bill, not necessarily across bills. */\nexport const paymentReviewRowKey = (item: Pick<PaymentReviewItem, \"billId\" | \"id\">): string => JSON.stringify([item.billId, item.id]);\n/** Every cell is quoted and spreadsheet formulas are neutralized, including tab-prefixed input. */\nexport function paymentReviewCsv(items: readonly PaymentReviewItem[]): string {\n const escape = (value: string | number | null) => {\n let text = value == null ? \"\" : String(value);\n if (/^[\\s]*[=+@-]/.test(text) || /^[\\t\\r\\n]/.test(text)) text = `'${text}`;\n return `\"${text.replaceAll('\"', '\"\"')}\"`;\n };\n return [[\"Patient\", \"Bill\", \"Claim\", \"Date of service\", \"Received\", \"Posted\", \"Status\", \"Method\", \"Source\", \"Check / trace\", \"Amount\"], ...items.map((item) => [item.patientName, item.billNumber, item.claimNumber, item.dateOfService, item.receivedDate, item.postedDate, \"Received\", item.method, item.source, item.checkNumber, item.amount])].map((row) => row.map(escape).join(\",\")).join(\"\\r\\n\");\n}\n\nexport type ConnectedPaymentReviewProps = BillingOperationsClientOptions & {\n initialQuery?: PaymentReviewQuery;\n onSelectBill?: (billId: string) => void;\n /** Optional host action; reviewing payments never posts or changes a payment. */\n onPostPayment?: () => void;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nconst css = `.mbpr{font:14px/1.5 var(--mb-font);color:var(--mb-text);min-width:0}.mbpr *{box-sizing:border-box}.mbpr h2,.mbpr p{margin:0}.mbpr h2{font-size:21px}.mbpr-head,.mbpr-actions,.mbpr-toolbar,.mbpr-pager{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.mbpr-head,.mbpr-pager{justify-content:space-between}.mbpr small,.mbpr-sub{color:var(--mb-muted)}.mbpr small{display:block;font-size:12px}.mbpr-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:18px 0}.mbpr-metric,.mbpr-card{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius)}.mbpr-metric{padding:16px}.mbpr-metric strong{display:block;font-size:24px;line-height:1.4;font-variant-numeric:tabular-nums}.mbpr-card{overflow:hidden}.mbpr-controls{padding:14px;display:grid;gap:12px}.mbpr label{display:grid;gap:4px;font-size:12px}.mbpr input,.mbpr button{font:inherit;color:var(--mb-text);background:var(--mb-input);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:8px 10px;min-height:38px}.mbpr button{cursor:pointer;white-space:nowrap}.mbpr button:disabled{opacity:.55;cursor:default}.mbpr button.active,.mbpr button.primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mbpr button:focus-visible,.mbpr input:focus-visible{outline:2px solid var(--mb-accent);outline-offset:2px}.mbpr-search{flex:1;min-width:210px}.mbpr-scroll{overflow:auto}.mbpr table{width:100%;min-width:900px;border-collapse:collapse}.mbpr th,.mbpr td{padding:11px 13px;text-align:left;border-top:1px solid var(--mb-border)}.mbpr th{background:var(--mb-soft);color:var(--mb-muted);font-size:12px;font-weight:600}.mbpr .mbpr-money{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.mbpr .mbpr-link{color:var(--mb-accent);border:0;background:none;padding:0;min-height:30px}.mbpr-status{display:inline-block;background:color-mix(in srgb,var(--mb-success) 10%,var(--mb-surface));color:var(--mb-success);border-radius:var(--mb-control-radius);padding:2px 7px;font-size:12px}.mbpr-state{padding:30px;text-align:center;color:var(--mb-muted)}.mbpr-error{color:var(--mb-danger)}.mbpr-pager{padding:12px;border-top:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px}@media(max-width:640px){.mbpr-metrics{gap:8px}.mbpr-metric{padding:10px}.mbpr-metric strong{font-size:20px}.mbpr-head{align-items:flex-start}.mbpr-toolbar label{flex:1}.mbpr-search{min-width:100%}.mbpr input{width:100%;min-width:0}}`;\n\nexport function ConnectedPaymentReview({ initialQuery, onSelectBill, onPostPayment, appearance, className = \"\", style, ...options }: ConnectedPaymentReviewProps): ReactElement {\n const client = useMemo(() => createBillingOperationsClient(options), [options.apiBaseUrl, options.fetch, options.getSession, options.sessionEndpoint]);\n const [query, setQuery] = useState<PaymentReviewQuery>(() => ({ ...paymentReviewDateRange(\"month\"), page: 1, pageSize: 25, ...initialQuery }));\n const [range, setRange] = useState<PaymentReviewRange | null>(initialQuery?.receivedFrom || initialQuery?.receivedTo ? null : \"month\");\n const [search, setSearch] = useState(initialQuery?.q ?? \"\");\n const [result, setResult] = useState<PaymentReviewResult | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const [retry, setRetry] = useState(0);\n const invalidRange = Boolean(query.receivedFrom && query.receivedTo && query.receivedFrom > query.receivedTo);\n useEffect(() => {\n const controller = new AbortController();\n setResult(null); setError(false);\n if (invalidRange) { setLoading(false); return () => controller.abort(); }\n setLoading(true);\n client.getPaymentReview(query, controller.signal).then((next) => { if (!controller.signal.aborted) setResult(next); }).catch(() => { if (!controller.signal.aborted) setError(true); }).finally(() => { if (!controller.signal.aborted) setLoading(false); });\n return () => controller.abort();\n }, [client, query, retry, invalidRange]);\n const update = (patch: Partial<PaymentReviewQuery>) => setQuery((current) => ({ ...current, ...patch, page: 1 }));\n const exportPage = () => {\n if (!result?.items.length || loading) return;\n const url = URL.createObjectURL(new Blob([paymentReviewCsv(result.items)], { type: \"text/csv;charset=utf-8\" }));\n const anchor = document.createElement(\"a\"); anchor.href = url; anchor.download = \"payment-review-page.csv\"; anchor.click(); URL.revokeObjectURL(url);\n };\n return <section className={`mbpr ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }} aria-label=\"Payment review\">\n <style>{css + `.mbpr{font-family:var(--mb-font,ui-sans-serif,system-ui,sans-serif)}@media(max-width:640px){.mbpr-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.mbpr-metric:first-child{grid-column:1/-1}.mbpr-metric strong{overflow-wrap:anywhere}}`}</style>\n <div className=\"mbpr-head\"><div><h2>Payment review</h2><p className=\"mbpr-sub\">Review confirmed payments, check details, and cash totals.</p></div><div className=\"mbpr-actions\"><button type=\"button\" disabled={!result?.items.length || loading} onClick={exportPage}>Export page</button>{onPostPayment ? <button className=\"primary\" type=\"button\" onClick={onPostPayment}>+ Post payment</button> : null}</div></div>\n <small>Pending EOR and 835 amounts are excluded until funds are confirmed. Historical legacy payments are also excluded.</small>\n <div className=\"mbpr-metrics\">{[[\"Posted total\", result ? money(result.summary.postedTotal) : \"—\"], [\"Payment entries\", result?.summary.entryCount ?? \"—\"], [\"Unique patients\", result?.summary.uniquePatients ?? \"—\"]].map(([label, value]) => <div className=\"mbpr-metric\" key={label}><small>{label}</small><strong>{value}</strong></div>)}</div>\n<div className=\"mbpr-card\"><div className=\"mbpr-controls\"><div className=\"mbpr-toolbar\" aria-label=\"Quick range\">{([[\"today\", \"Today\"], [\"week\", \"This week\"], [\"month\", \"This month\"], [\"year\", \"This year\"], [\"all\", \"All dates\"]] as const).map(([id, label]) => <button type=\"button\" key={id} className={range === id ? \"active\" : \"\"} aria-pressed={range === id} onClick={() => { setRange(id); setQuery((current) => { const next = { ...current }; delete next.receivedFrom; delete next.receivedTo; return { ...next, ...paymentReviewDateRange(id), page: 1 }; }); }}>{label}</button>)}</div>\n <form className=\"mbpr-toolbar\" onSubmit={(event) => { event.preventDefault(); update({ q: search }); }}><label className=\"mbpr-search\">Search<input type=\"search\" placeholder=\"Patient, bill, claim, payer, or check…\" value={search} onChange={(event) => setSearch(event.target.value)} /></label><button type=\"submit\">Search</button><label>Received from<input type=\"date\" value={query.receivedFrom ?? \"\"} onChange={(event) => { setRange(null); update({ receivedFrom: event.target.value }); }} /></label><label>Received through<input type=\"date\" value={query.receivedTo ?? \"\"} onChange={(event) => { setRange(null); update({ receivedTo: event.target.value }); }} /></label></form>\n </div>{invalidRange ? <p className=\"mbpr-state mbpr-error\" role=\"alert\">The received-through date must be on or after the received-from date.</p> : loading ? <p className=\"mbpr-state\" role=\"status\">Loading payments…</p> : error ? <div className=\"mbpr-state mbpr-error\" role=\"alert\">Payments could not be loaded. <button type=\"button\" onClick={() => setRetry((value) => value + 1)}>Retry</button></div> : !result?.items.length ? <p className=\"mbpr-state\">No confirmed payments match these filters.</p> : <div className=\"mbpr-scroll\" tabIndex={0} role=\"region\" aria-label=\"Payment entries\"><table><thead><tr>{[\"Patient\", \"Bill / DOS\", \"Received\", \"Posted\", \"Status\", \"Method / source\", \"Check / trace\", \"Amount\"].map((label) => <th key={label} scope=\"col\" className={label === \"Amount\" ? \"mbpr-money\" : \"\"}>{label}</th>)}</tr></thead><tbody>{result.items.map((item) => <tr key={paymentReviewRowKey(item)}><td>{item.patientName}<small>{item.claimNumber}</small></td><td>{onSelectBill ? <button type=\"button\" className=\"mbpr-link\" onClick={() => onSelectBill(item.billId)}>{item.billNumber == null ? \"View bill\" : `Bill #${item.billNumber}`}</button> : item.billNumber == null ? \"—\" : `Bill #${item.billNumber}`}<small>DOS {dateLabel(item.dateOfService)}</small></td><td>{dateLabel(item.receivedDate)}</td><td>{dateLabel(item.postedDate)}</td><td><span className=\"mbpr-status\">Received</span></td><td>{item.method || \"—\"}<small>{item.source}</small></td><td>{item.checkNumber || \"—\"}</td><td className=\"mbpr-money\">{money(item.amount)}</td></tr>)}</tbody></table></div>}\n {result ? <div className=\"mbpr-pager\"><span>{result.total} entries · Page {result.page} of {Math.max(1, Math.ceil(result.total / result.pageSize))}</span><div className=\"mbpr-actions\"><button type=\"button\" disabled={result.page <= 1} onClick={() => setQuery((current) => ({ ...current, page: Math.max(1, result.page - 1) }))}>Previous</button><button type=\"button\" disabled={result.page * result.pageSize >= result.total} onClick={() => setQuery((current) => ({ ...current, page: result.page + 1 }))}>Next</button></div></div> : null}</div>\n </section>;\n}\n","import {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n type BillLifecycleSession,\n type BillLifecycleSessionProvider,\n type BillTasksDashboardData,\n} from \"@mindbill/browser\";\n\n/** Confirmed cash ledger entries, never pending EOR/835 estimates or imported legacy payments. */\nexport type PaymentReviewItem = {\n id: string;\n billId: string;\n billNumber: number | null;\n patientName: string;\n claimNumber: string;\n dateOfService: string | null;\n receivedDate: string | null;\n postedDate: string | null;\n status: \"received\";\n method: string;\n source: string;\n checkNumber: string | null;\n amount: number;\n};\nexport type PaymentReviewQuery = {\n q?: string;\n receivedFrom?: string;\n receivedTo?: string;\n renderingProviderId?: string;\n page?: number;\n pageSize?: number;\n};\nexport type PaymentReviewResult = {\n items: PaymentReviewItem[];\n total: number;\n page: number;\n pageSize: number;\n /** Totals span all matching entries, not only the current page. */\n summary: { postedTotal: number; entryCount: number; uniquePatients: number };\n};\n\nexport type BillRegistryStatus = {\n id: string;\n label: string;\n tone?: \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n};\n\nexport type BillRegistryItem = {\n id: string;\n billNumber: string;\n externalId: string | null;\n patientName: string;\n claimNumber: string;\n claimsAdministrator: string;\n status: BillRegistryStatus;\n dateOfService: string | null;\n procedureCodes: string[];\n billingProviderId: string | null;\n renderingProviderId?: string | null;\n renderingProviderName?: string | null;\n submittedAt: string | null;\n arAgeDays: number | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n};\n\nexport type BillRegistryAge = \"all\" | \"0-30\" | \"31-60\" | \"61-90\" | \"91+\" | \"91-180\" | \"181+\";\nexport type BillRegistrySort = \"submitted_desc\" | \"submitted_asc\" | \"balance_desc\" | \"balance_asc\" | \"patient_asc\";\n\nexport type BillRegistryQuery = {\n q?: string;\n status?: string;\n age?: BillRegistryAge;\n claimsAdministrator?: string;\n billingProviderId?: string;\n /** Doctor who performed the service, distinct from the billing practice. */\n renderingProviderId?: string;\n taskSection?: string;\n taskType?: string;\n taskLabel?: string;\n page?: number;\n pageSize?: number;\n sort?: BillRegistrySort;\n};\n\nexport type BillRegistryResult = {\n items: BillRegistryItem[];\n total: number;\n balanceTotal: number;\n page: number;\n pageSize: number;\n filters?: { renderingProviders: Array<{ id: string; name: string }> };\n};\n\nexport type BillTasksResult = {\n dashboard: BillTasksDashboardData;\n /** Separate status inventory; not included in actionable task totals. */\n waiting?: BillTasksDashboardData;\n filters: { claimsAdministrators: Array<{ id: string; name: string }>; renderingProviders?: Array<{ id: string; name: string }> };\n};\n\nexport type ServiceLineItemsReport = {\n from: string;\n to: string;\n windowLabel: string;\n cptRows: Array<{ code: string; bills: number; lines: number; billed: number }>;\n billRows: Array<{\n billId: string;\n billNumber: string;\n submittedDate: string | null;\n dos: string | null;\n patient: string;\n claim: string;\n claimsAdmin: string;\n codes: string[];\n billed: number;\n status: string;\n }>;\n totalBills: number;\n totalLines: number;\n totalBilled: number;\n};\n\nexport type ProductivityReport = {\n lo: string;\n hi: string;\n dayKeys: string[];\n billers: Array<{ name: string; initials: string }>;\n created: Record<string, Record<string, number>>;\n sent: Record<string, Record<string, number>>;\n createdTotal: Record<string, number>;\n sentTotal: Record<string, number>;\n submittedTotal: Record<string, number>;\n cleanTotal: Record<string, number>;\n totalCreated: number;\n totalSent: number;\n totalSubmitted: number;\n totalClean: number;\n};\n\nexport type BillingOperationsClientOptions = {\n /** Same-origin route that exchanges the signed-in user for a short-lived MindBill browser session. */\n sessionEndpoint?: string;\n /** Advanced escape hatch for hosts that do not use an HTTP session endpoint. */\n getSession?: BillLifecycleSessionProvider;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n};\n\nexport type BillingOperationsClient = {\n getPaymentReview: (query?: PaymentReviewQuery, signal?: AbortSignal) => Promise<PaymentReviewResult>;\n clearSession: () => void;\n getBills: (query?: BillRegistryQuery, signal?: AbortSignal) => Promise<BillRegistryResult>;\n getBillTasks: (claimsAdministrator?: string, signal?: AbortSignal, renderingProviderId?: string) => Promise<BillTasksResult>;\n getServiceLineItems: (range: { from: string; to: string }, signal?: AbortSignal) => Promise<ServiceLineItemsReport>;\n getProductivity: (range: { from: string; to: string }, signal?: AbortSignal) => Promise<ProductivityReport>;\n};\n\nasync function responseError(response: Response, fallback: string): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; error?: unknown }).detail ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction normalizeSession(value: unknown): BillLifecycleSession {\n if (!value || typeof value !== \"object\") throw new Error(\"The MindBill session endpoint returned an invalid response.\");\n const candidate = value as { token?: unknown; expiresAt?: unknown; apiBaseUrl?: unknown; session?: unknown; data?: unknown };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\" ? nested as typeof candidate : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\"The MindBill session endpoint did not return a browser session token.\");\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\" ? { expiresAt: session.expiresAt } : {}),\n ...(typeof session.apiBaseUrl === \"string\" ? { apiBaseUrl: session.apiBaseUrl } : {}),\n };\n}\n\nfunction isFresh(session: BillLifecycleSession | null): boolean {\n if (!session) return false;\n if (!session.expiresAt) return true;\n const expiresAt = Date.parse(session.expiresAt);\n return Number.isFinite(expiresAt) && expiresAt > Date.now() + 30_000;\n}\n\nfunction queryString(values: Record<string, string | number | undefined>): string {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(values)) {\n if (value !== undefined && value !== \"\") params.set(key, String(value));\n }\n const text = params.toString();\n return text ? `?${text}` : \"\";\n}\n\n/** Browser-safe client for the multi-bill workspace. Partner API keys are never accepted here. */\nexport function createBillingOperationsClient({\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillingOperationsClientOptions = {}): BillingOperationsClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n let session: BillLifecycleSession | null = null;\n let pendingSession: Promise<BillLifecycleSession> | null = null;\n let pendingSessionSignal: AbortSignal | null = null;\n\n const mintSession = async (signal: AbortSignal, force = false): Promise<BillLifecycleSession> => {\n if (!force && isFresh(session)) return session as BillLifecycleSession;\n if (!force && pendingSession && !pendingSessionSignal?.aborted) return pendingSession;\n const pending = getSession\n ? getSession({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n signal,\n }).then(async (response) => {\n if (!response.ok) throw await responseError(response, \"MindBill browser session could not be created.\");\n return response.json();\n });\n const request = Promise.resolve(pending).then(normalizeSession).then((next) => {\n session = next;\n return next;\n }).finally(() => {\n if (pendingSession === request) {\n pendingSession = null;\n pendingSessionSignal = null;\n }\n });\n pendingSession = request;\n pendingSessionSignal = signal;\n return request;\n };\n\n const get = async <T>(path: string, signal?: AbortSignal): Promise<T> => {\n const controller = signal ? null : new AbortController();\n const requestSignal = signal ?? controller?.signal;\n if (!requestSignal) throw new Error(\"An AbortSignal could not be created.\");\n let browserSession = await mintSession(requestSignal);\n const request = (active: BillLifecycleSession) => {\n const base = (active.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n return fetcher(`${base}${path}`, {\n headers: { authorization: `Bearer ${active.token}` },\n signal: requestSignal,\n });\n };\n let response = await request(browserSession);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(requestSignal, true);\n response = await request(browserSession);\n }\n if (!response.ok) throw await responseError(response, \"MindBill data could not be loaded.\");\n const body = await response.json() as { data?: T } & T;\n return (body.data ?? body) as T;\n };\n\n return {\n clearSession() { session = null; pendingSession = null; pendingSessionSignal = null; },\n getBills(query = {}, signal) {\n const { claimsAdministrator, taskType, taskSection: _taskSection, sort, status, ...filters } = query;\n // Section is a presentation grouping, not a supported bill-list filter.\n void _taskSection;\n const sortKey = sort?.startsWith(\"balance_\") ? \"balanceDue\"\n : sort?.startsWith(\"patient_\") ? \"patient\" : sort ? \"submitted\" : undefined;\n return get<BillRegistryResult>(`/partner/v2/bill-dashboard${queryString({\n ...filters,\n status: status === \"submitted\" ? \"sent\" : status,\n claimsAdminId: claimsAdministrator,\n taskKind: taskType,\n sort: sortKey,\n dir: sort ? (sort.endsWith(\"_asc\") ? \"asc\" : \"desc\") : undefined,\n })}`, signal);\n },\n getBillTasks(claimsAdministrator, signal, renderingProviderId) {\n return get<BillTasksResult>(\n `/partner/v2/bill-tasks${queryString({ claimsAdminId: claimsAdministrator, renderingProviderId })}`,\n signal,\n );\n },\n getServiceLineItems(range, signal) {\n return get<ServiceLineItemsReport>(\n `/partner/v2/reports/service-line-items${queryString(range)}`,\n signal,\n );\n },\n getPaymentReview(query = {}, signal) {\n return get<PaymentReviewResult>(`/partner/v2/reports/payments${queryString(query)}`, signal);\n },\n getProductivity(range, signal) {\n return get<ProductivityReport>(`/partner/v2/reports/productivity${queryString(range)}`, signal);\n },\n };\n}\n","\"use client\";\n\nimport { useEffect, useId, useRef, useState, type CSSProperties, type ReactElement } from \"react\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport type NotificationAgingDay = 30 | 60 | 90;\nexport type NotificationReportDigest = \"off\" | \"daily\" | \"weekly\";\nexport type NotificationPreferences = {\n enabled: boolean;\n statusUpdates: boolean;\n agingDays: NotificationAgingDay[];\n quietHours: boolean;\n /** Optional for existing adapters; omitted means off. */\n reportDigest?: NotificationReportDigest;\n};\n\n/** A projection from the host's authenticated server, not the raw administrative API. */\nexport type NotificationSettingsSnapshot = {\n preferences: NotificationPreferences | null;\n /** Display only. The server selects and verifies this address. */\n email: string;\n audience: \"practice\" | \"assigned_bills\";\n environment: \"live\" | \"sandbox\";\n canEnable: boolean;\n};\n\n/** Deliberately excludes identity, address, audience, verification and bill assignments. */\nexport type NotificationSettingsUpdate = NotificationPreferences & { consent: boolean };\nexport type NotificationSettingsAdapter = {\n load: () => Promise<NotificationSettingsSnapshot>;\n save: (update: NotificationSettingsUpdate) => Promise<NotificationSettingsSnapshot>;\n unsubscribe: () => Promise<NotificationSettingsSnapshot>;\n};\nexport type NotificationSettingsProps = {\n /** Change on host user, practice or environment changes. Never an authorization credential. */\n identityKey: string;\n /** Memoize this adapter. Every method calls the host's authenticated server. */\n adapter: NotificationSettingsAdapter;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n onSaved?: (snapshot: NotificationSettingsSnapshot) => void;\n};\n\nexport function defaultNotificationPreferences(): NotificationPreferences {\n return { enabled: false, statusUpdates: false, agingDays: [], quietHours: true, reportDigest: \"off\" };\n}\n\n/** Allowlist the browser payload even when callers supply objects with extra properties. */\nexport function notificationSettingsUpdate(preferences: NotificationPreferences, consent: boolean): NotificationSettingsUpdate {\n return {\n enabled: preferences.enabled === true,\n statusUpdates: preferences.statusUpdates === true,\n agingDays: ([30, 60, 90] as const).filter(day => preferences.agingDays.includes(day)),\n quietHours: preferences.quietHours === true,\n reportDigest: preferences.reportDigest === \"daily\" || preferences.reportDigest === \"weekly\" ? preferences.reportDigest : \"off\",\n consent: consent === true,\n };\n}\n\nexport function notificationSettingsNeedsConsent(previous: NotificationPreferences | null, next: NotificationPreferences): boolean {\n if (!next.enabled) return false;\n if ((previous?.reportDigest ?? \"off\") !== (next.reportDigest ?? \"off\")) return true;\n if (!previous?.enabled || previous.statusUpdates !== next.statusUpdates || previous.quietHours !== next.quietHours) return true;\n return JSON.stringify(notificationSettingsUpdate(previous, false).agingDays) !== JSON.stringify(notificationSettingsUpdate(next, false).agingDays);\n}\n\nconst css = `\n.mbns-digest{display:grid;gap:6px;margin-top:12px}.mbns-digest select{font:inherit;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);padding:10px 12px}.mbns-digest select:focus-visible{outline:2px solid var(--mb-accent);outline-offset:3px}\n.mbns{color:var(--mb-text);font-family:var(--mb-font);font-size:14px;line-height:1.5;min-width:0}.mbns *{box-sizing:border-box}.mbns h2,.mbns p{margin:0}.mbns-card{padding:24px;background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius);box-shadow:var(--mb-shadow)}\n.mbns-header{display:flex;gap:16px;align-items:flex-start;justify-content:space-between;margin-bottom:24px}.mbns h2{font-size:20px;line-height:1.3;font-weight:700}.mbns-muted{color:var(--mb-muted)}.mbns-header p{margin-top:6px;max-width:56ch}.mbns-badge{flex-shrink:0;background:var(--mb-soft);color:var(--mb-muted);padding:4px 9px;border-radius:var(--mb-control-radius);font-size:12px;font-weight:650}\n.mbns-account{padding:14px 16px;background:var(--mb-soft);border-radius:var(--mb-control-radius);margin-bottom:20px;overflow-wrap:anywhere}.mbns-account strong{display:block;font-weight:650}.mbns-account p{margin-top:3px;font-size:13px}\n.mbns-check{display:flex;gap:12px;align-items:flex-start;cursor:pointer;min-height:44px;padding:8px 0}.mbns-check input{flex-shrink:0;margin:3px 0 0;width:18px;height:18px;accent-color:var(--mb-accent)}.mbns-check strong{display:block;font-weight:650}.mbns-check small{display:block;color:var(--mb-muted);font-size:13px;margin-top:2px}.mbns fieldset{margin:14px 0 0;padding:16px 0 0;border:0;border-top:1px solid var(--mb-border);min-width:0}.mbns legend{padding:0 8px 0 0;font-size:13px;font-weight:650}.mbns-days{display:flex;flex-wrap:wrap;gap:8px 24px}.mbns-consent{border-top:1px solid var(--mb-border);margin-top:16px;padding-top:16px}.mbns-actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center;margin-top:24px;padding-top:20px;border-top:1px solid var(--mb-border)}\n.mbns button{font:inherit;min-height:44px;padding:10px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font-weight:650;cursor:pointer}.mbns button.mbns-save{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mbns button:disabled{opacity:.5;cursor:not-allowed}.mbns input:focus-visible,.mbns button:focus-visible{outline:2px solid var(--mb-accent);outline-offset:3px}.mbns-notice{margin-top:16px!important;color:var(--mb-muted)}.mbns-error{color:var(--mb-danger)}.mbns :disabled+span{opacity:.6}@media(max-width:540px){.mbns-card{padding:18px}.mbns-header{gap:8px}.mbns-actions button{flex:1 1 auto}.mbns-days{gap:4px 18px}}\n`;\n\n/** Drop into a host settings page. Identity changes remount and discard stale UI state. */\nexport function NotificationSettings(props: NotificationSettingsProps): ReactElement {\n return <NotificationSettingsSession key={props.identityKey} {...props} />;\n}\n\n/** The same connected, host-adapter surface; no permanent key or browser enrollment endpoint. */\nexport const ConnectedNotificationSettings = NotificationSettings;\n\nfunction NotificationSettingsSession({ adapter, appearance, className, style, onSaved }: NotificationSettingsProps): ReactElement {\n const titleId = useId();\n const [snapshot, setSnapshot] = useState<NotificationSettingsSnapshot | null>(null);\n const [draft, setDraft] = useState(defaultNotificationPreferences);\n const [consent, setConsent] = useState(false);\n const [phase, setPhase] = useState<\"loading\" | \"ready\" | \"saving\" | \"error\">(\"loading\");\n const [notice, setNotice] = useState(\"\");\n const [failed, setFailed] = useState(false);\n const [reload, setReload] = useState(0);\n const request = useRef(0);\n\n useEffect(() => {\n const current = ++request.current;\n setPhase(\"loading\");\n setSnapshot(null);\n setDraft(defaultNotificationPreferences());\n setConsent(false);\n setNotice(\"\");\n setFailed(false);\n void Promise.resolve().then(() => adapter.load()).then(result => {\n if (current !== request.current) return;\n setSnapshot(result);\n setDraft(result.preferences ?? defaultNotificationPreferences());\n setPhase(\"ready\");\n }).catch(() => {\n if (current !== request.current) return;\n setPhase(\"error\");\n });\n return () => { request.current++; };\n }, [adapter, reload]);\n\n const needsConsent = notificationSettingsNeedsConsent(snapshot?.preferences ?? null, draft);\n const hasCategory = draft.statusUpdates || draft.agingDays.length > 0 || (draft.reportDigest ?? \"off\") !== \"off\";\n const changed = JSON.stringify(notificationSettingsUpdate(draft, false)) !== JSON.stringify(notificationSettingsUpdate(snapshot?.preferences ?? defaultNotificationPreferences(), false));\n const busy = phase !== \"ready\";\n const canSave = !busy && changed && (!draft.enabled || (!!snapshot?.canEnable && hasCategory && (!needsConsent || consent)));\n\n const update = (value: Partial<NotificationPreferences>) => {\n setDraft(previous => ({ ...previous, ...value }));\n setConsent(false);\n setNotice(\"\");\n setFailed(false);\n };\n const save = async (unsubscribe: boolean) => {\n if (busy || (!unsubscribe && !canSave)) return;\n const current = ++request.current;\n setPhase(\"saving\");\n setNotice(\"\");\n setFailed(false);\n try {\n const result = await (unsubscribe ? adapter.unsubscribe() : adapter.save(notificationSettingsUpdate(draft, consent)));\n if (current !== request.current) return;\n setSnapshot(result);\n setDraft(result.preferences ?? defaultNotificationPreferences());\n setConsent(false);\n setPhase(\"ready\");\n setNotice(result.preferences?.enabled ? \"Notification preferences saved.\" : \"Email notifications are off.\");\n // Consumer observers must not turn a confirmed server save into a retry prompt.\n try { onSaved?.(result); } catch { /* Persistence succeeded; host callback failures are separate. */ }\n } catch {\n if (current !== request.current) return;\n setPhase(\"ready\");\n setConsent(false);\n setFailed(true);\n setNotice(\"We couldn't confirm your changes. Retry, or reload settings to check their current state.\");\n }\n };\n\n return <section className={`mbns ${className ?? \"\"}`} style={{ ...mindBillAppearanceStyle(appearance), ...style }} aria-labelledby={titleId} aria-busy={phase === \"loading\" || phase === \"saving\"}>\n <style>{css}</style>\n <div className=\"mbns-card\">\n <header className=\"mbns-header\"><div><h2 id={titleId}>Email notifications</h2><p className=\"mbns-muted\">Choose which billing updates reach your inbox. Notifications are off until you opt in.</p></div><span className=\"mbns-badge\">{!snapshot ? \"—\" : snapshot.preferences?.enabled ? \"On\" : \"Off\"}</span></header>\n {phase === \"loading\" ? <p role=\"status\" className=\"mbns-muted\">Loading notification preferences…</p> : phase === \"error\" ? <div><p role=\"alert\" className=\"mbns-error\">We couldn't load your preferences. No settings have been changed.</p><div className=\"mbns-actions\"><button type=\"button\" onClick={() => setReload(value => value + 1)}>Retry loading</button></div></div> : snapshot ? <>\n <div className=\"mbns-account\"><strong>{snapshot.email || \"No verified email address\"}</strong><p className=\"mbns-muted\">{snapshot.audience === \"practice\" ? \"Updates for this practice's bills\" : \"Updates only for bills assigned to you\"}. Your application manages this address and access.</p></div>\n {snapshot.environment === \"sandbox\" && <p className=\"mbns-notice\">Sandbox preview only. No notification emails will be sent.</p>}\n {!snapshot.canEnable && <p className=\"mbns-notice\">Notifications aren't available for this account yet. Ask your administrator to confirm email verification, billing access and notification availability. You can still turn existing notifications off.</p>}\n <label className=\"mbns-check\"><input type=\"checkbox\" checked={draft.enabled} disabled={busy || (!snapshot.canEnable && !draft.enabled)} onChange={event => update({ enabled: event.target.checked })} /><span><strong>Send me billing updates</strong><small>Emails contain a general alert, not patient details or attachments.</small></span></label>\n <fieldset disabled={busy || !draft.enabled || !snapshot.canEnable}><legend>Updates to receive</legend>\n <label className=\"mbns-check\"><input type=\"checkbox\" checked={draft.statusUpdates} onChange={event => update({ statusUpdates: event.target.checked })} /><span><strong>Bill status changes</strong><small>Follow accepted, rejected, processed and payment updates.</small></span></label>\n <p className=\"mbns-muted\">Remind me when a bill is still waiting for a payer:</p><div className=\"mbns-days\">{([30, 60, 90] as const).map(day => <label key={day} className=\"mbns-check\"><input type=\"checkbox\" checked={draft.agingDays.includes(day)} onChange={event => update({ agingDays: event.target.checked ? [...draft.agingDays, day] : draft.agingDays.filter(value => value !== day) })} /><span>{day} days</span></label>)}</div>\n <label className=\"mbns-check\"><input type=\"checkbox\" checked={draft.quietHours} onChange={event => update({ quietHours: event.target.checked })} /><span><strong>Quiet hours</strong><small>Hold emails from 7 pm to 7 am Pacific time.</small></span></label>\n <label className=\"mbns-digest\"><strong>Scheduled activity digest</strong><select value={draft.reportDigest ?? \"off\"} onChange={event => update({ reportDigest: event.target.value as NotificationReportDigest })}><option value=\"off\">Off</option><option value=\"daily\">Daily</option><option value=\"weekly\">Weekly</option></select><small className=\"mbns-muted\">Activity counts at 9 am Pacific, every day or every Monday. No patient details, financial reports or attachments.</small></label>\n </fieldset>\n {draft.enabled && !hasCategory && <p className=\"mbns-notice\">Select at least one update type to enable notifications.</p>}\n {needsConsent && <label className=\"mbns-check mbns-consent\"><input type=\"checkbox\" checked={consent} disabled={busy || !snapshot.canEnable} onChange={event => setConsent(event.target.checked)} /><span>I agree to receive the selected billing emails {snapshot.audience === \"practice\" ? \"for this practice\" : \"for bills assigned to me\"} at the address above. I can unsubscribe at any time.</span></label>}\n <div className=\"mbns-actions\"><button type=\"button\" className=\"mbns-save\" disabled={!canSave} onClick={() => void save(false)}>{phase === \"saving\" ? \"Saving…\" : \"Save preferences\"}</button>{snapshot.preferences?.enabled && <button type=\"button\" disabled={busy} onClick={() => void save(true)}>Unsubscribe from all</button>}{failed && <button type=\"button\" disabled={busy} onClick={() => setReload(value => value + 1)}>Reload settings</button>}</div>\n {notice && <p className={`mbns-notice ${failed ? \"mbns-error\" : \"\"}`} role={failed ? \"alert\" : \"status\"}>{notice}</p>}\n </> : null}\n </div>\n </section>;\n}\n","\"use client\";\n\nimport { useEffect, useId, useRef, useState, type CSSProperties, type ReactElement } from \"react\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { defaultNotificationPreferences, notificationSettingsUpdate, type NotificationAgingDay, type NotificationReportDigest } from \"./notification-settings\";\n\nexport type NotificationRecipientInvitation = {\n requestId: string;\n email: string;\n audience: \"practice\" | \"assigned_bills\";\n statusUpdates: boolean;\n agingDays: NotificationAgingDay[];\n quietHours: boolean;\n /** Optional for existing hosts; omitted means off. */\n reportDigest?: NotificationReportDigest;\n};\nexport type NotificationRecipient = Omit<NotificationRecipientInvitation, \"requestId\"> & {\n externalUserId: string;\n enabled: boolean;\n state: \"active\" | \"pending_confirmation\" | \"expired\" | \"off\" | \"unavailable\";\n assignedBillCount: number;\n deliveryStatus?: \"sending\" | \"sent\" | \"unknown\" | \"sandbox_preview\" | \"suppressed\";\n};\nexport type NotificationRecipientsSnapshot = {\n available: boolean;\n environment: \"live\" | \"sandbox\";\n recipients: NotificationRecipient[];\n hasMore: boolean;\n};\n/** Every operation goes through the host's authenticated, practice-admin server. */\nexport type NotificationRecipientsAdapter = {\n load: (offset: number) => Promise<NotificationRecipientsSnapshot>;\n /** The host resolves a stable opaque recipient ID, never treats an email as bill access. */\n invite: (input: NotificationRecipientInvitation) => Promise<{ deliveryStatus: string }>;\n disable: (externalUserId: string) => Promise<void>;\n};\nexport type NotificationRecipientsSettingsProps = {\n identityKey: string;\n adapter: NotificationRecipientsAdapter;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\n/** No consent, enabled flag, verification timestamp or tenant identity is emitted. */\nexport function notificationRecipientInvitation(input: Omit<NotificationRecipientInvitation, \"requestId\">, requestId: string): NotificationRecipientInvitation {\n const preferences = notificationSettingsUpdate({ ...input, enabled: false }, false);\n return { requestId, email: input.email.trim().toLowerCase(), audience: input.audience,\n statusUpdates: preferences.statusUpdates, agingDays: preferences.agingDays, quietHours: preferences.quietHours,\n reportDigest: preferences.reportDigest ?? \"off\" };\n}\n\nconst css = `\n.mbnr-digest{margin-top:12px}.mbnr-digest small{display:block;margin-top:6px}\n.mbnr{font:14px/1.5 var(--mb-font);color:var(--mb-text);min-width:0}.mbnr *{box-sizing:border-box}.mbnr h2,.mbnr h3,.mbnr p{margin:0}.mbnr h2{font-size:20px}.mbnr h3{font-size:15px}.mbnr-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);padding:24px}.mbnr header{display:flex;gap:16px;justify-content:space-between;align-items:start;margin-bottom:24px}.mbnr-muted{color:var(--mb-muted)}.mbnr header p{margin-top:6px;max-width:65ch}.mbnr-badge{background:var(--mb-soft);padding:4px 9px;border-radius:var(--mb-control-radius);white-space:nowrap;font-size:12px}.mbnr-form{display:grid;gap:16px;padding:20px;background:var(--mb-soft);border-radius:var(--mb-control-radius)}.mbnr-fields{display:grid;grid-template-columns:1fr 1fr;gap:16px}.mbnr label{display:block}.mbnr label>span{display:block;font-weight:600;margin-bottom:6px}.mbnr input[type=email],.mbnr select{width:100%;min-height:44px;background:var(--mb-surface);color:var(--mb-text);font:inherit;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:10px 12px}.mbnr-check{display:flex!important;gap:10px;align-items:center;min-height:36px}.mbnr input[type=checkbox]{width:17px;height:17px;accent-color:var(--mb-accent)}.mbnr fieldset{border:0;margin:0;padding:0;min-width:0}.mbnr legend{font-weight:600;margin-bottom:6px}.mbnr-days{display:flex;gap:20px;flex-wrap:wrap}.mbnr button{font:inherit;font-weight:600;min-height:44px;padding:10px 14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);cursor:pointer}.mbnr button:disabled{opacity:.5;cursor:not-allowed}.mbnr button.mbnr-primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mbnr :is(input,button,select):focus-visible{outline:2px solid var(--mb-accent);outline-offset:3px}.mbnr-actions{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.mbnr-list{margin-top:28px;display:grid;gap:12px}.mbnr-recipient{border-top:1px solid var(--mb-border);padding-top:16px;display:flex;gap:16px;justify-content:space-between;align-items:start}.mbnr-email{overflow-wrap:anywhere;font-weight:600}.mbnr-state{display:flex;gap:10px;align-items:center;flex-shrink:0}.mbnr-error{color:var(--mb-danger)}.mbnr-notice{margin-top:16px!important}.mbnr-pagination{margin-top:20px}.mbnr-empty{padding:20px 0;color:var(--mb-muted)}@media(max-width:600px){.mbnr-card{padding:18px}.mbnr-form{padding:16px}.mbnr-fields{grid-template-columns:1fr}.mbnr-recipient{flex-direction:column}.mbnr-state{width:100%;justify-content:space-between}.mbnr header{flex-wrap:wrap}}\n`;\n\n/** Administrative recipient invitations, distinct from a user's own NotificationSettings. */\nexport function NotificationRecipientsSettings(props: NotificationRecipientsSettingsProps): ReactElement {\n return <RecipientSettingsSession key={props.identityKey} {...props} />;\n}\nexport const ConnectedNotificationRecipientsSettings = NotificationRecipientsSettings;\n\nfunction recipientCategories(recipient: NotificationRecipient): string {\n return [recipient.statusUpdates ? \"Status and payment updates\" : \"\",\n recipient.agingDays.length ? `${recipient.agingDays.join(\" / \")} day reminders` : \"\",\n recipient.reportDigest === \"daily\" ? \"Daily activity digest\" : recipient.reportDigest === \"weekly\" ? \"Weekly activity digest\" : \"\",\n ].filter(Boolean).join(\" · \") || \"No email categories\";\n}\n\nfunction RecipientSettingsSession({ adapter, appearance, className, style }: NotificationRecipientsSettingsProps): ReactElement {\n const titleId = useId();\n const [snapshot, setSnapshot] = useState<NotificationRecipientsSnapshot | null>(null);\n const [email, setEmail] = useState(\"\");\n const [audience, setAudience] = useState<\"practice\" | \"assigned_bills\">(\"assigned_bills\");\n const [preferences, setPreferences] = useState(defaultNotificationPreferences);\n const [offset, setOffset] = useState(0);\n const [reload, setReload] = useState(0);\n const [busy, setBusy] = useState(true);\n const [notice, setNotice] = useState(\"\");\n const [failed, setFailed] = useState(false);\n const [hasReceipt, setHasReceipt] = useState(false);\n const generation = useRef(0);\n // Retain request ID after uncertain transport failures; retry cannot duplicate an email.\n const pending = useRef<{ payload: string; id: string } | null>(null);\n\n useEffect(() => {\n const current = ++generation.current;\n setBusy(true);\n setSnapshot(null);\n void Promise.resolve().then(() => adapter.load(offset)).then(result => {\n if (current !== generation.current) return;\n setSnapshot(result); setBusy(false);\n }).catch(() => {\n if (current !== generation.current) return;\n setBusy(false); setFailed(true); setNotice(\"Could not load recipients. No settings have been changed.\");\n });\n return () => { generation.current++; };\n }, [adapter, offset, reload]);\n\n async function mutate(action: () => Promise<string>, invitation = false) {\n if (busy) return;\n const current = ++generation.current;\n setBusy(true); setNotice(\"\"); setFailed(false);\n try {\n const message = await action();\n if (current !== generation.current) return;\n if (invitation) setHasReceipt(true);\n setNotice(message);\n setReload(value => value + 1);\n } catch {\n if (current !== generation.current) return;\n setBusy(false); setFailed(true);\n setNotice(\"We couldn't confirm the request. Retry unchanged to check the same invitation, or reload recipients. Do not assume an email was sent.\");\n }\n }\n\n const canInvite = !busy && !!snapshot?.available && !!email.trim() && (preferences.statusUpdates || preferences.agingDays.length > 0 || (preferences.reportDigest ?? \"off\") !== \"off\");\n return <section className={`mbnr ${className ?? \"\"}`} style={{ ...mindBillAppearanceStyle(appearance), ...style }} aria-labelledby={titleId} aria-busy={busy}>\n <style>{css}</style><div className=\"mbnr-card\">\n <header><div><h2 id={titleId}>Notification recipients</h2><p className=\"mbnr-muted\">Add any email address for billing alerts. No MindBill console account is needed. Notifications stay off until the recipient confirms.</p></div><span className=\"mbnr-badge\">Default off</span></header>\n {snapshot?.environment === \"sandbox\" && <p className=\"mbnr-notice mbnr-muted\">Sandbox preview. No emails are sent.</p>}\n {snapshot && !snapshot.available && <p className=\"mbnr-notice mbnr-muted\">Email invitations are not available yet. Existing notifications can still be disabled.</p>}\n <form className=\"mbnr-form\" onSubmit={event => {\n event.preventDefault();\n if (!canInvite) return;\n const input = notificationRecipientInvitation({ email, audience, ...preferences }, \"\");\n const payload = JSON.stringify(input);\n if (pending.current?.payload !== payload) pending.current = { payload, id: crypto.randomUUID() };\n const requestId = pending.current.id;\n void mutate(async () => {\n const result = await adapter.invite({ ...input, requestId });\n // Keep the receipt even after success, so repeated clicks remain the same request.\n return result.deliveryStatus === \"sandbox_preview\" ? \"Sandbox invitation prepared. Notifications remain off until recipient confirmation.\"\n : result.deliveryStatus === \"sent\" ? \"Invitation sent. Notifications remain off until the recipient confirms.\"\n : \"Invitation recorded, but email delivery is not confirmed. Notifications remain off. Reload recipients before requesting a new invitation.\";\n }, true);\n }}>\n <div className=\"mbnr-fields\"><label><span>Recipient email</span><input type=\"email\" autoComplete=\"email\" required maxLength={254} value={email} disabled={busy || !snapshot?.available} placeholder=\"doctor@example.com\" onChange={event => setEmail(event.target.value)} /></label>\n <label><span>Billing access scope</span><select value={audience} disabled={busy || !snapshot?.available} onChange={event => setAudience(event.target.value as typeof audience)}><option value=\"assigned_bills\">Assigned bills only</option><option value=\"practice\">All bills in this practice</option></select></label></div>\n <p className=\"mbnr-muted\">{audience === \"assigned_bills\" ? \"Your application must assign bills on the server. Without assignments, this recipient receives no alerts.\" : \"The invitation asks for alerts about all bills in this practice, including future bills.\"} This does not grant access to the app.</p>\n <fieldset disabled={busy || !snapshot?.available}><legend>Alerts to request</legend>\n <label className=\"mbnr-check\"><input type=\"checkbox\" checked={preferences.statusUpdates} onChange={event => setPreferences(value => ({ ...value, statusUpdates: event.target.checked }))} />Bill status and payment updates</label>\n <p className=\"mbnr-muted\">Reminders while a bill waits for a payer:</p><div className=\"mbnr-days\">{([30,60,90] as const).map(day => <label className=\"mbnr-check\" key={day}><input type=\"checkbox\" checked={preferences.agingDays.includes(day)} onChange={event => setPreferences(value => ({ ...value, agingDays: event.target.checked ? [...value.agingDays, day] : value.agingDays.filter(item => item !== day) }))} />{day} days</label>)}</div>\n <label className=\"mbnr-check\"><input type=\"checkbox\" checked={preferences.quietHours} onChange={event => setPreferences(value => ({ ...value, quietHours: event.target.checked }))} />Quiet hours · 7 pm–7 am Pacific</label>\n <label className=\"mbnr-digest\"><span>Scheduled activity digest</span><select value={preferences.reportDigest ?? \"off\"} onChange={event => setPreferences(value => ({ ...value, reportDigest: event.target.value as NotificationReportDigest }))}><option value=\"off\">Off</option><option value=\"daily\">Daily</option><option value=\"weekly\">Weekly</option></select><small className=\"mbnr-muted\">Activity counts at 9 am Pacific, every day or every Monday. No financial reports or attachments.</small></label>\n </fieldset>\n <p className=\"mbnr-muted\">Emails contain general alerts and activity counts, not patient details, reports or attachments. The recipient reviews these choices and can unsubscribe at any time.</p>\n <div className=\"mbnr-actions\"><button type=\"submit\" className=\"mbnr-primary\" disabled={!canInvite}>{busy ? \"Please wait…\" : \"Send confirmation invitation\"}</button>{hasReceipt && <button type=\"button\" disabled={busy} onClick={() => {\n pending.current = null; setHasReceipt(false); setEmail(\"\"); setPreferences(defaultNotificationPreferences());\n setNotice(\"New invitation form. Reinviting the same recipient replaces their previous confirmation link and turns notifications off until they confirm again.\");\n }}>Start another invitation</button>}</div>\n </form>\n {notice && <p className={`mbnr-notice ${failed ? \"mbnr-error\" : \"mbnr-muted\"}`} role={failed ? \"alert\" : \"status\"}>{notice}</p>}\n <div className=\"mbnr-list\"><h3>Recipients</h3>\n {!snapshot && busy ? <p role=\"status\">Loading recipients…</p> : snapshot?.recipients.length === 0 ? <p className=\"mbnr-empty\">No recipients yet. Nothing is sent until someone accepts an invitation.</p> : snapshot?.recipients.map(recipient => <div className=\"mbnr-recipient\" key={recipient.externalUserId}><div><p className=\"mbnr-email\">{recipient.email}</p><p className=\"mbnr-muted\">{recipient.audience === \"practice\" ? \"Practice-wide\" : `${recipient.assignedBillCount} assigned bills`} · {recipientCategories(recipient)}</p>{recipient.deliveryStatus === \"unknown\" && <p className=\"mbnr-muted\">Invitation delivery unconfirmed. No automatic resend.</p>}</div><div className=\"mbnr-state\"><span className=\"mbnr-badge\">{{ active: \"On\", pending_confirmation: \"Pending confirmation · off\", expired: \"Invitation expired · off\", off: \"Off\", unavailable: \"Delivery unavailable\" }[recipient.state]}</span>{recipient.state !== \"off\" && <button type=\"button\" disabled={busy} onClick={() => void mutate(async () => { await adapter.disable(recipient.externalUserId); return \"Notifications disabled and pending invitations revoked.\"; })}>Disable</button>}</div></div>)}\n </div>\n <div className=\"mbnr-actions mbnr-pagination\"><button type=\"button\" disabled={busy} onClick={() => { setNotice(\"\"); setFailed(false); setReload(value => value + 1); }}>Reload recipients</button>{offset > 0 && <button type=\"button\" disabled={busy} onClick={() => setOffset(value => Math.max(0,value-100))}>Previous</button>}{snapshot?.hasMore && <button type=\"button\" disabled={busy} onClick={() => setOffset(value => value+100)}>Next</button>}</div>\n </div>\n </section>;\n}\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n BillStatusSummary,\n type BillStatusSummaryProps,\n} from \"./native-bill-review\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n} from \"@mindbill/browser\";\n\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type BillStatusData = {\n billId: string;\n state: string;\n nativeStatus: string;\n submittedAt: string | null;\n agingDays: number | null;\n updatedAt: string | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n};\n\nexport type BillStatusSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillStatusSessionRequest = {\n signal: AbortSignal;\n};\n\nexport type BillStatusSessionProvider = (\n request: BillStatusSessionRequest,\n) => Promise<BillStatusSession>;\n\nexport type BillStatusClientOptions = {\n billId: string;\n /** Same-origin route that mints a short-lived organization/user browser session. */\n sessionEndpoint?: string;\n /** Advanced escape hatch for non-HTTP session exchange. */\n getSession?: BillStatusSessionProvider;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n};\n\nexport type BillStatusClient = {\n getStatus: (signal?: AbortSignal) => Promise<BillStatusData>;\n clearSession: () => void;\n};\n\nexport type UseBillStatusOptions = BillStatusClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillStatusData | null;\n};\n\nexport type UseBillStatusResult = {\n data: BillStatusData | null;\n error: Error | null;\n isLoading: boolean;\n isRefreshing: boolean;\n refresh: () => Promise<void>;\n};\n\nasync function responseError(\n response: Response,\n fallback: string,\n): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; error?: unknown }).detail\n ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction isSessionFresh(session: BillStatusSession | null): boolean {\n if (!session) return false;\n if (!session.expiresAt) return true;\n const expiresAt = new Date(session.expiresAt).getTime();\n return Number.isFinite(expiresAt) && expiresAt > Date.now() + 30_000;\n}\n\nfunction normalizeSession(value: unknown): BillStatusSession {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The MindBill session endpoint returned an invalid response.\");\n }\n const candidate = value as {\n token?: unknown;\n expiresAt?: unknown;\n apiBaseUrl?: unknown;\n session?: unknown;\n data?: unknown;\n };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\"\n ? nested as typeof candidate\n : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\"The MindBill session endpoint did not return a browser session token.\");\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\"\n ? { expiresAt: session.expiresAt }\n : {}),\n ...(typeof session.apiBaseUrl === \"string\"\n ? { apiBaseUrl: session.apiBaseUrl }\n : {}),\n };\n}\n\nfunction normalizeStatus(value: unknown, billId: string): BillStatusData {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"MindBill returned an invalid bill status.\");\n }\n const status = value as Partial<BillStatusData>;\n const amounts = [status.totalCharge, status.totalPaid, status.balanceDue];\n if (\n typeof status.state !== \"string\"\n || amounts.some(\n (amount) => typeof amount !== \"number\" || !Number.isFinite(amount),\n )\n ) {\n throw new Error(\"MindBill returned an invalid bill status.\");\n }\n return {\n billId: typeof status.billId === \"string\" ? status.billId : billId,\n state: status.state,\n nativeStatus: typeof status.nativeStatus === \"string\"\n ? status.nativeStatus\n : status.state,\n submittedAt: typeof status.submittedAt === \"string\"\n ? status.submittedAt\n : null,\n agingDays: typeof status.agingDays === \"number\" ? status.agingDays : null,\n updatedAt: typeof status.updatedAt === \"string\" ? status.updatedAt : null,\n totalCharge: status.totalCharge as number,\n totalPaid: status.totalPaid as number,\n balanceDue: status.balanceDue as number,\n };\n}\n\n/**\n * Browser-safe status client used by useBillStatus. It exchanges the user's\n * authenticated same-origin session for a short-lived MindBill token, then\n * reads status directly from MindBill. It never accepts a Partner API key.\n */\nexport function createBillStatusClient({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillStatusClientOptions): BillStatusClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") {\n throw new Error(\"A Fetch API implementation is required.\");\n }\n let session: BillStatusSession | null = null;\n let sessionRequest: Promise<BillStatusSession> | null = null;\n\n const mintSession = async (\n signal: AbortSignal,\n force = false,\n ): Promise<BillStatusSession> => {\n if (!force && isSessionFresh(session)) return session as BillStatusSession;\n if (!force && sessionRequest) return sessionRequest;\n\n const pending = getSession\n ? getSession({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n signal,\n }).then(async (response) => {\n if (!response.ok) {\n throw await responseError(\n response,\n \"MindBill browser session could not be created.\",\n );\n }\n return response.json();\n });\n\n const request = Promise.resolve(pending)\n .then(normalizeSession)\n .then((nextSession) => {\n session = nextSession;\n return nextSession;\n })\n .finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const requestStatus = async (\n browserSession: BillStatusSession,\n signal: AbortSignal,\n ): Promise<Response> => {\n const baseUrl = (browserSession.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n return fetcher(`${baseUrl}/partner/v2/bills/${encodeURIComponent(billId)}/status`, {\n headers: { authorization: `Bearer ${browserSession.token}` },\n signal,\n });\n };\n\n return {\n clearSession() {\n session = null;\n sessionRequest = null;\n },\n async getStatus(providedSignal) {\n const controller = providedSignal ? null : new AbortController();\n const signal = providedSignal ?? controller?.signal;\n if (!signal) throw new Error(\"An AbortSignal could not be created.\");\n let browserSession = await mintSession(signal);\n let response = await requestStatus(browserSession, signal);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(signal, true);\n response = await requestStatus(browserSession, signal);\n }\n if (!response.ok) {\n throw await responseError(response, \"Bill status could not be loaded.\");\n }\n const body = await response.json() as { data?: unknown };\n return normalizeStatus(body.data, billId);\n },\n };\n}\n\nexport function useBillStatus({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n refreshInterval = DEFAULT_REFRESH_INTERVAL,\n enabled = true,\n initialData = null,\n fetch: fetchOverride,\n}: UseBillStatusOptions): UseBillStatusResult {\n const client = useMemo(() => createBillStatusClient({\n billId,\n sessionEndpoint,\n ...(getSession ? { getSession } : {}),\n apiBaseUrl,\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n }), [apiBaseUrl, billId, fetchOverride, getSession, sessionEndpoint]);\n const [data, setData] = useState<BillStatusData | null>(initialData);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled && !initialData);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const dataRef = useRef<BillStatusData | null>(initialData);\n const initialDataRef = useRef<BillStatusData | null>(initialData);\n initialDataRef.current = initialData;\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestSequence = useRef(0);\n\n useEffect(() => {\n const seed = initialDataRef.current;\n dataRef.current = seed;\n setData(seed);\n setError(null);\n setIsLoading(enabled && !seed);\n activeControllerRef.current?.abort();\n return () => activeControllerRef.current?.abort();\n }, [client, enabled]);\n\n const load = useCallback(async () => {\n if (!enabled || !billId) return;\n const sequence = ++requestSequence.current;\n activeControllerRef.current?.abort();\n const controller = new AbortController();\n activeControllerRef.current = controller;\n if (dataRef.current) setIsRefreshing(true);\n else setIsLoading(true);\n setError(null);\n\n try {\n const nextData = await client.getStatus(controller.signal);\n if (!controller.signal.aborted && sequence === requestSequence.current) {\n dataRef.current = nextData;\n setData(nextData);\n }\n } catch (cause) {\n if (controller.signal.aborted) return;\n if (sequence === requestSequence.current) {\n setError(\n cause instanceof Error\n ? cause\n : new Error(\"Bill status could not be loaded.\"),\n );\n }\n } finally {\n if (activeControllerRef.current === controller) {\n activeControllerRef.current = null;\n }\n if (!controller.signal.aborted && sequence === requestSequence.current) {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }\n }, [billId, client, enabled]);\n\n useEffect(() => {\n if (enabled) void load();\n }, [enabled, load]);\n\n useEffect(() => {\n if (!enabled || refreshInterval <= 0) return;\n const timer = window.setInterval(() => void load(), refreshInterval);\n const onFocus = () => void load();\n const onVisibility = () => {\n if (document.visibilityState === \"visible\") void load();\n };\n window.addEventListener(\"focus\", onFocus);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.clearInterval(timer);\n window.removeEventListener(\"focus\", onFocus);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n }, [enabled, load, refreshInterval]);\n\n return { data, error, isLoading, isRefreshing, refresh: load };\n}\n\nexport type ConnectedBillStatusProps = UseBillStatusOptions & {\n actions?: BillStatusSummaryProps[\"actions\"];\n appearance?: BillStatusSummaryProps[\"appearance\"];\n className?: string;\n style?: BillStatusSummaryProps[\"style\"];\n loadingFallback?: ReactNode;\n errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;\n};\n\nexport function ConnectedBillStatus({\n actions,\n appearance,\n className,\n style,\n loadingFallback,\n errorFallback,\n ...options\n}: ConnectedBillStatusProps): ReactElement | null {\n const status = useBillStatus(options);\n if (status.isLoading && !status.data) {\n return <>{loadingFallback ?? <div role=\"status\">Loading bill status…</div>}</>;\n }\n if (status.error && !status.data) {\n return <>{errorFallback?.(status.error, status.refresh) ?? (\n <div role=\"alert\">\n {status.error.message}{\" \"}\n <button type=\"button\" onClick={() => void status.refresh()}>Retry</button>\n </div>\n )}</>;\n }\n if (!status.data) return null;\n return <BillStatusSummary\n status={status.data.state}\n submittedAt={status.data.submittedAt}\n agingDays={status.data.agingDays}\n updatedAt={status.data.updatedAt}\n totalCharge={status.data.totalCharge}\n totalPaid={status.data.totalPaid}\n balanceDue={status.data.balanceDue}\n {...(actions ? { actions } : {})}\n {...(appearance ? { appearance } : {})}\n {...(className ? { className } : {})}\n {...(style ? { style } : {})}\n />;\n}\n","\"use client\";\n\nimport { useEffect, useRef, useState, type CSSProperties, type ReactElement } from \"react\";\nimport type {\n BillEorDocument,\n BillHistoryEntry,\n BillLifecycleAction,\n BillLifecycleData,\n BillLifecycleDelivery,\n BillPaymentRecord,\n BillRejection,\n BillRemittanceSummary,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillLifecycleActionsProps = SurfaceProps & {\n actions: readonly BillLifecycleAction[];\n onAction: (action: BillLifecycleAction) => void;\n /** Show disabled actions and the server-provided reason. Defaults to false. */\n showUnavailable?: boolean;\n disabled?: boolean;\n};\n\n/** Returns the server-authoritative actions that should be rendered. */\nexport function visibleBillLifecycleActions(\n actions: readonly BillLifecycleAction[],\n showUnavailable = false,\n): BillLifecycleAction[] {\n return actions.filter((action) => action.enabled || showUnavailable);\n}\n\nexport function BillLifecycleActions({\n actions,\n onAction,\n showUnavailable = false,\n disabled = false,\n appearance,\n className,\n style,\n}: BillLifecycleActionsProps): ReactElement | null {\n const visible = visibleBillLifecycleActions(actions, showUnavailable);\n if (!visible.length) return null;\n\n return (\n <div className={classes(\"mb-lifecycle-actions\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill actions\">\n <style>{lifecycleSurfaceStyles}</style>\n {visible.map((action) => (\n <div className=\"mb-lifecycle-action\" key={action.id}>\n <button type=\"button\" className={action.primary ? \"mb-action-button is-primary\" : \"mb-action-button\"} disabled={disabled || !action.enabled} onClick={() => onAction(action)}>\n {action.label}\n </button>\n {!action.enabled && action.reason ? <span className=\"mb-action-reason\">{action.reason}</span> : null}\n </div>\n ))}\n </div>\n );\n}\n\nexport type BillActivityEvent = {\n id: string;\n type: string;\n createdAt: string;\n title?: string;\n description?: string;\n actor?: string | null;\n};\n\nexport type BillActivityTimelineProps = SurfaceProps & {\n events: readonly BillActivityEvent[];\n emptyLabel?: string;\n formatDate?: (createdAt: string) => string;\n};\n\nconst activityLabels: Record<string, string> = {\n \"bill.scrub_failed\": \"Submission needs attention\",\n \"bill.submitted\": \"Bill submitted\",\n \"bill.accepted\": \"Bill accepted\",\n \"bill.rejected\": \"Bill rejected\",\n \"bill.denied\": \"Bill denied\",\n \"bill.partially_paid\": \"Partial payment received\",\n \"bill.paid\": \"Bill paid\",\n \"bill.second_review\": \"Second Bill Review submitted\",\n \"bill.lien\": \"Bill moved to lien\",\n \"bill.ibr\": \"Independent Bill Review submitted\",\n \"bill.closed\": \"Bill closed\",\n \"bill.written_off\": \"Balance written off\",\n \"payment.posted\": \"Payment posted\",\n \"eor.received\": \"EOR received\",\n \"bill.autofill_completed\": \"Bill data extracted\",\n};\n\n/** Human-readable fallback for a signed partner event type. */\nexport function billActivityEventLabel(type: string): string {\n return activityLabels[type] ?? type.replace(/[._-]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction defaultFormatDate(createdAt: string): string {\n const parsed = new Date(createdAt);\n if (Number.isNaN(parsed.getTime())) return createdAt;\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\", timeStyle: \"short\" }).format(parsed);\n}\n\nexport function BillActivityTimeline({ events, emptyLabel = \"No bill activity yet.\", appearance, className, style, formatDate = defaultFormatDate }: BillActivityTimelineProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-activity\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill activity\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill history</strong><span>Submission, payer responses, follow-up, and payments.</span></div></header>\n {!events.length ? <p className=\"mb-activity-empty\">{emptyLabel}</p> : (\n <ol className=\"mb-activity-list\">\n {events.map((event) => (\n <li className=\"mb-activity-item\" key={event.id}>\n <span className=\"mb-activity-marker\" aria-hidden=\"true\" />\n <div className=\"mb-activity-content\">\n <strong>{event.title ?? billActivityEventLabel(event.type)}</strong>\n {event.description ? <p>{event.description}</p> : null}\n <span>{formatDate(event.createdAt)}{event.actor ? ` · ${event.actor}` : \"\"}</span>\n </div>\n </li>\n ))}\n </ol>\n )}\n </section>\n );\n}\n\nexport type BillHistoryTableProps = SurfaceProps & {\n entries: readonly BillHistoryEntry[];\n /** History row selected from the submissions ribbon. */\n selectedEntryId?: string;\n emptyLabel?: string;\n /** Formats the Date column. Defaults to MM/DD/YYYY. */\n formatDate?: (iso: string) => string;\n /** Resolve a clickable href for a submitted document; return null for plain text. */\n documentHref?: (doc: { id: string; filename: string }) => string | null;\n /** Open an authenticated submitted document in a new tab when no direct href is available. */\n onOpenDocument?: (doc: { id: string; filename: string }) => void | Promise<void>;\n};\n\nfunction historyDate(iso: string): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return iso;\n return new Intl.DateTimeFormat(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }).format(parsed);\n}\n\n/**\n * The Bill History table: Date / Action / User / Details rows where\n * submissions are pale-blue expandable rows (documents + compliance due dates), notes\n * are pale-yellow, and 277 responses expand into decoded status-code sentences. The\n * rows come pre-worded from the MindBill API (`BillLifecycleData.history`).\n */\nexport function BillHistoryTable({ entries, selectedEntryId, emptyLabel = \"No bill history yet.\", appearance, className, style, formatDate = historyDate, documentHref, onOpenDocument }: BillHistoryTableProps): ReactElement {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n const selectedRowRef = useRef<HTMLLIElement | null>(null);\n useEffect(() => {\n if (!selectedEntryId) return;\n const selected = entries.find((entry) => entry.id === selectedEntryId);\n if (selected?.details) setExpanded((current) => current[selectedEntryId] ? current : { ...current, [selectedEntryId]: true });\n selectedRowRef.current?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }, [entries, selectedEntryId]);\n return (\n <section className={classes(\"mb-surface mb-history\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill history\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill history</strong><span>Submissions, payer responses, follow-up, and payments.</span></div></header>\n {!entries.length ? <p className=\"mb-activity-empty\">{emptyLabel}</p> : (\n <div className=\"mb-history-table\">\n <div className=\"mb-history-head\" aria-hidden=\"true\"><span>Date</span><span>Action</span><span>User</span><span>Details</span></div>\n <ul className=\"mb-history-rows\">\n {entries.map((entry) => {\n const isSelected = entry.id === selectedEntryId;\n const expandable = Boolean(entry.details);\n const isOpen = expandable && Boolean(expanded[entry.id]);\n const details = entry.details;\n const lineContents = <>\n <span className=\"mb-history-date\">{formatDate(entry.date)}</span>\n <span className=\"mb-history-action\">{entry.action}</span>\n <span className=\"mb-history-actor\">{entry.actor ?? \"—\"}</span>\n <span className=\"mb-history-summary\">\n {expandable ? <i className={`mb-history-caret${isOpen ? \" is-open\" : \"\"}`} aria-hidden=\"true\" /> : null}\n {entry.summary}\n </span>\n </>;\n return (\n <li\n key={entry.id}\n ref={isSelected ? selectedRowRef : undefined}\n className={`mb-history-row is-${entry.tone}${isSelected ? \" is-selected\" : \"\"}`}\n aria-current={isSelected ? \"true\" : undefined}\n >\n {expandable ? <button\n type=\"button\"\n className=\"mb-history-line is-expandable\"\n aria-expanded={isOpen}\n onClick={() => setExpanded((current) => ({ ...current, [entry.id]: !current[entry.id] }))}\n >{lineContents}</button> : <div className=\"mb-history-line\">{lineContents}</div>}\n {isOpen && details ? (\n <div className=\"mb-history-details\">\n {details.rows?.length ? (\n <dl className=\"mb-history-kv\">\n {details.rows.map((row) => (\n <div key={`${row.label}-${row.value}`}><dt>{row.label}</dt><dd>{row.value}</dd></div>\n ))}\n </dl>\n ) : null}\n {details.documents?.length ? (\n <div className=\"mb-history-kv\"><div><dt>Documents</dt><dd>\n {details.documents.map((doc) => {\n const href = documentHref?.(doc) ?? null;\n return href\n ? <a key={doc.id} className=\"mb-history-doc\" href={href} target=\"_blank\" rel=\"noreferrer\">{doc.filename}</a>\n : onOpenDocument\n ? <button key={doc.id} type=\"button\" className=\"mb-history-doc\" onClick={() => void onOpenDocument(doc)}>{doc.filename}</button>\n : <span key={doc.id} className=\"mb-history-doc\">{doc.filename}</span>;\n })}\n </dd></div></div>\n ) : null}\n {details.codes?.length ? (\n <dl className=\"mb-history-codes\">\n {details.codes.map((code) => (\n <div key={code.code}><dt>{code.code}</dt><dd>{code.text}</dd></div>\n ))}\n </dl>\n ) : null}\n {details.complianceDueDates?.length ? (\n <div className=\"mb-history-due\">\n <em>Compliance Due Dates</em>\n <dl>\n {details.complianceDueDates.map((due) => (\n <div key={`${due.date}-${due.text}`}><dt>{formatDate(due.date)}</dt><dd>{due.text}</dd></div>\n ))}\n </dl>\n </div>\n ) : null}\n {details.text ? <p className=\"mb-history-text\">{details.text}</p> : null}\n </div>\n ) : null}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </section>\n );\n}\n\nexport type BillLifecycleStage = \"submitted\" | \"accepted\" | \"processed\" | \"closed\";\n\nconst lifecycleStages: Array<{ id: BillLifecycleStage; label: string }> = [\n { id: \"submitted\", label: \"Sent\" },\n { id: \"accepted\", label: \"Accepted\" },\n { id: \"processed\", label: \"Processed\" },\n { id: \"closed\", label: \"Closed\" },\n];\n\nexport type BillLifecycleProgressStep = {\n id: string;\n label: string;\n status: \"complete\" | \"current\" | \"upcoming\";\n};\n\n/** Maps MindBill's detailed lifecycle state into a compact progress stage. */\nexport function billLifecycleStage(state: string): BillLifecycleStage {\n const value = state.toLowerCase();\n if (value.includes(\"closed\") || value.includes(\"written_off\")) return \"closed\";\n if (value.includes(\"second_review\") || value.includes(\"appeal\") || value.includes(\"reject\")) return \"submitted\";\n if (value.includes(\"processed\") || value.includes(\"paid\") || value.includes(\"denied\") || value.includes(\"partial\") || value.includes(\"response\") || value.includes(\"ibr\") || value.includes(\"lien\")) return \"processed\";\n if (value.includes(\"accepted\")) return \"accepted\";\n return \"submitted\";\n}\n\nexport type BillLifecycleProgressStepsOptions = {\n /**\n * Render pre-submission bills (\"draft\") as a dedicated leading Draft stage\n * ahead of the Sent→Closed rail. Off by default: hosts whose bills are always\n * already submitted (the typical partner embed) never see a Draft stage, and\n * without the flag a draft state keeps the legacy rendering (Sent as the\n * current stage). Post-submission states render identically either way.\n */\n draftStage?: boolean;\n};\n\n/** True when the lifecycle state is a pre-submission draft. */\nexport function isBillLifecycleDraft(state: string): boolean {\n return state.toLowerCase() === \"draft\";\n}\n\n/** Builds the progress rail for a lifecycle state, including terminal exception paths. */\nexport function billLifecycleProgressSteps(state: string, options?: BillLifecycleProgressStepsOptions): BillLifecycleProgressStep[] {\n if (state.toLowerCase() === \"rejected\") {\n return [\n { id: \"submitted\", label: \"Sent\", status: \"complete\" },\n { id: \"rejected\", label: \"Rejected\", status: \"current\" },\n ];\n }\n\n if (options?.draftStage && isBillLifecycleDraft(state)) {\n return [\n { id: \"draft\", label: \"Draft\", status: \"current\" },\n ...lifecycleStages.map((stage) => ({ ...stage, status: \"upcoming\" as const })),\n ];\n }\n\n const current = billLifecycleStage(state);\n const currentIndex = lifecycleStages.findIndex((stage) => stage.id === current);\n return lifecycleStages.map((stage, index) => ({\n ...stage,\n status:\n index < currentIndex\n ? \"complete\"\n : index === currentIndex\n ? \"current\"\n : \"upcoming\",\n }));\n}\n\n/** Returns the end-user label for a canonical lifecycle state. */\nexport function billLifecycleDisplayLabel(state: string, nativeStatus?: string): string {\n const value = state.toLowerCase();\n if (value === \"submitted\") return \"Sent\";\n if (value === \"second_review\") return \"Second Review sent\";\n if (value === \"rejected\") return \"Rejected\";\n if (value === \"denied\") return \"Denied\";\n if (value === \"partially_paid\") return \"Partially paid\";\n if (value === \"written_off\") return \"Written off\";\n return humanize(state || nativeStatus || \"submitted\");\n}\n\nexport type BillLifecycleProgressProps = SurfaceProps & {\n state: string;\n nativeStatus?: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n /** Opt-in leading Draft stage for pre-submission bills. See {@link BillLifecycleProgressStepsOptions}. */\n draftStage?: boolean;\n};\n\nexport function BillLifecycleProgress({ state, nativeStatus, submittedAt, agingDays, draftStage, appearance, className, style }: BillLifecycleProgressProps): ReactElement {\n const rejected = state.toLowerCase() === \"rejected\";\n const draft = Boolean(draftStage) && isBillLifecycleDraft(state);\n const steps = billLifecycleProgressSteps(state, { draftStage: Boolean(draftStage) });\n return (\n <section className={classes(`mb-surface mb-progress${rejected ? \" is-rejected\" : \"\"}`, className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill lifecycle\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>{billLifecycleDisplayLabel(state, nativeStatus)}</strong><span>{rejected ? \"The payer rejected this submission.\" : draft ? \"Not yet sent\" : `${submittedAt ? `Submitted ${defaultFormatDate(submittedAt)}` : \"Submitted\"}${typeof agingDays === \"number\" ? ` · ${agingDays} days old` : \"\"}`}</span></div></header>\n <ol className=\"mb-progress-list\" style={{ gridTemplateColumns: `repeat(${steps.length}, minmax(0, 1fr))` }}>\n {steps.map((step, index) => (\n <li key={step.id} className={`is-${step.status}`} aria-current={step.status === \"current\" ? \"step\" : undefined}>\n <span aria-hidden=\"true\">{step.status === \"complete\" ? \"✓\" : rejected && step.status === \"current\" ? \"!\" : index + 1}</span>\n <b>{step.label}</b>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n\nexport type BillRejectionNoticeProps = SurfaceProps & {\n rejection: BillRejection;\n title?: string;\n submittedAt?: string | null;\n formatDate?: (createdAt: string) => string;\n};\n\n/** Builds concise source-aware copy without inventing a clearinghouse name. */\nexport function billRejectionIssueSummary(rejection: BillRejection, count: number): string {\n const noun = count === 1 ? \"validation error\" : \"validation errors\";\n const source = rejection.source?.trim().replace(/\\.$/, \"\");\n if (!source) return `${count} ${noun}.`;\n if (/acknowledg/i.test(source)) return `${count} clearinghouse ${noun}.`;\n return `${count} ${noun} returned by ${source}.`;\n}\n\n/** A prominent, end-user-readable explanation of a rejected submission. */\nexport function BillRejectionNotice({ rejection, title = \"Rejected — action required\", submittedAt, appearance, className, style, formatDate = defaultFormatDate }: BillRejectionNoticeProps): ReactElement {\n const issues = rejection.issues?.length\n ? rejection.issues\n : [{ code: rejection.code, description: rejection.reason }];\n const hasCodes = issues.some((issue) => Boolean(issue.code));\n\n return (\n <section className={classes(\"mb-surface mb-rejection-notice\", className)} style={mindBillAppearanceStyle(appearance, style)} role=\"alert\" aria-label=\"Bill rejection reasons\">\n <style>{lifecycleSurfaceStyles}</style>\n <div className=\"mb-rejection-overview\">\n <header className=\"mb-rejection-heading\">\n <span className=\"mb-rejection-icon\" aria-hidden=\"true\">!</span>\n <div><strong>{title}</strong><span>Fix the {issues.length === 1 ? \"issue\" : \"issues\"} below, then resubmit.</span></div>\n </header>\n <ol className=\"mb-rejection-progress\" aria-label=\"Submission status\">\n <li className=\"is-complete\"><span aria-hidden=\"true\">✓</span><b>Sent</b>{submittedAt ? <small>{formatDate(submittedAt)}</small> : null}</li>\n <li className=\"is-rejected\" aria-current=\"step\"><span aria-hidden=\"true\">!</span><b>Rejected</b>{rejection.receivedAt ? <small>{formatDate(rejection.receivedAt)}</small> : null}</li>\n </ol>\n </div>\n <div className=\"mb-rejection-issues\" aria-label=\"Rejection reasons\">\n <div className=\"mb-rejection-issues-heading\">\n <strong><span aria-hidden=\"true\">△</span> Rejection reasons</strong>\n <span>{billRejectionIssueSummary(rejection, issues.length)}</span>\n </div>\n <ol aria-label={`${issues.length} rejection ${issues.length === 1 ? \"reason\" : \"reasons\"}`}>\n {issues.map((issue, index) => (\n <li key={`${issue.code ?? \"issue\"}-${index}`}>\n <span className=\"mb-rejection-bullet\" aria-hidden=\"true\" />\n <p>{issue.description}</p>\n {issue.code ? <span className=\"mb-rejection-code\">{issue.code}</span> : null}\n </li>\n ))}\n </ol>\n {hasCodes ? <p className=\"mb-rejection-code-note\"><span aria-hidden=\"true\">i</span> Technical error codes are included for support and auditability.</p> : null}\n </div>\n </section>\n );\n}\n\nexport type BillSnapshotSummaryProps = SurfaceProps & Pick<BillLifecycleData, \"bill\" | \"patient\" | \"injury\" | \"delivery\">;\n\nexport function BillSnapshotSummary({ bill, patient, injury, delivery, appearance, className, style }: BillSnapshotSummaryProps): ReactElement {\n const values = [\n [\"Patient\", patient.name || [patient.firstName, patient.lastName].filter(Boolean).join(\" \")],\n [\"Claim\", injury.claimNumber || \"—\"],\n [\"Payer\", delivery.payerName || injury.claimsAdminName || \"—\"],\n [\"Date of service\", bill.dos || \"—\"],\n [\"Charged\", currency(bill.totalCharge)],\n [\"Balance\", currency(bill.balanceDue)],\n ];\n return (\n <section className={classes(\"mb-surface mb-snapshot\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill snapshot\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill snapshot</strong><span>Bill #{bill.billNumber}</span></div></header>\n <dl>{values.map(([label, value]) => <div key={label}><dt>{label}</dt><dd>{value}</dd></div>)}</dl>\n </section>\n );\n}\n\nexport type BillRemittanceCardProps = SurfaceProps & { remittance: BillRemittanceSummary };\n\nexport type BillExplanationOfReviewProps = SurfaceProps & {\n remittance: BillRemittanceSummary;\n eors: readonly BillEorDocument[];\n payments: readonly BillPaymentRecord[];\n submittedAt?: string | null;\n onOpenEor?: (document: BillEorDocument) => void | Promise<void>;\n};\n\n/**\n * A consolidated payer-response surface: financial summary, denial context,\n * EOR documents, and posted payments in one familiar reconciliation view.\n */\nexport function BillExplanationOfReview({\n remittance,\n eors,\n payments,\n submittedAt,\n onOpenEor,\n appearance,\n className,\n style,\n}: BillExplanationOfReviewProps): ReactElement {\n const rows = payments.length ? payments : [null];\n return (\n <section className={classes(\"mb-surface mb-eor-review\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Explanation of Review and payments\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Explanation of Review</strong><span>Payer response and payment reconciliation.</span></div></header>\n <dl className=\"mb-eor-metrics\">\n <div><dt>Amount billed</dt><dd>{currency(remittance.billedAmount)}</dd></div>\n <div><dt>Payer allowed</dt><dd>{remittance.payerAllowedAmount === null ? \"—\" : currency(remittance.payerAllowedAmount)}</dd></div>\n <div><dt>Payer reported paid</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div className=\"is-balance\"><dt>Balance due</dt><dd>{currency(remittance.balanceDue)}</dd></div>\n <div><dt>Payment posted</dt><dd>{currency(remittance.postedPrincipal)}</dd></div>\n <div><dt>Penalty & interest</dt><dd>{currency(remittance.postedAdditional)}</dd></div>\n <div><dt>Total received</dt><dd>{currency(remittance.totalPostedCash)}</dd></div>\n <div><dt>Expected</dt><dd>{currency(remittance.expectedAmount)}</dd></div>\n </dl>\n {remittance.denialReason ? <div className=\"mb-denial\"><strong>Denial reason</strong><p>{remittance.denialReason}</p></div> : null}\n <div className=\"mb-eor-table-wrap\">\n <table className=\"mb-eor-table\">\n <thead>\n <tr className=\"mb-eor-groups\"><th colSpan={2}>Submission</th><th colSpan={5}>EOR payment information</th><th colSpan={2}>EOR post</th><th>EOR</th></tr>\n <tr><th>Submission</th><th>Submission payment</th><th>Payment method</th><th>Reference</th><th>Effective date</th><th>Payment total</th><th>Deposit date</th><th>Post date</th><th>Source</th><th>Document</th></tr>\n </thead>\n <tbody>{rows.map((payment, index) => {\n const eor = eors[index] ?? eors[0];\n return <tr key={payment?.id ?? `empty-${index}`}>\n <td data-label=\"Submission\"><strong>Original bill</strong>{submittedAt ? <span>Sent {defaultFormatDate(submittedAt)}</span> : null}</td>\n <td data-label=\"Submission payment\">{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</td>\n <td data-label=\"Payment method\">{payment ? humanize(payment.method) : \"—\"}</td>\n <td data-label=\"Reference\">{payment?.checkNumber || \"—\"}</td>\n <td data-label=\"Effective date\">{payment ? payment.receivedDate || payment.depositDate || defaultFormatDate(payment.postedAt) : \"—\"}</td>\n <td data-label=\"Payment total\">{payment ? currency(payment.amount) : currency(0)}</td>\n <td data-label=\"Deposit date\">{payment?.depositDate || \"Not recorded\"}</td>\n <td data-label=\"Post date\">{payment ? defaultFormatDate(payment.postedAt) : eor ? defaultFormatDate(eor.addedAt) : \"—\"}</td>\n <td data-label=\"Source\">{payment ? payment.source.toUpperCase() : eor ? \"EOR\" : \"—\"}</td>\n <td data-label=\"EOR\">{eor && onOpenEor ? <button type=\"button\" className=\"mb-eor-link\" onClick={() => void onOpenEor(eor)}>{eor.filename}</button> : eor?.filename || \"—\"}</td>\n </tr>;\n })}</tbody>\n </table>\n </div>\n {eors.length > rows.length ? <div className=\"mb-eor-documents\">{eors.slice(rows.length).map((eor) => <button type=\"button\" key={eor.id} onClick={() => void onOpenEor?.(eor)}>{eor.filename}</button>)}</div> : null}\n </section>\n );\n}\n\nexport function BillRemittanceCard({ remittance, appearance, className, style }: BillRemittanceCardProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-remittance\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Remittance summary\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Remittance</strong><span>Amounts reported by the payer and posted to the bill.</span></div></header>\n <dl>\n <div><dt>Amount billed</dt><dd>{currency(remittance.billedAmount)}</dd></div>\n <div><dt>Expected</dt><dd>{currency(remittance.expectedAmount)}</dd></div>\n <div><dt>Payer allowed</dt><dd>{remittance.payerAllowedAmount === null ? \"—\" : currency(remittance.payerAllowedAmount)}</dd></div>\n <div><dt>Payer reported paid</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div><dt>Payment posted</dt><dd>{currency(remittance.postedPrincipal)}</dd></div>\n <div><dt>Penalty & interest</dt><dd>{currency(remittance.postedAdditional)}</dd></div>\n <div><dt>Total received</dt><dd>{currency(remittance.totalPostedCash)}</dd></div>\n <div><dt>Balance due</dt><dd>{currency(remittance.balanceDue)}</dd></div>\n </dl>\n {remittance.denialReason ? <div className=\"mb-denial\"><strong>Denial reason</strong><p>{remittance.denialReason}</p></div> : null}\n </section>\n );\n}\n\nexport type BillPayerContactCardProps = SurfaceProps & { delivery: BillLifecycleDelivery };\n\nexport function BillPayerContactCard({ delivery, appearance, className, style }: BillPayerContactCardProps): ReactElement | null {\n const contacts = [\n delivery.contacts.adjusterName ? [\"Adjuster\", delivery.contacts.adjusterName, null] : null,\n delivery.contacts.adjusterPhone ? [\"Adjuster phone\", delivery.contacts.adjusterPhone, `tel:${delivery.contacts.adjusterPhone}`] : null,\n delivery.contacts.adjusterEmail ? [\"Adjuster email\", delivery.contacts.adjusterEmail, `mailto:${delivery.contacts.adjusterEmail}`] : null,\n delivery.contacts.faxNumber ? [\"Fax\", delivery.contacts.faxNumber, `tel:${delivery.contacts.faxNumber}`] : null,\n delivery.contacts.claimsEmail ? [\"Email\", delivery.contacts.claimsEmail, `mailto:${delivery.contacts.claimsEmail}`] : null,\n delivery.contacts.mailingAddress ? [\"Mail\", delivery.contacts.mailingAddress, null] : null,\n delivery.contacts.portalUrl ? [\"Portal\", \"Open payer portal\", delivery.contacts.portalUrl] : null,\n ].filter(Boolean) as Array<[string, string, string | null]>;\n if (!delivery.payerName && !contacts.length) return null;\n return (\n <section className={classes(\"mb-surface mb-contacts\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Payer contact information\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>{delivery.payerName || \"Claims administrator\"}</strong><span>Billing and follow-up contacts.</span></div></header>\n {!contacts.length ? <p className=\"mb-empty\">No payer contact details are available.</p> : <dl>{contacts.map(([label, value, href]) => <div key={label}><dt>{label}</dt><dd>{href ? <a href={href} target={label === \"Portal\" ? \"_blank\" : undefined} rel={label === \"Portal\" ? \"noreferrer noopener\" : undefined}>{value}</a> : value}</dd></div>)}</dl>}\n </section>\n );\n}\n\nexport type BillPaymentLedgerProps = SurfaceProps & { payments: readonly BillPaymentRecord[] };\n\nexport function BillPaymentLedger({ payments, appearance, className, style }: BillPaymentLedgerProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-payments\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Payment ledger\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Payments</strong><span>Funds recorded against this bill.</span></div></header>\n {!payments.length ? <p className=\"mb-empty\">No payments posted.</p> : <div className=\"mb-payment-list\">{payments.map((payment) => {\n const additional = payment.feeAmount ?? 0;\n return <article key={payment.id}>\n <div className=\"mb-payment-amount\"><strong>{currency(payment.amount)}</strong><span>Total received</span></div>\n <dl>\n <div><dt>Applied to bill</dt><dd>{currency(payment.principalAmount)}</dd></div>\n {additional > 0 ? <div><dt>Penalty & interest</dt><dd>{currency(additional)}</dd></div> : null}\n <div><dt>Method</dt><dd>{payment.method.toUpperCase()}</dd></div>\n <div><dt>Reference</dt><dd>{payment.checkNumber || \"—\"}</dd></div>\n <div><dt>Effective date</dt><dd>{payment.receivedDate || payment.depositDate || defaultFormatDate(payment.postedAt)}</dd></div>\n <div><dt>Deposit date</dt><dd>{payment.depositDate || \"Not recorded\"}</dd></div>\n <div><dt>Posted</dt><dd>{defaultFormatDate(payment.postedAt)} · {payment.source.toUpperCase()}</dd></div>\n <div><dt>Status</dt><dd>{humanize(payment.status || \"posted\")}</dd></div>\n </dl>\n {payment.feeReason ? <p>{payment.feeReason}</p> : null}\n {payment.note ? <p>{payment.note}</p> : null}\n </article>;\n })}</div>}\n </section>\n );\n}\n\nfunction classes(base: string, className?: string): string {\n return [base, className].filter(Boolean).join(\" \");\n}\n\nfunction humanize(value: string): string {\n return value.replace(/[._-]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction currency(value: number): string {\n return new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nconst lifecycleSurfaceStyles = `\n.mb-lifecycle-actions,.mb-surface{box-sizing:border-box;color:var(--mb-text);font-family:var(--mb-font,ui-sans-serif,system-ui,sans-serif)}\n.mb-surface *{box-sizing:border-box}.mb-surface{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,12px);box-shadow:var(--mb-shadow);padding:20px}\n.mb-surface-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.mb-surface-heading>div{display:grid;gap:2px}.mb-surface-heading strong{font-size:16px}.mb-surface-heading span,.mb-empty{color:var(--mb-muted);font-size:13px}.mb-surface-heading>span{border-radius:999px;background:var(--mb-soft);font-weight:750;padding:4px 8px}\n.mb-lifecycle-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start}.mb-lifecycle-action{display:grid;gap:5px;max-width:260px}.mb-action-button{appearance:none;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:700;line-height:1.2;padding:11px 15px;cursor:pointer}.mb-action-button:hover:not(:disabled){border-color:var(--mb-accent);color:var(--mb-accent)}.mb-action-button:focus-visible{outline:3px solid color-mix(in srgb,var(--mb-accent) 28%,transparent);outline-offset:2px}.mb-action-button.is-primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-action-button:disabled{cursor:not-allowed;opacity:.55}.mb-action-reason{color:var(--mb-muted);font-size:12px;line-height:1.35}\n.mb-activity-list{list-style:none;margin:0;padding:0}.mb-activity-item{display:grid;grid-template-columns:18px minmax(0,1fr);gap:12px;position:relative;padding:0 0 22px}.mb-activity-item:last-child{padding-bottom:0}.mb-activity-item:not(:last-child)::before{background:var(--mb-border);content:\"\";left:8px;position:absolute;top:10px;bottom:0;width:1px}.mb-activity-marker{background:var(--mb-surface);border:3px solid var(--mb-accent);border-radius:999px;height:11px;margin-top:4px;position:relative;width:11px;z-index:1}.mb-activity-content{display:grid;gap:4px;min-width:0}.mb-activity-content strong{font-size:15px;line-height:1.35}.mb-activity-content p{color:var(--mb-text);font-size:14px;line-height:1.5;margin:0}.mb-activity-content span,.mb-activity-empty{color:var(--mb-muted);font-size:13px;line-height:1.45}.mb-activity-empty,.mb-empty{margin:0}\n.mb-progress-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));list-style:none;margin:0;padding:0}.mb-progress-list li{display:grid;gap:7px;position:relative;text-align:center;color:var(--mb-muted);font-size:12px}.mb-progress-list li:not(:last-child)::after{content:\"\";position:absolute;left:calc(50% + 14px);right:calc(-50% + 14px);top:13px;height:2px;background:var(--mb-border)}.mb-progress-list li.is-complete:not(:last-child)::after{background:var(--mb-accent)}.mb-progress-list li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:28px;height:28px;border:2px solid var(--mb-border);border-radius:50%;background:var(--mb-surface);font-weight:800}.mb-progress-list li.is-complete>span,.mb-progress-list li.is-current>span{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-progress-list li.is-current{color:var(--mb-text)}\n.mb-progress.is-rejected{border-color:color-mix(in srgb,var(--mb-danger) 34%,var(--mb-border));background:color-mix(in srgb,var(--mb-danger) 3%,var(--mb-surface));box-shadow:0 8px 24px color-mix(in srgb,var(--mb-danger) 8%,transparent)}.mb-progress.is-rejected .mb-surface-heading strong,.mb-progress.is-rejected .mb-progress-list li.is-current{color:var(--mb-danger)}.mb-progress.is-rejected .mb-progress-list li.is-current>span{border-color:var(--mb-danger);background:var(--mb-danger);color:#fff}\n.mb-rejection-notice{border:1px solid color-mix(in srgb,var(--mb-danger) 30%,var(--mb-border));border-left:4px solid var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 5%,var(--mb-surface));box-shadow:0 14px 38px color-mix(in srgb,var(--mb-danger) 9%,transparent);padding:26px 28px 18px}.mb-rejection-overview{display:grid;grid-template-columns:minmax(230px,.72fr) minmax(360px,1.28fr);align-items:start;gap:38px}.mb-rejection-heading{display:flex;align-items:flex-start;gap:14px}.mb-rejection-heading>div{display:grid;gap:5px}.mb-rejection-heading strong{color:var(--mb-danger);font-size:19px;line-height:1.25}.mb-rejection-heading span{color:color-mix(in srgb,var(--mb-danger) 48%,var(--mb-text));font-size:14px;line-height:1.45}.mb-rejection-icon{display:grid;place-items:center;flex:0 0 auto;width:42px;height:42px;border-radius:50%;background:var(--mb-danger);box-shadow:0 5px 14px color-mix(in srgb,var(--mb-danger) 25%,transparent);color:#fff;font-size:21px;font-weight:900}.mb-rejection-progress{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));list-style:none;margin:5px 0 24px;padding:0}.mb-rejection-progress li{display:grid;grid-template-rows:34px auto auto;gap:4px;position:relative;text-align:center;color:var(--mb-text);font-size:12px}.mb-rejection-progress li:first-child::after{content:\"\";position:absolute;left:calc(50% + 17px);right:calc(-50% + 17px);top:16px;height:2px;background:color-mix(in srgb,var(--mb-danger) 48%,var(--mb-border))}.mb-rejection-progress li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:34px;height:34px;border:2px solid color-mix(in srgb,var(--mb-danger) 32%,var(--mb-border));border-radius:50%;background:var(--mb-surface);color:var(--mb-danger);font-size:16px;font-weight:900}.mb-rejection-progress li.is-rejected>span{border-color:var(--mb-danger);background:var(--mb-danger);color:#fff}.mb-rejection-progress b{font-size:13px}.mb-rejection-progress small{color:var(--mb-muted);font-size:11px;line-height:1.3}.mb-rejection-issues{border:1px solid color-mix(in srgb,var(--mb-danger) 19%,var(--mb-border));border-radius:12px;background:color-mix(in srgb,var(--mb-danger) 2%,var(--mb-surface));overflow:hidden}.mb-rejection-issues-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--mb-danger) 14%,var(--mb-border))}.mb-rejection-issues-heading strong{display:flex;align-items:center;gap:8px;font-size:13px}.mb-rejection-issues-heading strong>span{color:var(--mb-danger);font-size:17px}.mb-rejection-issues-heading>span{color:var(--mb-muted);font-size:12px;text-align:right}.mb-rejection-issues ol{display:grid;gap:7px;list-style:none;margin:0;padding:10px 12px}.mb-rejection-issues li{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:11px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--mb-danger) 11%,var(--mb-border));border-radius:8px;background:color-mix(in srgb,var(--mb-danger) 1%,var(--mb-surface));box-shadow:0 1px 3px rgba(23,39,48,.04)}.mb-rejection-bullet{width:7px;height:7px;border-radius:50%;background:var(--mb-danger)}.mb-rejection-issues p{margin:0;font-size:14px;line-height:1.45}.mb-rejection-code{justify-self:end;border:1px solid color-mix(in srgb,var(--mb-danger) 20%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-danger) 6%,var(--mb-surface));color:var(--mb-danger);font-size:11px;font-weight:850;line-height:1.2;padding:4px 8px}.mb-rejection-code-note{display:flex;align-items:center;gap:7px;margin:0;padding:1px 16px 13px;color:var(--mb-muted);font-size:11px}.mb-rejection-code-note>span{display:grid;place-items:center;width:16px;height:16px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:850}\n.mb-snapshot dl,.mb-remittance dl,.mb-contacts dl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:0}.mb-remittance dl{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:1px;background:var(--mb-border)}.mb-snapshot dl>div,.mb-remittance dl>div,.mb-contacts dl>div{display:grid;gap:3px;padding:10px 14px;border-left:1px solid var(--mb-border)}.mb-remittance dl>div{border:0;background:var(--mb-surface)}.mb-snapshot dl>div:nth-child(3n+1),.mb-contacts dl>div:first-child{border-left:0}.mb-snapshot dt,.mb-remittance dt,.mb-contacts dt,.mb-payment-list dt{color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.mb-snapshot dd,.mb-remittance dd,.mb-contacts dd,.mb-payment-list dd{font-size:14px;font-weight:750;margin:0;overflow-wrap:anywhere}.mb-contacts a{color:var(--mb-accent)}.mb-denial{margin-top:16px;border-left:4px solid var(--mb-danger);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 8%,var(--mb-surface));padding:12px 14px}.mb-denial p{margin:4px 0 0}\n.mb-payment-list{display:grid}.mb-payment-list article{display:grid;grid-template-columns:minmax(120px,.35fr) 1fr;gap:14px 24px;padding:16px 0;border-top:1px solid var(--mb-border)}.mb-payment-list article:first-child{border-top:0}.mb-payment-amount{display:grid;align-content:start;gap:2px}.mb-payment-amount strong{font-size:1.2rem}.mb-payment-list article>dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0}.mb-payment-list article>dl>div{display:grid;align-content:start;gap:3px}.mb-payment-list article span{color:var(--mb-muted);font-size:12px}.mb-payment-list article p{grid-column:1/-1;margin:0;color:var(--mb-muted);font-size:13px}\n.mb-eor-review{border-top:4px solid var(--mb-accent);padding-top:17px}.mb-eor-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:0 0 18px;border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}.mb-eor-metrics>div{display:grid;gap:4px;padding:13px 15px;border-left:1px solid var(--mb-border);border-top:1px solid var(--mb-border)}.mb-eor-metrics>div:nth-child(-n+4){border-top:0}.mb-eor-metrics>div:nth-child(4n+1){border-left:0}.mb-eor-metrics dt{color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.mb-eor-metrics dd{margin:0;font-size:15px;font-weight:800}.mb-eor-metrics .is-balance{background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface))}.mb-eor-table-wrap{overflow-x:auto;border:1px solid var(--mb-border);border-radius:10px}.mb-eor-table{width:100%;min-width:1080px;border-collapse:collapse;font-size:12px}.mb-eor-table th,.mb-eor-table td{padding:10px 12px;border-left:1px solid var(--mb-border);border-top:1px solid var(--mb-border);text-align:left;vertical-align:top}.mb-eor-table th:first-child,.mb-eor-table td:first-child{border-left:0}.mb-eor-table thead th{background:var(--mb-soft);color:var(--mb-muted);font-weight:800}.mb-eor-table .mb-eor-groups th{border-top:0;background:color-mix(in srgb,var(--mb-accent) 13%,var(--mb-surface));color:var(--mb-text);text-align:center}.mb-eor-table td>strong,.mb-eor-table td>span{display:block}.mb-eor-table td>span{margin-top:3px;color:var(--mb-muted)}.mb-eor-link,.mb-eor-documents button{border:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:750;padding:0;text-align:left;text-decoration:underline;cursor:pointer;overflow-wrap:anywhere}.mb-eor-documents{display:flex;flex-wrap:wrap;gap:12px;margin-top:12px}\n.mb-history-table{border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}\n.mb-history-head{display:grid;grid-template-columns:96px 160px 140px minmax(0,1fr);gap:12px;padding:8px 14px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}\n.mb-history-rows{list-style:none;margin:0;padding:0}.mb-history-row{border-top:1px solid var(--mb-border)}\n.mb-history-row.is-submission{background:color-mix(in srgb,var(--mb-accent) 9%,var(--mb-surface))}\n.mb-history-row.is-note{background:color-mix(in srgb,#f2c344 13%,var(--mb-surface))}\n.mb-history-row.is-selected{position:relative;background:color-mix(in srgb,var(--mb-accent) 15%,var(--mb-surface));box-shadow:inset 4px 0 0 var(--mb-accent),inset 0 0 0 1px color-mix(in srgb,var(--mb-accent) 44%,transparent)}\n.mb-history-line{display:grid;grid-template-columns:96px 160px 140px minmax(0,1fr);gap:12px;width:100%;padding:10px 14px;border:0;background:transparent;color:inherit;font:inherit;text-align:left}\n.mb-history-line.is-expandable{cursor:pointer}.mb-history-line.is-expandable:hover .mb-history-summary{text-decoration:underline}\n.mb-history-date{color:var(--mb-muted);font-size:13px}.mb-history-action{font-size:13.5px;font-weight:750}\n.mb-history-row.is-problem .mb-history-action{color:var(--mb-danger)}\n.mb-history-actor{color:var(--mb-muted);font-size:13px;overflow-wrap:anywhere}\n.mb-history-summary{display:flex;align-items:flex-start;gap:7px;min-width:0;font-size:13.5px;line-height:1.45;overflow-wrap:anywhere}\n.mb-history-caret{flex:0 0 auto;margin-top:5px;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--mb-muted);transition:transform .12s ease}\n.mb-history-caret.is-open{transform:rotate(90deg)}\n.mb-history-details{padding:4px 14px 14px 122px;font-size:13.5px;line-height:1.5}\n.mb-history-kv,.mb-history-codes,.mb-history-due dl{display:grid;gap:4px;margin:0}\n.mb-history-kv>div{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding-top:4px}\n.mb-history-kv dt{font-weight:750}.mb-history-kv dd{margin:0;overflow-wrap:anywhere}.mb-history-kv dd a{color:var(--mb-accent)}.mb-history-doc{display:block}.mb-history-kv button.mb-history-doc{border:0;background:transparent;color:var(--mb-accent);font:inherit;padding:0;text-align:left;text-decoration:underline;cursor:pointer}\n.mb-history-codes>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:12px}.mb-history-codes dt{font-weight:800}.mb-history-codes dd{margin:0}\n.mb-history-due{margin-top:8px}.mb-history-due em{display:block;color:var(--mb-muted);font-size:12.5px;margin-bottom:4px}\n.mb-history-due dl>div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding-top:4px}\n.mb-history-due dt{font-weight:750}.mb-history-due dd{margin:0}\n.mb-history-text{margin:8px 0 0;color:var(--mb-text);white-space:pre-wrap}\n@media(max-width:500px){.mb-eor-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-eor-metrics>div:nth-child(n){border-top:1px solid var(--mb-border);border-left:1px solid var(--mb-border)}.mb-eor-metrics>div:nth-child(-n+2){border-top:0}.mb-eor-metrics>div:nth-child(odd){border-left:0}.mb-eor-metrics dd{overflow-wrap:anywhere}}\n@media(max-width:700px){.mb-history-head{display:none}.mb-history-line{grid-template-columns:1fr;gap:2px;padding:10px 12px}.mb-history-details{padding:4px 12px 12px}.mb-history-kv>div,.mb-history-due dl>div{grid-template-columns:1fr}}\n@media(max-width:700px){.mb-surface.mb-progress{padding:16px 10px}.mb-progress-list{grid-template-columns:repeat(4,minmax(0,1fr))}.mb-progress-list li{display:grid;grid-template-columns:1fr;align-items:start;gap:6px;text-align:center;font-size:10px;min-width:0}.mb-progress-list li b{font-size:10px;white-space:nowrap}.mb-progress-list li:not(:last-child)::after{left:calc(50% + 12px);right:calc(-50% + 12px);top:11px;bottom:auto;width:auto;height:2px}.mb-progress-list li>span{grid-row:auto;width:24px;height:24px;font-size:11px}.mb-rejection-notice{padding:18px 14px 14px}.mb-rejection-overview{grid-template-columns:1fr;gap:18px}.mb-rejection-heading strong{font-size:17px}.mb-rejection-icon{width:36px;height:36px}.mb-rejection-progress{margin:0 0 4px}.mb-rejection-issues-heading{align-items:flex-start;flex-direction:column;gap:4px}.mb-rejection-issues-heading>span{text-align:left}.mb-rejection-issues li{grid-template-columns:8px minmax(0,1fr);gap:8px 10px}.mb-rejection-code{grid-column:2;justify-self:start}.mb-snapshot dl,.mb-remittance dl,.mb-contacts dl{grid-template-columns:1fr 1fr}.mb-snapshot dl>div,.mb-remittance dl>div,.mb-contacts dl>div{border:0;border-top:1px solid var(--mb-border);padding:10px 0}.mb-snapshot dl>div:nth-child(-n+2),.mb-remittance dl>div:nth-child(-n+2),.mb-contacts dl>div:nth-child(-n+2){border-top:0}.mb-payment-list article{grid-template-columns:1fr}.mb-payment-list article>dl{grid-template-columns:1fr 1fr}}\n`;\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n createBillLifecycleClient,\n reportBillStatusContacts,\n secondReviewDeadline,\n type AddBillNoteInput,\n type BrowserBillCreateInput,\n type BillClaimsAdministratorSource,\n type BillEorDocument,\n type BillLifecycleAction,\n type BillLifecycleClient,\n type BillLifecycleClientOptions,\n type BillLifecycleData,\n type BillRejection,\n type CloseBillInput,\n type PostBillPaymentInput,\n type ReopenBillInput,\n type SandboxSimulationScenario,\n type SubmitNewBillInput,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\nimport {\n BillActivityTimeline,\n BillExplanationOfReview,\n BillHistoryTable,\n BillLifecycleProgress,\n BillRejectionNotice,\n} from \"./bill-lifecycle-surfaces\";\nimport { BillReadOnlyForm } from \"./bill-read-only-form\";\nimport {\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BillSubmissionForm,\n prepareBillSubmissionDocuments,\n type BillSubmissionDocumentType,\n type BillSubmissionFormValue,\n type BillSubmissionInput,\n type BillSubmissionSourceAttachment,\n} from \"./bill-submission-form\";\nimport type { BillReviewAttachment } from \"./native-bill-review\";\nimport { BillSubmissionsRibbon, billSubmissionsRibbonFromHistory } from \"./bill-submissions-ribbon\";\nimport { ReportBillStatusDialog } from \"./report-bill-status-dialog\";\nimport { SecondReviewForm } from \"./second-review-form\";\nimport { BillCourtesyCopyForm, type CourtesyCopyRecipientOption } from \"./bill-courtesy-copy-form\";\n\nexport {\n SECOND_REVIEW_REASON_TEMPLATE,\n SECOND_REVIEW_WINDOW_DAYS,\n createBillLifecycleClient,\n reportBillStatusContacts,\n secondReviewDeadline,\n} from \"@mindbill/browser\";\nexport type {\n AddBillNoteInput,\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPayer,\n BillClaimsAdministratorPattern,\n BillEorDocument,\n BillActivityRecord,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillSubmissionDetail,\n HistoricalBillReviewData,\n BillLifecycleDelivery,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n BrowserBillAddress,\n BillPaymentRecord,\n BillRemittanceSummary,\n BillRejection,\n CloseBillInput,\n PostBillPaymentInput,\n ReopenBillInput,\n ReportBillStatusContacts,\n ResubmitBillInput,\n SandboxSimulationScenario,\n SecondReviewDeadline,\n SendDuplicateBillInput,\n SimulateSandboxBillInput,\n SubmitNewBillInput,\n SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\n\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\n/** Canonical team notes plus legacy API notes, without rendering their audit mirror twice. */\nexport function billTeamNotes(data: Pick<BillLifecycleData, \"notes\" | \"history\">) {\n const notes = data.notes ?? [];\n const canonicalIds = new Set(notes.map((note) => note.id));\n const legacy = (data.history ?? []).filter((entry) => entry.kind === \"note\" &&\n !canonicalIds.has(entry.id) && !notes.some((note) => entry.id.endsWith(`:ev-${note.id}`)));\n return [...legacy, ...notes.map((note) => ({ id: note.id, summary: note.body, actor: note.author, date: note.createdAt }))]\n .sort((left, right) => right.date.localeCompare(left.date));\n}\n\nexport type UseBillLifecycleOptions = BillLifecycleClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n};\n\nexport type UseBillLifecycleResult = {\n billId: string;\n data: BillLifecycleData | null;\n error: Error | null;\n isLoading: boolean;\n isRefreshing: boolean;\n isMutating: boolean;\n refresh: () => Promise<void>;\n searchClaimsAdministrators: BillLifecycleClient[\"searchClaimsAdministrators\"];\n getClaimsAdministratorDirectory: BillLifecycleClient[\"getClaimsAdministratorDirectory\"];\n getDeliveryOptions: BillLifecycleClient[\"getDeliveryOptions\"];\n getAttachment: BillLifecycleClient[\"getAttachment\"];\n openAttachment: (attachment: Pick<BillReviewAttachment, \"id\">) => Promise<void>;\n openEor: (document: BillEorDocument) => Promise<void>;\n downloadPacket: () => Promise<void>;\n downloadSubmissionArtifact: (attemptId: string, artifactId: string, label: string) => Promise<void>;\n downloadIbrPacket: () => Promise<void>;\n addNote: BillLifecycleClient[\"addNote\"];\n previewCourtesyCopy: BillLifecycleClient[\"previewCourtesyCopy\"];\n sendCourtesyCopy: BillLifecycleClient[\"sendCourtesyCopy\"];\n closeBill: BillLifecycleClient[\"closeBill\"];\n reopenBill: BillLifecycleClient[\"reopenBill\"];\n postPayment: BillLifecycleClient[\"postPayment\"];\n submitSecondReview: BillLifecycleClient[\"submitSecondReview\"];\n resubmitBill: BillLifecycleClient[\"resubmitBill\"];\n submitNewBill: BillLifecycleClient[\"submitNewBill\"];\n sendDuplicateBill: BillLifecycleClient[\"sendDuplicateBill\"];\n reportBillStatus: BillLifecycleClient[\"reportBillStatus\"];\n simulateSandbox: BillLifecycleClient[\"simulateSandbox\"];\n};\n\nfunction reservePreviewWindow(): Window | null {\n const preview = window.open(\"about:blank\", \"_blank\");\n if (preview) {\n preview.opener = null;\n preview.document.open();\n preview.document.write(\"<!doctype html><title>Preparing PDF…</title><meta name=viewport content=\\\"width=device-width,initial-scale=1\\\"><style>body{margin:0;display:grid;place-items:center;min-height:100vh;font:16px system-ui;color:#42545a;background:#f5f8f8}</style><p>Preparing PDF preview…</p>\");\n preview.document.close();\n }\n return preview;\n}\n\nfunction previewBlob(blob: Blob, preview: Window | null): void {\n const url = URL.createObjectURL(blob);\n if (preview) preview.location.replace(url);\n else {\n const link = document.createElement(\"a\");\n link.href = url;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.click();\n }\n window.setTimeout(() => URL.revokeObjectURL(url), 3_600_000);\n}\n\n/**\n * Opens a PDF loader from a user gesture without losing Safari's popup permission\n * while the authenticated request is in flight.\n */\nexport async function openPdfFromUserGesture(loadPdf: () => Promise<Blob>): Promise<void> {\n const preview = reservePreviewWindow();\n try {\n previewBlob(await loadPdf(), preview);\n } catch (error) {\n preview?.close();\n throw error;\n }\n}\n\nexport function useBillLifecycle({\n billId: providedBillId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n refreshInterval = DEFAULT_REFRESH_INTERVAL,\n enabled = true,\n fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [data, setData] = useState<BillLifecycleData | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [isMutating, setIsMutating] = useState(false);\n const mounted = useRef(true);\n const client = useMemo(() => createBillLifecycleClient({\n billId: providedBillId,\n sessionEndpoint,\n getSession,\n apiBaseUrl,\n fetch: fetchOverride,\n }), [apiBaseUrl, fetchOverride, getSession, providedBillId, sessionEndpoint]);\n\n useEffect(() => {\n setData(null);\n setError(null);\n setIsLoading(enabled);\n }, [enabled, providedBillId]);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n client.clearSession();\n };\n }, [client]);\n\n const refresh = useCallback(async () => {\n if (!enabled) return;\n setIsRefreshing(true);\n try {\n const next = await client.getLifecycle();\n if (!mounted.current) return;\n setData(next);\n setError(null);\n } catch (cause) {\n if (mounted.current) setError(cause instanceof Error ? cause : new Error(\"Bill could not be loaded.\"));\n } finally {\n if (mounted.current) {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }\n }, [client, enabled]);\n\n useEffect(() => {\n if (!enabled) return;\n void refresh();\n const interval = refreshInterval > 0 ? window.setInterval(() => void refresh(), refreshInterval) : null;\n const onFocus = () => void refresh();\n window.addEventListener(\"focus\", onFocus);\n return () => {\n if (interval) window.clearInterval(interval);\n window.removeEventListener(\"focus\", onFocus);\n };\n }, [enabled, refresh, refreshInterval]);\n\n const mutate = useCallback(async (task: () => Promise<BillLifecycleData>) => {\n setIsMutating(true);\n setError(null);\n try {\n const next = await task();\n if (mounted.current) setData(next);\n return next;\n } catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"The billing service could not complete this request.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n } finally {\n if (mounted.current) setIsMutating(false);\n }\n }, []);\n\n const openAttachment = useCallback(async (attachment: Pick<BillReviewAttachment, \"id\">) => {\n await openPdfFromUserGesture(() => client.getAttachment(attachment.id));\n }, [client]);\n const openEor = useCallback(async (document: BillEorDocument) => {\n await openPdfFromUserGesture(() => client.getEor(document.id));\n }, [client]);\n const downloadPacket = useCallback(async () => {\n setError(null);\n try {\n await openPdfFromUserGesture(() => client.getPacket());\n } catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"Submission packet could not be opened.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n }\n }, [client]);\n const downloadSubmissionArtifact = useCallback(async (attemptId: string, artifactId: string, label: string) => {\n setError(null);\n try {\n const blob = await client.getSubmissionArtifact(attemptId, artifactId);\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = label.replace(/[\\\\/]/g, \"_\");\n link.click();\n setTimeout(() => URL.revokeObjectURL(url), 60_000);\n } catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"Submission file could not be downloaded.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n }\n }, [client]);\n const downloadIbrPacket = useCallback(async () => {\n setError(null);\n setIsMutating(true);\n try { await openPdfFromUserGesture(() => client.prepareIbrPacket()); }\n catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"IBR packet could not be prepared.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n } finally { if (mounted.current) setIsMutating(false); }\n }, [client]);\n\n return {\n billId: providedBillId,\n data,\n error,\n isLoading,\n isRefreshing,\n isMutating,\n refresh,\n searchClaimsAdministrators: (query, claimNumber) => client.searchClaimsAdministrators(query, claimNumber),\n getClaimsAdministratorDirectory: (id, injuryState) => client.getClaimsAdministratorDirectory(id, injuryState),\n getDeliveryOptions: () => client.getDeliveryOptions(),\n getAttachment: (attachmentId) => client.getAttachment(attachmentId),\n openAttachment,\n openEor,\n downloadPacket,\n downloadSubmissionArtifact,\n downloadIbrPacket,\n addNote: (input) => mutate(() => client.addNote(input)),\n previewCourtesyCopy: (input) => client.previewCourtesyCopy(input),\n sendCourtesyCopy: (input, key) => client.sendCourtesyCopy(input, key),\n closeBill: (input) => mutate(() => client.closeBill(input)),\n reopenBill: (input) => mutate(() => client.reopenBill(input)),\n postPayment: (input) => mutate(() => client.postPayment(input)),\n submitSecondReview: (input) => mutate(() => client.submitSecondReview(input)),\n resubmitBill: (input) => mutate(() => client.resubmitBill(input)),\n submitNewBill: (input) => mutate(() => client.submitNewBill(input)),\n sendDuplicateBill: (input) => mutate(() => client.sendDuplicateBill(input)),\n reportBillStatus: (input) => mutate(() => client.reportBillStatus(input)),\n simulateSandbox: (input) => mutate(() => client.simulateSandbox(input)),\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillReactAppearance;\n /** Case-scoped suggestions; recipients must still be selected and confirmed. */\n courtesyCopyRecipientOptions?: readonly CourtesyCopyRecipientOption[];\n /** Human-readable name recorded for user-initiated bill actions. */\n actorName?: string;\n /** Optional host-system claims-administrator name shown as a selection hint. */\n claimsAdministratorHint?: ReactNode;\n /** Host-system evidence shown without preselecting a canonical directory entry. */\n claimsAdministratorSources?: readonly BillClaimsAdministratorSource[];\n /**\n * Exposes payer-response simulation controls for an explicit sandbox\n * playground. Sandbox responses remain indistinguishable from live\n * lifecycle responses to ordinary host applications.\n */\n sandboxControls?: boolean;\n className?: string;\n style?: CSSProperties;\n loadingFallback?: ReactNode;\n errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;\n onChanged?: (data: BillLifecycleData) => void;\n};\n\ntype Panel = \"\" | \"resubmit\" | \"submit_new_bill\" | \"second_review\" | \"ibr\" | \"payment\" | \"close\" | \"reopen\" | \"send_duplicate\" | \"report_status\" | \"courtesy_copy\";\ntype Tab = \"details\" | \"history\";\n\nfunction LifecycleDialog({ children, title, wide = false, onClose }: { children: ReactNode; title: string; wide?: boolean; onClose: () => void }): ReactElement {\n const dialog = useRef<HTMLDivElement | null>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n dialog.current?.focus();\n const onKeyDown = (event: KeyboardEvent) => event.key === \"Escape\" && onCloseRef.current();\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n previous?.focus();\n };\n }, []);\n return <div className=\"mb-lifecycle-dialog-backdrop\" onMouseDown={(event) => event.currentTarget === event.target && onClose()}>\n <div ref={dialog} className={[\"mb-lifecycle-dialog\", wide ? \"wide\" : \"\"].filter(Boolean).join(\" \")} role=\"dialog\" aria-modal=\"true\" aria-label={title} tabIndex={-1}>\n <button type=\"button\" className=\"mb-lifecycle-dialog-close\" aria-label=\"Close\" onClick={onClose}>×</button>{children}\n </div>\n </div>;\n}\n\nfunction correctionDocumentType(value: string): BillSubmissionDocumentType {\n return (BILL_SUBMISSION_DOCUMENT_TYPES as readonly string[]).includes(value)\n ? value as BillSubmissionDocumentType\n : \"other\";\n}\n\nfunction uniqueContactValues(values: Array<string | null | undefined>): string[] {\n const seen = new Set<string>();\n return values.flatMap((value) => {\n const trimmed = value?.trim();\n if (!trimmed) return [];\n const key = trimmed.toLocaleLowerCase();\n if (seen.has(key)) return [];\n seen.add(key);\n return [trimmed];\n });\n}\n\nexport type CorrectionRejectionSummary = {\n code: string | null;\n clearinghouseDetail: string | null;\n description: string;\n};\n\nexport function correctionRejectionSummary(rejection: BillRejection): CorrectionRejectionSummary {\n const reason = rejection.reason.trim();\n const encodedReason = reason.match(/^([A-Z0-9]+:[A-Z0-9-]+)(?:\\s+(\\d{8}\\s+[A-Z]\\s+\\d{4}))?\\s*[:-]?\\s+(.+)$/i);\n if (encodedReason?.[1] && encodedReason[3]) {\n return {\n code: encodedReason[1],\n clearinghouseDetail: encodedReason[2]?.trim() || null,\n description: encodedReason[3].trim(),\n };\n }\n\n const code = rejection.code?.trim() || null;\n const description = code && reason.toLocaleLowerCase().startsWith(code.toLocaleLowerCase())\n ? reason.slice(code.length).replace(/^\\s*[:-]?\\s*/, \"\").trim()\n : reason;\n return {\n code,\n clearinghouseDetail: null,\n description: description || reason || \"The clearinghouse rejected this submission.\",\n };\n}\n\nfunction CorrectionRejectionReason({ rejection }: { rejection: BillRejection }): ReactElement {\n const summary = correctionRejectionSummary(rejection);\n const details = rejection.issues?.filter((issue) => (\n issue.description.trim() !== summary.description\n || Boolean(issue.code?.trim() && issue.code.trim() !== summary.code)\n )) ?? [];\n\n return <div className=\"mb-lifecycle-correction-reason\" role=\"alert\">\n {summary.code ? <div className=\"mb-lifecycle-correction-reason-code\">\n <span>Rejection code</span>\n <code>{summary.code}</code>\n {summary.clearinghouseDetail ? <small><span>Clearinghouse detail</span>{summary.clearinghouseDetail}</small> : null}\n </div> : null}\n <div className=\"mb-lifecycle-correction-reason-description\">\n <span>Reason</span>\n <strong>{summary.description}</strong>\n </div>\n {details.length ? <ul aria-label=\"Additional rejection details\">{details.map((issue, index) => <li key={`${issue.code || \"issue\"}-${index}`}>\n {issue.code ? <code>{issue.code}</code> : null}<span>{issue.description}</span>\n </li>)}</ul> : null}\n </div>;\n}\n\nfunction CorrectionVerificationContact({ delivery }: { delivery: BillLifecycleData[\"delivery\"] }): ReactElement | null {\n const directory = delivery.directory;\n const billReview = directory?.billReview ?? [];\n const phones = uniqueContactValues([\n delivery.contacts.adjusterPhone,\n ...(directory?.telephoneNumbers ?? []),\n ...billReview.map((contact) => contact.phone),\n ]);\n const emails = uniqueContactValues([\n delivery.contacts.claimsEmail,\n delivery.contacts.adjusterEmail,\n ...(directory?.emailAddresses ?? []),\n ...billReview.map((contact) => contact.email),\n ]);\n const faxes = uniqueContactValues([\n delivery.contacts.faxNumber,\n ...billReview.map((contact) => contact.fax),\n ]);\n const portals = uniqueContactValues([\n delivery.contacts.portalUrl,\n ...(directory?.webPortals ?? []),\n ...billReview.map((contact) => contact.portalUrl),\n directory?.website,\n ]);\n const mailingAddresses = uniqueContactValues([\n delivery.contacts.mailingAddress,\n ...(directory?.mailingAddresses ?? []).map((entry) => entry.address),\n ...billReview.map((contact) => contact.address),\n ]);\n const methods = [\n { label: \"Phone\", values: phones, href: (value: string) => `tel:${value.replace(/[^+\\d]/g, \"\")}` },\n { label: \"Email\", values: emails, href: (value: string) => `mailto:${value}` },\n { label: \"Fax\", values: faxes },\n { label: \"Portal\", values: portals, href: (value: string) => value },\n { label: \"Mail\", values: mailingAddresses },\n ].filter((method) => method.values.length);\n\n if (!methods.length) return null;\n return <aside className=\"mb-lifecycle-correction-contact\">\n <strong>Need to verify the rejected information?</strong>\n <span>Contact {delivery.payerName} using any available method:</span>\n <dl>{methods.map((method) => <div key={method.label}>\n <dt>{method.label}</dt>\n <dd><ul>{method.values.map((value) => <li key={value}>{method.href\n ? <a href={method.href(value)} {...(method.label === \"Portal\" ? { target: \"_blank\", rel: \"noreferrer\" } : {})}>{value}</a>\n : value}</li>)}</ul></dd>\n </div>)}</dl>\n </aside>;\n}\n\nfunction correctionBill(data: BillLifecycleData): BillSubmissionInput {\n const billing = data.bill.billingSnapshot?.billingProvider;\n const rendering = data.bill.billingSnapshot?.renderingProvider;\n const location = data.bill.billingSnapshot?.placeOfService;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n const firstName = data.patient.firstName || nameParts[0] || \"\";\n const lastName = data.patient.lastName || nameParts.slice(1).join(\" \") || \"\";\n return {\n billingMode: data.bill.billingMode,\n patient: {\n firstName,\n ...(data.patient.middleName ? { middleName: data.patient.middleName } : {}),\n lastName,\n dateOfBirth: data.patient.dob || \"\",\n ...(data.patient.phone ? { phone: data.patient.phone } : {}),\n address: {\n line1: data.patient.address?.line1 || \"\",\n city: data.patient.address?.city || \"\",\n state: data.patient.address?.state || \"\",\n postalCode: data.patient.address?.postalCode || \"\",\n },\n },\n claim: {\n claimNumber: data.injury.claimNumber || \"\",\n ...(data.injury.adjNumber ? { adjNumber: data.injury.adjNumber } : {}),\n employer: data.injury.employer || \"\",\n dateOfInjury: data.injury.doi || \"\",\n ...(data.injury.injuryDescription ? { description: data.injury.injuryDescription } : {}),\n ...(data.injury.claimsAdminId && data.injury.claimsAdminName ? {\n claimsAdministrator: { id: data.injury.claimsAdminId, name: data.injury.claimsAdminName },\n } : {}),\n },\n service: {\n date: data.bill.dos,\n ...(data.bill.dosEnd !== undefined ? { endDate: data.bill.dosEnd } : {}),\n ...(data.bill.authorizationNumber !== undefined ? { authorizationNumber: data.bill.authorizationNumber } : {}),\n },\n ...(billing ? { billingProvider: {\n name: billing.name,\n taxId: billing.taxId,\n ...(billing.taxIdType ? { taxIdType: billing.taxIdType } : {}),\n ...(billing.taxIdType === \"SSN\" && billing.taxIdConfigured ? { sourceBillId: data.bill.id, ...(billing.taxIdLast4 ? { taxIdLast4: billing.taxIdLast4 } : {}) } : {}),\n npi: billing.npi,\n ...(billing.phone ? { phone: billing.phone } : {}),\n address: {\n line1: billing.billingStreet || \"\",\n city: billing.billingCity || \"\",\n state: billing.billingState || \"\",\n postalCode: billing.billingZip || \"\",\n },\n } } : {}),\n ...(rendering ? { renderingProvider: {\n name: rendering.name,\n npi: rendering.npi,\n ...(rendering.taxonomy ? { taxonomy: rendering.taxonomy } : {}),\n ...(rendering.specialty ? { specialty: rendering.specialty } : {}),\n ...(rendering.licenseNumber ? { licenseNumber: rendering.licenseNumber } : {}),\n ...(rendering.licenseState ? { licenseState: rendering.licenseState } : {}),\n ...(rendering.isQME !== undefined ? { isQme: rendering.isQME } : {}),\n ...(rendering.isAME !== undefined ? { isAme: rendering.isAME } : {}),\n } } : {}),\n ...(location ? { serviceLocation: {\n ...(location.name ? { name: location.name } : {}),\n address: { line1: location.street, city: location.city, state: location.state, postalCode: location.zip },\n ...(location.posCode ? { placeOfServiceCode: location.posCode } : {}),\n } } : {}),\n diagnoses: data.injury.diagnoses?.map((diagnosis) => diagnosis.code)\n ?? [...(data.injury.diagnosisCodes || [])],\n serviceLines: data.bill.lineItems.map((line) => ({\n code: line.code,\n modifiers: [...line.modifiers],\n units: line.units,\n charge: line.charge,\n ...(line.serviceDate ? { serviceDate: line.serviceDate } : {}),\n ...(line.serviceDateEnd !== undefined ? { serviceDateEnd: line.serviceDateEnd } : {}),\n ...(line.diagnosisPointers ? { diagnosisPointers: [...line.diagnosisPointers] } : {}),\n })),\n };\n}\n\nfunction today(): string {\n const now = new Date();\n return new Date(now.getTime() - now.getTimezoneOffset() * 60_000).toISOString().slice(0, 10);\n}\n\nfunction usDate(isoDate: string): string {\n const [year, month, day] = isoDate.split(\"-\");\n return year && month && day ? `${month}/${day}/${year}` : isoDate;\n}\n\nfunction actionPanel(action: BillLifecycleAction): Panel {\n if (action.id === \"resubmit\") return \"resubmit\";\n if (action.id === \"submit_new_bill\") return \"submit_new_bill\";\n if (action.id === \"second_review\") return \"second_review\";\n if (action.id === \"independent_bill_review\") return \"ibr\";\n if (action.id === \"post_payment\") return \"payment\";\n if (action.id === \"close\") return \"close\";\n if (action.id === \"reopen\") return \"reopen\";\n if (action.id === \"send_duplicate\") return \"send_duplicate\";\n if (action.id === \"report_bill_status\") return \"report_status\";\n return \"\";\n}\n\nfunction sandboxScenarios(state: string): Array<{ id: SandboxSimulationScenario; label: string; detail: string }> {\n if (state === \"submitted\") return [\n { id: \"accepted\", label: \"Accept submission\", detail: \"Add clearinghouse and payer acknowledgements.\" },\n { id: \"rejected\", label: \"Reject submission\", detail: \"Return a correctable routing rejection.\" },\n ];\n if (state === \"accepted\" || state === \"second_review\") return [\n { id: \"processed\", label: \"Process with EOR\", detail: \"Attach a synthetic payer EOR and enable payment posting.\" },\n { id: \"denied\", label: \"Deny payment\", detail: \"Attach a realistic denial EOR and enable Second Review.\" },\n ];\n return [];\n}\n\nexport function shouldShowSandboxControls(environment: BillLifecycleData[\"environment\"], enabled = false): boolean {\n return enabled && environment === \"sandbox\";\n}\n\nexport function ConnectedBillLifecycle({ appearance, actorName, claimsAdministratorHint, claimsAdministratorSources, courtesyCopyRecipientOptions = [], sandboxControls = false, className, style, loadingFallback, errorFallback, onChanged, ...options }: ConnectedBillLifecycleProps): ReactElement {\n const lifecycle = useBillLifecycle(options);\n const { data } = lifecycle;\n const [tab, setTab] = useState<Tab>(\"details\");\n const [selectedSubmissionId, setSelectedSubmissionId] = useState<string>();\n const [panel, setPanel] = useState<Panel>(\"\");\n const [notice, setNotice] = useState(\"\");\n const [note, setNote] = useState(\"\");\n const [reason, setReason] = useState(\"\");\n const [correctionError, setCorrectionError] = useState(\"\");\n const [newBillError, setNewBillError] = useState(\"\");\n const [payment, setPayment] = useState<PostBillPaymentInput>({ amount: 0, penaltyAmount: 0, interestAmount: 0, method: \"check\", checkNumber: \"\", depositDate: today(), note: \"\" });\n const [duplicateError, setDuplicateError] = useState(\"\");\n const currentAttemptKey = data?.attempts?.find((attempt) => attempt.isCurrent)?.id\n ?? data?.history?.filter((entry) => entry.kind === \"submission\").at(-1)?.id\n ?? data?.bill.id;\n useEffect(() => {\n // A concurrent resubmission must not leave an action dialog pointing at a\n // different current bill/attempt after the next polling refresh.\n setPanel(\"\");\n }, [currentAttemptKey]);\n const actor = actorName?.trim() ? { actorName: actorName.trim() } : {};\n const lastData = useRef<BillLifecycleData | null>(null);\n const correctionInitialBill = useMemo(() => data ? correctionBill(data) : null, [data]);\n const correctionAttachments = useMemo<BillSubmissionSourceAttachment[]>(() => data ? data.bill.attachments.map((attachment) => {\n const documentType = correctionDocumentType(attachment.documentType);\n const isW9 = documentType === \"w9\";\n return {\n id: attachment.id,\n fileName: attachment.filename,\n documentType,\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => lifecycle.getAttachment(attachment.id),\n ...(isW9 ? { autoAttached: true, removable: false } : { removable: true }),\n };\n }) : [], [data, lifecycle]);\n const correctionAttentionFields = useMemo(() => data?.rejection?.issues\n ?.flatMap((issue) => issue.fieldPaths || [])\n .filter((path, index, fields) => fields.indexOf(path) === index) || [], [data]);\n\n useEffect(() => {\n if (!data || data === lastData.current) return;\n lastData.current = data;\n onChanged?.(data);\n const payerRemaining = data.remittance.payerReportedPaid === null\n ? data.bill.balanceDue\n : Math.max(0, data.remittance.payerReportedPaid - data.remittance.postedPrincipal);\n setPayment((current) => ({\n ...current,\n amount: current.amount > 0 && current.amount <= data.bill.balanceDue\n ? current.amount\n : Math.min(data.bill.balanceDue, payerRemaining || data.bill.balanceDue),\n penaltyAmount: 0,\n interestAmount: 0,\n }));\n }, [data, onChanged]);\n\n if (lifecycle.isLoading && !data) return <>{loadingFallback ?? <div className=\"mb-lifecycle-loading\">Loading bill…</div>}</>;\n if (!data) {\n const error = lifecycle.error ?? new Error(\"Bill could not be loaded.\");\n return <>{errorFallback?.(error, lifecycle.refresh) ?? <div className=\"mb-lifecycle-error\" role=\"alert\"><strong>Billing is unavailable.</strong><span>{error.message}</span><button type=\"button\" onClick={() => void lifecycle.refresh()}>Try again</button></div>}</>;\n }\n\n const complete = async (message: string, task: () => Promise<unknown>) => {\n setNotice(\"\");\n try {\n await task();\n setPanel(\"\");\n setReason(\"\");\n setNotice(message);\n } catch {\n // useBillLifecycle keeps the server error visible.\n }\n };\n const addNote = async () => {\n const value = note.trim();\n if (!value) return;\n setNotice(\"\");\n try {\n await lifecycle.addNote({ note: value, ...actor } satisfies AddBillNoteInput);\n setNote(\"\");\n setNotice(\"Note added.\");\n } catch {\n // useBillLifecycle keeps the server error visible and the note editable.\n }\n };\n const submitCorrection = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setCorrectionError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.resubmitBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(value.submission ? { submission: value.submission } : {}),\n ...(documents.length ? { documents } : {}),\n ...(reason.trim() ? { reason: reason.trim() } : {}),\n ...actor,\n });\n } catch (cause) {\n // A failed resubmission must never look like a success: keep the dialog\n // (and the biller's corrections) open and show the server's reason inline\n // next to the submit control, like the other action panels do.\n setCorrectionError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The corrected bill could not be resubmitted.\",\n );\n throw cause;\n }\n setPanel(\"\");\n setReason(\"\");\n setNotice(\"Corrected submission sent.\");\n };\n const submitNewBillFromForm = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setNewBillError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.submitNewBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(value.submission ? { submission: value.submission } : {}),\n ...(documents.length ? { documents } : {}),\n ...(reason.trim() ? { reason: reason.trim() } : {}),\n ...actor,\n } satisfies SubmitNewBillInput);\n } catch (cause) {\n // Same contract as the correction dialog: a failed submission must never\n // look like a success — keep the form (and the biller's edits) open and\n // show the server's reason inline next to the submit control.\n setNewBillError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The new bill could not be submitted.\",\n );\n throw cause;\n }\n setPanel(\"\");\n setReason(\"\");\n setNotice(\"New bill submitted.\");\n };\n const submitDuplicateFromForm = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setDuplicateError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.sendDuplicateBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(value.submission ? { submission: value.submission } : {}),\n ...(documents.length ? { documents } : {}),\n ...actor,\n });\n } catch (cause) {\n setDuplicateError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The duplicate bill could not be submitted.\",\n );\n throw cause;\n }\n setPanel(\"\");\n setNotice(\"Duplicate bill sent.\");\n };\n const viewEor = data.lifecycle.actions.find((action) => action.id === \"view_eor\" && action.enabled);\n const supportedActions = new Set<BillLifecycleAction[\"id\"]>([\"resubmit\", \"submit_new_bill\", \"second_review\", \"independent_bill_review\", \"post_payment\", \"close\", \"reopen\", \"send_duplicate\", \"report_bill_status\"]);\n const actions = data.lifecycle.actions.filter((action) => action.enabled && supportedActions.has(action.id));\n const mappedRibbonItems = data.history ? billSubmissionsRibbonFromHistory(data.history, data.attempts) : [];\n const activeSubmissionId = (mappedRibbonItems.some((item) => item.id === selectedSubmissionId) ? selectedSubmissionId : null)\n ?? mappedRibbonItems.find((item) => item.active)?.id\n ?? mappedRibbonItems[mappedRibbonItems.length - 1]?.id;\n const ribbonItems = mappedRibbonItems.map((item) => ({ ...item, active: item.id === activeSubmissionId }));\n const selectedAttempt = data.attempts?.find((attempt) => attempt.id === activeSubmissionId);\n const historical = selectedAttempt ? !selectedAttempt.isCurrent\n : !!activeSubmissionId && activeSubmissionId !== mappedRibbonItems.at(-1)?.id;\n const selectedDetail = historical && selectedAttempt ? data.submissionDetails?.find((item) => item.attemptId === activeSubmissionId && item.billId === selectedAttempt.billId) : null;\n const activePanel = historical ? \"\" : panel;\n const showSandboxControls = shouldShowSandboxControls(data.environment, sandboxControls) && !historical;\n const simulations = showSandboxControls ? sandboxScenarios(data.lifecycle.state) : [];\n const displayedData = historical ? selectedDetail?.detail : data;\n const billNotes = billTeamNotes(data);\n const statusContacts = reportBillStatusContacts(data.delivery);\n const receiptEntries = (data.history ?? []).filter((entry) => entry.kind === \"submission\" || entry.kind === \"ack\");\n const reviewDeadline = secondReviewDeadline(data.eors);\n\n return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n {ribbonItems.length >= 2 ? <BillSubmissionsRibbon items={ribbonItems} onSelect={(item) => { setSelectedSubmissionId(item.id); setTab(\"details\"); setPanel(\"\"); }} {...(appearance ? { appearance } : {})} /> : null}\n {historical ? null : data.lifecycle.state.toLowerCase() === \"rejected\" && data.rejection\n ? <BillRejectionNotice rejection={data.rejection} submittedAt={data.lifecycle.submittedAt ?? null} {...(appearance ? { appearance } : {})} />\n : <BillLifecycleProgress state={data.lifecycle.state} nativeStatus={data.lifecycle.nativeStatus} submittedAt={data.lifecycle.submittedAt ?? null} agingDays={data.lifecycle.agingDays ?? null} {...(appearance ? { appearance } : {})} />}\n\n <header className=\"mb-lifecycle-head\">\n <div><div className=\"mb-lifecycle-title\"><h2>{historical && !selectedAttempt ? \"Previous submission\" : `Bill #${historical ? selectedAttempt?.billNumber : data.bill.billNumber}`}</h2></div><p>{displayedData ? `Claim ${displayedData.injury.claimNumber || \"—\"}` : \"Previous submission\"}{lifecycle.isRefreshing ? \" · Refreshing…\" : \"\"}</p></div>\n {!historical ? <><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating} onClick={() => void lifecycle.downloadPacket().catch(() => undefined)}>Download packet</button>\n <button type=\"button\" className=\"mb-lifecycle-button secondary\" disabled={lifecycle.isMutating} onClick={() => setPanel(\"courtesy_copy\")}>Forward copy</button></> : null}\n </header>\n\n <div className=\"mb-lifecycle-tabs\" role=\"tablist\" aria-label=\"Bill view\">\n <button type=\"button\" role=\"tab\" aria-selected={tab === \"details\"} onClick={() => setTab(\"details\")}>Bill details</button>\n <button type=\"button\" role=\"tab\" aria-selected={tab === \"history\"} onClick={() => setTab(\"history\")}>Bill history</button>\n </div>\n\n {tab === \"details\" ? <div className=\"mb-lifecycle-tabpanel\" role=\"tabpanel\">\n {selectedAttempt && ribbonItems.length >= 2 ? <section className=\"mb-lifecycle-attempt-detail\" aria-label=\"Selected submission detail\">\n <header><div><span>Selected submission</span><h3>{selectedAttempt.label}</h3></div><strong>{selectedAttempt.isCurrent ? \"Current\" : \"Previous\"}</strong></header>\n <dl>\n <div><dt>Bill</dt><dd>#{selectedAttempt.billNumber || data.bill.billNumber}</dd></div>\n <div><dt>Delivery</dt><dd>{selectedAttempt.deliveryLabel || \"—\"}</dd></div>\n <div><dt>Sent</dt><dd>{selectedAttempt.sentAt ? new Date(selectedAttempt.sentAt).toLocaleString() : \"—\"}</dd></div>\n <div><dt>Status</dt><dd>{selectedAttempt.status || selectedAttempt.ackLabel || \"Submitted\"}</dd></div>\n {selectedAttempt.complianceLabel ? <div><dt>{selectedAttempt.complianceLabel}</dt><dd>{selectedAttempt.complianceAt ? new Date(selectedAttempt.complianceAt).toLocaleDateString() : \"—\"}</dd></div> : null}\n </dl>\n </section> : null}\n {!historical && (data.eors.length || data.payments.length || [\"processed\", \"denied\", \"partially_paid\"].includes(data.lifecycle.state)) ? <BillExplanationOfReview remittance={data.remittance} eors={data.eors} payments={data.payments} submittedAt={data.lifecycle.submittedAt ?? null} onOpenEor={lifecycle.openEor} {...(appearance ? { appearance } : {})} /> : null}\n\n {showSandboxControls ? <section className=\"mb-lifecycle-simulator\" aria-label=\"Sandbox lifecycle simulator\"><div><span>Sandbox demo controls</span><h3>Simulate the next payer response</h3><p>This changes sandbox data only. The host receives the result through the same lifecycle API and components partners use.</p></div>{simulations.length ? <div className=\"mb-lifecycle-simulator-actions\">{simulations.map((scenario) => <button type=\"button\" key={scenario.id} disabled={lifecycle.isMutating} onClick={() => void complete(`${scenario.label} simulated.`, () => lifecycle.simulateSandbox({ scenario: scenario.id }))}><strong>{scenario.label}</strong><span>{scenario.detail}</span></button>)}</div> : <p className=\"mb-lifecycle-simulator-idle\">No simulated payer transition is needed at this stage. Use the bill action below to continue.</p>}</section> : null}\n\n {historical ? <p className=\"mb-lifecycle-card\">{selectedDetail?.source === \"submission_snapshot\" ? \"Saved as submitted. This previous submission is read-only; payment balances and current actions are shown on the current bill.\" : displayedData ? \"Historical bill record. An exact as-submitted snapshot was not recorded for this older attempt; these are the stored bill values, not a guaranteed copy of the original packet.\" : \"Detailed values were not saved for this historical submission. Select the current submission to see the current bill. We will not substitute current data for this older attempt.\"}</p> : null}\n {displayedData ? <BillReadOnlyForm key={activeSubmissionId} data={displayedData} {...(!historical ? { onOpenAttachment: lifecycle.openAttachment } : {})} {...(appearance ? { appearance } : {})} /> : null}\n {historical && selectedAttempt ? <section className=\"mb-lifecycle-card\" aria-label=\"Retained submission files\"><h3>Retained submission files</h3><p>Exact files saved for this submission. These downloads do not include a regenerated current bill or a later EOR.</p>{selectedDetail?.artifacts?.length ? selectedDetail.artifacts.map((artifact) => <button type=\"button\" className=\"mb-lifecycle-button secondary\" key={artifact.id} onClick={() => void lifecycle.downloadSubmissionArtifact(selectedAttempt.id, artifact.id, artifact.label).catch(() => undefined)}>Download {artifact.kind === \"submitted_edi\" ? \"submitted EDI\" : \"submitted attachment\"}: {artifact.label}</button>) : <p>No retained files are available for this submission.</p>}</section> : null}\n {!historical ? <section className=\"mb-lifecycle-notes\" aria-label=\"Bill notes\">\n <header><div><h3>Team notes</h3><p>Shared with your workspace’s billing team. Never sent to the payer.</p></div><span>{billNotes.length}</span></header>\n {billNotes.length ? <ol>{billNotes.map((entry) => <li key={entry.id}><p>{entry.summary}</p><small>{entry.actor || \"System\"} · {usDate(entry.date)}</small></li>)}</ol> : <p className=\"mb-lifecycle-notes-empty\">No notes yet.</p>}\n <form onSubmit={(event) => { event.preventDefault(); void addNote(); }}><label><span>Add a note</span><textarea value={note} maxLength={2000} placeholder=\"Add context for the billing team…\" onChange={(event) => setNote(event.target.value)} /></label><button type=\"submit\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating || !note.trim()}>{lifecycle.isMutating ? \"Adding…\" : \"Add note\"}</button></form>\n </section> : null}\n </div> : <div className=\"mb-lifecycle-tabpanel\" role=\"tabpanel\">{data.history?.length\n ? <BillHistoryTable entries={data.history} {...(!historical ? { onOpenDocument: lifecycle.openAttachment } : {})} {...(appearance ? { appearance } : {})} />\n : <BillActivityTimeline events={data.activity} {...(appearance ? { appearance } : {})} />}</div>}\n\n {!historical && (viewEor || actions.length) ? <aside className=\"mb-lifecycle-actions-sheet\" aria-label=\"Bill actions\">\n {viewEor && data.eors[0] ? <button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => void lifecycle.openEor(data.eors[0]!).catch(() => undefined)}>{viewEor.label}</button> : null}\n {actions.map((action) => <button type=\"button\" key={action.id} className={action.primary ? \"mb-lifecycle-button primary\" : \"mb-lifecycle-button secondary\"} onClick={() => {\n const next = actionPanel(action);\n if (!next) return;\n if (next === \"resubmit\") setCorrectionError(\"\");\n if (next === \"submit_new_bill\") setNewBillError(\"\");\n if (next === \"send_duplicate\") setDuplicateError(\"\");\n setPanel(next);\n }}>{action.label}</button>)}\n </aside> : null}\n\n {activePanel === \"courtesy_copy\" ? <LifecycleDialog title=\"Forward courtesy copy\" wide onClose={() => setPanel(\"\")}><BillCourtesyCopyForm documents={data.bill.attachments} recipientOptions={courtesyCopyRecipientOptions} subject={`Courtesy copy — bill #${data.bill.billNumber}`} environment={data.environment} onPreview={lifecycle.previewCourtesyCopy} onSend={lifecycle.sendCourtesyCopy} onSent={() => { void lifecycle.refresh(); }} {...(appearance ? { appearance } : {})} /></LifecycleDialog> : null}\n {activePanel === \"ibr\" ? <LifecycleDialog title=\"Prepare Independent Bill Review packet\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><header style={{ paddingRight: 44 }}><h3>Prepare Independent Bill Review packet</h3></header><p>Download a PDF packet for self-filing Independent Bill Review (IBR). Preparing this packet does not file the review, send it to a payer, or change the bill status.</p>{lifecycle.error ? <p role=\"alert\" className=\"mb-lifecycle-message error\">{lifecycle.error.message}</p> : null}<div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" disabled={lifecycle.isMutating} onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating} onClick={() => void lifecycle.downloadIbrPacket().then(() => { setPanel(\"\"); setNotice(\"IBR packet prepared for self-filing. The review has not been filed.\"); }).catch(() => undefined)}>{lifecycle.isMutating ? \"Preparing…\" : \"Prepare IBR packet\"}</button></div></section></LifecycleDialog> : null}\n {activePanel === \"resubmit\" && correctionInitialBill ? <LifecycleDialog title=\"Correct and resubmit\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Correct and resubmit</h3><p>Review the rejected snapshot, correct the highlighted information, and submit a new immutable attempt under this bill.</p></div></header>{data.environment === \"live\" ? <div className=\"mb-lifecycle-live-warning\"><strong>Live clearinghouse submission</strong><span>Resubmitting sends a real bill. Confirm the corrected information before continuing.</span></div> : null}{data.rejection ? <CorrectionRejectionReason rejection={data.rejection} /> : null}<CorrectionVerificationContact delivery={data.delivery} /><label className=\"mb-lifecycle-correction-note\"><span>Correction note (optional)</span><textarea value={reason} placeholder=\"What changed before resubmission?\" onChange={(event) => setReason(event.target.value)} /></label><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitCorrection}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionFields={correctionAttentionFields}\n attentionMessage={correctionAttentionFields.length ? \"The rejected response points to the highlighted fields. Confirm every required value before resubmitting.\" : \"Confirm the bill information below before resubmitting.\"}\n submitLabel={lifecycle.isMutating ? \"Resubmitting…\" : \"Resubmit bill\"}\n deliveryRoutePicker=\"required\"\n deliveryRouteDialogTitle=\"Confirm corrected bill delivery\"\n heading=\"Corrected bill information\"\n description=\"The original submission stays unchanged. This form creates the next submission attempt.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{correctionError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{correctionError}</div> : null}</section></LifecycleDialog> : null}\n\n {activePanel === \"submit_new_bill\" && correctionInitialBill ? <LifecycleDialog title=\"Submit New Bill\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Submit New Bill</h3><p>This closed bill stays closed and keeps its record. Review the carried-over snapshot below and submit a fresh bill — both bills stay linked in the submissions timeline.</p></div></header><label className=\"mb-lifecycle-correction-note\"><span>Submission note (optional)</span><textarea value={reason} placeholder=\"Why is a new bill being submitted?\" onChange={(event) => setReason(event.target.value)} /></label><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitNewBillFromForm}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionMessage=\"Confirm every value carried over from the closed bill before submitting the new bill.\"\n submitLabel={lifecycle.isMutating ? \"Submitting…\" : \"Submit New Bill\"}\n deliveryRoutePicker=\"required\"\n deliveryRouteDialogTitle=\"Confirm new bill delivery\"\n heading=\"New bill information\"\n description=\"The closed bill stays unchanged. This form submits a fresh bill linked to it.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{newBillError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{newBillError}</div> : null}</section></LifecycleDialog> : null}\n\n {activePanel === \"second_review\" ? <LifecycleDialog title=\"Submit Second Review\" wide onClose={() => setPanel(\"\")}><SecondReviewForm\n data={data}\n submitting={lifecycle.isMutating}\n error={lifecycle.error}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n getDeliveryOptions={lifecycle.getDeliveryOptions}\n openAttachment={lifecycle.openAttachment}\n onCancel={() => setPanel(\"\")}\n onSubmit={(input) => complete(\"Second Review submitted.\", () => lifecycle.submitSecondReview({ ...input, ...actor }))}\n />{reviewDeadline ? <p className=\"mb-lifecycle-deadline-hint\">Second Review must be requested within 90 days of the denial EOR (dated {usDate(reviewDeadline.eorDate)}) — file by <strong>{usDate(reviewDeadline.deadline)}</strong>.</p> : null}</LifecycleDialog> : null}\n\n {activePanel === \"payment\" ? <LifecycleDialog title=\"Post payment\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>Post payment</h3><p>Record a full or partial payment, plus any penalty and interest received.</p></div><div className=\"mb-lifecycle-fields two\"><label><span>Amount applied to bill</span><input type=\"number\" min=\"0.01\" max={data.bill.balanceDue} step=\"0.01\" value={payment.amount || \"\"} onChange={(event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) }))} /></label><label><span>Penalty</span><input type=\"number\" min=\"0\" step=\"0.01\" value={payment.penaltyAmount || \"\"} placeholder=\"0.00\" onChange={(event) => setPayment((current) => ({ ...current, penaltyAmount: Number(event.target.value) }))} /></label><label><span>Interest</span><input type=\"number\" min=\"0\" step=\"0.01\" value={payment.interestAmount || \"\"} placeholder=\"0.00\" onChange={(event) => setPayment((current) => ({ ...current, interestAmount: Number(event.target.value) }))} /></label><label><span>Method</span><select value={payment.method} onChange={(event) => setPayment((current) => ({ ...current, method: event.target.value as \"check\" | \"eft\" }))}><option value=\"check\">Check</option><option value=\"eft\">EFT</option></select></label><label><span>{payment.method === \"check\" ? \"Check number\" : \"EFT reference\"}</span><input value={payment.checkNumber} onChange={(event) => setPayment((current) => ({ ...current, checkNumber: event.target.value }))} /></label><label><span>Deposit date</span><input required value={payment.depositDate} placeholder=\"MM/DD/YYYY\" onChange={(event) => setPayment((current) => ({ ...current, depositDate: event.target.value }))} /></label><label className=\"full\"><span>Note (optional)</span><input value={payment.note} onChange={(event) => setPayment((current) => ({ ...current, note: event.target.value }))} /></label></div><div className=\"mb-payment-total\"><span>Total received</span><strong>{new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(payment.amount + (payment.penaltyAmount ?? 0) + (payment.interestAmount ?? 0))}</strong></div><div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating || payment.amount <= 0 || payment.amount > data.bill.balanceDue || (payment.penaltyAmount ?? 0) < 0 || (payment.interestAmount ?? 0) < 0 || !payment.depositDate} onClick={() => void complete(\"Payment posted.\", () => lifecycle.postPayment({ ...payment, ...actor }))}>{lifecycle.isMutating ? \"Posting…\" : \"Post payment\"}</button></div></section></LifecycleDialog> : null}\n\n {(activePanel === \"close\" || activePanel === \"reopen\") ? <LifecycleDialog title={activePanel === \"close\" ? \"Close bill\" : \"Reopen bill\"} onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>{activePanel === \"close\" ? \"Close bill\" : \"Reopen bill\"}</h3><p>{activePanel === \"close\" ? \"The immutable submission and history remain available.\" : \"Return this bill to active follow-up without changing the submitted snapshot.\"}</p></div><label><span>Reason</span><textarea required value={reason} onChange={(event) => setReason(event.target.value)} /></label><div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating || !reason.trim()} onClick={() => void complete(activePanel === \"close\" ? \"Bill closed.\" : \"Bill reopened.\", () => activePanel === \"close\" ? lifecycle.closeBill({ reason, ...actor } satisfies CloseBillInput) : lifecycle.reopenBill({ reason, ...actor } satisfies ReopenBillInput))}>{lifecycle.isMutating ? \"Saving…\" : activePanel === \"close\" ? \"Close bill\" : \"Reopen bill\"}</button></div></section></LifecycleDialog> : null}\n\n {activePanel === \"send_duplicate\" && correctionInitialBill ? <LifecycleDialog title=\"Send duplicate bill\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Send duplicate bill</h3><p>Review and edit any bill field before creating a duplicate submission. The original bill and its history stay unchanged.</p></div></header>{data.environment === \"live\" ? <div className=\"mb-lifecycle-live-warning\"><strong>Live clearinghouse submission</strong><span>The duplicate will be sent only after you confirm its delivery route in the next dialog.</span></div> : null}<CorrectionVerificationContact delivery={data.delivery} /><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitDuplicateFromForm}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionMessage=\"Confirm every carried-over value. You may edit any field before sending this duplicate.\"\n submitLabel={lifecycle.isMutating ? \"Sending…\" : \"Send duplicate\"}\n deliveryRoutePicker=\"required\"\n deliveryRouteDialogTitle=\"Confirm duplicate bill delivery\"\n heading=\"Duplicate bill information\"\n description=\"The submitted original remains immutable. This form creates and sends a linked duplicate.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{duplicateError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{duplicateError}</div> : null}</section></LifecycleDialog> : null}\n\n {activePanel === \"report_status\" ? <ReportBillStatusDialog\n {...(data.delivery.directory ? { directory: data.delivery.directory } : {})}\n {...(statusContacts.claimsAdmin ? { claimsAdmin: statusContacts.claimsAdmin } : {})}\n {...(statusContacts.billReview ? { billReview: statusContacts.billReview } : {})}\n {...(receiptEntries.length ? { receipt: <BillHistoryTable entries={receiptEntries} onOpenDocument={lifecycle.openAttachment} {...(appearance ? { appearance } : {})} /> } : {})}\n submitting={lifecycle.isMutating}\n error={lifecycle.error?.message ?? null}\n onCancel={() => setPanel(\"\")}\n onSave={(input) => void complete(\"Bill status reported.\", () => lifecycle.reportBillStatus({ ...input, ...actor }))}\n {...(appearance ? { appearance } : {})}\n /> : null}\n\n {notice ? <div className=\"mb-lifecycle-message success\" role=\"status\">{notice}</div> : null}\n {lifecycle.error ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{lifecycle.error.message}</div> : null}\n </section>;\n}\n\nconst CONNECTED_LIFECYCLE_STYLES = `\n.mb-connected-lifecycle{grid-template-columns:minmax(0,1fr);min-width:0}.mb-lifecycle-tabpanel{min-width:0;grid-template-columns:minmax(0,1fr)}.mb-lifecycle-tabpanel>*{min-width:0}\n.mb-lifecycle-attempt-detail{display:grid;gap:15px;padding:18px;border:1px solid color-mix(in srgb,var(--mb-accent) 38%,var(--mb-border));border-radius:var(--mb-radius,14px);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}.mb-lifecycle-attempt-detail>header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.mb-lifecycle-attempt-detail>header span{color:var(--mb-accent);font-size:.72rem;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.mb-lifecycle-attempt-detail h3{margin:3px 0 0;font-size:1.08rem}.mb-lifecycle-attempt-detail>header>strong{padding:4px 9px;border:1px solid color-mix(in srgb,var(--mb-accent) 35%,var(--mb-border));border-radius:999px;background:var(--mb-surface);color:var(--mb-accent);font-size:.75rem}.mb-lifecycle-attempt-detail dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0}.mb-lifecycle-attempt-detail dl>div{display:grid;gap:2px;min-width:0}.mb-lifecycle-attempt-detail dt{color:var(--mb-muted);font-size:.7rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.mb-lifecycle-attempt-detail dd{min-width:0;margin:0;font-weight:700;overflow-wrap:anywhere}\n.mb-lifecycle-notes{display:grid;gap:14px;padding:20px;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface)}.mb-lifecycle-notes>header{display:flex;align-items:center;justify-content:space-between;gap:16px}.mb-lifecycle-notes h3{margin:0;font-size:1.08rem}.mb-lifecycle-notes header p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-notes>header>span{display:grid;place-items:center;min-width:28px;height:28px;border-radius:999px;background:var(--mb-soft);font-weight:750}.mb-lifecycle-notes ol{display:grid;gap:9px;margin:0;padding:0;list-style:none}.mb-lifecycle-notes li{padding:11px 13px;border-left:3px solid color-mix(in srgb,var(--mb-accent) 52%,var(--mb-border));border-radius:0 8px 8px 0;background:var(--mb-soft)}.mb-lifecycle-notes li p{margin:0;white-space:pre-wrap}.mb-lifecycle-notes li small{display:block;margin-top:4px;color:var(--mb-muted)}.mb-lifecycle-notes-empty{margin:0;color:var(--mb-muted)}.mb-lifecycle-notes form{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px}.mb-lifecycle-notes label{display:grid;gap:6px;font-size:.82rem;font-weight:750}.mb-lifecycle-notes textarea{width:100%;min-height:76px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;resize:vertical}\n.mb-lifecycle-simulator{display:grid;gap:14px;padding:18px;border:1px solid #b8dadd;border-radius:var(--mb-radius,14px);background:#f2fbfb}.mb-lifecycle-simulator>div:first-child>span{color:var(--mb-accent);font-size:.72rem;font-weight:850;letter-spacing:.09em;text-transform:uppercase}.mb-lifecycle-simulator h3{margin:3px 0 0;font-size:1.05rem}.mb-lifecycle-simulator p{margin:4px 0 0;color:var(--mb-muted)}.mb-lifecycle-simulator-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.mb-lifecycle-simulator-actions button{min-height:76px;border:1px solid #a9cccf;border-radius:10px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;padding:12px 14px;text-align:left;font:inherit}.mb-lifecycle-simulator-actions button:hover{border-color:var(--mb-accent);box-shadow:0 3px 14px rgba(23,108,112,.1)}.mb-lifecycle-simulator-actions button:disabled{cursor:not-allowed;opacity:.55}.mb-lifecycle-simulator-actions button strong,.mb-lifecycle-simulator-actions button span{display:block}.mb-lifecycle-simulator-actions button span{margin-top:3px;color:var(--mb-muted);font-size:.83rem}.mb-lifecycle-simulator-idle{padding:10px 12px;border-radius:8px;background:rgba(255,255,255,.72)}\n.mb-connected-lifecycle{--mb-accent:#176c70;--mb-text:#17282d;--mb-muted:#607176;--mb-border:#d7e0df;--mb-soft:#f4f7f6;--mb-surface:#fff;display:grid;gap:18px;color:var(--mb-text);font:14px/1.45 var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}.mb-connected-lifecycle *{box-sizing:border-box}.mb-lifecycle-head{display:flex;align-items:center;justify-content:space-between;gap:20px}.mb-lifecycle-title{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.mb-lifecycle-title h2{margin:0;font-size:1.7rem}.mb-lifecycle-head p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-tabs{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);padding:6px}.mb-lifecycle-tabs button{min-height:46px;border:0;border-radius:8px;background:transparent;color:var(--mb-muted);font:inherit;font-size:1rem;font-weight:750;cursor:pointer}.mb-lifecycle-tabs button[aria-selected=true]{background:var(--mb-accent);color:white}.mb-lifecycle-tabpanel{display:grid;gap:18px}.mb-lifecycle-button{min-height:40px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast,#fff)}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-actions-sheet{position:sticky;bottom:12px;z-index:24;display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:9px;padding:10px;border:1px solid var(--mb-border);border-radius:12px;background:color-mix(in srgb,var(--mb-surface) 94%,transparent);box-shadow:0 10px 34px rgba(18,35,43,.16);backdrop-filter:blur(12px)}.mb-lifecycle-card,.mb-lifecycle-panel{padding:20px;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:center;justify-content:space-between;gap:20px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:1.08rem}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-card header>span{display:grid;place-items:center;min-width:28px;height:28px;border-radius:999px;background:var(--mb-soft);font-weight:750}.mb-lifecycle-documents{list-style:none;margin:14px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid;gap:3px;min-width:0}.mb-lifecycle-documents li span{color:var(--mb-muted);font-size:.85rem}.mb-lifecycle-dialog-backdrop{position:fixed;z-index:2147483000;inset:0;display:grid;place-items:center;padding:20px;background:rgba(18,35,43,.56);backdrop-filter:blur(3px)}.mb-lifecycle-dialog{position:relative;width:min(760px,100%);max-height:calc(100dvh - 40px);overflow:auto;outline:0}.mb-lifecycle-dialog-close{position:absolute;z-index:1;top:12px;right:12px;width:44px;height:44px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;font:24px/1 inherit}.mb-lifecycle-panel{display:grid;gap:17px;padding-top:24px;box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:.85rem;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea{width:100%;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;padding:10px 12px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:13px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:.85rem;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;padding:10px 2px;border-top:1px solid var(--mb-border)}.mb-lifecycle-packet>label>input{width:16px;min-height:16px}.mb-lifecycle-packet>label>span{display:grid}.mb-lifecycle-packet button{border:0;background:transparent;color:var(--mb-accent);cursor:pointer;font:inherit}.mb-lifecycle-message,.mb-lifecycle-error,.mb-lifecycle-loading{padding:12px 14px;border-radius:9px}.mb-lifecycle-message.success{background:#edf9f2;color:#217449}.mb-lifecycle-message.error,.mb-lifecycle-error{background:#fff0ef;color:#9d3029}.mb-lifecycle-error{display:flex;align-items:center;gap:12px}.mb-lifecycle-error span{flex:1}.mb-lifecycle-error button{border:1px solid currentColor;border-radius:7px;background:transparent;color:inherit;padding:7px 10px}\n.mb-lifecycle-dialog.wide{width:min(1280px,100%)}.mb-lifecycle-correction{display:grid;gap:16px;padding:22px;border-radius:var(--mb-radius,14px);background:var(--mb-surface);box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-correction>header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding-right:56px}.mb-lifecycle-correction h3{margin:0;font-size:1.2rem}.mb-lifecycle-correction header p{margin:4px 0 0;color:var(--mb-muted)}.mb-lifecycle-live-warning,.mb-lifecycle-correction-reason,.mb-lifecycle-correction-contact{display:grid;gap:4px;padding:13px 15px;border-radius:10px}.mb-lifecycle-live-warning{border-left:4px solid #b97716;background:#fff8e8;color:#6f470e}.mb-lifecycle-correction-reason{grid-template-columns:max-content minmax(0,1fr);align-items:start;column-gap:18px;row-gap:10px;border-left:4px solid #c5443f;background:#fff2f1;color:#812d29}.mb-lifecycle-correction-reason-code,.mb-lifecycle-correction-reason-description{display:grid;gap:4px}.mb-lifecycle-correction-reason-code>span,.mb-lifecycle-correction-reason-description>span,.mb-lifecycle-correction-reason-code small>span{color:#9b514d;font-size:.7rem;font-weight:850;letter-spacing:.07em;text-transform:uppercase}.mb-lifecycle-correction-reason code{width:max-content;border:1px solid #e8b4b0;border-radius:6px;background:rgba(255,255,255,.66);color:#812d29;font:750 .84rem/1.35 ui-monospace,SFMono-Regular,Menlo,monospace;padding:3px 7px}.mb-lifecycle-correction-reason-code small{display:grid;gap:1px;margin-top:3px;color:#9b514d;font:500 .72rem/1.35 ui-monospace,SFMono-Regular,Menlo,monospace}.mb-lifecycle-correction-reason-description strong{font-size:.94rem}.mb-lifecycle-correction-reason>ul{grid-column:1/-1;display:grid;gap:5px;margin:0;padding:8px 0 0 18px;border-top:1px solid #ecc7c4}.mb-lifecycle-correction-reason li{padding-left:3px}.mb-lifecycle-correction-reason li code{margin-right:7px}.mb-lifecycle-correction-contact{border:1px solid color-mix(in srgb,var(--mb-accent) 35%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface))}.mb-lifecycle-correction-contact dl{display:grid;gap:10px;margin:8px 0 0}.mb-lifecycle-correction-contact dl>div{display:grid;grid-template-columns:68px minmax(0,1fr);gap:10px}.mb-lifecycle-correction-contact dt{padding-top:2px;color:var(--mb-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.mb-lifecycle-correction-contact dd{min-width:0;margin:0;overflow-wrap:anywhere}.mb-lifecycle-correction-contact dd ul{display:grid;gap:4px;margin:0;padding:0;list-style:none}.mb-lifecycle-correction-contact dd li{min-width:0}.mb-lifecycle-correction-contact a{color:var(--mb-accent);text-underline-offset:2px}.mb-lifecycle-correction-note{display:grid;gap:6px;font-size:.85rem;font-weight:750}.mb-lifecycle-correction-note textarea{min-height:76px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;padding:10px 12px;resize:vertical}\n.mb-payment-total{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:9px;background:var(--mb-soft)}.mb-payment-total strong{font-size:1.12rem}\n.mb-lifecycle-deadline-hint{margin:0;padding:10px 12px;border-radius:9px;background:color-mix(in srgb,var(--mb-warning,#8a5c17) 10%,var(--mb-surface));color:var(--mb-warning,#8a5c17);font-size:.85rem}\n@media(max-width:700px){.mb-lifecycle-attempt-detail dl{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-notes form{grid-template-columns:1fr}.mb-lifecycle-notes form button{width:100%}.mb-lifecycle-head,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-head>.mb-lifecycle-button{width:100%}.mb-lifecycle-actions-sheet{bottom:calc(var(--mb-host-bottom-offset,72px) + env(safe-area-inset-bottom) + 8px);grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-actions-sheet .mb-lifecycle-button:last-child:nth-child(odd){grid-column:1/-1}.mb-lifecycle-fields.two{grid-template-columns:1fr}.mb-lifecycle-fields .full{grid-column:auto}.mb-lifecycle-dialog-backdrop{align-items:end;padding:0}.mb-lifecycle-dialog{max-height:calc(100dvh - 12px)}.mb-lifecycle-dialog .mb-lifecycle-panel,.mb-lifecycle-correction{border-radius:18px 18px 0 0}.mb-lifecycle-correction{padding:18px 12px calc(18px + env(safe-area-inset-bottom))}.mb-lifecycle-correction>header{align-items:stretch;flex-direction:column;padding-right:56px}.mb-lifecycle-correction-reason{grid-template-columns:1fr}.mb-lifecycle-correction-reason>ul{grid-column:auto}.mb-lifecycle-correction-contact dl>div{grid-template-columns:1fr;gap:2px}.mb-lifecycle-tabs button{font-size:.9rem}.mb-lifecycle-title h2{font-size:1.4rem}}\n`;\n","\"use client\";\n\nimport { useMemo, useState, type ChangeEvent, type ReactElement } from \"react\";\nimport type {\n BillDeliveryOptions,\n BillLifecycleData,\n SecondReviewLineInput,\n SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\nimport {\n prepareBillSubmissionDocuments,\n type BillSubmissionUpload,\n} from \"./bill-submission-form\";\nimport { SendRouteDialog, type SendRouteSubmission } from \"./send-route-dialog\";\nimport { parseSecondReviewCorrection, type CorrectionDraft } from \"./second-review-corrections\";\n\nexport const SECOND_REVIEW_REASON_TEMPLATES = [\n {\n label: \"Med-legal report denied\",\n value: \"The attached medical-legal report satisfies the applicable requirements for a compensable medical-legal evaluation. Please reprocess this service and issue payment under the Medical-Legal Fee Schedule.\",\n },\n {\n label: \"Supporting documentation was provided\",\n value: \"The EOR incorrectly states that supporting documentation was not received. The original electronic submission included the required documentation and was acknowledged as accepted. Please reprocess this service.\",\n },\n {\n label: \"Payment missing or not received\",\n value: \"The EOR reports payment, but the funds have not been received or deposited by the provider. Please issue or reissue payment and pay the remaining fee-schedule balance, including applicable penalty and interest.\",\n },\n {\n label: \"PPO or network reduction unsupported\",\n value: \"The EOR applies a PPO or network discount, but the provider has no agreement authorizing this reduction. Please demonstrate entitlement to the contracted rate or reprocess this service under the applicable fee schedule.\",\n },\n {\n label: \"Service was authorized\",\n value: \"The billed service was authorized. Please reprocess this service and issue payment; the supporting authorization is included with this request.\",\n },\n {\n label: \"Correct units or modifiers\",\n value: \"The units or modifiers on this service have been corrected on the accompanying modified bill. Please reprocess the service using the corrected billing information.\",\n },\n {\n label: \"Fee schedule incorrectly applied\",\n value: \"The applicable fee schedule was incorrectly applied to this service. Please recalculate the allowed amount under the governing fee schedule and issue the additional payment due.\",\n },\n {\n label: \"Treatment before liability decision\",\n value: \"This service was provided before the claims administrator accepted or denied liability and was authorized under California Labor Code section 5402(c). Please reprocess this service and issue payment.\",\n },\n] as const;\n\ntype AuthorizationAnswer = \"\" | \"yes\" | \"no\";\ntype LineDraft = CorrectionDraft & { selected: boolean; reason: string; serviceAuthorized: AuthorizationAnswer };\n\nexport type SecondReviewFormProps = {\n data: BillLifecycleData;\n submitting?: boolean;\n error?: Error | null;\n fetch?: typeof globalThis.fetch;\n getDeliveryOptions: () => Promise<BillDeliveryOptions>;\n openAttachment: (attachment: { id: string }) => Promise<void>;\n onCancel: () => void;\n onSubmit: (input: SubmitSecondReviewInput) => Promise<void>;\n};\n\nconst css = `\n.mb-second-review{display:grid;gap:18px;padding:22px;color:var(--mb-text);font-family:var(--mb-font);background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius);box-shadow:var(--mb-shadow)}\n.mb-second-review *{box-sizing:border-box}.mb-second-review h3{margin:0;font-size:22px}.mb-second-review p{margin:4px 0 0;color:var(--mb-muted)}\n.mb-second-review-deadline{padding:12px 14px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-warning) 10%,var(--mb-surface));color:var(--mb-text)!important}\n.mb-second-review-template,.mb-second-review-field{display:grid;gap:6px}.mb-second-review-label{font-size:13px;font-weight:720}.mb-second-review-select,.mb-second-review-textarea{width:100%;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mb-second-review-textarea{min-height:86px;resize:vertical}.mb-second-review-select:focus,.mb-second-review-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 20%,transparent);border-color:var(--mb-accent)}\n.mb-second-review-lines{display:grid;gap:10px}.mb-second-review-line{display:grid;gap:12px;padding:14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface)}.mb-second-review-line[data-selected=true]{border-color:color-mix(in srgb,var(--mb-accent) 65%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 4%,var(--mb-surface))}.mb-second-review-line-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.mb-second-review-check{display:flex;align-items:center;gap:9px;font-weight:750}.mb-second-review-check input{width:18px;height:18px;accent-color:var(--mb-accent)}.mb-second-review-metrics{display:flex;gap:14px;color:var(--mb-muted);font-size:12px}.mb-second-review-auth{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:13px}.mb-second-review-auth strong{margin-right:4px}.mb-second-review-auth label{display:flex;align-items:center;gap:5px}.mb-second-review-auth input{accent-color:var(--mb-accent)}\n.mb-second-review-packet{display:grid;gap:10px;padding:0;border:0}.mb-second-review-packet legend{margin-bottom:8px;font-weight:750}.mb-second-review-document{display:flex;align-items:center;gap:10px;padding:10px 0;border-top:1px solid var(--mb-border)}.mb-second-review-document input{width:18px;height:18px;accent-color:var(--mb-accent)}.mb-second-review-document span{display:grid;min-width:0;flex:1}.mb-second-review-document small{color:var(--mb-muted)}.mb-second-review-link{border:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:700;cursor:pointer}\n.mb-second-review-upload{display:grid;place-items:center;min-height:82px;padding:16px;border:1px dashed color-mix(in srgb,var(--mb-accent) 55%,var(--mb-border));border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));cursor:pointer}.mb-second-review-upload input{position:absolute;width:1px;height:1px;opacity:0}.mb-second-review-upload strong{color:var(--mb-accent)}\n.mb-second-review-uploaded{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius)}\n.mb-second-review-error{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}.mb-second-review-actions{display:flex;justify-content:flex-end;gap:10px}.mb-second-review-button{min-height:42px;padding:9px 16px;border-radius:var(--mb-control-radius);font:inherit;font-weight:740;cursor:pointer}.mb-second-review-button.secondary{border:1px solid var(--mb-border);background:var(--mb-surface);color:var(--mb-text)}.mb-second-review-button.primary{border:0;background:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-second-review-button:disabled{opacity:.55;cursor:not-allowed}\n.mb-second-review-corrections{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.mb-second-review-correction-note{font-size:13px}\n@media(max-width:680px){.mb-second-review{padding:16px}.mb-second-review-line-head{align-items:flex-start;flex-direction:column}.mb-second-review-metrics{flex-wrap:wrap}.mb-second-review-corrections{grid-template-columns:1fr}}\n`;\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nfunction initialLineDrafts(data: BillLifecycleData): Record<string, LineDraft> {\n return Object.fromEntries(data.bill.lineItems.flatMap((line) => line.id ? [[line.id, {\n selected: true,\n reason: \"\",\n serviceAuthorized: \"\" as AuthorizationAnswer,\n correctBilling: false,\n units: String(line.units),\n modifiers: line.modifiers.join(\", \"),\n charge: line.charge.toFixed(2),\n chargeReviewed: false,\n }]] : []));\n}\n\nexport function SecondReviewForm({\n data,\n submitting = false,\n error,\n fetch: fetchOverride,\n getDeliveryOptions,\n openAttachment,\n onCancel,\n onSubmit,\n}: SecondReviewFormProps): ReactElement {\n const [lines, setLines] = useState<Record<string, LineDraft>>(() => initialLineDrafts(data));\n const [attachmentIds, setAttachmentIds] = useState(() => data.bill.attachments.map((attachment) => attachment.id));\n const [uploads, setUploads] = useState<BillSubmissionUpload[]>([]);\n const [formError, setFormError] = useState(\"\");\n const [preparing, setPreparing] = useState(false);\n const [delivery, setDelivery] = useState<BillDeliveryOptions | null>(null);\n\n const selectableLines = useMemo(() => data.bill.lineItems.filter((line): line is typeof line & { id: string } => Boolean(line.id)), [data.bill.lineItems]);\n const selected = selectableLines.filter((line) => lines[line.id]?.selected);\n const invalidReason = selected.some((line) => !lines[line.id]?.reason.trim());\n const correctionErrors = Object.fromEntries(selected.map((line) => {\n try { parseSecondReviewCorrection(lines[line.id]!); return [line.id, \"\"]; }\n catch (cause) { return [line.id, cause instanceof Error ? cause.message : \"Review the corrected billing values.\"]; }\n }));\n const invalidCorrection = Object.values(correctionErrors).some(Boolean);\n const disputedAmount = selected.reduce((sum, line) => sum + Math.max(0, !correctionErrors[line.id] && lines[line.id]?.correctBilling ? Number(lines[line.id]!.charge) : line.charge), 0);\n\n const patchLine = (id: string, patch: Partial<LineDraft>) => setLines((current) => {\n const line = current[id];\n if (!line) return current;\n return { ...current, [id]: { ...line, ...patch } };\n });\n\n const applyTemplate = (value: string) => {\n if (!value) return;\n setLines((current) => Object.fromEntries(Object.entries(current).map(([id, line]) => [\n id,\n line.selected ? { ...line, reason: value, ...(value === SECOND_REVIEW_REASON_TEMPLATES[5].value ? { correctBilling: true, chargeReviewed: false } : {}) } : line,\n ])));\n };\n\n const addUploads = (event: ChangeEvent<HTMLInputElement>) => {\n const files = Array.from(event.target.files || []);\n event.target.value = \"\";\n if (!files.length) return;\n const invalid = files.find((file) => file.type !== \"application/pdf\" && !file.name.toLowerCase().endsWith(\".pdf\"));\n if (invalid) { setFormError(`${invalid.name} is not a PDF.`); return; }\n const oversized = files.find((file) => file.size > 25 * 1024 * 1024);\n if (oversized) { setFormError(`${oversized.name} is larger than 25 MB.`); return; }\n setFormError(\"\");\n setUploads((current) => [...current, ...files.map((file) => ({ file, documentType: \"appeal\" as const }))]);\n };\n\n const continueToDelivery = async () => {\n if (!selected.length) { setFormError(\"Select at least one service line.\"); return; }\n if (invalidReason) { setFormError(\"Enter a dispute reason for every selected service line.\"); return; }\n if (invalidCorrection) { setFormError(\"Review the corrected billing values for each selected service line.\"); return; }\n setPreparing(true);\n setFormError(\"\");\n try {\n setDelivery(await getDeliveryOptions());\n } catch (cause) {\n setFormError(cause instanceof Error ? cause.message : \"Delivery methods could not be loaded.\");\n } finally {\n setPreparing(false);\n }\n };\n\n const submit = async (route: SendRouteSubmission) => {\n setPreparing(true);\n setFormError(\"\");\n try {\n if (!selected.length || invalidReason || invalidCorrection) throw new Error(\"Review all selected service lines before submitting.\");\n const documents = await prepareBillSubmissionDocuments({\n attachments: [],\n selectedIds: [],\n uploads,\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n });\n const lineItems: SecondReviewLineInput[] = selected.map((line) => {\n const draft = lines[line.id]!;\n return {\n lineItemId: line.id,\n reason: draft.reason.trim(),\n ...(draft.serviceAuthorized === \"\" ? {} : { serviceAuthorized: draft.serviceAuthorized === \"yes\" }),\n ...(draft.correctBilling ? { correction: parseSecondReviewCorrection(draft)! } : {}),\n };\n });\n await onSubmit({\n attachmentIds,\n documents,\n disputedAmount,\n lineItems,\n ...(lineItems[0] ? { reason: lineItems[0].reason } : {}),\n ...route,\n });\n } catch (cause) {\n setFormError(cause instanceof Error ? cause.message : \"The Second Review could not be submitted.\");\n } finally {\n setPreparing(false);\n }\n };\n\n return <>\n <style>{css}</style>\n <section className=\"mb-second-review\">\n <div><h3>Submit Second Review</h3><p>Select each disputed service and explain why it should be reconsidered.</p></div>\n <label className=\"mb-second-review-template\"><span className=\"mb-second-review-label\">Apply a saved reason to selected lines</span><select className=\"mb-second-review-select\" defaultValue=\"\" onChange={(event) => { applyTemplate(event.target.value); event.target.value = \"\"; }}><option value=\"\">Choose a reason template (optional)</option>{SECOND_REVIEW_REASON_TEMPLATES.map((template) => <option key={template.label} value={template.value}>{template.label}</option>)}</select></label>\n <section className=\"mb-second-review-lines\" aria-label=\"Service lines in dispute\">\n {selectableLines.map((line) => {\n const draft = lines[line.id];\n return <article className=\"mb-second-review-line\" data-selected={draft?.selected} key={line.id}>\n <div className=\"mb-second-review-line-head\"><label className=\"mb-second-review-check\"><input type=\"checkbox\" checked={Boolean(draft?.selected)} onChange={(event) => patchLine(line.id, { selected: event.target.checked })} /><span>{line.code}{line.modifiers.length ? `-${line.modifiers.join(\"-\")}` : \"\"}</span></label><span className=\"mb-second-review-metrics\"><span>{line.units} unit{line.units === 1 ? \"\" : \"s\"}</span><span>{money(line.charge)}</span></span></div>\n {draft?.selected ? <><label className=\"mb-second-review-field\"><span className=\"mb-second-review-label\">Reason for requesting Second Review</span><textarea className=\"mb-second-review-textarea\" required value={draft.reason} onChange={(event) => patchLine(line.id, { reason: event.target.value })} /></label><div className=\"mb-second-review-auth\" role=\"radiogroup\" aria-label={`Service or good ${line.code} authorized`}><strong>Service/Good Authorized?</strong>{([['yes','Yes'],['no','No'],['','Not specified']] as const).map(([value, label]) => <label key={label}><input type=\"radio\" name={`authorized-${line.id}`} checked={draft.serviceAuthorized === value} onChange={() => patchLine(line.id, { serviceAuthorized: value })} />{label}</label>)}</div></> : null}\n {draft?.selected ? <>\n <label className=\"mb-second-review-check\"><input type=\"checkbox\" checked={draft.correctBilling} onChange={(event) => patchLine(line.id, { correctBilling: event.target.checked, chargeReviewed: false })} />Correct units or modifiers on this submission</label>\n {draft.correctBilling ? <>\n <p className=\"mb-second-review-correction-note\">Earlier submissions stay unchanged. Review the charge explicitly; changing units or modifiers does not recalculate it.</p>\n <div className=\"mb-second-review-corrections\">\n <label className=\"mb-second-review-field\"><span className=\"mb-second-review-label\">Corrected units</span><input className=\"mb-second-review-select\" type=\"number\" min=\"1\" max=\"10000\" step=\"1\" value={draft.units} onChange={(event) => patchLine(line.id, { units: event.target.value, chargeReviewed: false })} /></label>\n <label className=\"mb-second-review-field\"><span className=\"mb-second-review-label\">Corrected modifiers</span><input className=\"mb-second-review-select\" placeholder=\"95, 93 — or leave blank\" value={draft.modifiers} onChange={(event) => patchLine(line.id, { modifiers: event.target.value, chargeReviewed: false })} /></label>\n <label className=\"mb-second-review-field\"><span className=\"mb-second-review-label\">Corrected charge ($)</span><input className=\"mb-second-review-select\" type=\"number\" min=\"0\" max=\"999999.99\" step=\"0.01\" value={draft.charge} onChange={(event) => patchLine(line.id, { charge: event.target.value, chargeReviewed: false })} /></label>\n </div>\n <label className=\"mb-second-review-check\"><input type=\"checkbox\" checked={draft.chargeReviewed} onChange={(event) => patchLine(line.id, { chargeReviewed: event.target.checked })} />I reviewed the corrected charge</label>\n {correctionErrors[line.id] ? <p className=\"mb-second-review-correction-note\" role=\"status\">{correctionErrors[line.id]}</p> : null}\n </> : null}\n </> : null}\n </article>;\n })}\n {!selectableLines.length ? <div className=\"mb-second-review-error\">This bill has no stable service-line identifiers. Refresh the bill before submitting a Second Review.</div> : null}\n </section>\n <fieldset className=\"mb-second-review-packet\"><legend>Supporting packet</legend>{data.bill.attachments.map((attachment) => <label className=\"mb-second-review-document\" key={attachment.id}><input type=\"checkbox\" checked={attachmentIds.includes(attachment.id)} onChange={(event) => setAttachmentIds((current) => event.target.checked ? [...current, attachment.id] : current.filter((id) => id !== attachment.id))} /><span><strong>{attachment.filename}</strong><small>{attachment.description || attachment.documentType}</small></span><button className=\"mb-second-review-link\" type=\"button\" onClick={() => void openAttachment(attachment).catch(() => undefined)}>View</button></label>)}<label className=\"mb-second-review-upload\"><input type=\"file\" accept=\"application/pdf,.pdf\" multiple onChange={addUploads} /><span><strong>Choose one or more PDF files</strong> to attach</span></label>{uploads.map((upload, index) => <div className=\"mb-second-review-uploaded\" key={`${upload.file.name}-${index}`}><span>{upload.file.name}</span><button className=\"mb-second-review-link\" type=\"button\" onClick={() => setUploads((current) => current.filter((_, itemIndex) => itemIndex !== index))}>Remove</button></div>)}</fieldset>\n {(formError || error?.message) ? <div className=\"mb-second-review-error\" role=\"alert\">{formError || error?.message}</div> : null}\n <div className=\"mb-second-review-actions\"><button className=\"mb-second-review-button secondary\" type=\"button\" disabled={submitting || preparing} onClick={onCancel}>Cancel</button><button className=\"mb-second-review-button primary\" type=\"button\" disabled={submitting || preparing || !selected.length || invalidReason || invalidCorrection} onClick={() => void continueToDelivery()}>{preparing ? \"Preparing…\" : \"Continue to delivery\"}</button></div>\n </section>\n {delivery ? <SendRouteDialog title=\"Confirm Second Review delivery\" delivery={delivery} submitting={submitting || preparing} error={formError || error?.message || null} onCancel={() => setDelivery(null)} onConfirm={(route) => void submit(route)} /> : null}\n </>;\n}\n","export { parseSecondReviewCorrection, type CorrectionDraft } from \"@mindbill/browser\";\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type Ref,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport type { BillTasksDashboardCell } from \"./bill-tasks-dashboard\";\nimport { BillTasksDashboard } from \"./bill-tasks-dashboard\";\nimport { ConnectedBillLifecycle } from \"./connected-bill-lifecycle\";\nimport { ConnectedPaymentReview } from \"./payment-review\";\nimport type { CourtesyCopyRecipientOption } from \"./bill-courtesy-copy-form\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport {\n createBillingOperationsClient,\n type BillingOperationsClientOptions,\n type BillRegistryAge,\n type BillRegistryItem,\n type BillRegistryQuery,\n type BillRegistryResult,\n type BillTasksResult,\n type ProductivityReport,\n type ServiceLineItemsReport,\n} from \"./billing-operations-client\";\n\ntype ConnectedSurfaceProps = BillingOperationsClientOptions & {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nconst css = `\n.mbow-select{max-width:100%}\n.mbow{color:var(--mb-text);font:14px/1.45 var(--mb-font);background:var(--mb-soft);border-radius:var(--mb-radius);padding:20px}.mbow,.mbow *{box-sizing:border-box}.mbow h2,.mbow h3,.mbow p{margin:0}.mbow a{color:var(--mb-accent)}\n.mbow-workspace{width:100%;height:100%;max-height:var(--mbow-available-height,100dvh);min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}\n.mbow-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}.mbow-head h2{font-size:24px;line-height:1.2}.mbow-sub{color:var(--mb-muted);margin-top:4px!important}.mbow-actions{display:flex;gap:8px;flex-wrap:wrap}\n.mbow-button,.mbow-input,.mbow-select{min-height:38px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbow-button{padding:7px 12px;cursor:pointer;font-weight:650}.mbow-button:hover{border-color:var(--mb-accent)}.mbow-button.primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mbow-button:disabled{opacity:.55;cursor:not-allowed}.mbow-input,.mbow-select{padding:7px 10px}.mbow-input{min-width:260px;flex:1}\n.mbow-tabs{display:flex;gap:4px;border-bottom:1px solid var(--mb-border);margin-bottom:18px;overflow:auto}.mbow-tab{border:0;border-bottom:3px solid transparent;background:transparent;color:var(--mb-muted);padding:10px 13px;font:inherit;font-weight:700;white-space:nowrap;cursor:pointer}.mbow-tab.active{color:var(--mb-text);border-bottom-color:var(--mb-accent)}\n.mbow-toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.mbow-card{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius);box-shadow:var(--mb-shadow);overflow:hidden}.mbow-scroll{overflow:auto}.mbow-table{width:100%;border-collapse:collapse;min-width:820px}.mbow-table th,.mbow-table td{padding:11px 12px;border-bottom:1px solid var(--mb-border);text-align:left;vertical-align:middle}.mbow-table th{color:var(--mb-muted);font-size:11px;letter-spacing:.045em;text-transform:uppercase;font-weight:800;background:color-mix(in srgb,var(--mb-soft) 60%,var(--mb-surface))}.mbow-table tr:last-child td{border-bottom:0}.mbow-table tbody tr.clickable{cursor:pointer}.mbow-table tbody tr.clickable:hover{background:color-mix(in srgb,var(--mb-accent) 6%,var(--mb-surface))}.mbow-money{text-align:right!important;font-variant-numeric:tabular-nums}.mbow-strong{font-weight:760}.mbow-muted{color:var(--mb-muted);font-size:12px}.mbow-badge{display:inline-flex;border:1px solid var(--mb-border);border-radius:999px;padding:2px 8px;font-size:12px;background:var(--mb-soft);white-space:nowrap}.mbow-badge.success{color:var(--mb-success);border-color:color-mix(in srgb,var(--mb-success) 35%,var(--mb-border));background:color-mix(in srgb,var(--mb-success) 8%,var(--mb-surface))}.mbow-badge.danger{color:var(--mb-danger)}.mbow-badge.warning{color:var(--mb-warning)}\n.mbow-state{padding:28px;text-align:center;color:var(--mb-muted)}.mbow-error{color:var(--mb-danger)}.mbow-pager{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px;color:var(--mb-muted)}\n.mbow-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:14px 0 18px}.mbow-metric{padding:16px;background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius);box-shadow:var(--mb-shadow)}.mbow-metric span{display:block;color:var(--mb-muted);font-size:11px;text-transform:uppercase;letter-spacing:.05em}.mbow-metric strong{display:block;font-size:24px;margin-top:5px}.mbow-section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid var(--mb-border)}\n.mbow-back{margin-bottom:12px}.mbow-task-note{color:var(--mb-muted);font-size:13px;margin-bottom:14px!important}.mbow-bar{height:7px;min-width:70px;background:var(--mb-soft);border-radius:99px;overflow:hidden}.mbow-bar i{display:block;height:100%;background:var(--mb-accent);border-radius:inherit}\n@media(max-width:760px){.mbow{padding:14px}.mbow-head{display:block}.mbow-actions{margin-top:12px}.mbow-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.mbow-input{min-width:100%}}\n`;\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nfunction RenderingProviderFilter({ value, options, onChange }: {\n value: string;\n options: Array<{ id: string; name: string }> | undefined;\n onChange: (value: string) => void;\n}): ReactElement | null {\n if (!options && !value) return null;\n return <select className=\"mbow-select\" aria-label=\"Rendering provider filter\" value={value} onChange={(event) => onChange(event.target.value)}>\n <option value=\"\">All rendering providers</option>\n {value && !options?.some((option) => option.id === value) ? <option value={value}>Selected rendering provider</option> : null}\n {options?.map((option) => <option key={option.id} value={option.id}>{option.name}</option>)}\n </select>;\n}\n\nfunction shortDate(value: string | null): string {\n if (!value) return \"—\";\n const date = new Date(`${value.slice(0, 10)}T12:00:00`);\n return Number.isNaN(date.getTime()) ? value : date.toLocaleDateString(\"en-US\");\n}\n\nfunction defaultRange(days = 29): { from: string; to: string } {\n const to = new Date();\n const from = new Date(to);\n from.setDate(to.getDate() - days);\n const iso = (date: Date) => date.toISOString().slice(0, 10);\n return { from: iso(from), to: iso(to) };\n}\n\nfunction Surface({ appearance, className = \"\", style, children, surfaceRef }: {\n appearance?: MindBillReactAppearance | undefined;\n className?: string | undefined;\n style?: CSSProperties | undefined;\n children: ReactNode;\n surfaceRef?: Ref<HTMLDivElement> | undefined;\n}): ReactElement {\n return <div ref={surfaceRef} className={`mbow ${className}`.trim()} style={mindBillAppearanceStyle(appearance, style)}><style>{css}</style>{children}</div>;\n}\n\nfunction useAvailableViewportHeight() {\n const workspaceRef = useRef<HTMLDivElement>(null);\n const [availableHeight, setAvailableHeight] = useState<number | null>(null);\n useLayoutEffect(() => {\n const element = workspaceRef.current;\n if (!element || typeof window === \"undefined\") return;\n let frame = 0;\n const update = () => {\n window.cancelAnimationFrame(frame);\n frame = window.requestAnimationFrame(() => {\n const viewportHeight = window.visualViewport?.height ?? window.innerHeight;\n const top = Math.max(0, element.getBoundingClientRect().top);\n setAvailableHeight(Math.max(240, viewportHeight - top - 16));\n });\n };\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n window.visualViewport?.addEventListener(\"resize\", update);\n return () => {\n window.cancelAnimationFrame(frame);\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n window.visualViewport?.removeEventListener(\"resize\", update);\n };\n }, []);\n return { workspaceRef, availableHeight };\n}\n\nfunction useClient(options: BillingOperationsClientOptions) {\n return useMemo(() => createBillingOperationsClient(options), [options.apiBaseUrl, options.fetch, options.getSession, options.sessionEndpoint]);\n}\n\nexport type ConnectedBillSearchProps = ConnectedSurfaceProps & {\n initialQuery?: BillRegistryQuery;\n onSelectBill?: (bill: BillRegistryItem) => void;\n heading?: ReactNode;\n compact?: boolean;\n};\n\nfunction BillSearchContent({\n client,\n initialQuery,\n onSelectBill,\n heading,\n}: {\n client: ReturnType<typeof createBillingOperationsClient>;\n initialQuery?: BillRegistryQuery | undefined;\n onSelectBill?: ((bill: BillRegistryItem) => void) | undefined;\n heading?: ReactNode | undefined;\n}): ReactElement {\n const [query, setQuery] = useState<BillRegistryQuery>({ age: \"all\", page: 1, pageSize: 25, sort: \"submitted_desc\", ...initialQuery, status: initialQuery?.status === \"submitted\" ? \"sent\" : initialQuery?.status ?? \"all\" });\n const [draft, setDraft] = useState(initialQuery?.q ?? \"\");\n const [result, setResult] = useState<BillRegistryResult | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [loading, setLoading] = useState(true);\n const load = useCallback(async (signal?: AbortSignal) => {\n setLoading(true); setError(null);\n try { setResult(await client.getBills(query, signal)); }\n catch (cause) { if (!signal?.aborted) setError(cause instanceof Error ? cause : new Error(\"Bills could not be loaded.\")); }\n finally { if (!signal?.aborted) setLoading(false); }\n }, [client, query]);\n useEffect(() => { const controller = new AbortController(); void load(controller.signal); return () => controller.abort(); }, [load]);\n const update = (next: Partial<BillRegistryQuery>) => setQuery((current) => ({ ...current, ...next, page: next.page ?? 1 }));\n const pageCount = Math.max(1, Math.ceil((result?.total ?? 0) / (result?.pageSize ?? 25)));\n\n return <>\n {heading ? <div className=\"mbow-head\"><div>{typeof heading === \"string\" ? <h2>{heading}</h2> : heading}</div></div> : null}\n <form className=\"mbow-toolbar\" onSubmit={(event) => { event.preventDefault(); update({ q: draft.trim() }); }}>\n <input className=\"mbow-input\" value={draft} onChange={(event) => setDraft(event.target.value)} placeholder=\"Search patient, bill ID, claim, or external ID…\" aria-label=\"Search bills\" />\n <select className=\"mbow-select\" value={query.status ?? \"all\"} onChange={(event) => update({ status: event.target.value })} aria-label=\"Bill status\">\n <option value=\"all\">All statuses</option><option value=\"incomplete\">Incomplete</option><option value=\"sent\">Sent</option><option value=\"accepted\">Accepted</option><option value=\"accepted_no_response\">Accepted — response overdue</option><option value=\"rejected\">Rejected</option><option value=\"processed\">Processed</option><option value=\"paid\">Paid</option><option value=\"closed\">Closed</option>\n </select>\n <select className=\"mbow-select\" value={query.age ?? \"all\"} onChange={(event) => update({ age: event.target.value as BillRegistryAge })} aria-label=\"A/R age\">\n <option value=\"all\">All A/R ages</option><option value=\"0-30\">0–30 days</option><option value=\"31-60\">31–60 days</option><option value=\"61-90\">61–90 days</option><option value=\"91+\">91+ days</option><option value=\"91-180\">91–180 days</option><option value=\"181+\">181+ days</option>\n </select>\n <button className=\"mbow-button\" type=\"submit\">Search</button>\n <RenderingProviderFilter value={query.renderingProviderId ?? \"\"} options={result?.filters?.renderingProviders} onChange={(value) => update({ renderingProviderId: value })} />\n </form>\n <div className=\"mbow-card mbow-scroll\">\n {loading ? <div className=\"mbow-state\" role=\"status\">Loading bills…</div> : error ? <div className=\"mbow-state mbow-error\" role=\"alert\">{error.message} <button className=\"mbow-button\" type=\"button\" onClick={() => void load()}>Retry</button></div> : result?.items.length === 0 ? <div className=\"mbow-state\">No bills match these filters.</div> : <table className=\"mbow-table\">\n <thead><tr><th>Bill</th><th>Patient</th><th>DOS</th><th>Codes</th><th>Claims administrator</th><th>Status</th><th>Submitted / A/R age</th><th className=\"mbow-money\">Balance due</th></tr></thead>\n <tbody>{result?.items.map((bill) => <tr key={bill.id} className={onSelectBill ? \"clickable\" : \"\"} onClick={() => onSelectBill?.(bill)}>\n <td className=\"mbow-strong\">#{bill.billNumber}</td><td>{bill.patientName}</td><td>{shortDate(bill.dateOfService)}</td><td>{bill.procedureCodes.join(\", \") || \"—\"}</td><td>{bill.claimsAdministrator || \"—\"}</td><td><span className={`mbow-badge ${bill.status.tone ?? \"\"}`}>{bill.status.label}</span></td><td>{shortDate(bill.submittedAt)}<div className=\"mbow-muted\">{bill.arAgeDays == null ? \"—\" : `${bill.arAgeDays} days`}</div></td><td className=\"mbow-money mbow-strong\">{money(bill.balanceDue)}</td>\n </tr>)}</tbody>\n </table>}\n {result && !loading && !error ? <div className=\"mbow-pager\"><span>Showing {result.total === 0 ? 0 : (result.page - 1) * result.pageSize + 1}–{Math.min(result.page * result.pageSize, result.total)} of {result.total}</span><span><button className=\"mbow-button\" type=\"button\" disabled={result.page <= 1} onClick={() => update({ page: result.page - 1 })}>Previous</button> {result.page} / {pageCount} <button className=\"mbow-button\" type=\"button\" disabled={result.page >= pageCount} onClick={() => update({ page: result.page + 1 })}>Next</button></span></div> : null}\n </div>\n </>;\n}\n\nexport function ConnectedBillSearch({ appearance, className, style, initialQuery, onSelectBill, heading = \"All bills\", ...options }: ConnectedBillSearchProps): ReactElement {\n const client = useClient(options);\n return <Surface appearance={appearance} className={className} style={style}><BillSearchContent client={client} initialQuery={initialQuery} onSelectBill={onSelectBill} heading={heading} /></Surface>;\n}\n\nexport type ConnectedBillTasksDashboardProps = ConnectedSurfaceProps & {\n onDrillDown?: (query: BillRegistryQuery) => void;\n};\n\nfunction taskQuery(cell: BillTasksDashboardCell): BillRegistryQuery {\n const [taskType, taskLabel] = cell.rowId.split(\"::\", 2);\n const age = cell.bucketId === \"1-30\" ? \"0-30\" : cell.bucketId as BillRegistryAge | null;\n if (cell.sectionId === \"waiting_sent\" || cell.sectionId === \"waiting_accepted\") {\n return { status: cell.rowId, ...(age ? { age } : {}) };\n }\n return { status: \"all\", taskSection: cell.sectionId, ...(taskType ? { taskType } : {}), ...(taskLabel ? { taskLabel } : {}), ...(age ? { age } : {}) };\n}\n\nfunction BillTasksContent({ client, onDrillDown, appearance }: { client: ReturnType<typeof createBillingOperationsClient>; onDrillDown?: ((query: BillRegistryQuery) => void) | undefined; appearance?: MindBillReactAppearance | undefined }): ReactElement {\n const [claimsAdminId, setClaimsAdminId] = useState(\"\");\n const [renderingProviderId, setRenderingProviderId] = useState(\"\");\n const [result, setResult] = useState<BillTasksResult | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [loading, setLoading] = useState(true);\n const load = useCallback(async (signal?: AbortSignal) => { setLoading(true); setError(null); try { setResult(await client.getBillTasks(claimsAdminId || undefined, signal, renderingProviderId || undefined)); } catch (cause) { if (!signal?.aborted) setError(cause instanceof Error ? cause : new Error(\"Bill tasks could not be loaded.\")); } finally { if (!signal?.aborted) setLoading(false); } }, [claimsAdminId, renderingProviderId, client]);\n useEffect(() => { const controller = new AbortController(); void load(controller.signal); return () => controller.abort(); }, [load]);\n if (loading && !result) return <div className=\"mbow-state\">Loading bill tasks…</div>;\n if (error && !result) return <div className=\"mbow-state mbow-error\">{error.message}</div>;\n if (!result) return <></>;\n const selectionProps = loading || error ? {} : {\n onSelectCell: (cell: BillTasksDashboardCell) => onDrillDown?.({ ...taskQuery(cell), ...(claimsAdminId ? { claimsAdministrator: claimsAdminId } : {}), ...(renderingProviderId ? { renderingProviderId } : {}) }),\n };\n return <>\n <p className=\"mbow-task-note\">Open follow-up work grouped by task and age. {result.waiting ? \"Sent and accepted bills waiting for a payer are shown below.\" : \"Find sent and accepted bills in All bills.\"}</p>\n {loading ? <p role=\"status\">Updating bill tasks…</p> : null}\n {error ? <p role=\"alert\" className=\"mbow-error\">{error.message}</p> : null}\n <BillTasksDashboard data={result.dashboard} appearance={appearance ?? { preset: \"mindbill\" }} toolbar={<div className=\"mbow-toolbar\"><select aria-label=\"Claims administrator filter\" className=\"mbow-select\" value={claimsAdminId} onChange={(event) => setClaimsAdminId(event.target.value)}><option value=\"\">All claims administrators</option>{result.filters.claimsAdministrators.map((item) => <option key={item.id} value={item.id}>{item.name}</option>)}</select><RenderingProviderFilter value={renderingProviderId} options={result.filters.renderingProviders} onChange={setRenderingProviderId} /></div>} {...selectionProps} />\n {result.waiting ? <BillTasksDashboard data={result.waiting} appearance={appearance ?? { preset: \"mindbill\" }}\n heading=\"Bills waiting for payer\" totalLabel=\"Bill Total\" itemLabel=\"bills\" grandTotalLabel=\"Waiting Bills Total\" emptyLabel=\"No waiting bills\"\n {...selectionProps}\n footnote=\"Waiting bills can also have overdue follow-up tasks above. These bill totals are separate from task totals.\" /> : null}\n </>;\n}\n\nexport function ConnectedBillTasksDashboard({ appearance, className, style, onDrillDown, ...options }: ConnectedBillTasksDashboardProps): ReactElement {\n const client = useClient(options);\n return <Surface appearance={appearance} className={className} style={style}><BillTasksContent client={client} onDrillDown={onDrillDown} appearance={appearance} /></Surface>;\n}\n\ntype ReportProps = ConnectedSurfaceProps & { initialFrom?: string; initialTo?: string; onSelectBill?: (billId: string) => void };\n\nfunction RangeToolbar({ from, to, setFrom, setTo }: { from: string; to: string; setFrom: (value: string) => void; setTo: (value: string) => void }): ReactElement {\n return <div className=\"mbow-toolbar\"><label>From <input className=\"mbow-input\" type=\"date\" value={from} onChange={(event) => setFrom(event.target.value)} /></label><label>To <input className=\"mbow-input\" type=\"date\" value={to} onChange={(event) => setTo(event.target.value)} /></label></div>;\n}\n\nexport function ConnectedServiceLineItemsReport({ appearance, className, style, initialFrom, initialTo, onSelectBill, ...options }: ReportProps): ReactElement {\n const defaults = useMemo(() => defaultRange(), []); const client = useClient(options);\n const [from, setFrom] = useState(initialFrom ?? defaults.from); const [to, setTo] = useState(initialTo ?? defaults.to); const [data, setData] = useState<ServiceLineItemsReport | null>(null); const [error, setError] = useState<Error | null>(null);\n useEffect(() => { const controller = new AbortController(); setError(null); void client.getServiceLineItems({ from, to }, controller.signal).then(setData).catch((cause) => { if (!controller.signal.aborted) setError(cause instanceof Error ? cause : new Error(\"Report could not be loaded.\")); }); return () => controller.abort(); }, [client, from, to]);\n return <Surface appearance={appearance} className={className} style={style}><div className=\"mbow-head\"><div><h2>Original submissions by procedure</h2><p className=\"mbow-sub\">First payer submission for each patient and date of service.</p></div></div><RangeToolbar from={from} to={to} setFrom={setFrom} setTo={setTo} />{error ? <div className=\"mbow-state mbow-error\">{error.message}</div> : !data ? <div className=\"mbow-state\">Loading report…</div> : <><div className=\"mbow-metrics\"><Metric label=\"Original bills\" value={String(data.totalBills)} /><Metric label=\"Service lines\" value={String(data.totalLines)} /><Metric label=\"Total billed\" value={money(data.totalBilled)} /><Metric label=\"Report window\" value={data.windowLabel} /></div><div className=\"mbow-card mbow-scroll\"><div className=\"mbow-section-head\"><h3>Procedure summary</h3></div><table className=\"mbow-table\"><thead><tr><th>Procedure code</th><th>Bills</th><th>Service lines</th><th className=\"mbow-money\">Total billed</th></tr></thead><tbody>{data.cptRows.map((row) => <tr key={row.code}><td className=\"mbow-strong\">{row.code}</td><td>{row.bills}</td><td>{row.lines}</td><td className=\"mbow-money\">{money(row.billed)}</td></tr>)}</tbody></table></div><div className=\"mbow-card mbow-scroll\" style={{ marginTop: 16 }}><div className=\"mbow-section-head\"><h3>All original bills</h3></div><table className=\"mbow-table\"><thead><tr><th>Bill</th><th>First submitted</th><th>Patient · Claim</th><th>DOS</th><th>Claims administrator</th><th>Codes</th><th className=\"mbow-money\">Billed</th><th>Status</th></tr></thead><tbody>{data.billRows.map((row) => <tr key={row.billId} className={onSelectBill ? \"clickable\" : \"\"} onClick={() => onSelectBill?.(row.billId)}><td className=\"mbow-strong\">#{row.billNumber}</td><td>{shortDate(row.submittedDate)}</td><td>{row.patient}<div className=\"mbow-muted\">{row.claim}</div></td><td>{shortDate(row.dos)}</td><td>{row.claimsAdmin}</td><td>{row.codes.join(\", \")}</td><td className=\"mbow-money\">{money(row.billed)}</td><td>{row.status}</td></tr>)}</tbody></table></div></>}</Surface>;\n}\n\nfunction Metric({ label, value }: { label: string; value: string }): ReactElement { return <div className=\"mbow-metric\"><span>{label}</span><strong>{value}</strong></div>; }\n\nexport function ConnectedProductivityReport({ appearance, className, style, initialFrom, initialTo, ...options }: Omit<ReportProps, \"onSelectBill\">): ReactElement {\n const defaults = useMemo(() => defaultRange(13), []); const client = useClient(options);\n const [from, setFrom] = useState(initialFrom ?? defaults.from); const [to, setTo] = useState(initialTo ?? defaults.to); const [data, setData] = useState<ProductivityReport | null>(null); const [error, setError] = useState<Error | null>(null);\n useEffect(() => { const controller = new AbortController(); setError(null); void client.getProductivity({ from, to }, controller.signal).then(setData).catch((cause) => { if (!controller.signal.aborted) setError(cause instanceof Error ? cause : new Error(\"Report could not be loaded.\")); }); return () => controller.abort(); }, [client, from, to]);\n const maxSent = data ? Math.max(1, ...Object.values(data.sentTotal)) : 1;\n return <Surface appearance={appearance} className={className} style={style}><div className=\"mbow-head\"><div><h2>Productivity</h2><p className=\"mbow-sub\">Bills created and sent per biller, plus accepted-first-try rate.</p></div></div><RangeToolbar from={from} to={to} setFrom={setFrom} setTo={setTo} />{error ? <div className=\"mbow-state mbow-error\">{error.message}</div> : !data ? <div className=\"mbow-state\">Loading report…</div> : <><div className=\"mbow-metrics\"><Metric label=\"Bills created\" value={String(data.totalCreated)} /><Metric label=\"Transmissions\" value={String(data.totalSent)} /><Metric label=\"Bills submitted\" value={String(data.totalSubmitted)} /><Metric label=\"Accepted first try\" value={data.totalSubmitted ? `${Math.round(data.totalClean / data.totalSubmitted * 100)}%` : \"—\"} /></div><div className=\"mbow-card mbow-scroll\"><div className=\"mbow-section-head\"><h3>Per-biller summary</h3></div><table className=\"mbow-table\"><thead><tr><th>Biller</th><th>Created</th><th>Transmissions</th><th>Submitted</th><th>Accepted first try</th><th>Volume</th></tr></thead><tbody>{data.billers.map((biller) => { const sent = data.sentTotal[biller.name] ?? 0; const submitted = data.submittedTotal[biller.name] ?? 0; const clean = data.cleanTotal[biller.name] ?? 0; return <tr key={biller.name}><td className=\"mbow-strong\">{biller.name}</td><td>{data.createdTotal[biller.name] ?? 0}</td><td>{sent}</td><td>{submitted}</td><td>{submitted ? `${Math.round(clean / submitted * 100)}%` : \"—\"}</td><td><div className=\"mbow-bar\"><i style={{ width: `${sent / maxSent * 100}%` }} /></div></td></tr>; })}</tbody></table></div></>}</Surface>;\n}\n\nexport type ConnectedBillingWorkspaceProps = ConnectedSurfaceProps & {\n initialView?: \"tasks\" | \"bills\" | \"procedures\" | \"productivity\" | \"payments\";\n /** Optional host-owned payment entry action. Review itself is read-only. */\n onPostPayment?: () => void;\n onCreateBill?: () => void;\n /** Show simulation controls on selected sandbox bills. Never enables live simulations. */\n sandboxControls?: boolean;\n /** Return contacts for the selected bill only; never auto-selects recipients. */\n getCourtesyCopyRecipientOptions?: (billId: string) => readonly CourtesyCopyRecipientOption[];\n};\n\nexport function ConnectedBillingWorkspace({ appearance, className, style, initialView = \"tasks\", onCreateBill, onPostPayment, sandboxControls = false, getCourtesyCopyRecipientOptions, ...options }: ConnectedBillingWorkspaceProps): ReactElement {\n const client = useClient(options); const [view, setView] = useState(initialView); const [billQuery, setBillQuery] = useState<BillRegistryQuery>({ status: \"all\" }); const [selectedBillId, setSelectedBillId] = useState<string | null>(null);\n const { workspaceRef, availableHeight } = useAvailableViewportHeight();\n const workspaceClassName = [\"mbow-workspace\", className].filter(Boolean).join(\" \");\n const hasExplicitHeight = style?.height != null || style?.maxHeight != null;\n const workspaceStyle = availableHeight == null || hasExplicitHeight ? style : { ...style, maxHeight: availableHeight };\n if (selectedBillId) return <Surface surfaceRef={workspaceRef} appearance={appearance} className={workspaceClassName} style={workspaceStyle}><button className=\"mbow-button mbow-back\" type=\"button\" onClick={() => setSelectedBillId(null)}>← Back to bills</button><ConnectedBillLifecycle billId={selectedBillId} sandboxControls={sandboxControls} courtesyCopyRecipientOptions={getCourtesyCopyRecipientOptions?.(selectedBillId) ?? []} {...options} {...(appearance ? { appearance } : {})} /></Surface>;\n const selectView = (next: typeof view) => { setView(next); setSelectedBillId(null); };\n const appearanceProps = appearance ? { appearance } : {};\n return <Surface surfaceRef={workspaceRef} appearance={appearance} className={workspaceClassName} style={workspaceStyle}><div className=\"mbow-head\"><div><h2>Billing</h2><p className=\"mbow-sub\">Follow up on open work or find any bill and its current status.</p></div>{onCreateBill ? <div className=\"mbow-actions\"><button className=\"mbow-button primary\" type=\"button\" onClick={onCreateBill}>+ Add bill</button></div> : null}</div><div className=\"mbow-tabs\" role=\"tablist\">{([['tasks','Bill tasks'],['bills','All bills'],['procedures','Procedures'],['productivity','Productivity'],['payments','Payment review']] as const).map(([id,label]) => <button key={id} className={`mbow-tab ${view === id ? \"active\" : \"\"}`} type=\"button\" role=\"tab\" aria-selected={view === id} onClick={() => selectView(id)}>{label}</button>)}</div>{view === \"tasks\" ? <BillTasksContent client={client} onDrillDown={(query) => { setBillQuery(query); setView(\"bills\"); }} appearance={appearance} /> : view === \"bills\" ? <BillSearchContent client={client} initialQuery={billQuery} onSelectBill={(bill) => setSelectedBillId(bill.id)} /> : view === \"procedures\" ? <ConnectedServiceLineItemsReport {...options} {...appearanceProps} onSelectBill={setSelectedBillId} /> : view === \"payments\" ? <ConnectedPaymentReview {...options} {...appearanceProps} {...(onPostPayment ? { onPostPayment } : {})} onSelectBill={setSelectedBillId} /> : <ConnectedProductivityReport {...options} {...appearanceProps} />}</Surface>;\n}\n"],"mappings":"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","names":["document","useEffect","useRef","useEffect","useRef","useState","jsx","jsxs","value","useEffect","useState","jsx","jsxs","money","contacts","useState","useEffect","useEffect","useMemo","useRef","useState","useEffect","useMemo","useState","Fragment","jsx","jsxs","useEffect","useState","Fragment","jsx","jsxs","css","Fragment","jsx","jsxs","date","css","Field","useState","useEffect","useMemo","useRef","list","administrator","description","useMemo","useState","Fragment","jsx","jsxs","css","money","useMemo","useState","useMemo","jsx","jsxs","money","stateLabel","css","useMemo","BILL_TASKS_AGING_BUCKETS","Fragment","jsx","jsxs","css","Fragment","jsx","jsxs","css","useEffect","useState","REPORT_BILL_STATUS_OPTIONS","Fragment","jsx","jsxs","css","useState","useEffect","useCallback","useEffect","useId","useMemo","useRef","useState","Fragment","jsx","jsxs","useState","jsx","jsxs","document","useState","Fragment","jsx","jsxs","css","useMemo","useState","useId","useRef","useCallback","useEffect","error","useEffect","useMemo","useState","jsx","jsxs","date","money","css","useMemo","useState","useEffect","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","css","useId","useState","useRef","useEffect","useEffect","useId","useRef","useState","jsx","jsxs","css","useId","useState","useRef","useEffect","useCallback","useEffect","useMemo","useRef","useState","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","Fragment","jsx","jsxs","responseError","normalizeSession","useMemo","useState","useRef","useEffect","useCallback","useEffect","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useEffect","contacts","useCallback","useEffect","useMemo","useRef","useState","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","useMemo","useState","Fragment","jsx","jsxs","css","money","useState","useMemo","createBillLifecycleClient","reportBillStatusContacts","secondReviewDeadline","Fragment","jsx","jsxs","DEFAULT_REFRESH_INTERVAL","DEFAULT_SESSION_ENDPOINT","DEFAULT_API_BASE_URL","useState","useRef","useMemo","useEffect","useCallback","document","courtesyCopyRecipientOptions","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","css","money","date","useRef","useState","useMemo","useCallback","useEffect","useRef","useEffect"]}
|