@mindbill/react 0.9.3 → 0.9.4

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/README.md CHANGED
@@ -56,6 +56,8 @@ This is the minimum safe browser integration. A permanent Partner API key must n
56
56
 
57
57
  `BillReviewForm` is the native, controlled review surface. Known bill values and payer documents remain explicit and editable before submission.
58
58
 
59
+ When you use `ConnectedBillLifecycle`, payer selection is batteries-included: the component searches MindBill's claims-administrator directory, sends the current claim number for pattern matching, explains name and claim-number evidence, shows delivery availability, and only preselects a high-confidence exact name or alias match. For a controlled `BillReviewForm`, provide the same behavior with `onSearchClaimsAdministrators={(query, claimNumber) => ...}`; return `BillReviewPayer` records with optional `confidence`, `recommended`, and `signals` fields.
60
+
59
61
  ```tsx
60
62
  import { BillReviewForm } from "@mindbill/react";
61
63
 
package/dist/index.d.ts CHANGED
@@ -67,6 +67,13 @@ type BillReviewPayer = {
67
67
  name: string;
68
68
  hasElectronic?: boolean;
69
69
  states?: string[];
70
+ confidence?: "high" | "medium" | "directory";
71
+ recommended?: boolean;
72
+ signals?: Array<{
73
+ kind: "name" | "claim_number";
74
+ state: "match" | "warning";
75
+ label: string;
76
+ }>;
70
77
  };
71
78
  type BillReviewFeatures = {
72
79
  authorizationNumber?: boolean;
@@ -167,7 +174,7 @@ type BillReviewFormProps = {
167
174
  onAddAttachment: (file: File, documentType: BillReviewDocumentType, description?: string) => Promise<void>;
168
175
  onRemoveAttachment: (attachmentId: string) => Promise<void>;
169
176
  onOpenAttachment?: (attachment: BillReviewAttachment) => void;
170
- onSearchClaimsAdministrators?: (query: string) => Promise<BillReviewPayer[]>;
177
+ onSearchClaimsAdministrators?: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;
171
178
  className?: string;
172
179
  style?: CSSProperties;
173
180
  appearance?: MindBillAppearance;
@@ -347,7 +354,7 @@ type BillLifecycleClientOptions = {
347
354
  };
348
355
  type BillLifecycleClient = {
349
356
  getLifecycle: (signal?: AbortSignal) => Promise<BillLifecycleData>;
350
- searchClaimsAdministrators: (query: string) => Promise<BillReviewPayer[]>;
357
+ searchClaimsAdministrators: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;
351
358
  saveReview: (input: BillReviewSaveInput) => Promise<BillLifecycleData>;
352
359
  submitBill: (input: BillReviewSaveInput, route: BillSubmissionRoute) => Promise<BillLifecycleData>;
353
360
  addAttachment: (file: File, documentType: BillReviewDocumentType, description?: string) => Promise<BillLifecycleData>;
package/dist/index.js CHANGED
@@ -248,7 +248,10 @@ function Combobox({ label, value, options, onChange, placeholder, required, disa
248
248
  )
249
249
  ] }),
250
250
  open && filtered.length ? /* @__PURE__ */ jsx("ul", { id: listId, role: "listbox", className: "mb-native-combo-list", children: filtered.map((option, index) => /* @__PURE__ */ jsx("li", { id: `${listId}-${index}`, role: "option", "aria-selected": index === active, children: /* @__PURE__ */ jsxs("button", { type: "button", className: index === active ? "active" : "", onMouseDown: (event) => event.preventDefault(), onClick: () => select(option), children: [
251
- /* @__PURE__ */ jsx("strong", { children: option.label }),
251
+ /* @__PURE__ */ jsxs("span", { className: "mb-native-combo-title", children: [
252
+ /* @__PURE__ */ jsx("strong", { children: option.label }),
253
+ option.badge ? /* @__PURE__ */ jsx("em", { children: option.badge }) : null
254
+ ] }),
252
255
  option.detail ? /* @__PURE__ */ jsx("span", { children: option.detail }) : null
253
256
  ] }) }, `${option.value}-${index}`)) }) : null
254
257
  ] });
@@ -328,7 +331,9 @@ function BillReviewForm({
328
331
  setPayerQuery(data.injury.claimsAdminName || "");
329
332
  }, [data]);
330
333
  useEffect(() => {
331
- if (!onSearchClaimsAdministrators || payerQuery.trim().length < 2) {
334
+ const query = payerQuery.trim();
335
+ const claimNumber = draft.claimNumber.trim();
336
+ if (!onSearchClaimsAdministrators || query.length < 2 && claimNumber.length < 4) {
332
337
  setPayerResults([]);
333
338
  setPayerBusy(false);
334
339
  return;
@@ -336,8 +341,23 @@ function BillReviewForm({
336
341
  let current = true;
337
342
  const timer = window.setTimeout(() => {
338
343
  setPayerBusy(true);
339
- void onSearchClaimsAdministrators(payerQuery.trim()).then((results) => {
340
- if (current) setPayerResults(results);
344
+ void onSearchClaimsAdministrators(query, claimNumber).then((results) => {
345
+ if (!current) return;
346
+ setPayerResults(results);
347
+ const recommendation = results.find(
348
+ (payer) => payer.recommended && payer.confidence === "high"
349
+ );
350
+ if (!draft.claimsAdminId && recommendation) {
351
+ setDraft((currentDraft) => ({
352
+ ...currentDraft,
353
+ claimsAdminId: recommendation.id,
354
+ claimsAdminName: recommendation.name
355
+ }));
356
+ setPayerQuery(recommendation.name);
357
+ setNotice(
358
+ "Claims administrator matched from the case data. Review and save to keep it on this bill."
359
+ );
360
+ }
341
361
  }).catch((cause) => {
342
362
  if (current) {
343
363
  setPayerResults([]);
@@ -353,7 +373,15 @@ function BillReviewForm({
353
373
  current = false;
354
374
  window.clearTimeout(timer);
355
375
  };
356
- }, [onSearchClaimsAdministrators, payerQuery]);
376
+ }, [
377
+ draft.claimNumber,
378
+ draft.claimsAdminId,
379
+ onSearchClaimsAdministrators,
380
+ payerQuery
381
+ ]);
382
+ const selectedPayer = payerResults.find(
383
+ (payer) => payer.id === draft.claimsAdminId
384
+ );
357
385
  const adjFormatValid = !draft.adjNumber || /^ADJ\d{7,}$/i.test(draft.adjNumber.replace(/[\s-]/g, ""));
358
386
  const blockers = useMemo(() => {
359
387
  const result = [];
@@ -481,12 +509,19 @@ function BillReviewForm({
481
509
  disabled: !editable,
482
510
  placeholder: "Search by payer or administrator name",
483
511
  name: "mindbill-payer-query",
484
- options: payerResults.map((payer) => ({ value: payer.id, label: payer.name, detail: payer.hasElectronic ? "Electronic billing available" : "Billing route confirmed after review" })),
512
+ options: payerResults.map((payer) => ({
513
+ value: payer.id,
514
+ label: payer.name,
515
+ ...payer.recommended ? { badge: "Recommended" } : payer.confidence === "medium" ? { badge: "Claim match" } : {},
516
+ detail: [
517
+ ...(payer.signals ?? []).map((signal) => signal.label),
518
+ payer.hasElectronic ? "Electronic billing available." : "Billing route confirmed after review."
519
+ ].join(" ")
520
+ })),
485
521
  onChange: (value, option) => {
486
522
  if (option) {
487
523
  setDraft((current) => ({ ...current, claimsAdminId: option.value, claimsAdminName: option.label }));
488
524
  setPayerQuery(option.label);
489
- setPayerResults([]);
490
525
  setNotice("Claims administrator selected. Save changes to keep it on this bill.");
491
526
  } else {
492
527
  setPayerQuery(value);
@@ -496,7 +531,8 @@ function BillReviewForm({
496
531
  }
497
532
  ),
498
533
  payerBusy ? /* @__PURE__ */ jsx("span", { className: "mb-native-payer-help", children: "Searching\u2026" }) : null,
499
- !payerBusy && payerQuery.trim().length > 1 && payerResults.length === 0 && !draft.claimsAdminId ? /* @__PURE__ */ jsx("span", { className: "mb-native-payer-help", children: "No matching administrator selected yet." }) : null
534
+ !payerBusy && payerQuery.trim().length > 1 && payerResults.length === 0 && !draft.claimsAdminId ? /* @__PURE__ */ jsx("span", { className: "mb-native-payer-help", children: "No matching administrator selected yet." }) : null,
535
+ selectedPayer?.signals?.length ? /* @__PURE__ */ jsx("div", { className: "mb-native-payer-insight", role: "status", children: selectedPayer.signals.map((signal) => /* @__PURE__ */ jsx("span", { className: signal.state, children: signal.label }, `${signal.kind}-${signal.label}`)) }) : null
500
536
  ] })
501
537
  ] }),
502
538
  /* @__PURE__ */ jsxs("section", { className: sectionClass, children: [
@@ -780,7 +816,8 @@ var NATIVE_BILL_REVIEW_STYLES = `
780
816
  .mb-native-hint{color:var(--mb-muted);font-size:12px;font-weight:500}
781
817
  .mb-native-combo{position:relative;min-width:0}
782
818
  .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)}
783
- .mb-native-combo-list li{margin:0;padding:0}.mb-native-combo-list 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}.mb-native-combo-list button:hover,.mb-native-combo-list button.active{background:var(--mb-soft);outline:0}.mb-native-combo-list span{color:var(--mb-muted);font-size:12px;font-weight:500}
819
+ .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}
820
+ .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}
784
821
  .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}
785
822
  .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}
786
823
  .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}
@@ -1171,9 +1208,12 @@ function createBillLifecycleClient({
1171
1208
  const body = await response.json();
1172
1209
  return normalizeLifecycle(body.data);
1173
1210
  };
1174
- const searchClaimsAdministrators = async (query) => {
1211
+ const searchClaimsAdministrators = async (query, claimNumber) => {
1212
+ const params = new URLSearchParams();
1213
+ if (query.trim()) params.set("q", query.trim());
1214
+ if (claimNumber?.trim()) params.set("claimNumber", claimNumber.trim());
1175
1215
  const response = await request(
1176
- `/embed/api/bill-review/payers?q=${encodeURIComponent(query)}`
1216
+ `/embed/api/bill-review/payers?${params.toString()}`
1177
1217
  );
1178
1218
  if (!response.ok) {
1179
1219
  throw await responseError2(
@@ -1195,7 +1235,23 @@ function createBillLifecycleClient({
1195
1235
  id: payer.id,
1196
1236
  name: payer.name,
1197
1237
  ...typeof payer.hasElectronic === "boolean" ? { hasElectronic: payer.hasElectronic } : {},
1198
- ...Array.isArray(payer.states) ? { states: payer.states.filter((state) => typeof state === "string") } : {}
1238
+ ...Array.isArray(payer.states) ? { states: payer.states.filter((state) => typeof state === "string") } : {},
1239
+ ...["high", "medium", "directory"].includes(payer.confidence ?? "") ? {
1240
+ confidence: payer.confidence
1241
+ } : {},
1242
+ ...typeof payer.recommended === "boolean" ? { recommended: payer.recommended } : {},
1243
+ ...Array.isArray(payer.signals) ? {
1244
+ signals: payer.signals.flatMap((signal) => {
1245
+ if (!signal || typeof signal !== "object") return [];
1246
+ const candidate = signal;
1247
+ if (!["name", "claim_number"].includes(String(candidate.kind)) || !["match", "warning"].includes(String(candidate.state)) || typeof candidate.label !== "string") return [];
1248
+ return [{
1249
+ kind: candidate.kind,
1250
+ state: candidate.state,
1251
+ label: candidate.label
1252
+ }];
1253
+ })
1254
+ } : {}
1199
1255
  }];
1200
1256
  });
1201
1257
  };
@@ -1420,7 +1476,7 @@ function useBillLifecycle({
1420
1476
  [client, mutate]
1421
1477
  );
1422
1478
  const searchClaimsAdministrators = useCallback2(
1423
- (query) => client.searchClaimsAdministrators(query),
1479
+ (query, claimNumber) => client.searchClaimsAdministrators(query, claimNumber),
1424
1480
  [client]
1425
1481
  );
1426
1482
  const submitBill = useCallback2(
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/native-bill-review.tsx","../src/connected-bill-status.tsx","../src/connected-bill-lifecycle.tsx"],"sourcesContent":["\"use client\";\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}\nexport function MindBillBillFromReport(\n props: MindBillWidgetProps,\n): ReactElement {\n return widget(\"mindbill-bill-from-report\", props);\n}\nexport function MindBillCollections(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-collections\", props);\n}\nexport function MindBillOnboarding(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-onboarding\", props);\n}\n\nexport const HostedBillTimeline = MindBillBillTimeline;\nexport const HostedBillReview = MindBillBillReview;\nexport const HostedBillFromReport = MindBillBillFromReport;\nexport const HostedCollections = MindBillCollections;\nexport const HostedOnboarding = MindBillOnboarding;\n\nexport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport {\n BillReviewForm,\n BillStatusSummary,\n buildBillReviewSaveInput,\n} from \"./native-bill-review\";\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 ConnectedBillStatus,\n createBillStatusClient,\n useBillStatus,\n} from \"./connected-bill-status\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillEorDocument,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n CloseBillInput,\n ConnectedBillLifecycleProps,\n PostBillPaymentInput,\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","\"use client\";\n\nimport type { MindBillAppearance } from \"@mindbill/embed\";\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 id?: string;\n name: string;\n taxId: 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 id?: string;\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 id?: string;\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};\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};\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 billNumber: string | number;\n status: string;\n transmissionState?: string;\n dos: string;\n dosEnd?: string | null;\n placeOfServiceId?: string;\n authorizationNumber?: string | null;\n billingProviderId?: string;\n renderingProviderId?: string;\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 options?: {\n billingProviders?: BillReviewBillingProvider[];\n renderingProviders?: BillReviewClinician[];\n locations?: BillReviewLocation[];\n };\n};\n\nexport type BillReviewSaveInput = {\n claimsAdminId: 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 billingProviderId?: string;\n billingProvider?: Omit<BillReviewBillingProvider, \"id\">;\n renderingProviderId?: string;\n renderingProvider?: Omit<BillReviewClinician, \"id\">;\n placeOfServiceId?: string;\n placeOfService?: Omit<BillReviewLocation, \"id\">;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n }>;\n};\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\n\nexport type BillReviewFormProps = {\n data: BillReviewData;\n onSave: (input: BillReviewSaveInput) => Promise<BillReviewData | void>;\n onSubmit: (\n input: BillReviewSaveInput,\n route: BillSubmissionRoute,\n ) => Promise<void>;\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 ) => Promise<BillReviewPayer[]>;\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillAppearance;\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 withoutId<T extends { id?: string }>(value: T): Omit<T, \"id\"> {\n const result = { ...value };\n delete result.id;\n return result;\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: data.bill.lineItems.map((line) => ({ ...line })),\n };\n}\n\nexport function buildBillReviewSaveInput(\n draft: BillReviewDraft,\n): BillReviewSaveInput {\n return {\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 ...(draft.billingProvider.id\n ? { billingProviderId: draft.billingProvider.id }\n : {}),\n billingProvider: withoutId(draft.billingProvider),\n ...(draft.clinician.id\n ? { renderingProviderId: draft.clinician.id }\n : {}),\n renderingProvider: withoutId(draft.clinician),\n ...(draft.location.id ? { placeOfServiceId: draft.location.id } : {}),\n placeOfService: withoutId(draft.location),\n lineItems: draft.lineItems.filter((line) => line.code.trim()).map(({ id, code, modifiers, units }) => ({\n ...(id ? { id } : {}),\n code: code.trim().toUpperCase(),\n modifiers,\n units,\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 appearanceStyle(\n appearance: MindBillAppearance | undefined,\n style: CSSProperties | undefined,\n): CSSProperties {\n return {\n ...(appearance?.accentColor\n ? { \"--mb-accent\": appearance.accentColor }\n : {}),\n ...(appearance?.textColor ? { \"--mb-text\": appearance.textColor } : {}),\n ...(appearance?.mutedColor\n ? { \"--mb-muted\": appearance.mutedColor }\n : {}),\n ...(appearance?.borderColor\n ? { \"--mb-border\": appearance.borderColor }\n : {}),\n ...(appearance?.backgroundColor\n ? { \"--mb-soft\": appearance.backgroundColor }\n : {}),\n ...(appearance?.surfaceColor\n ? { \"--mb-surface\": appearance.surfaceColor }\n : {}),\n ...(appearance?.fontFamily\n ? { \"--mb-font\": appearance.fontFamily }\n : {}),\n ...style,\n } as CSSProperties;\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} {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 = { value: string; label: string; detail?: string };\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}</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 <strong>{option.label}</strong>{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 onSave,\n onSubmit,\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 [route, setRoute] = useState<BillSubmissionRoute>(\"ebill\");\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 routeName = useId();\n const editable = data.bill.status === \"incomplete\" && !disabled;\n\n useEffect(() => {\n setDraft(toDraft(data));\n setPayerQuery(data.injury.claimsAdminName || \"\");\n }, [data]);\n\n useEffect(() => {\n if (!onSearchClaimsAdministrators || payerQuery.trim().length < 2) {\n setPayerResults([]);\n setPayerBusy(false);\n return;\n }\n let current = true;\n const timer = window.setTimeout(() => {\n setPayerBusy(true);\n void onSearchClaimsAdministrators(payerQuery.trim())\n .then((results) => {\n if (current) setPayerResults(results);\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 }, [onSearchClaimsAdministrators, payerQuery]);\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 (!draft.dos) result.push(\"Date of service\");\n if (!draft.billingProvider.name.trim()) result.push(\"Practice name\");\n if (!draft.billingProvider.taxId.trim()) 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 return result;\n }, [adjFormatValid, 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 void run(\"save\", async () => {\n const updated = await onSave(buildBillReviewSaveInput(draft));\n if (updated) setDraft(toDraft(updated));\n });\n };\n\n const handleSubmit = () =>\n run(\"submit\", () => onSubmit(buildBillReviewSaveInput(draft), route));\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={appearanceStyle(appearance, style)}\n onSubmit={handleSave}\n >\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <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>\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 {draft.claimsAdminId ? <span>Selected</span> : <span>Required</span>}\n </div>\n <div className=\"mb-native-payer-picker\">\n <Combobox\n label=\"Insurance company or claims administrator\"\n value={payerQuery}\n disabled={!editable}\n placeholder=\"Search by payer or administrator name\"\n name=\"mindbill-payer-query\"\n options={payerResults.map((payer) => ({ value: payer.id, label: payer.name, detail: payer.hasElectronic ? \"Electronic billing available\" : \"Billing route confirmed after review\" }))}\n onChange={(value, option) => {\n if (option) {\n setDraft((current) => ({ ...current, claimsAdminId: option.value, claimsAdminName: option.label }));\n setPayerQuery(option.label);\n setPayerResults([]);\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 </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Patient and claim</h3><p>Prefilled from the case. Correct anything that should print differently on this bill.</p></div><span>Editable</span></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><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Practice name\" required value={draft.billingProvider.name} onChange={(value) => updateBillingProvider(\"name\", value)} />\n <Field label=\"Tax ID\" required value={draft.billingProvider.taxId} onChange={(value) => updateBillingProvider(\"taxId\", value)} />\n <Field label=\"Billing NPI\" required value={draft.billingProvider.npi} onChange={(value) => updateBillingProvider(\"npi\", value)} />\n <Field label=\"Phone\" optional value={draft.billingProvider.phone || \"\"} onChange={(value) => updateBillingProvider(\"phone\", value)} />\n <Field label=\"Billing street\" required value={draft.billingProvider.billingStreet || \"\"} onChange={(value) => updateBillingProvider(\"billingStreet\", value)} />\n <Field label=\"City\" required 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 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><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Clinician name\" required value={draft.clinician.name} onChange={(value) => updateClinician(\"name\", value)} />\n <Field label=\"Specialty\" value={draft.clinician.specialty} onChange={(value) => updateClinician(\"specialty\", value)} />\n <Field label=\"NPI\" required value={draft.clinician.npi} onChange={(value) => updateClinician(\"npi\", value)} />\n <Field label=\"Taxonomy\" optional value={draft.clinician.taxonomy || \"\"} onChange={(value) => updateClinician(\"taxonomy\", value)} />\n <Field label=\"License number\" optional 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><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Location name\" required value={draft.location.name} onChange={(value) => updateLocation(\"name\", value)} />\n <Field label=\"Street\" required value={draft.location.street} onChange={(value) => updateLocation(\"street\", value)} />\n <Field label=\"City\" required 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 value={draft.location.zip} onChange={(value) => updateLocation(\"zip\", value)} />\n <Field label=\"Place of service code\" required 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>Choose a billing profile, then review the codes and modifiers. Allowed amounts recalculate on save.</p></div><button type=\"button\" className=\"mb-native-button quiet\" disabled={!editable || draft.lineItems.length >= 50} onClick={() => setDraft((current) => ({ ...current, lineItems: [...current.lineItems, { code: \"\", modifiers: [], units: 1, charge: 0 }] }))}>+ Add line</button></div>\n {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: 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\" key={line.id || index}>\n <label className=\"mb-native-field\"><span>Procedure</span><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(\n [{ ...item, code }],\n inferPreset(current.lineItems),\n )[0];\n return { ...item, code, modifiers: presetLine?.modifiers || [] };\n });\n if (\n code &&\n index === lineItems.length - 1 &&\n lineItems.length < 50\n ) {\n lineItems.push({\n code: \"\",\n modifiers: [],\n units: 1,\n charge: 0,\n });\n }\n return { ...current, lineItems };\n });\n }}>{line.code && !PROCEDURES.some(([code]) => code === line.code) ? <option value={line.code}>{line.code}</option> : null}<option value=\"\">Select code…</option>{PROCEDURES.map(([code,label]) => <option value={code} key={code}>{code} — {label}</option>)}</select>{line.code ? <small>{PROCEDURES.find(([code]) => code === line.code)?.[1]}</small> : null}</label>\n <div className=\"mb-native-modifiers\"><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: 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\">{line.modifiers.map((modifier) => <button type=\"button\" disabled={!editable} key={modifier} onClick={() => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: item.modifiers.filter((value) => value !== modifier) } : item) }))}>-{modifier} ×</button>)}</div></div>\n <label className=\"mb-native-field\"><span>Units</span><input type=\"number\" min=\"1\" required disabled={!editable} value={line.units} onChange={(event) => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, units: Number(event.target.value) } : item) }))} /></label>\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 || draft.lineItems.length === 1} onClick={() => setDraft((current) => ({ ...current, lineItems: 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><span>{data.bill.attachments.length} files</span></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><span className=\"mb-native-eyebrow\">Delivery</span><h3>Submit this bill</h3><p>After submission, status, payments, denials, and resubmissions stay available here.</p></div>\n <fieldset><legend>Send via</legend>{([\"ebill\", \"fax\", \"mail\", \"email\"] as const).map((value) => <label key={value}><input type=\"radio\" name={routeName} value={value} checked={route === value} onChange={() => setRoute(value)} />{value === \"ebill\" ? \"E-bill\" : value.charAt(0).toUpperCase() + value.slice(1)}</label>)}</fieldset>\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 <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 !== \"\"} onClick={() => void handleSubmit()}>{busy === \"submit\" ? \"Submitting…\" : \"Submit bill\"}</button>\n </div>\n </section>\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?: MindBillAppearance;\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={appearanceStyle(appearance, style)}>\n <style>{NATIVE_BILL_REVIEW_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_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-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:2px;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 span{color:var(--mb-muted);font-size:12px;font-weight:500}\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","\"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\";\n\nconst DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nconst DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/status-session\";\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 billId: string;\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, bill-scoped 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({ billId, signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ billId }),\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}/embed/api/bill-timeline`, {\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 type { MindBillAppearance } from \"@mindbill/embed\";\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 BillReviewForm,\n BillStatusSummary,\n type BillReviewAttachment,\n type BillReviewData,\n type BillReviewDocumentType,\n type BillReviewFeatures,\n type BillReviewPayer,\n type BillReviewSaveInput,\n type BillSubmissionRoute,\n} from \"./native-bill-review\";\n\nconst DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nconst DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/bill-session\";\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type BillLifecycleActionId =\n | \"edit_and_submit\"\n | \"correct_and_resubmit\"\n | \"second_review\"\n | \"independent_bill_review\"\n | \"view_eor\"\n | \"post_payment\"\n | \"close\";\n\nexport type BillLifecycleAction = {\n id: BillLifecycleActionId;\n label: string;\n enabled: boolean;\n primary?: boolean;\n reason?: string;\n};\n\nexport type BillEorDocument = {\n id: string;\n filename: string;\n description: string | null;\n addedAt: string;\n contentUrl: string;\n};\n\nexport type BillLifecycleData = BillReviewData & {\n lifecycle: {\n state: string;\n nativeStatus: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n updatedAt?: string | null;\n actions: BillLifecycleAction[];\n };\n eors: BillEorDocument[];\n};\n\nexport type BillLifecycleSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillLifecycleSessionRequest = {\n billId: string;\n component: \"bill-review\";\n signal: AbortSignal;\n};\n\nexport type BillLifecycleSessionProvider = (\n request: BillLifecycleSessionRequest,\n) => Promise<BillLifecycleSession>;\n\nexport type CloseBillInput = { reason: string };\nexport type PostBillPaymentInput = {\n amount: number;\n method: \"check\" | \"eft\";\n checkNumber?: string;\n depositDate: string;\n note?: string;\n};\nexport type SubmitSecondReviewInput = {\n reason: string;\n payerClaimControlNumber: string;\n disputedAmount: number | undefined;\n attachmentIds: string[];\n route: BillSubmissionRoute;\n};\n\nexport type BillLifecycleClientOptions = {\n billId: string;\n /** Same-origin server route that mints a short-lived, bill-scoped session. */\n sessionEndpoint?: string | undefined;\n /** Advanced escape hatch for a custom session exchange. */\n getSession?: BillLifecycleSessionProvider | undefined;\n apiBaseUrl?: string | undefined;\n fetch?: typeof globalThis.fetch | undefined;\n};\n\nexport type BillLifecycleClient = {\n getLifecycle: (signal?: AbortSignal) => Promise<BillLifecycleData>;\n searchClaimsAdministrators: (query: string) => Promise<BillReviewPayer[]>;\n saveReview: (input: BillReviewSaveInput) => Promise<BillLifecycleData>;\n submitBill: (\n input: BillReviewSaveInput,\n route: BillSubmissionRoute,\n ) => Promise<BillLifecycleData>;\n addAttachment: (\n file: File,\n documentType: BillReviewDocumentType,\n description?: string,\n ) => Promise<BillLifecycleData>;\n removeAttachment: (attachmentId: string) => Promise<BillLifecycleData>;\n getAttachment: (attachmentId: string) => Promise<Blob>;\n getEor: (documentId: string) => Promise<Blob>;\n closeBill: (input: CloseBillInput) => Promise<BillLifecycleData>;\n postPayment: (input: PostBillPaymentInput) => Promise<BillLifecycleData>;\n submitSecondReview: (\n input: SubmitSecondReviewInput,\n ) => Promise<BillLifecycleData>;\n startCorrection: () => Promise<{\n replacementBillId: string;\n data: BillLifecycleData;\n }>;\n clearSession: () => void;\n};\n\nexport type UseBillLifecycleOptions = BillLifecycleClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillLifecycleData | null;\n onBillIdChange?: (\n billId: string,\n previousBillId: string,\n ) => void | Promise<void>;\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 saveReview: BillLifecycleClient[\"saveReview\"];\n submitBill: BillLifecycleClient[\"submitBill\"];\n addAttachment: BillLifecycleClient[\"addAttachment\"];\n removeAttachment: BillLifecycleClient[\"removeAttachment\"];\n openAttachment: (attachment: BillReviewAttachment) => Promise<void>;\n openEor: (document: BillEorDocument) => Promise<void>;\n closeBill: BillLifecycleClient[\"closeBill\"];\n postPayment: BillLifecycleClient[\"postPayment\"];\n submitSecondReview: BillLifecycleClient[\"submitSecondReview\"];\n startCorrection: () => Promise<BillLifecycleData>;\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; message?: unknown; error?: unknown }).detail\n ?? (body as { message?: unknown }).message\n ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction isSessionFresh(session: BillLifecycleSession | 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): BillLifecycleSession {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The billing 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(\n \"The billing session endpoint did not return a browser session token.\",\n );\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 normalizeLifecycle(value: unknown): BillLifecycleData {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The billing service returned an invalid bill lifecycle.\");\n }\n const data = value as Partial<BillLifecycleData>;\n if (\n !data.bill\n || !data.patient\n || !data.injury\n || !data.lifecycle\n || !Array.isArray(data.lifecycle.actions)\n || !Array.isArray(data.eors)\n ) {\n throw new Error(\"The billing service returned an invalid bill lifecycle.\");\n }\n return data as BillLifecycleData;\n}\n\nfunction idempotencyKey(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n return `mb-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n\n/**\n * Browser-safe client for the complete bill lifecycle. The only long-lived\n * secret remains on the partner server; this client uses a short-lived,\n * origin-bound session scoped to one bill.\n */\nexport function createBillLifecycleClient({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillLifecycleClientOptions): BillLifecycleClient {\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: BillLifecycleSession | null = null;\n let sessionRequest: Promise<BillLifecycleSession> | null = null;\n\n const mintSession = async (\n signal: AbortSignal,\n force = false,\n ): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n if (!force && sessionRequest) return sessionRequest;\n const pending = getSession\n ? getSession({ billId, component: \"bill-review\", signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ billId, component: \"bill-review\" }),\n signal,\n }).then(async (response) => {\n if (!response.ok) {\n throw await responseError(\n response,\n \"The billing session could not be created.\",\n );\n }\n return response.json();\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 request = async (\n path: string,\n init: RequestInit = {},\n providedSignal?: AbortSignal,\n ): Promise<Response> => {\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 const perform = (current: BillLifecycleSession) => {\n const base = (current.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n const headers = new Headers(init.headers);\n headers.set(\"authorization\", `Bearer ${current.token}`);\n return fetcher(`${base}${path}`, { ...init, headers, signal });\n };\n let response = await perform(browserSession);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(signal, true);\n response = await perform(browserSession);\n }\n return response;\n };\n\n const loadLifecycle = async (signal?: AbortSignal) => {\n const response = await request(\"/embed/api/bill-lifecycle\", {}, signal);\n if (!response.ok) {\n throw await responseError(response, \"Bill lifecycle could not be loaded.\");\n }\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const searchClaimsAdministrators = async (\n query: string,\n ): Promise<BillReviewPayer[]> => {\n const response = await request(\n `/embed/api/bill-review/payers?q=${encodeURIComponent(query)}`,\n );\n if (!response.ok) {\n throw await responseError(\n response,\n \"Claims administrator search is unavailable.\",\n );\n }\n const body = await response.json() as { results?: unknown };\n if (!Array.isArray(body.results)) {\n throw new Error(\"Claims administrator search returned an invalid response.\");\n }\n return body.results.flatMap((value): BillReviewPayer[] => {\n if (!value || typeof value !== \"object\") return [];\n const payer = value as Partial<BillReviewPayer>;\n if (typeof payer.id !== \"string\" || typeof payer.name !== \"string\") {\n return [];\n }\n return [{\n id: payer.id,\n name: payer.name,\n ...(typeof payer.hasElectronic === \"boolean\"\n ? { hasElectronic: payer.hasElectronic }\n : {}),\n ...(Array.isArray(payer.states)\n ? { states: payer.states.filter((state): state is string => typeof state === \"string\") }\n : {}),\n }];\n });\n };\n\n const mutation = async (\n path: string,\n init: RequestInit,\n fallback: string,\n ) => {\n const headers = new Headers(init.headers);\n headers.set(\"idempotency-key\", idempotencyKey());\n const response = await request(path, { ...init, headers });\n if (!response.ok) throw await responseError(response, fallback);\n return response;\n };\n\n const action = async (\n input: Record<string, unknown>,\n fallback: string,\n ): Promise<BillLifecycleData> => {\n const response = await mutation(\n \"/embed/api/bill-lifecycle/actions\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n },\n fallback,\n );\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const saveReview = async (\n input: BillReviewSaveInput,\n ): Promise<BillLifecycleData> => {\n await mutation(\n \"/embed/api/bill-review\",\n {\n method: \"PATCH\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n },\n \"Bill changes could not be saved.\",\n );\n return loadLifecycle();\n };\n\n return {\n clearSession() {\n session = null;\n sessionRequest = null;\n },\n getLifecycle: loadLifecycle,\n searchClaimsAdministrators,\n saveReview,\n async submitBill(input, route) {\n await saveReview(input);\n await mutation(\n \"/embed/api/bill-review/submit\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ route }),\n },\n \"Bill could not be submitted.\",\n );\n return loadLifecycle();\n },\n async addAttachment(file, documentType, description) {\n const body = new FormData();\n body.set(\"file\", file);\n body.set(\"documentType\", documentType);\n if (description) body.set(\"description\", description);\n await mutation(\n \"/embed/api/bill-review/attachments\",\n { method: \"POST\", body },\n \"Document could not be attached.\",\n );\n return loadLifecycle();\n },\n async removeAttachment(attachmentId) {\n await mutation(\n `/embed/api/bill-review/attachments/${encodeURIComponent(attachmentId)}`,\n { method: \"DELETE\" },\n \"Document could not be removed.\",\n );\n return loadLifecycle();\n },\n async getAttachment(attachmentId) {\n const response = await request(\n `/embed/api/bill-review/attachments/${encodeURIComponent(attachmentId)}`,\n );\n if (!response.ok) {\n throw await responseError(response, \"Document could not be opened.\");\n }\n return response.blob();\n },\n async getEor(documentId) {\n const response = await request(\n `/embed/api/bill-lifecycle/eor/${encodeURIComponent(documentId)}`,\n );\n if (!response.ok) throw await responseError(response, \"EOR could not be opened.\");\n return response.blob();\n },\n closeBill(input) {\n return action({ action: \"close\", ...input }, \"Bill could not be closed.\");\n },\n postPayment(input) {\n return action(\n { action: \"post_payment\", ...input, checkNumber: input.checkNumber ?? \"\" },\n \"Payment could not be posted.\",\n );\n },\n submitSecondReview(input) {\n return action(\n { action: \"second_review\", ...input },\n \"Second Review could not be submitted.\",\n );\n },\n async startCorrection() {\n const response = await mutation(\n \"/embed/api/bill-lifecycle/actions\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ action: \"start_correction\" }),\n },\n \"Correction draft could not be created.\",\n );\n const body = await response.json() as {\n replacementBillId?: unknown;\n data?: unknown;\n };\n if (typeof body.replacementBillId !== \"string\") {\n throw new Error(\"The billing service did not return the correction bill ID.\");\n }\n return {\n replacementBillId: body.replacementBillId,\n data: normalizeLifecycle(body.data),\n };\n },\n };\n}\n\nfunction openPdf(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.download = filename;\n link.click();\n window.setTimeout(() => URL.revokeObjectURL(url), 60_000);\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 initialData = null,\n onBillIdChange,\n fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [billId, setBillId] = useState(providedBillId);\n const [data, setData] = useState<BillLifecycleData | 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 [isMutating, setIsMutating] = useState(false);\n const mounted = useRef(true);\n\n useEffect(() => {\n setBillId(providedBillId);\n setData(initialData);\n setError(null);\n }, [initialData, providedBillId]);\n\n const client = useMemo(() => createBillLifecycleClient({\n billId,\n sessionEndpoint,\n getSession,\n apiBaseUrl,\n fetch: fetchOverride,\n }), [apiBaseUrl, billId, fetchOverride, getSession, sessionEndpoint]);\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) return;\n 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\n ? window.setInterval(() => void refresh(), refreshInterval)\n : 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 <T extends BillLifecycleData,>(\n task: () => Promise<T>,\n ): Promise<T> => {\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\n ? cause\n : 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 saveReview = useCallback(\n (input: BillReviewSaveInput) => mutate(() => client.saveReview(input)),\n [client, mutate],\n );\n const searchClaimsAdministrators = useCallback(\n (query: string) => client.searchClaimsAdministrators(query),\n [client],\n );\n const submitBill = useCallback(\n (input: BillReviewSaveInput, route: BillSubmissionRoute) =>\n mutate(() => client.submitBill(input, route)),\n [client, mutate],\n );\n const addAttachment = useCallback(\n (file: File, type: BillReviewDocumentType, description?: string) =>\n mutate(() => client.addAttachment(file, type, description)),\n [client, mutate],\n );\n const removeAttachment = useCallback(\n (attachmentId: string) => mutate(() => client.removeAttachment(attachmentId)),\n [client, mutate],\n );\n const closeBill = useCallback(\n (input: CloseBillInput) => mutate(() => client.closeBill(input)),\n [client, mutate],\n );\n const postPayment = useCallback(\n (input: PostBillPaymentInput) => mutate(() => client.postPayment(input)),\n [client, mutate],\n );\n const submitSecondReview = useCallback(\n (input: SubmitSecondReviewInput) =>\n mutate(() => client.submitSecondReview(input)),\n [client, mutate],\n );\n const startCorrection = useCallback(async () => {\n setIsMutating(true);\n setError(null);\n try {\n const result = await client.startCorrection();\n const previousBillId = billId;\n await onBillIdChange?.(result.replacementBillId, previousBillId);\n setBillId(result.replacementBillId);\n setData(result.data);\n return result.data;\n } catch (cause) {\n const nextError = cause instanceof Error\n ? cause\n : new Error(\"Correction draft could not be created.\");\n setError(nextError);\n throw nextError;\n } finally {\n setIsMutating(false);\n }\n }, [billId, client, onBillIdChange]);\n const openAttachment = useCallback(async (attachment: BillReviewAttachment) => {\n openPdf(await client.getAttachment(attachment.id), attachment.filename);\n }, [client]);\n const openEor = useCallback(async (document: BillEorDocument) => {\n openPdf(await client.getEor(document.id), document.filename);\n }, [client]);\n\n return {\n billId,\n data,\n error,\n isLoading,\n isRefreshing,\n isMutating,\n refresh,\n searchClaimsAdministrators,\n saveReview,\n submitBill,\n addAttachment,\n removeAttachment,\n openAttachment,\n openEor,\n closeBill,\n postPayment,\n submitSecondReview,\n startCorrection,\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillAppearance;\n features?: BillReviewFeatures;\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 = \"\" | \"correction\" | \"second_review\" | \"payment\" | \"close\";\n\nfunction dateInputValue(): string {\n const now = new Date();\n const offset = now.getTimezoneOffset() * 60_000;\n return new Date(now.getTime() - offset).toISOString().slice(0, 10);\n}\n\nfunction appearanceStyle(\n appearance: MindBillAppearance | undefined,\n style: CSSProperties | undefined,\n): CSSProperties {\n return {\n ...(appearance?.accentColor ? { \"--mb-accent\": appearance.accentColor } : {}),\n ...(appearance?.textColor ? { \"--mb-text\": appearance.textColor } : {}),\n ...(appearance?.mutedColor ? { \"--mb-muted\": appearance.mutedColor } : {}),\n ...(appearance?.borderColor ? { \"--mb-border\": appearance.borderColor } : {}),\n ...(appearance?.backgroundColor ? { \"--mb-soft\": appearance.backgroundColor } : {}),\n ...(appearance?.surfaceColor ? { \"--mb-surface\": appearance.surfaceColor } : {}),\n ...(appearance?.fontFamily ? { \"--mb-font\": appearance.fontFamily } : {}),\n ...style,\n } as CSSProperties;\n}\n\nfunction SupportingDocumentControl({\n disabled,\n onAdd,\n}: {\n disabled: boolean;\n onAdd: (\n file: File,\n type: BillReviewDocumentType,\n description?: string,\n ) => Promise<unknown>;\n}): ReactElement {\n const [file, setFile] = useState<File | null>(null);\n const [type, setType] = useState<BillReviewDocumentType>(\"appeal\");\n const [busy, setBusy] = useState(false);\n return <div className=\"mb-lifecycle-upload\">\n <select aria-label=\"Supporting document type\" value={type} disabled={disabled || busy} onChange={(event) => setType(event.target.value as BillReviewDocumentType)}>\n <option value=\"appeal\">Second Review support</option>\n <option value=\"final_report\">Final report</option>\n <option value=\"proof_of_service\">Proof of service</option>\n <option value=\"letter_of_attestation\">Letter of attestation</option>\n <option value=\"form_122\">DWC Form 122</option>\n <option value=\"w9\">W-9</option>\n <option value=\"other\">Other supporting document</option>\n </select>\n <input aria-label=\"Choose supporting PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={disabled || busy} onChange={(event) => setFile(event.target.files?.[0] ?? null)} />\n <button type=\"button\" className=\"mb-lifecycle-button secondary\" disabled={disabled || busy || !file} onClick={() => {\n if (!file) return;\n setBusy(true);\n void onAdd(file, type)\n .then(() => setFile(null))\n .catch(() => undefined)\n .finally(() => setBusy(false));\n }}>{busy ? \"Attaching…\" : \"Attach PDF\"}</button>\n </div>;\n}\n\nexport function ConnectedBillLifecycle({\n appearance,\n features,\n className,\n style,\n loadingFallback,\n errorFallback,\n onChanged,\n ...options\n}: ConnectedBillLifecycleProps): ReactElement {\n const lifecycle = useBillLifecycle(options);\n const { data } = lifecycle;\n const [panel, setPanel] = useState<Panel>(\"\");\n const [notice, setNotice] = useState(\"\");\n const [closeReason, setCloseReason] = useState(\"\");\n const [payment, setPayment] = useState<PostBillPaymentInput>({\n amount: 0,\n method: \"check\",\n checkNumber: \"\",\n depositDate: dateInputValue(),\n note: \"\",\n });\n const [review, setReview] = useState<SubmitSecondReviewInput>({\n reason: \"\",\n payerClaimControlNumber: \"\",\n disputedAmount: undefined,\n attachmentIds: [],\n route: \"ebill\",\n });\n const lastData = useRef<BillLifecycleData | null>(null);\n\n useEffect(() => {\n if (!data || data === lastData.current) return;\n lastData.current = data;\n onChanged?.(data);\n setPayment((current) => ({\n ...current,\n amount: current.amount > 0 ? current.amount : data.bill.balanceDue,\n }));\n setReview((current) => ({\n ...current,\n disputedAmount: current.disputedAmount ?? data.bill.balanceDue,\n attachmentIds: current.attachmentIds.length\n ? current.attachmentIds.filter((id) => data.bill.attachments.some((doc) => doc.id === id))\n : data.bill.attachments.map((doc) => doc.id),\n }));\n }, [data, onChanged]);\n\n if (lifecycle.isLoading && !data) {\n return <>{loadingFallback ?? <div className=\"mb-lifecycle-loading\">Loading billing…</div>}</>;\n }\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 actionMap = new Map(data.lifecycle.actions.map((action) => [action.id, action]));\n const has = (id: BillLifecycleActionId) => actionMap.get(id);\n const selectPanel = (next: Panel) => {\n setNotice(\"\");\n setPanel((current) => current === next ? \"\" : next);\n };\n const complete = async (message: string, task: () => Promise<unknown>) => {\n setNotice(\"\");\n try {\n await task();\n setPanel(\"\");\n setNotice(message);\n } catch {\n // The hook keeps the actionable error visible in this component.\n }\n };\n const actionButtons = data.lifecycle.actions\n .filter((action) => action.id !== \"edit_and_submit\" && action.id !== \"view_eor\" && action.id !== \"independent_bill_review\")\n .map((action) => ({\n ...action,\n onClick: () => {\n if (!action.enabled) return;\n if (action.id === \"correct_and_resubmit\") selectPanel(\"correction\");\n if (action.id === \"second_review\") selectPanel(\"second_review\");\n if (action.id === \"post_payment\") selectPanel(\"payment\");\n if (action.id === \"close\") selectPanel(\"close\");\n },\n disabled: !action.enabled || lifecycle.isMutating,\n }));\n\n const canEditAndSubmit = Boolean(has(\"edit_and_submit\"));\n\n return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={appearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n {canEditAndSubmit\n ? <BillReviewForm\n data={data}\n {...(appearance ? { appearance } : {})}\n {...(features ? { features } : {})}\n disabled={lifecycle.isMutating}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onSave={lifecycle.saveReview}\n onSubmit={async (input, route) => { await complete(\"Bill submitted.\", () => lifecycle.submitBill(input, route)); }}\n onAddAttachment={async (file, type, description) => { await lifecycle.addAttachment(file, type, description); }}\n onRemoveAttachment={async (attachmentId) => { await lifecycle.removeAttachment(attachmentId); }}\n onOpenAttachment={(attachment) => void lifecycle.openAttachment(attachment).catch(() => undefined)}\n />\n : <BillStatusSummary\n status={data.lifecycle.state}\n submittedAt={data.lifecycle.submittedAt ?? null}\n agingDays={data.lifecycle.agingDays ?? null}\n updatedAt={data.lifecycle.updatedAt ?? null}\n totalCharge={data.bill.totalCharge}\n totalPaid={data.bill.totalPaid}\n balanceDue={data.bill.balanceDue}\n actions={actionButtons}\n {...(appearance ? { appearance } : {})}\n />}\n\n <div className=\"mb-lifecycle-toolbar\">\n <div>\n <strong>Bill #{data.bill.billNumber}</strong>\n <span>{lifecycle.isRefreshing ? \"Refreshing…\" : \"Status and actions update automatically.\"}</span>\n </div>\n <div className=\"mb-lifecycle-toolbar-actions\">\n {has(\"view_eor\") ? <button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => document.getElementById(`mb-eors-${data.bill.id}`)?.scrollIntoView({ behavior: \"smooth\", block: \"center\" })}>View EOR</button> : null}\n {canEditAndSubmit && has(\"close\") ? <button type=\"button\" className=\"mb-lifecycle-button quiet\" onClick={() => selectPanel(\"close\")}>Close bill</button> : null}\n </div>\n </div>\n\n {data.eors.length ? <section className=\"mb-lifecycle-card\" id={`mb-eors-${data.bill.id}`}>\n <header><div><h3>Explanation of Review</h3><p>Review the payer response and original PDF before posting payment.</p></div><span>{data.eors.length} PDF{data.eors.length === 1 ? \"\" : \"s\"}</span></header>\n <ul className=\"mb-lifecycle-documents\">{data.eors.map((eor) => <li key={eor.id}><div><strong>{eor.filename}</strong><span>{eor.description || `Added ${new Date(eor.addedAt).toLocaleDateString()}`}</span></div><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => void lifecycle.openEor(eor).catch(() => undefined)}>View PDF</button></li>)}</ul>\n </section> : null}\n\n {has(\"independent_bill_review\") ? <div className=\"mb-lifecycle-info\"><strong>{has(\"independent_bill_review\")?.label}</strong><span>{has(\"independent_bill_review\")?.reason}</span></div> : null}\n\n {panel === \"correction\" ? <section className=\"mb-lifecycle-panel\">\n <div><h3>Correct and resubmit</h3><p>A new correction draft will preserve this rejected bill in history. Review the copied values before submitting.</p></div>\n <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} onClick={() => void complete(\"Correction draft created.\", lifecycle.startCorrection)}>{lifecycle.isMutating ? \"Creating…\" : \"Create correction draft\"}</button></div>\n </section> : null}\n\n {panel === \"second_review\" ? <section className=\"mb-lifecycle-panel wide\">\n <div><h3>Submit Second Review</h3><p>State why payment is disputed, confirm the payer control number, and choose the supporting documents to send.</p></div>\n <div className=\"mb-lifecycle-fields two\">\n <label><span>Reason for Second Review</span><textarea required value={review.reason} onChange={(event) => setReview((current) => ({ ...current, reason: event.target.value }))} /></label>\n <div className=\"mb-lifecycle-fields\">\n <label><span>Payer claim control number</span><input required value={review.payerClaimControlNumber} onChange={(event) => setReview((current) => ({ ...current, payerClaimControlNumber: event.target.value }))} /></label>\n <label><span>Disputed amount</span><input type=\"number\" min=\"0.01\" step=\"0.01\" value={review.disputedAmount ?? \"\"} onChange={(event) => setReview((current) => ({ ...current, disputedAmount: event.target.value ? Number(event.target.value) : undefined }))} /></label>\n <label><span>Send via</span><select value={review.route} onChange={(event) => setReview((current) => ({ ...current, route: event.target.value as BillSubmissionRoute }))}><option value=\"ebill\">E-bill</option><option value=\"fax\">Fax</option><option value=\"mail\">Mail</option><option value=\"email\">Email</option></select></label>\n </div>\n </div>\n <fieldset className=\"mb-lifecycle-packet\"><legend>Supporting packet</legend>{data.bill.attachments.map((attachment) => <label key={attachment.id}><input type=\"checkbox\" checked={review.attachmentIds.includes(attachment.id)} onChange={(event) => setReview((current) => ({ ...current, attachmentIds: event.target.checked ? [...current.attachmentIds, attachment.id] : current.attachmentIds.filter((id) => id !== attachment.id) }))} /><span><strong>{attachment.filename}</strong><small>{attachment.description || attachment.documentType}</small></span><button type=\"button\" onClick={() => void lifecycle.openAttachment(attachment).catch(() => undefined)}>View</button><button type=\"button\" aria-label={`Remove ${attachment.filename}`} onClick={() => void lifecycle.removeAttachment(attachment.id).catch(() => undefined)}>×</button></label>)}</fieldset>\n <SupportingDocumentControl disabled={lifecycle.isMutating} onAdd={async (file, type, description) => {\n const next = await lifecycle.addAttachment(file, type, description);\n setReview((current) => ({\n ...current,\n attachmentIds: Array.from(new Set([\n ...current.attachmentIds,\n ...next.bill.attachments.map((attachment) => attachment.id),\n ])),\n }));\n }} />\n <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 || !review.reason.trim() || !review.payerClaimControlNumber.trim()} onClick={() => void complete(\"Second Review submitted.\", () => lifecycle.submitSecondReview(review))}>{lifecycle.isMutating ? \"Submitting…\" : \"Submit Second Review\"}</button></div>\n </section> : null}\n\n {panel === \"payment\" ? <section className=\"mb-lifecycle-panel\">\n <div><h3>Post payment</h3><p>Record funds shown on the EOR. The balance updates and the bill closes automatically when configured.</p></div>\n <div className=\"mb-lifecycle-fields two\">\n <label><span>Amount</span><input type=\"number\" min=\"0.01\" max={data.bill.balanceDue} step=\"0.01\" required value={payment.amount || \"\"} onChange={(event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) }))} /></label>\n <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>\n <label><span>{payment.method === \"check\" ? \"Check number\" : \"EFT reference\"}</span><input value={payment.checkNumber} onChange={(event) => setPayment((current) => ({ ...current, checkNumber: event.target.value }))} /></label>\n <label><span>Deposit date</span><input type=\"date\" required value={payment.depositDate} onChange={(event) => setPayment((current) => ({ ...current, depositDate: event.target.value }))} /></label>\n <label className=\"full\"><span>Note <small>Optional</small></span><input value={payment.note} onChange={(event) => setPayment((current) => ({ ...current, note: event.target.value }))} /></label>\n </div>\n <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.depositDate} onClick={() => void complete(\"Payment posted.\", () => lifecycle.postPayment(payment))}>{lifecycle.isMutating ? \"Posting…\" : \"Post payment\"}</button></div>\n </section> : null}\n\n {panel === \"close\" ? <section className=\"mb-lifecycle-panel danger\">\n <div><h3>Close bill</h3><p>Closing removes this bill from active A/R. Any remaining balance will be written off and the original lifecycle is preserved.</p></div>\n <label><span>Reason for closing</span><textarea required value={closeReason} onChange={(event) => setCloseReason(event.target.value)} /></label>\n <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 danger\" disabled={lifecycle.isMutating || !closeReason.trim()} onClick={() => void complete(\"Bill closed.\", () => lifecycle.closeBill({ reason: closeReason }))}>{lifecycle.isMutating ? \"Closing…\" : \"Close bill\"}</button></div>\n </section> : 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{--mb-accent:#238dbd;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;display:grid;gap:14px;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-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface)}.mb-lifecycle-toolbar>div:first-child{display:grid;gap:2px}.mb-lifecycle-toolbar span,.mb-lifecycle-card p,.mb-lifecycle-panel p,.mb-lifecycle-info span{color:var(--mb-muted)}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-button{min-height:38px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:8px 13px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-lifecycle-button.quiet{border-color:transparent;background:transparent;color:var(--mb-muted)}.mb-lifecycle-button.danger{border-color:#b63d35;background:#b63d35;color:#fff}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-card,.mb-lifecycle-panel{padding:18px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:18px}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0}.mb-lifecycle-card header>span{padding:5px 8px;border-radius:999px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;text-transform:uppercase}.mb-lifecycle-documents{list-style:none;margin:12px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid}.mb-lifecycle-documents span{color:var(--mb-muted);font-size:12px}.mb-lifecycle-info{display:grid;gap:3px;padding:13px 15px;border:1px solid #cddfe5;border-radius:10px;background:var(--mb-soft)}.mb-lifecycle-panel{display:grid;gap:16px;box-shadow:0 14px 38px rgba(30,56,68,.08)}.mb-lifecycle-panel.danger{border-color:#ecc5c2}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:12px;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{width:100%;min-height:42px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:9px 11px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:12px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:12px;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr auto 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-upload{display:grid;grid-template-columns:220px 1fr auto;align-items:end;gap:10px;padding:12px;border-radius:9px;background:var(--mb-soft)}.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}@media(max-width:760px){.mb-lifecycle-toolbar,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{justify-content:start}.mb-lifecycle-fields.two,.mb-lifecycle-upload{grid-template-columns:1fr}.mb-lifecycle-documents li{align-items:start}.mb-lifecycle-packet>label{grid-template-columns:auto 1fr auto}}\n`;\n"],"mappings":"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","names":["useEffect","useRef","value","useEffect","useMemo","useRef","useState","jsx","jsxs","useMemo","useState","useRef","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","DEFAULT_REFRESH_INTERVAL","responseError","isSessionFresh","normalizeSession","request","useState","useRef","useEffect","useMemo","useCallback","document","appearanceStyle","useRef","useEffect"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/native-bill-review.tsx","../src/connected-bill-status.tsx","../src/connected-bill-lifecycle.tsx"],"sourcesContent":["\"use client\";\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}\nexport function MindBillBillFromReport(\n props: MindBillWidgetProps,\n): ReactElement {\n return widget(\"mindbill-bill-from-report\", props);\n}\nexport function MindBillCollections(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-collections\", props);\n}\nexport function MindBillOnboarding(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-onboarding\", props);\n}\n\nexport const HostedBillTimeline = MindBillBillTimeline;\nexport const HostedBillReview = MindBillBillReview;\nexport const HostedBillFromReport = MindBillBillFromReport;\nexport const HostedCollections = MindBillCollections;\nexport const HostedOnboarding = MindBillOnboarding;\n\nexport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport {\n BillReviewForm,\n BillStatusSummary,\n buildBillReviewSaveInput,\n} from \"./native-bill-review\";\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 ConnectedBillStatus,\n createBillStatusClient,\n useBillStatus,\n} from \"./connected-bill-status\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillEorDocument,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n CloseBillInput,\n ConnectedBillLifecycleProps,\n PostBillPaymentInput,\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","\"use client\";\n\nimport type { MindBillAppearance } from \"@mindbill/embed\";\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 id?: string;\n name: string;\n taxId: 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 id?: string;\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 id?: string;\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};\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};\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 billNumber: string | number;\n status: string;\n transmissionState?: string;\n dos: string;\n dosEnd?: string | null;\n placeOfServiceId?: string;\n authorizationNumber?: string | null;\n billingProviderId?: string;\n renderingProviderId?: string;\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 options?: {\n billingProviders?: BillReviewBillingProvider[];\n renderingProviders?: BillReviewClinician[];\n locations?: BillReviewLocation[];\n };\n};\n\nexport type BillReviewSaveInput = {\n claimsAdminId: 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 billingProviderId?: string;\n billingProvider?: Omit<BillReviewBillingProvider, \"id\">;\n renderingProviderId?: string;\n renderingProvider?: Omit<BillReviewClinician, \"id\">;\n placeOfServiceId?: string;\n placeOfService?: Omit<BillReviewLocation, \"id\">;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n }>;\n};\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\n\nexport type BillReviewFormProps = {\n data: BillReviewData;\n onSave: (input: BillReviewSaveInput) => Promise<BillReviewData | void>;\n onSubmit: (\n input: BillReviewSaveInput,\n route: BillSubmissionRoute,\n ) => Promise<void>;\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?: MindBillAppearance;\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 withoutId<T extends { id?: string }>(value: T): Omit<T, \"id\"> {\n const result = { ...value };\n delete result.id;\n return result;\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: data.bill.lineItems.map((line) => ({ ...line })),\n };\n}\n\nexport function buildBillReviewSaveInput(\n draft: BillReviewDraft,\n): BillReviewSaveInput {\n return {\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 ...(draft.billingProvider.id\n ? { billingProviderId: draft.billingProvider.id }\n : {}),\n billingProvider: withoutId(draft.billingProvider),\n ...(draft.clinician.id\n ? { renderingProviderId: draft.clinician.id }\n : {}),\n renderingProvider: withoutId(draft.clinician),\n ...(draft.location.id ? { placeOfServiceId: draft.location.id } : {}),\n placeOfService: withoutId(draft.location),\n lineItems: draft.lineItems.filter((line) => line.code.trim()).map(({ id, code, modifiers, units }) => ({\n ...(id ? { id } : {}),\n code: code.trim().toUpperCase(),\n modifiers,\n units,\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 appearanceStyle(\n appearance: MindBillAppearance | undefined,\n style: CSSProperties | undefined,\n): CSSProperties {\n return {\n ...(appearance?.accentColor\n ? { \"--mb-accent\": appearance.accentColor }\n : {}),\n ...(appearance?.textColor ? { \"--mb-text\": appearance.textColor } : {}),\n ...(appearance?.mutedColor\n ? { \"--mb-muted\": appearance.mutedColor }\n : {}),\n ...(appearance?.borderColor\n ? { \"--mb-border\": appearance.borderColor }\n : {}),\n ...(appearance?.backgroundColor\n ? { \"--mb-soft\": appearance.backgroundColor }\n : {}),\n ...(appearance?.surfaceColor\n ? { \"--mb-surface\": appearance.surfaceColor }\n : {}),\n ...(appearance?.fontFamily\n ? { \"--mb-font\": appearance.fontFamily }\n : {}),\n ...style,\n } as CSSProperties;\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} {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}</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 onSave,\n onSubmit,\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 [route, setRoute] = useState<BillSubmissionRoute>(\"ebill\");\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 routeName = useId();\n const editable = 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 (!draft.dos) result.push(\"Date of service\");\n if (!draft.billingProvider.name.trim()) result.push(\"Practice name\");\n if (!draft.billingProvider.taxId.trim()) 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 return result;\n }, [adjFormatValid, 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 void run(\"save\", async () => {\n const updated = await onSave(buildBillReviewSaveInput(draft));\n if (updated) setDraft(toDraft(updated));\n });\n };\n\n const handleSubmit = () =>\n run(\"submit\", () => onSubmit(buildBillReviewSaveInput(draft), route));\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={appearanceStyle(appearance, style)}\n onSubmit={handleSave}\n >\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <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>\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 {draft.claimsAdminId ? <span>Selected</span> : <span>Required</span>}\n </div>\n <div className=\"mb-native-payer-picker\">\n <Combobox\n label=\"Insurance company or claims administrator\"\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>Prefilled from the case. Correct anything that should print differently on this bill.</p></div><span>Editable</span></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><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Practice name\" required value={draft.billingProvider.name} onChange={(value) => updateBillingProvider(\"name\", value)} />\n <Field label=\"Tax ID\" required value={draft.billingProvider.taxId} onChange={(value) => updateBillingProvider(\"taxId\", value)} />\n <Field label=\"Billing NPI\" required value={draft.billingProvider.npi} onChange={(value) => updateBillingProvider(\"npi\", value)} />\n <Field label=\"Phone\" optional value={draft.billingProvider.phone || \"\"} onChange={(value) => updateBillingProvider(\"phone\", value)} />\n <Field label=\"Billing street\" required value={draft.billingProvider.billingStreet || \"\"} onChange={(value) => updateBillingProvider(\"billingStreet\", value)} />\n <Field label=\"City\" required 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 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><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Clinician name\" required value={draft.clinician.name} onChange={(value) => updateClinician(\"name\", value)} />\n <Field label=\"Specialty\" value={draft.clinician.specialty} onChange={(value) => updateClinician(\"specialty\", value)} />\n <Field label=\"NPI\" required value={draft.clinician.npi} onChange={(value) => updateClinician(\"npi\", value)} />\n <Field label=\"Taxonomy\" optional value={draft.clinician.taxonomy || \"\"} onChange={(value) => updateClinician(\"taxonomy\", value)} />\n <Field label=\"License number\" optional 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><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Location name\" required value={draft.location.name} onChange={(value) => updateLocation(\"name\", value)} />\n <Field label=\"Street\" required value={draft.location.street} onChange={(value) => updateLocation(\"street\", value)} />\n <Field label=\"City\" required 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 value={draft.location.zip} onChange={(value) => updateLocation(\"zip\", value)} />\n <Field label=\"Place of service code\" required 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>Choose a billing profile, then review the codes and modifiers. Allowed amounts recalculate on save.</p></div><button type=\"button\" className=\"mb-native-button quiet\" disabled={!editable || draft.lineItems.length >= 50} onClick={() => setDraft((current) => ({ ...current, lineItems: [...current.lineItems, { code: \"\", modifiers: [], units: 1, charge: 0 }] }))}>+ Add line</button></div>\n {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: 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\" key={line.id || index}>\n <label className=\"mb-native-field\"><span>Procedure</span><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(\n [{ ...item, code }],\n inferPreset(current.lineItems),\n )[0];\n return { ...item, code, modifiers: presetLine?.modifiers || [] };\n });\n if (\n code &&\n index === lineItems.length - 1 &&\n lineItems.length < 50\n ) {\n lineItems.push({\n code: \"\",\n modifiers: [],\n units: 1,\n charge: 0,\n });\n }\n return { ...current, lineItems };\n });\n }}>{line.code && !PROCEDURES.some(([code]) => code === line.code) ? <option value={line.code}>{line.code}</option> : null}<option value=\"\">Select code…</option>{PROCEDURES.map(([code,label]) => <option value={code} key={code}>{code} — {label}</option>)}</select>{line.code ? <small>{PROCEDURES.find(([code]) => code === line.code)?.[1]}</small> : null}</label>\n <div className=\"mb-native-modifiers\"><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: 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\">{line.modifiers.map((modifier) => <button type=\"button\" disabled={!editable} key={modifier} onClick={() => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: item.modifiers.filter((value) => value !== modifier) } : item) }))}>-{modifier} ×</button>)}</div></div>\n <label className=\"mb-native-field\"><span>Units</span><input type=\"number\" min=\"1\" required disabled={!editable} value={line.units} onChange={(event) => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, units: Number(event.target.value) } : item) }))} /></label>\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 || draft.lineItems.length === 1} onClick={() => setDraft((current) => ({ ...current, lineItems: 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><span>{data.bill.attachments.length} files</span></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><span className=\"mb-native-eyebrow\">Delivery</span><h3>Submit this bill</h3><p>After submission, status, payments, denials, and resubmissions stay available here.</p></div>\n <fieldset><legend>Send via</legend>{([\"ebill\", \"fax\", \"mail\", \"email\"] as const).map((value) => <label key={value}><input type=\"radio\" name={routeName} value={value} checked={route === value} onChange={() => setRoute(value)} />{value === \"ebill\" ? \"E-bill\" : value.charAt(0).toUpperCase() + value.slice(1)}</label>)}</fieldset>\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 <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 !== \"\"} onClick={() => void handleSubmit()}>{busy === \"submit\" ? \"Submitting…\" : \"Submit bill\"}</button>\n </div>\n </section>\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?: MindBillAppearance;\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={appearanceStyle(appearance, style)}>\n <style>{NATIVE_BILL_REVIEW_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_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-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","\"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\";\n\nconst DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nconst DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/status-session\";\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 billId: string;\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, bill-scoped 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({ billId, signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ billId }),\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}/embed/api/bill-timeline`, {\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 type { MindBillAppearance } from \"@mindbill/embed\";\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 BillReviewForm,\n BillStatusSummary,\n type BillReviewAttachment,\n type BillReviewData,\n type BillReviewDocumentType,\n type BillReviewFeatures,\n type BillReviewPayer,\n type BillReviewSaveInput,\n type BillSubmissionRoute,\n} from \"./native-bill-review\";\n\nconst DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nconst DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/bill-session\";\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type BillLifecycleActionId =\n | \"edit_and_submit\"\n | \"correct_and_resubmit\"\n | \"second_review\"\n | \"independent_bill_review\"\n | \"view_eor\"\n | \"post_payment\"\n | \"close\";\n\nexport type BillLifecycleAction = {\n id: BillLifecycleActionId;\n label: string;\n enabled: boolean;\n primary?: boolean;\n reason?: string;\n};\n\nexport type BillEorDocument = {\n id: string;\n filename: string;\n description: string | null;\n addedAt: string;\n contentUrl: string;\n};\n\nexport type BillLifecycleData = BillReviewData & {\n lifecycle: {\n state: string;\n nativeStatus: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n updatedAt?: string | null;\n actions: BillLifecycleAction[];\n };\n eors: BillEorDocument[];\n};\n\nexport type BillLifecycleSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillLifecycleSessionRequest = {\n billId: string;\n component: \"bill-review\";\n signal: AbortSignal;\n};\n\nexport type BillLifecycleSessionProvider = (\n request: BillLifecycleSessionRequest,\n) => Promise<BillLifecycleSession>;\n\nexport type CloseBillInput = { reason: string };\nexport type PostBillPaymentInput = {\n amount: number;\n method: \"check\" | \"eft\";\n checkNumber?: string;\n depositDate: string;\n note?: string;\n};\nexport type SubmitSecondReviewInput = {\n reason: string;\n payerClaimControlNumber: string;\n disputedAmount: number | undefined;\n attachmentIds: string[];\n route: BillSubmissionRoute;\n};\n\nexport type BillLifecycleClientOptions = {\n billId: string;\n /** Same-origin server route that mints a short-lived, bill-scoped session. */\n sessionEndpoint?: string | undefined;\n /** Advanced escape hatch for a custom session exchange. */\n getSession?: BillLifecycleSessionProvider | undefined;\n apiBaseUrl?: string | undefined;\n fetch?: typeof globalThis.fetch | undefined;\n};\n\nexport type BillLifecycleClient = {\n getLifecycle: (signal?: AbortSignal) => Promise<BillLifecycleData>;\n searchClaimsAdministrators: (\n query: string,\n claimNumber?: string,\n ) => Promise<BillReviewPayer[]>;\n saveReview: (input: BillReviewSaveInput) => Promise<BillLifecycleData>;\n submitBill: (\n input: BillReviewSaveInput,\n route: BillSubmissionRoute,\n ) => Promise<BillLifecycleData>;\n addAttachment: (\n file: File,\n documentType: BillReviewDocumentType,\n description?: string,\n ) => Promise<BillLifecycleData>;\n removeAttachment: (attachmentId: string) => Promise<BillLifecycleData>;\n getAttachment: (attachmentId: string) => Promise<Blob>;\n getEor: (documentId: string) => Promise<Blob>;\n closeBill: (input: CloseBillInput) => Promise<BillLifecycleData>;\n postPayment: (input: PostBillPaymentInput) => Promise<BillLifecycleData>;\n submitSecondReview: (\n input: SubmitSecondReviewInput,\n ) => Promise<BillLifecycleData>;\n startCorrection: () => Promise<{\n replacementBillId: string;\n data: BillLifecycleData;\n }>;\n clearSession: () => void;\n};\n\nexport type UseBillLifecycleOptions = BillLifecycleClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillLifecycleData | null;\n onBillIdChange?: (\n billId: string,\n previousBillId: string,\n ) => void | Promise<void>;\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 saveReview: BillLifecycleClient[\"saveReview\"];\n submitBill: BillLifecycleClient[\"submitBill\"];\n addAttachment: BillLifecycleClient[\"addAttachment\"];\n removeAttachment: BillLifecycleClient[\"removeAttachment\"];\n openAttachment: (attachment: BillReviewAttachment) => Promise<void>;\n openEor: (document: BillEorDocument) => Promise<void>;\n closeBill: BillLifecycleClient[\"closeBill\"];\n postPayment: BillLifecycleClient[\"postPayment\"];\n submitSecondReview: BillLifecycleClient[\"submitSecondReview\"];\n startCorrection: () => Promise<BillLifecycleData>;\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; message?: unknown; error?: unknown }).detail\n ?? (body as { message?: unknown }).message\n ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction isSessionFresh(session: BillLifecycleSession | 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): BillLifecycleSession {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The billing 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(\n \"The billing session endpoint did not return a browser session token.\",\n );\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 normalizeLifecycle(value: unknown): BillLifecycleData {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The billing service returned an invalid bill lifecycle.\");\n }\n const data = value as Partial<BillLifecycleData>;\n if (\n !data.bill\n || !data.patient\n || !data.injury\n || !data.lifecycle\n || !Array.isArray(data.lifecycle.actions)\n || !Array.isArray(data.eors)\n ) {\n throw new Error(\"The billing service returned an invalid bill lifecycle.\");\n }\n return data as BillLifecycleData;\n}\n\nfunction idempotencyKey(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n return `mb-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n\n/**\n * Browser-safe client for the complete bill lifecycle. The only long-lived\n * secret remains on the partner server; this client uses a short-lived,\n * origin-bound session scoped to one bill.\n */\nexport function createBillLifecycleClient({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillLifecycleClientOptions): BillLifecycleClient {\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: BillLifecycleSession | null = null;\n let sessionRequest: Promise<BillLifecycleSession> | null = null;\n\n const mintSession = async (\n signal: AbortSignal,\n force = false,\n ): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n if (!force && sessionRequest) return sessionRequest;\n const pending = getSession\n ? getSession({ billId, component: \"bill-review\", signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ billId, component: \"bill-review\" }),\n signal,\n }).then(async (response) => {\n if (!response.ok) {\n throw await responseError(\n response,\n \"The billing session could not be created.\",\n );\n }\n return response.json();\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 request = async (\n path: string,\n init: RequestInit = {},\n providedSignal?: AbortSignal,\n ): Promise<Response> => {\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 const perform = (current: BillLifecycleSession) => {\n const base = (current.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n const headers = new Headers(init.headers);\n headers.set(\"authorization\", `Bearer ${current.token}`);\n return fetcher(`${base}${path}`, { ...init, headers, signal });\n };\n let response = await perform(browserSession);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(signal, true);\n response = await perform(browserSession);\n }\n return response;\n };\n\n const loadLifecycle = async (signal?: AbortSignal) => {\n const response = await request(\"/embed/api/bill-lifecycle\", {}, signal);\n if (!response.ok) {\n throw await responseError(response, \"Bill lifecycle could not be loaded.\");\n }\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const searchClaimsAdministrators = async (\n query: string,\n claimNumber?: string,\n ): Promise<BillReviewPayer[]> => {\n const params = new URLSearchParams();\n if (query.trim()) params.set(\"q\", query.trim());\n if (claimNumber?.trim()) params.set(\"claimNumber\", claimNumber.trim());\n const response = await request(\n `/embed/api/bill-review/payers?${params.toString()}`,\n );\n if (!response.ok) {\n throw await responseError(\n response,\n \"Claims administrator search is unavailable.\",\n );\n }\n const body = await response.json() as { results?: unknown };\n if (!Array.isArray(body.results)) {\n throw new Error(\"Claims administrator search returned an invalid response.\");\n }\n return body.results.flatMap((value): BillReviewPayer[] => {\n if (!value || typeof value !== \"object\") return [];\n const payer = value as Partial<BillReviewPayer>;\n if (typeof payer.id !== \"string\" || typeof payer.name !== \"string\") {\n return [];\n }\n return [{\n id: payer.id,\n name: payer.name,\n ...(typeof payer.hasElectronic === \"boolean\"\n ? { hasElectronic: payer.hasElectronic }\n : {}),\n ...(Array.isArray(payer.states)\n ? { states: payer.states.filter((state): state is string => typeof state === \"string\") }\n : {}),\n ...([\"high\", \"medium\", \"directory\"].includes(payer.confidence ?? \"\")\n ? {\n confidence: payer.confidence as NonNullable<\n BillReviewPayer[\"confidence\"]\n >,\n }\n : {}),\n ...(typeof payer.recommended === \"boolean\"\n ? { recommended: payer.recommended }\n : {}),\n ...(Array.isArray(payer.signals)\n ? {\n signals: payer.signals.flatMap((signal) => {\n if (!signal || typeof signal !== \"object\") return [];\n const candidate = signal as {\n kind?: unknown;\n state?: unknown;\n label?: unknown;\n };\n if (\n ![\"name\", \"claim_number\"].includes(String(candidate.kind)) ||\n ![\"match\", \"warning\"].includes(String(candidate.state)) ||\n typeof candidate.label !== \"string\"\n ) return [];\n return [{\n kind: candidate.kind as \"name\" | \"claim_number\",\n state: candidate.state as \"match\" | \"warning\",\n label: candidate.label,\n }];\n }),\n }\n : {}),\n }];\n });\n };\n\n const mutation = async (\n path: string,\n init: RequestInit,\n fallback: string,\n ) => {\n const headers = new Headers(init.headers);\n headers.set(\"idempotency-key\", idempotencyKey());\n const response = await request(path, { ...init, headers });\n if (!response.ok) throw await responseError(response, fallback);\n return response;\n };\n\n const action = async (\n input: Record<string, unknown>,\n fallback: string,\n ): Promise<BillLifecycleData> => {\n const response = await mutation(\n \"/embed/api/bill-lifecycle/actions\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n },\n fallback,\n );\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const saveReview = async (\n input: BillReviewSaveInput,\n ): Promise<BillLifecycleData> => {\n await mutation(\n \"/embed/api/bill-review\",\n {\n method: \"PATCH\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n },\n \"Bill changes could not be saved.\",\n );\n return loadLifecycle();\n };\n\n return {\n clearSession() {\n session = null;\n sessionRequest = null;\n },\n getLifecycle: loadLifecycle,\n searchClaimsAdministrators,\n saveReview,\n async submitBill(input, route) {\n await saveReview(input);\n await mutation(\n \"/embed/api/bill-review/submit\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ route }),\n },\n \"Bill could not be submitted.\",\n );\n return loadLifecycle();\n },\n async addAttachment(file, documentType, description) {\n const body = new FormData();\n body.set(\"file\", file);\n body.set(\"documentType\", documentType);\n if (description) body.set(\"description\", description);\n await mutation(\n \"/embed/api/bill-review/attachments\",\n { method: \"POST\", body },\n \"Document could not be attached.\",\n );\n return loadLifecycle();\n },\n async removeAttachment(attachmentId) {\n await mutation(\n `/embed/api/bill-review/attachments/${encodeURIComponent(attachmentId)}`,\n { method: \"DELETE\" },\n \"Document could not be removed.\",\n );\n return loadLifecycle();\n },\n async getAttachment(attachmentId) {\n const response = await request(\n `/embed/api/bill-review/attachments/${encodeURIComponent(attachmentId)}`,\n );\n if (!response.ok) {\n throw await responseError(response, \"Document could not be opened.\");\n }\n return response.blob();\n },\n async getEor(documentId) {\n const response = await request(\n `/embed/api/bill-lifecycle/eor/${encodeURIComponent(documentId)}`,\n );\n if (!response.ok) throw await responseError(response, \"EOR could not be opened.\");\n return response.blob();\n },\n closeBill(input) {\n return action({ action: \"close\", ...input }, \"Bill could not be closed.\");\n },\n postPayment(input) {\n return action(\n { action: \"post_payment\", ...input, checkNumber: input.checkNumber ?? \"\" },\n \"Payment could not be posted.\",\n );\n },\n submitSecondReview(input) {\n return action(\n { action: \"second_review\", ...input },\n \"Second Review could not be submitted.\",\n );\n },\n async startCorrection() {\n const response = await mutation(\n \"/embed/api/bill-lifecycle/actions\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ action: \"start_correction\" }),\n },\n \"Correction draft could not be created.\",\n );\n const body = await response.json() as {\n replacementBillId?: unknown;\n data?: unknown;\n };\n if (typeof body.replacementBillId !== \"string\") {\n throw new Error(\"The billing service did not return the correction bill ID.\");\n }\n return {\n replacementBillId: body.replacementBillId,\n data: normalizeLifecycle(body.data),\n };\n },\n };\n}\n\nfunction openPdf(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.download = filename;\n link.click();\n window.setTimeout(() => URL.revokeObjectURL(url), 60_000);\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 initialData = null,\n onBillIdChange,\n fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [billId, setBillId] = useState(providedBillId);\n const [data, setData] = useState<BillLifecycleData | 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 [isMutating, setIsMutating] = useState(false);\n const mounted = useRef(true);\n\n useEffect(() => {\n setBillId(providedBillId);\n setData(initialData);\n setError(null);\n }, [initialData, providedBillId]);\n\n const client = useMemo(() => createBillLifecycleClient({\n billId,\n sessionEndpoint,\n getSession,\n apiBaseUrl,\n fetch: fetchOverride,\n }), [apiBaseUrl, billId, fetchOverride, getSession, sessionEndpoint]);\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) return;\n 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\n ? window.setInterval(() => void refresh(), refreshInterval)\n : 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 <T extends BillLifecycleData,>(\n task: () => Promise<T>,\n ): Promise<T> => {\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\n ? cause\n : 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 saveReview = useCallback(\n (input: BillReviewSaveInput) => mutate(() => client.saveReview(input)),\n [client, mutate],\n );\n const searchClaimsAdministrators = useCallback(\n (query: string, claimNumber?: string) =>\n client.searchClaimsAdministrators(query, claimNumber),\n [client],\n );\n const submitBill = useCallback(\n (input: BillReviewSaveInput, route: BillSubmissionRoute) =>\n mutate(() => client.submitBill(input, route)),\n [client, mutate],\n );\n const addAttachment = useCallback(\n (file: File, type: BillReviewDocumentType, description?: string) =>\n mutate(() => client.addAttachment(file, type, description)),\n [client, mutate],\n );\n const removeAttachment = useCallback(\n (attachmentId: string) => mutate(() => client.removeAttachment(attachmentId)),\n [client, mutate],\n );\n const closeBill = useCallback(\n (input: CloseBillInput) => mutate(() => client.closeBill(input)),\n [client, mutate],\n );\n const postPayment = useCallback(\n (input: PostBillPaymentInput) => mutate(() => client.postPayment(input)),\n [client, mutate],\n );\n const submitSecondReview = useCallback(\n (input: SubmitSecondReviewInput) =>\n mutate(() => client.submitSecondReview(input)),\n [client, mutate],\n );\n const startCorrection = useCallback(async () => {\n setIsMutating(true);\n setError(null);\n try {\n const result = await client.startCorrection();\n const previousBillId = billId;\n await onBillIdChange?.(result.replacementBillId, previousBillId);\n setBillId(result.replacementBillId);\n setData(result.data);\n return result.data;\n } catch (cause) {\n const nextError = cause instanceof Error\n ? cause\n : new Error(\"Correction draft could not be created.\");\n setError(nextError);\n throw nextError;\n } finally {\n setIsMutating(false);\n }\n }, [billId, client, onBillIdChange]);\n const openAttachment = useCallback(async (attachment: BillReviewAttachment) => {\n openPdf(await client.getAttachment(attachment.id), attachment.filename);\n }, [client]);\n const openEor = useCallback(async (document: BillEorDocument) => {\n openPdf(await client.getEor(document.id), document.filename);\n }, [client]);\n\n return {\n billId,\n data,\n error,\n isLoading,\n isRefreshing,\n isMutating,\n refresh,\n searchClaimsAdministrators,\n saveReview,\n submitBill,\n addAttachment,\n removeAttachment,\n openAttachment,\n openEor,\n closeBill,\n postPayment,\n submitSecondReview,\n startCorrection,\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillAppearance;\n features?: BillReviewFeatures;\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 = \"\" | \"correction\" | \"second_review\" | \"payment\" | \"close\";\n\nfunction dateInputValue(): string {\n const now = new Date();\n const offset = now.getTimezoneOffset() * 60_000;\n return new Date(now.getTime() - offset).toISOString().slice(0, 10);\n}\n\nfunction appearanceStyle(\n appearance: MindBillAppearance | undefined,\n style: CSSProperties | undefined,\n): CSSProperties {\n return {\n ...(appearance?.accentColor ? { \"--mb-accent\": appearance.accentColor } : {}),\n ...(appearance?.textColor ? { \"--mb-text\": appearance.textColor } : {}),\n ...(appearance?.mutedColor ? { \"--mb-muted\": appearance.mutedColor } : {}),\n ...(appearance?.borderColor ? { \"--mb-border\": appearance.borderColor } : {}),\n ...(appearance?.backgroundColor ? { \"--mb-soft\": appearance.backgroundColor } : {}),\n ...(appearance?.surfaceColor ? { \"--mb-surface\": appearance.surfaceColor } : {}),\n ...(appearance?.fontFamily ? { \"--mb-font\": appearance.fontFamily } : {}),\n ...style,\n } as CSSProperties;\n}\n\nfunction SupportingDocumentControl({\n disabled,\n onAdd,\n}: {\n disabled: boolean;\n onAdd: (\n file: File,\n type: BillReviewDocumentType,\n description?: string,\n ) => Promise<unknown>;\n}): ReactElement {\n const [file, setFile] = useState<File | null>(null);\n const [type, setType] = useState<BillReviewDocumentType>(\"appeal\");\n const [busy, setBusy] = useState(false);\n return <div className=\"mb-lifecycle-upload\">\n <select aria-label=\"Supporting document type\" value={type} disabled={disabled || busy} onChange={(event) => setType(event.target.value as BillReviewDocumentType)}>\n <option value=\"appeal\">Second Review support</option>\n <option value=\"final_report\">Final report</option>\n <option value=\"proof_of_service\">Proof of service</option>\n <option value=\"letter_of_attestation\">Letter of attestation</option>\n <option value=\"form_122\">DWC Form 122</option>\n <option value=\"w9\">W-9</option>\n <option value=\"other\">Other supporting document</option>\n </select>\n <input aria-label=\"Choose supporting PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={disabled || busy} onChange={(event) => setFile(event.target.files?.[0] ?? null)} />\n <button type=\"button\" className=\"mb-lifecycle-button secondary\" disabled={disabled || busy || !file} onClick={() => {\n if (!file) return;\n setBusy(true);\n void onAdd(file, type)\n .then(() => setFile(null))\n .catch(() => undefined)\n .finally(() => setBusy(false));\n }}>{busy ? \"Attaching…\" : \"Attach PDF\"}</button>\n </div>;\n}\n\nexport function ConnectedBillLifecycle({\n appearance,\n features,\n className,\n style,\n loadingFallback,\n errorFallback,\n onChanged,\n ...options\n}: ConnectedBillLifecycleProps): ReactElement {\n const lifecycle = useBillLifecycle(options);\n const { data } = lifecycle;\n const [panel, setPanel] = useState<Panel>(\"\");\n const [notice, setNotice] = useState(\"\");\n const [closeReason, setCloseReason] = useState(\"\");\n const [payment, setPayment] = useState<PostBillPaymentInput>({\n amount: 0,\n method: \"check\",\n checkNumber: \"\",\n depositDate: dateInputValue(),\n note: \"\",\n });\n const [review, setReview] = useState<SubmitSecondReviewInput>({\n reason: \"\",\n payerClaimControlNumber: \"\",\n disputedAmount: undefined,\n attachmentIds: [],\n route: \"ebill\",\n });\n const lastData = useRef<BillLifecycleData | null>(null);\n\n useEffect(() => {\n if (!data || data === lastData.current) return;\n lastData.current = data;\n onChanged?.(data);\n setPayment((current) => ({\n ...current,\n amount: current.amount > 0 ? current.amount : data.bill.balanceDue,\n }));\n setReview((current) => ({\n ...current,\n disputedAmount: current.disputedAmount ?? data.bill.balanceDue,\n attachmentIds: current.attachmentIds.length\n ? current.attachmentIds.filter((id) => data.bill.attachments.some((doc) => doc.id === id))\n : data.bill.attachments.map((doc) => doc.id),\n }));\n }, [data, onChanged]);\n\n if (lifecycle.isLoading && !data) {\n return <>{loadingFallback ?? <div className=\"mb-lifecycle-loading\">Loading billing…</div>}</>;\n }\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 actionMap = new Map(data.lifecycle.actions.map((action) => [action.id, action]));\n const has = (id: BillLifecycleActionId) => actionMap.get(id);\n const selectPanel = (next: Panel) => {\n setNotice(\"\");\n setPanel((current) => current === next ? \"\" : next);\n };\n const complete = async (message: string, task: () => Promise<unknown>) => {\n setNotice(\"\");\n try {\n await task();\n setPanel(\"\");\n setNotice(message);\n } catch {\n // The hook keeps the actionable error visible in this component.\n }\n };\n const actionButtons = data.lifecycle.actions\n .filter((action) => action.id !== \"edit_and_submit\" && action.id !== \"view_eor\" && action.id !== \"independent_bill_review\")\n .map((action) => ({\n ...action,\n onClick: () => {\n if (!action.enabled) return;\n if (action.id === \"correct_and_resubmit\") selectPanel(\"correction\");\n if (action.id === \"second_review\") selectPanel(\"second_review\");\n if (action.id === \"post_payment\") selectPanel(\"payment\");\n if (action.id === \"close\") selectPanel(\"close\");\n },\n disabled: !action.enabled || lifecycle.isMutating,\n }));\n\n const canEditAndSubmit = Boolean(has(\"edit_and_submit\"));\n\n return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={appearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n {canEditAndSubmit\n ? <BillReviewForm\n data={data}\n {...(appearance ? { appearance } : {})}\n {...(features ? { features } : {})}\n disabled={lifecycle.isMutating}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onSave={lifecycle.saveReview}\n onSubmit={async (input, route) => { await complete(\"Bill submitted.\", () => lifecycle.submitBill(input, route)); }}\n onAddAttachment={async (file, type, description) => { await lifecycle.addAttachment(file, type, description); }}\n onRemoveAttachment={async (attachmentId) => { await lifecycle.removeAttachment(attachmentId); }}\n onOpenAttachment={(attachment) => void lifecycle.openAttachment(attachment).catch(() => undefined)}\n />\n : <BillStatusSummary\n status={data.lifecycle.state}\n submittedAt={data.lifecycle.submittedAt ?? null}\n agingDays={data.lifecycle.agingDays ?? null}\n updatedAt={data.lifecycle.updatedAt ?? null}\n totalCharge={data.bill.totalCharge}\n totalPaid={data.bill.totalPaid}\n balanceDue={data.bill.balanceDue}\n actions={actionButtons}\n {...(appearance ? { appearance } : {})}\n />}\n\n <div className=\"mb-lifecycle-toolbar\">\n <div>\n <strong>Bill #{data.bill.billNumber}</strong>\n <span>{lifecycle.isRefreshing ? \"Refreshing…\" : \"Status and actions update automatically.\"}</span>\n </div>\n <div className=\"mb-lifecycle-toolbar-actions\">\n {has(\"view_eor\") ? <button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => document.getElementById(`mb-eors-${data.bill.id}`)?.scrollIntoView({ behavior: \"smooth\", block: \"center\" })}>View EOR</button> : null}\n {canEditAndSubmit && has(\"close\") ? <button type=\"button\" className=\"mb-lifecycle-button quiet\" onClick={() => selectPanel(\"close\")}>Close bill</button> : null}\n </div>\n </div>\n\n {data.eors.length ? <section className=\"mb-lifecycle-card\" id={`mb-eors-${data.bill.id}`}>\n <header><div><h3>Explanation of Review</h3><p>Review the payer response and original PDF before posting payment.</p></div><span>{data.eors.length} PDF{data.eors.length === 1 ? \"\" : \"s\"}</span></header>\n <ul className=\"mb-lifecycle-documents\">{data.eors.map((eor) => <li key={eor.id}><div><strong>{eor.filename}</strong><span>{eor.description || `Added ${new Date(eor.addedAt).toLocaleDateString()}`}</span></div><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => void lifecycle.openEor(eor).catch(() => undefined)}>View PDF</button></li>)}</ul>\n </section> : null}\n\n {has(\"independent_bill_review\") ? <div className=\"mb-lifecycle-info\"><strong>{has(\"independent_bill_review\")?.label}</strong><span>{has(\"independent_bill_review\")?.reason}</span></div> : null}\n\n {panel === \"correction\" ? <section className=\"mb-lifecycle-panel\">\n <div><h3>Correct and resubmit</h3><p>A new correction draft will preserve this rejected bill in history. Review the copied values before submitting.</p></div>\n <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} onClick={() => void complete(\"Correction draft created.\", lifecycle.startCorrection)}>{lifecycle.isMutating ? \"Creating…\" : \"Create correction draft\"}</button></div>\n </section> : null}\n\n {panel === \"second_review\" ? <section className=\"mb-lifecycle-panel wide\">\n <div><h3>Submit Second Review</h3><p>State why payment is disputed, confirm the payer control number, and choose the supporting documents to send.</p></div>\n <div className=\"mb-lifecycle-fields two\">\n <label><span>Reason for Second Review</span><textarea required value={review.reason} onChange={(event) => setReview((current) => ({ ...current, reason: event.target.value }))} /></label>\n <div className=\"mb-lifecycle-fields\">\n <label><span>Payer claim control number</span><input required value={review.payerClaimControlNumber} onChange={(event) => setReview((current) => ({ ...current, payerClaimControlNumber: event.target.value }))} /></label>\n <label><span>Disputed amount</span><input type=\"number\" min=\"0.01\" step=\"0.01\" value={review.disputedAmount ?? \"\"} onChange={(event) => setReview((current) => ({ ...current, disputedAmount: event.target.value ? Number(event.target.value) : undefined }))} /></label>\n <label><span>Send via</span><select value={review.route} onChange={(event) => setReview((current) => ({ ...current, route: event.target.value as BillSubmissionRoute }))}><option value=\"ebill\">E-bill</option><option value=\"fax\">Fax</option><option value=\"mail\">Mail</option><option value=\"email\">Email</option></select></label>\n </div>\n </div>\n <fieldset className=\"mb-lifecycle-packet\"><legend>Supporting packet</legend>{data.bill.attachments.map((attachment) => <label key={attachment.id}><input type=\"checkbox\" checked={review.attachmentIds.includes(attachment.id)} onChange={(event) => setReview((current) => ({ ...current, attachmentIds: event.target.checked ? [...current.attachmentIds, attachment.id] : current.attachmentIds.filter((id) => id !== attachment.id) }))} /><span><strong>{attachment.filename}</strong><small>{attachment.description || attachment.documentType}</small></span><button type=\"button\" onClick={() => void lifecycle.openAttachment(attachment).catch(() => undefined)}>View</button><button type=\"button\" aria-label={`Remove ${attachment.filename}`} onClick={() => void lifecycle.removeAttachment(attachment.id).catch(() => undefined)}>×</button></label>)}</fieldset>\n <SupportingDocumentControl disabled={lifecycle.isMutating} onAdd={async (file, type, description) => {\n const next = await lifecycle.addAttachment(file, type, description);\n setReview((current) => ({\n ...current,\n attachmentIds: Array.from(new Set([\n ...current.attachmentIds,\n ...next.bill.attachments.map((attachment) => attachment.id),\n ])),\n }));\n }} />\n <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 || !review.reason.trim() || !review.payerClaimControlNumber.trim()} onClick={() => void complete(\"Second Review submitted.\", () => lifecycle.submitSecondReview(review))}>{lifecycle.isMutating ? \"Submitting…\" : \"Submit Second Review\"}</button></div>\n </section> : null}\n\n {panel === \"payment\" ? <section className=\"mb-lifecycle-panel\">\n <div><h3>Post payment</h3><p>Record funds shown on the EOR. The balance updates and the bill closes automatically when configured.</p></div>\n <div className=\"mb-lifecycle-fields two\">\n <label><span>Amount</span><input type=\"number\" min=\"0.01\" max={data.bill.balanceDue} step=\"0.01\" required value={payment.amount || \"\"} onChange={(event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) }))} /></label>\n <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>\n <label><span>{payment.method === \"check\" ? \"Check number\" : \"EFT reference\"}</span><input value={payment.checkNumber} onChange={(event) => setPayment((current) => ({ ...current, checkNumber: event.target.value }))} /></label>\n <label><span>Deposit date</span><input type=\"date\" required value={payment.depositDate} onChange={(event) => setPayment((current) => ({ ...current, depositDate: event.target.value }))} /></label>\n <label className=\"full\"><span>Note <small>Optional</small></span><input value={payment.note} onChange={(event) => setPayment((current) => ({ ...current, note: event.target.value }))} /></label>\n </div>\n <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.depositDate} onClick={() => void complete(\"Payment posted.\", () => lifecycle.postPayment(payment))}>{lifecycle.isMutating ? \"Posting…\" : \"Post payment\"}</button></div>\n </section> : null}\n\n {panel === \"close\" ? <section className=\"mb-lifecycle-panel danger\">\n <div><h3>Close bill</h3><p>Closing removes this bill from active A/R. Any remaining balance will be written off and the original lifecycle is preserved.</p></div>\n <label><span>Reason for closing</span><textarea required value={closeReason} onChange={(event) => setCloseReason(event.target.value)} /></label>\n <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 danger\" disabled={lifecycle.isMutating || !closeReason.trim()} onClick={() => void complete(\"Bill closed.\", () => lifecycle.closeBill({ reason: closeReason }))}>{lifecycle.isMutating ? \"Closing…\" : \"Close bill\"}</button></div>\n </section> : 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{--mb-accent:#238dbd;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;display:grid;gap:14px;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-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface)}.mb-lifecycle-toolbar>div:first-child{display:grid;gap:2px}.mb-lifecycle-toolbar span,.mb-lifecycle-card p,.mb-lifecycle-panel p,.mb-lifecycle-info span{color:var(--mb-muted)}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-button{min-height:38px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:8px 13px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-lifecycle-button.quiet{border-color:transparent;background:transparent;color:var(--mb-muted)}.mb-lifecycle-button.danger{border-color:#b63d35;background:#b63d35;color:#fff}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-card,.mb-lifecycle-panel{padding:18px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:18px}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0}.mb-lifecycle-card header>span{padding:5px 8px;border-radius:999px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;text-transform:uppercase}.mb-lifecycle-documents{list-style:none;margin:12px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid}.mb-lifecycle-documents span{color:var(--mb-muted);font-size:12px}.mb-lifecycle-info{display:grid;gap:3px;padding:13px 15px;border:1px solid #cddfe5;border-radius:10px;background:var(--mb-soft)}.mb-lifecycle-panel{display:grid;gap:16px;box-shadow:0 14px 38px rgba(30,56,68,.08)}.mb-lifecycle-panel.danger{border-color:#ecc5c2}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:12px;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{width:100%;min-height:42px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:9px 11px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:12px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:12px;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr auto 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-upload{display:grid;grid-template-columns:220px 1fr auto;align-items:end;gap:10px;padding:12px;border-radius:9px;background:var(--mb-soft)}.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}@media(max-width:760px){.mb-lifecycle-toolbar,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{justify-content:start}.mb-lifecycle-fields.two,.mb-lifecycle-upload{grid-template-columns:1fr}.mb-lifecycle-documents li{align-items:start}.mb-lifecycle-packet>label{grid-template-columns:auto 1fr auto}}\n`;\n"],"mappings":"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","names":["useEffect","useRef","value","useEffect","useMemo","useRef","useState","jsx","jsxs","useMemo","useState","useRef","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","DEFAULT_REFRESH_INTERVAL","responseError","isSessionFresh","normalizeSession","request","useState","useRef","useEffect","useMemo","useCallback","document","appearanceStyle","useRef","useEffect"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindbill/react",
3
- "version": "0.9.3",
3
+ "version": "0.9.4",
4
4
  "description": "Native React components and hosted workflows for MindBill billing",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",