@mindbill/browser 0.17.0 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/index.d.ts +83 -8
- package/dist/index.js +79 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -72,6 +72,26 @@ webhook correlation; keep `bill.externalId` as the idempotency and partner
|
|
|
72
72
|
correlation key. The first persisted bill is still the submitted immutable
|
|
73
73
|
snapshot—there is no draft mutation API.
|
|
74
74
|
|
|
75
|
+
If a submission is rejected, keep that same canonical `billId`. A correction
|
|
76
|
+
creates another immutable submission attempt under the logical bill; it does
|
|
77
|
+
not create a new partner-visible bill. Send the complete corrected snapshot
|
|
78
|
+
and the documents that should accompany the new attempt:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
await billing.resubmitBill({
|
|
82
|
+
reason: "Corrected the rejected service date.",
|
|
83
|
+
bill: correctedBill,
|
|
84
|
+
documents: correctedDocuments,
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
MindBill preserves the original attempt, rejection, corrected attempt, later
|
|
89
|
+
acknowledgements, EORs, and payments in one lifecycle. Each outbound attempt
|
|
90
|
+
gets the next patient-control-number suffix (`-1`, `-2`, `-3`, ...), while the
|
|
91
|
+
public `billId` remains stable. Rejection issues can include `fieldPaths`; use
|
|
92
|
+
them to call attention to implicated controls without treating the
|
|
93
|
+
clearinghouse response as a replacement for normal validation.
|
|
94
|
+
|
|
75
95
|
Pass `billId` for the submitted bill. An optional `resource: { billId }`
|
|
76
96
|
restriction makes the session usable for only that bill.
|
|
77
97
|
|
package/dist/index.d.ts
CHANGED
|
@@ -362,6 +362,8 @@ type BillClaimsAdministratorDirectory = {
|
|
|
362
362
|
type BillRejectionIssue = {
|
|
363
363
|
code?: string | null;
|
|
364
364
|
description: string;
|
|
365
|
+
/** Bill-submission field paths implicated by this issue. */
|
|
366
|
+
fieldPaths?: string[];
|
|
365
367
|
};
|
|
366
368
|
type BillRejection = {
|
|
367
369
|
reason: string;
|
|
@@ -425,14 +427,20 @@ type SubmitSecondReviewInput = {
|
|
|
425
427
|
/** SBR-1 box: whether the disputed service was authorized. */
|
|
426
428
|
serviceAuthorized?: boolean;
|
|
427
429
|
};
|
|
430
|
+
type ReportBillStatusId = "message_left" | "eor_pending" | "eor_sent" | "bill_not_on_file" | "forwarded";
|
|
431
|
+
type ReportBillStatusOption = {
|
|
432
|
+
id: ReportBillStatusId;
|
|
433
|
+
label: string;
|
|
434
|
+
description: string;
|
|
435
|
+
};
|
|
436
|
+
/** The five daisyBill-worded outcomes of a bill payment-status phone call. */
|
|
437
|
+
declare const REPORT_BILL_STATUS_OPTIONS: ReportBillStatusOption[];
|
|
428
438
|
/**
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
* outstanding bill. Posted through the generic lifecycle actions endpoint.
|
|
439
|
+
* Outcome of a phone call to the Claims Administrator / Bill Review vendor
|
|
440
|
+
* about an outstanding bill, recorded through the lifecycle actions endpoint.
|
|
432
441
|
*/
|
|
433
|
-
type
|
|
434
|
-
|
|
435
|
-
status: string;
|
|
442
|
+
type ReportBillStatusInput = {
|
|
443
|
+
status: ReportBillStatusId;
|
|
436
444
|
company?: string;
|
|
437
445
|
representativeName?: string;
|
|
438
446
|
representativeRole?: string;
|
|
@@ -440,8 +448,73 @@ type ReportBillStatusActionInput = {
|
|
|
440
448
|
callReference?: string;
|
|
441
449
|
note?: string;
|
|
442
450
|
};
|
|
451
|
+
/**
|
|
452
|
+
* Payload for the "report_bill_status" lifecycle action: records the outcome
|
|
453
|
+
* of a phone call to the Claims Administrator / Bill Review vendor about an
|
|
454
|
+
* outstanding bill. Posted through the generic lifecycle actions endpoint.
|
|
455
|
+
*/
|
|
456
|
+
type ReportBillStatusActionInput = ReportBillStatusInput & {
|
|
457
|
+
action: "report_bill_status";
|
|
458
|
+
};
|
|
459
|
+
/**
|
|
460
|
+
* Payload for the "send_duplicate" lifecycle action: resends the immutable
|
|
461
|
+
* submission packet, unchanged, over the selected delivery route — typically
|
|
462
|
+
* after the payer reports the bill is not on file.
|
|
463
|
+
*/
|
|
464
|
+
type SendDuplicateBillInput = {
|
|
465
|
+
route: BillSubmissionRoute;
|
|
466
|
+
destination?: SubmitBillInput["destination"];
|
|
467
|
+
attention?: string;
|
|
468
|
+
subject?: string;
|
|
469
|
+
note?: string;
|
|
470
|
+
/** CC recipients for the email route (at most 10). */
|
|
471
|
+
cc?: string[];
|
|
472
|
+
};
|
|
473
|
+
type ReportBillStatusContacts = {
|
|
474
|
+
claimsAdmin: {
|
|
475
|
+
name: string;
|
|
476
|
+
hoursOfOperation?: string;
|
|
477
|
+
phones: Array<{
|
|
478
|
+
label: string;
|
|
479
|
+
value: string;
|
|
480
|
+
}>;
|
|
481
|
+
} | null;
|
|
482
|
+
billReview: {
|
|
483
|
+
name: string;
|
|
484
|
+
phone?: string;
|
|
485
|
+
} | null;
|
|
486
|
+
};
|
|
487
|
+
/**
|
|
488
|
+
* Partner-safe "who to call" summary for the Report Bill Status flow, derived
|
|
489
|
+
* from the lifecycle delivery block (payer contacts + optional directory).
|
|
490
|
+
*/
|
|
491
|
+
declare function reportBillStatusContacts(delivery: BillLifecycleDelivery): ReportBillStatusContacts;
|
|
492
|
+
/**
|
|
493
|
+
* Default Second Bill Review dispute reason for an invalid med-legal denial.
|
|
494
|
+
* Prefilled (editable) in the SBR panel.
|
|
495
|
+
*/
|
|
496
|
+
declare const SECOND_REVIEW_REASON_TEMPLATE = "This is an appeal of the invalid denial of this med-legal bill; per LC \u00A74622 and the OMFS/MLFS, payment is due as billed.";
|
|
497
|
+
/** Days allowed to request Second Review after service of the denial EOR. */
|
|
498
|
+
declare const SECOND_REVIEW_WINDOW_DAYS = 90;
|
|
499
|
+
type SecondReviewDeadline = {
|
|
500
|
+
/** ISO date (yyyy-mm-dd) of the latest denial/EOR document. */
|
|
501
|
+
eorDate: string;
|
|
502
|
+
/** ISO date (yyyy-mm-dd) 90 days after the EOR date. */
|
|
503
|
+
deadline: string;
|
|
504
|
+
};
|
|
505
|
+
/**
|
|
506
|
+
* The 90-day Second Review window anchored on the latest EOR date, or null
|
|
507
|
+
* when the lifecycle data provides no parseable denial/EOR date.
|
|
508
|
+
*/
|
|
509
|
+
declare function secondReviewDeadline(eors: Array<Pick<BillEorDocument, "addedAt">>): SecondReviewDeadline | null;
|
|
510
|
+
/**
|
|
511
|
+
* A corrected immutable snapshot submitted as the next attempt on the same bill.
|
|
512
|
+
* The logical bill ID remains stable; only the submission/control-number attempt advances.
|
|
513
|
+
*/
|
|
443
514
|
type ResubmitBillInput = {
|
|
444
515
|
reason?: string;
|
|
516
|
+
bill: BrowserBillCreateInput;
|
|
517
|
+
documents?: BrowserBillSubmissionDocument[];
|
|
445
518
|
};
|
|
446
519
|
type SandboxSimulationScenario = "accepted" | "rejected" | "processed" | "denied" | "partial_payment" | "paid";
|
|
447
520
|
type SimulateSandboxBillInput = {
|
|
@@ -606,7 +679,9 @@ type BillLifecycleClient = {
|
|
|
606
679
|
reopenBill: (input: ReopenBillInput) => Promise<BillLifecycleData>;
|
|
607
680
|
postPayment: (input: PostBillPaymentInput) => Promise<BillLifecycleData>;
|
|
608
681
|
submitSecondReview: (input: SubmitSecondReviewInput) => Promise<BillLifecycleData>;
|
|
609
|
-
resubmitBill: (input
|
|
682
|
+
resubmitBill: (input: ResubmitBillInput) => Promise<BillLifecycleData>;
|
|
683
|
+
sendDuplicateBill: (input: SendDuplicateBillInput) => Promise<BillLifecycleData>;
|
|
684
|
+
reportBillStatus: (input: ReportBillStatusInput) => Promise<BillLifecycleData>;
|
|
610
685
|
simulateSandbox: (input: SimulateSandboxBillInput) => Promise<BillLifecycleData>;
|
|
611
686
|
clearSession: () => void;
|
|
612
687
|
};
|
|
@@ -766,4 +841,4 @@ declare function billTasksAgingBucketIndex(ageDays: number, buckets?: BillTasksA
|
|
|
766
841
|
*/
|
|
767
842
|
declare function buildBillTasksDashboard(items: BillTasksDashboardItem[], sections: BillTasksDashboardSectionInput[], buckets?: BillTasksAgingBucket[]): BillTasksDashboardData;
|
|
768
843
|
|
|
769
|
-
export { BILL_TASKS_AGING_BUCKETS, type BillActivityRecord, type BillClaimsAdministratorContact, type BillClaimsAdministratorDirectory, type BillClaimsAdministratorMailingAddress, type BillClaimsAdministratorPattern, type BillDeliveryOption, type BillDeliveryOptions, type BillDeliveryPreviewInput, type BillDiagnosisCode, type BillEorDocument, type BillHistoryEntry, type BillLifecycleAction, type BillLifecycleActionId, type BillLifecycleClient, type BillLifecycleClientOptions, type BillLifecycleData, type BillLifecycleDelivery, type BillLifecycleSession, type BillLifecycleSessionProvider, type BillLifecycleSessionRequest, type BillPaymentRecord, type BillPostalPlace, type BillReferenceClient, type BillReferenceClientOptions, type BillRejection, type BillRejectionIssue, type BillRemittanceSummary, type BillReviewAttachment, type BillReviewBillingProvider, type BillReviewClaimPatternStatus, type BillReviewClinician, type BillReviewData, type BillReviewDocumentType, type BillReviewFeatures, type BillReviewLineItem, type BillReviewLocation, type BillReviewPayer, type BillReviewSaveInput, type BillSubmissionClient, type BillSubmissionClientOptions, type BillSubmissionRoute, type BillTasksAgingBucket, type BillTasksDashboardData, type BillTasksDashboardItem, type BillTasksDashboardRow, type BillTasksDashboardSection, type BillTasksDashboardSectionInput, type BillTasksDashboardTone, type BrowserBillAddress, type BrowserBillCreateInput, type BrowserBillSubmissionDocument, type BrowserBillSubmissionInput, type BrowserBillSubmissionResult, type BrowserSubmittedBill, type CloseBillInput, DEFAULT_API_BASE_URL, DEFAULT_SESSION_ENDPOINT, type OrganizationBillingProviderInput, type OrganizationChecklistItem, type OrganizationClient, type OrganizationClientOptions, type OrganizationLocationInput, type OrganizationPracticeIdentity, type OrganizationProfileData, type PostBillPaymentInput, type ReopenBillInput, type ReportBillStatusActionInput, type ResubmitBillInput, type SandboxSimulationScenario, type SimulateSandboxBillInput, type SubmitBillInput, type SubmitSecondReviewInput, billTasksAgingBucketIndex, buildBillTasksDashboard, createBillLifecycleClient, createBillReferenceClient, createBillSubmissionClient, createOrganizationClient, sanitizeBillReviewSaveInput };
|
|
844
|
+
export { BILL_TASKS_AGING_BUCKETS, type BillActivityRecord, type BillClaimsAdministratorContact, type BillClaimsAdministratorDirectory, type BillClaimsAdministratorMailingAddress, type BillClaimsAdministratorPattern, type BillDeliveryOption, type BillDeliveryOptions, type BillDeliveryPreviewInput, type BillDiagnosisCode, type BillEorDocument, type BillHistoryEntry, type BillLifecycleAction, type BillLifecycleActionId, type BillLifecycleClient, type BillLifecycleClientOptions, type BillLifecycleData, type BillLifecycleDelivery, type BillLifecycleSession, type BillLifecycleSessionProvider, type BillLifecycleSessionRequest, type BillPaymentRecord, type BillPostalPlace, type BillReferenceClient, type BillReferenceClientOptions, type BillRejection, type BillRejectionIssue, type BillRemittanceSummary, type BillReviewAttachment, type BillReviewBillingProvider, type BillReviewClaimPatternStatus, type BillReviewClinician, type BillReviewData, type BillReviewDocumentType, type BillReviewFeatures, type BillReviewLineItem, type BillReviewLocation, type BillReviewPayer, type BillReviewSaveInput, type BillSubmissionClient, type BillSubmissionClientOptions, type BillSubmissionRoute, type BillTasksAgingBucket, type BillTasksDashboardData, type BillTasksDashboardItem, type BillTasksDashboardRow, type BillTasksDashboardSection, type BillTasksDashboardSectionInput, type BillTasksDashboardTone, type BrowserBillAddress, type BrowserBillCreateInput, type BrowserBillSubmissionDocument, type BrowserBillSubmissionInput, type BrowserBillSubmissionResult, type BrowserSubmittedBill, type CloseBillInput, DEFAULT_API_BASE_URL, DEFAULT_SESSION_ENDPOINT, type OrganizationBillingProviderInput, type OrganizationChecklistItem, type OrganizationClient, type OrganizationClientOptions, type OrganizationLocationInput, type OrganizationPracticeIdentity, type OrganizationProfileData, type PostBillPaymentInput, REPORT_BILL_STATUS_OPTIONS, type ReopenBillInput, type ReportBillStatusActionInput, type ReportBillStatusContacts, type ReportBillStatusId, type ReportBillStatusInput, type ReportBillStatusOption, type ResubmitBillInput, SECOND_REVIEW_REASON_TEMPLATE, SECOND_REVIEW_WINDOW_DAYS, type SandboxSimulationScenario, type SecondReviewDeadline, type SendDuplicateBillInput, type SimulateSandboxBillInput, type SubmitBillInput, type SubmitSecondReviewInput, billTasksAgingBucketIndex, buildBillTasksDashboard, createBillLifecycleClient, createBillReferenceClient, createBillSubmissionClient, createOrganizationClient, reportBillStatusContacts, sanitizeBillReviewSaveInput, secondReviewDeadline };
|
package/dist/index.js
CHANGED
|
@@ -87,6 +87,72 @@ function sanitizeBillReviewSaveInput(input) {
|
|
|
87
87
|
]))
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
|
+
var REPORT_BILL_STATUS_OPTIONS = [
|
|
91
|
+
{
|
|
92
|
+
id: "message_left",
|
|
93
|
+
label: "Message Left Requesting Bill Payment Status",
|
|
94
|
+
description: "Claims Administrator/Bill Review representative unavailable."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: "eor_pending",
|
|
98
|
+
label: "Explanation of Review (EOR) Pending",
|
|
99
|
+
description: "Claims Administrator/Bill Review reported the bill is still in process and an EOR has not been generated or sent."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: "eor_sent",
|
|
103
|
+
label: "Explanation of Review (EOR) Sent",
|
|
104
|
+
description: "Claims Administrator/Bill Review reported sending an EOR to the provider."
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: "bill_not_on_file",
|
|
108
|
+
label: "Bill Not On File",
|
|
109
|
+
description: "Claims Administrator/Bill Review reported not receiving the bill."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: "forwarded",
|
|
113
|
+
label: "Bill Forwarded to Different Payer / Network",
|
|
114
|
+
description: "Claims Administrator/Bill Review reported forwarding the bill to a different payer."
|
|
115
|
+
}
|
|
116
|
+
];
|
|
117
|
+
function reportBillStatusContacts(delivery) {
|
|
118
|
+
const payerName = delivery.payerName?.trim();
|
|
119
|
+
const directory = delivery.directory ?? null;
|
|
120
|
+
const phones = [];
|
|
121
|
+
const adjusterPhone = delivery.contacts.adjusterPhone?.trim();
|
|
122
|
+
if (adjusterPhone) {
|
|
123
|
+
const adjusterName = delivery.contacts.adjusterName?.trim();
|
|
124
|
+
phones.push({
|
|
125
|
+
label: adjusterName ? `Adjuster (${adjusterName})` : "Adjuster",
|
|
126
|
+
value: adjusterPhone
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const hours = directory?.hours?.trim();
|
|
130
|
+
const claimsAdmin = payerName ? {
|
|
131
|
+
name: payerName,
|
|
132
|
+
...hours ? { hoursOfOperation: hours } : {},
|
|
133
|
+
phones
|
|
134
|
+
} : null;
|
|
135
|
+
const billReviewContact = (directory?.billReview ?? []).find(
|
|
136
|
+
(contact) => contact.name?.trim() || contact.phone?.trim()
|
|
137
|
+
);
|
|
138
|
+
const billReview = billReviewContact ? {
|
|
139
|
+
name: billReviewContact.name?.trim() || "Bill Review",
|
|
140
|
+
...billReviewContact.phone?.trim() ? { phone: billReviewContact.phone.trim() } : {}
|
|
141
|
+
} : null;
|
|
142
|
+
return { claimsAdmin, billReview };
|
|
143
|
+
}
|
|
144
|
+
var SECOND_REVIEW_REASON_TEMPLATE = "This is an appeal of the invalid denial of this med-legal bill; per LC \xA74622 and the OMFS/MLFS, payment is due as billed.";
|
|
145
|
+
var SECOND_REVIEW_WINDOW_DAYS = 90;
|
|
146
|
+
function secondReviewDeadline(eors) {
|
|
147
|
+
const times = eors.map((eor) => Date.parse(eor.addedAt)).filter((time) => Number.isFinite(time));
|
|
148
|
+
if (!times.length) return null;
|
|
149
|
+
const eorTime = Math.max(...times);
|
|
150
|
+
const isoDate = (time) => new Date(time).toISOString().slice(0, 10);
|
|
151
|
+
return {
|
|
152
|
+
eorDate: isoDate(eorTime),
|
|
153
|
+
deadline: isoDate(eorTime + SECOND_REVIEW_WINDOW_DAYS * 864e5)
|
|
154
|
+
};
|
|
155
|
+
}
|
|
90
156
|
async function responseError(response, fallback) {
|
|
91
157
|
const body = await response.json().catch(() => null);
|
|
92
158
|
const detail = body && typeof body === "object" ? body.detail ?? body.message ?? body.error : null;
|
|
@@ -407,9 +473,15 @@ function createBillLifecycleClient({
|
|
|
407
473
|
submitSecondReview(input) {
|
|
408
474
|
return action({ action: "second_review", ...input }, "Second Review could not be submitted.");
|
|
409
475
|
},
|
|
410
|
-
resubmitBill(input
|
|
476
|
+
resubmitBill(input) {
|
|
411
477
|
return action({ action: "resubmit", ...input }, "Bill could not be resubmitted.");
|
|
412
478
|
},
|
|
479
|
+
sendDuplicateBill(input) {
|
|
480
|
+
return action({ action: "send_duplicate", ...input }, "Duplicate bill could not be sent.");
|
|
481
|
+
},
|
|
482
|
+
reportBillStatus(input) {
|
|
483
|
+
return action({ action: "report_bill_status", ...input }, "Bill status could not be reported.");
|
|
484
|
+
},
|
|
413
485
|
simulateSandbox
|
|
414
486
|
};
|
|
415
487
|
}
|
|
@@ -534,12 +606,17 @@ export {
|
|
|
534
606
|
BILL_TASKS_AGING_BUCKETS,
|
|
535
607
|
DEFAULT_API_BASE_URL,
|
|
536
608
|
DEFAULT_SESSION_ENDPOINT,
|
|
609
|
+
REPORT_BILL_STATUS_OPTIONS,
|
|
610
|
+
SECOND_REVIEW_REASON_TEMPLATE,
|
|
611
|
+
SECOND_REVIEW_WINDOW_DAYS,
|
|
537
612
|
billTasksAgingBucketIndex,
|
|
538
613
|
buildBillTasksDashboard,
|
|
539
614
|
createBillLifecycleClient,
|
|
540
615
|
createBillReferenceClient,
|
|
541
616
|
createBillSubmissionClient,
|
|
542
617
|
createOrganizationClient,
|
|
543
|
-
|
|
618
|
+
reportBillStatusContacts,
|
|
619
|
+
sanitizeBillReviewSaveInput,
|
|
620
|
+
secondReviewDeadline
|
|
544
621
|
};
|
|
545
622
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export const DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nexport const DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/session\";\n\nexport type BillReviewDocumentType =\n | \"final_report\"\n | \"letter_of_attestation\"\n | \"proof_of_service\"\n | \"form_122\"\n | \"return_to_work_voucher\"\n | \"w9\"\n | \"medical_records\"\n | \"appeal\"\n | \"other\";\n\nexport type BillReviewBillingProvider = {\n name: string;\n taxId: string;\n npi: string;\n billType: \"Professional\" | \"Institutional\";\n phone?: string;\n billingStreet?: string;\n billingCity?: string;\n billingState?: string;\n billingZip?: string;\n};\n\nexport type BillReviewClinician = {\n name: string;\n specialty: string;\n npi: string;\n taxonomy?: string;\n licenseNumber?: string;\n licenseState?: string;\n signaturePng?: string;\n signatureKey?: string;\n isQME?: boolean;\n isAME?: boolean;\n email?: string;\n active?: boolean;\n};\n\nexport type BillReviewLocation = {\n billingProviderId?: string;\n name: string;\n nickname?: string;\n street: string;\n city: string;\n state: string;\n zip: string;\n county?: string;\n posCode?: string;\n isPrimary?: boolean;\n active?: boolean;\n};\n\nexport type BillReviewLineItem = {\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge: number;\n feeSchedule?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n};\n\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 BillPostalPlace = { city: string; state: string };\nexport type BillDiagnosisCode = { code: string; description: string };\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 billingMode: \"med_legal\" | \"professional\";\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingSnapshot?: {\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n } | null;\n lineItems: BillReviewLineItem[];\n attachments: BillReviewAttachment[];\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n };\n patient: {\n name: string;\n firstName?: string;\n middleName?: string;\n lastName?: string;\n dob?: string;\n phone?: string;\n address?: {\n line1?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n };\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 injuryDescription?: string;\n diagnosisCodes?: string[];\n claimPatternStatus?: BillReviewClaimPatternStatus;\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 billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n }>;\n};\n\nfunction pickDefined(\n source: object,\n keys: readonly string[],\n): Record<string, unknown> {\n const record = source as Record<string, unknown>;\n return Object.fromEntries(\n keys.flatMap((key) => record[key] === undefined ? [] : [[key, record[key]]]),\n );\n}\n\n/**\n * Removes read-only snapshot metadata before a review mutation is sent.\n * Lifecycle reads can include display-only fields such as entity IDs; the v2\n * write contract accepts only the values that should be frozen onto the bill.\n */\nexport function sanitizeBillReviewSaveInput(\n input: BillReviewSaveInput,\n): BillReviewSaveInput {\n return {\n claimsAdminId: input.claimsAdminId,\n ...(input.patientOverrides ? {\n patientOverrides: pickDefined(input.patientOverrides, [\n \"firstName\", \"middleName\", \"lastName\", \"dob\",\n ]) as NonNullable<BillReviewSaveInput[\"patientOverrides\"]>,\n } : {}),\n ...(input.injuryOverrides ? {\n injuryOverrides: pickDefined(input.injuryOverrides, [\n \"claimNumber\", \"employer\", \"doi\", \"injuryEndDate\",\n \"cumulativeTrauma\", \"adjNumber\",\n ]) as NonNullable<BillReviewSaveInput[\"injuryOverrides\"]>,\n } : {}),\n dos: input.dos,\n ...(input.dosEnd !== undefined ? { dosEnd: input.dosEnd } : {}),\n ...(input.authorizationNumber !== undefined\n ? { authorizationNumber: input.authorizationNumber }\n : {}),\n ...(input.billingProvider ? {\n billingProvider: pickDefined(input.billingProvider, [\n \"name\", \"taxId\", \"npi\", \"billType\", \"phone\", \"billingStreet\",\n \"billingCity\", \"billingState\", \"billingZip\",\n ]) as BillReviewBillingProvider,\n } : {}),\n ...(input.renderingProvider ? {\n renderingProvider: pickDefined(input.renderingProvider, [\n \"name\", \"specialty\", \"npi\", \"taxonomy\", \"licenseNumber\",\n \"licenseState\", \"signaturePng\", \"signatureKey\", \"isQME\", \"isAME\",\n \"email\", \"active\",\n ]) as BillReviewClinician,\n } : {}),\n ...(input.placeOfService ? {\n placeOfService: pickDefined(input.placeOfService, [\n \"billingProviderId\", \"name\", \"nickname\", \"street\", \"city\", \"state\",\n \"zip\", \"county\", \"posCode\", \"isPrimary\", \"active\",\n ]) as BillReviewLocation,\n } : {}),\n lineItems: input.lineItems.map((line) => pickDefined(line, [\n \"id\", \"code\", \"modifiers\", \"units\", \"charge\", \"serviceDate\",\n \"serviceDateEnd\", \"diagnosisPointers\",\n ]) as BillReviewSaveInput[\"lineItems\"][number]),\n };\n}\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\nexport type BillDeliveryOption = {\n route: BillSubmissionRoute;\n label: string;\n detail: string;\n fallback: boolean;\n confidence: string;\n payerName: string;\n target?: string;\n chKey?: string;\n payerId?: string;\n printAndMail?: boolean;\n costUsd?: number;\n};\nexport type BillDeliveryOptions = {\n payerName: string;\n recommended: BillDeliveryOption;\n options: BillDeliveryOption[];\n contacts: {\n faxNumber?: string | null;\n claimsEmail?: string | null;\n portalUrl?: string | null;\n mailingAddress?: string | null;\n adjusterName?: string | null;\n adjusterPhone?: string | null;\n adjusterEmail?: string | null;\n };\n};\nexport type SubmitBillInput = {\n route: BillSubmissionRoute;\n destination?: {\n faxNumber?: string;\n email?: string;\n mailingAddress?: string;\n };\n attention?: string;\n subject?: string;\n note?: string;\n /** CC recipients for the email route (at most 10). */\n cc?: string[];\n};\nexport type BillLifecycleActionId =\n | \"resubmit\"\n | \"second_review\"\n | \"independent_bill_review\"\n | \"view_eor\"\n | \"post_payment\"\n | \"close\"\n | \"reopen\"\n | \"send_duplicate\"\n | \"report_bill_status\";\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 BillActivityRecord = {\n id: string;\n type: string;\n createdAt: string;\n title?: string;\n description: string;\n actor: string | null;\n delivery: BillSubmissionRoute | null;\n amount: number | null;\n accepted: boolean | null;\n stcCategory: string | null;\n};\n\n/** One user-facing bill history row (daisyBill-style Date / Action / User / Details).\n * Server-presented: the wording is authored by MindBill so every surface (MindBill\n * app, React, Angular, embeds) reads identically. */\nexport type BillHistoryEntry = {\n id: string;\n /** ISO timestamp for ordering and the Date column. */\n date: string;\n /** Short Action label — \"Original Bill\", \"277 Accept\", \"Payment\", \"Note\", … */\n action: string;\n kind:\n | \"created\"\n | \"submission\"\n | \"ack\"\n | \"eor\"\n | \"payment\"\n | \"review\"\n | \"close\"\n | \"reopen\"\n | \"note\"\n | \"portal\"\n | \"task\"\n | \"system\";\n /** Who acted: a biller name, \"MindBill\", or the responding clearinghouse. */\n actor: string | null;\n /** The one-line Details column. */\n summary: string;\n /** Drives row highlighting: submissions are pale blue, notes pale yellow. */\n tone: \"submission\" | \"note\" | \"neutral\" | \"problem\" | \"success\";\n amount?: number;\n /** Expandable content; absent → the row is not expandable. */\n details?: {\n rows?: Array<{ label: string; value: string }>;\n documents?: Array<{ id: string; filename: string }>;\n complianceDueDates?: Array<{ date: string; text: string }>;\n codes?: Array<{ code: string; text: string }>;\n text?: string;\n };\n};\n\nexport type BillPaymentRecord = {\n id: string;\n method: \"check\" | \"eft\";\n checkNumber: string;\n status: string | null;\n depositDate: string | null;\n checkReceived: boolean | null;\n receivedDate: string | null;\n amount: number;\n principalAmount: number;\n feeAmount: number | null;\n feeReason: string | null;\n source: \"paper\" | \"835\" | \"portal\";\n postedAt: string;\n updatedAt: string | null;\n note: string | null;\n};\n\nexport type BillRemittanceSummary = {\n billedAmount: number;\n expectedAmount: number;\n payerAllowedAmount: number | null;\n payerReportedPaid: number | null;\n postedPrincipal: number;\n postedAdditional: number;\n totalPostedCash: number;\n balanceDue: number;\n denialReason: string | null;\n};\n\nexport type BillLifecycleDelivery = {\n payerName: string;\n contacts: BillDeliveryOptions[\"contacts\"];\n /**\n * Partner-safe directory details. `id` is an opaque MindBill directory ID;\n * clearinghouse and routing identifiers are intentionally never exposed.\n */\n directory?: BillClaimsAdministratorDirectory | null;\n};\n\nexport type BillClaimsAdministratorContact = {\n name?: string | null;\n phone?: string | null;\n email?: string | null;\n fax?: string | null;\n portalUrl?: string | null;\n address?: string | null;\n note?: string | null;\n};\n\nexport type BillClaimsAdministratorMailingAddress = {\n company?: string | null;\n address: string;\n notes?: string | null;\n submissionTypes?: string[];\n};\n\nexport type BillClaimsAdministratorPattern = {\n length?: number | null;\n pattern: string;\n example?: string | null;\n matches?: boolean | null;\n};\n\nexport type BillClaimsAdministratorDirectory = {\n id?: string;\n type?: string | null;\n description?: string | null;\n website?: string | null;\n aliases?: string[];\n affiliatedEntities?: string[];\n hours?: string | null;\n billReview?: BillClaimsAdministratorContact[];\n authorization?: BillClaimsAdministratorContact[];\n mailingAddresses?: BillClaimsAdministratorMailingAddress[];\n claimNumberPatterns?: BillClaimsAdministratorPattern[];\n};\n\n/** End-user-safe details explaining why the latest submission was rejected. */\nexport type BillRejectionIssue = {\n code?: string | null;\n description: string;\n};\n\nexport type BillRejection = {\n reason: string;\n code?: string | null;\n issues?: BillRejectionIssue[];\n receivedAt?: string | null;\n source?: string | null;\n};\n\nexport type BillLifecycleData = BillReviewData & {\n environment: \"sandbox\" | \"live\";\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 activity: BillActivityRecord[];\n /** daisyBill-style presented history rows. Optional: absent when the API\n * predates the presented-history rollout — fall back to `activity`. */\n history?: BillHistoryEntry[];\n payments: BillPaymentRecord[];\n remittance: BillRemittanceSummary;\n delivery: BillLifecycleDelivery;\n rejection?: BillRejection | null;\n};\n\nexport type BillLifecycleSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillLifecycleSessionRequest = {\n signal: AbortSignal;\n};\n\nexport type BillLifecycleSessionProvider = (\n request: BillLifecycleSessionRequest,\n) => Promise<BillLifecycleSession>;\n\nexport type CloseBillInput = { reason: string };\nexport type ReopenBillInput = { reason: string };\nexport type PostBillPaymentInput = {\n amount: number;\n penaltyAmount?: number;\n interestAmount?: 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 /** Optional subset of disputed line items; omitted = the whole bill. */\n lineItemIds?: string[];\n /** SBR-1 box: whether the disputed service was authorized. */\n serviceAuthorized?: boolean;\n};\n\n/**\n * Payload for the \"report_bill_status\" lifecycle action: records the outcome\n * of a phone call to the Claims Administrator / Bill Review vendor about an\n * outstanding bill. Posted through the generic lifecycle actions endpoint.\n */\nexport type ReportBillStatusActionInput = {\n action: \"report_bill_status\";\n status: string;\n company?: string;\n representativeName?: string;\n representativeRole?: string;\n phone?: string;\n callReference?: string;\n note?: string;\n};\nexport type ResubmitBillInput = { reason?: string };\nexport type SandboxSimulationScenario = \"accepted\" | \"rejected\" | \"processed\" | \"denied\" | \"partial_payment\" | \"paid\";\nexport type SimulateSandboxBillInput = {\n scenario: SandboxSimulationScenario;\n amount?: number;\n reasonCode?: string;\n};\n\nexport type BrowserBillAddress = {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n};\n\n/** Complete bill snapshot accepted by the browser create endpoint. */\nexport type BrowserBillCreateInput = {\n externalId?: string;\n billingMode?: \"med_legal\" | \"professional\";\n patient: {\n id?: string;\n externalId?: string;\n firstName: string;\n middleName?: string;\n lastName: string;\n dateOfBirth: string;\n ssn?: string;\n gender?: \"M\" | \"F\" | \"X\";\n phone?: string;\n address: BrowserBillAddress;\n };\n claim: {\n id?: string;\n externalId?: string;\n claimNumber: string;\n adjNumber?: string;\n employer: string;\n dateOfInjury: string;\n injuryState?: string;\n description?: string;\n claimsAdministrator: { id: string; name: string };\n };\n service: { date: string; endDate?: string | null; authorizationNumber?: string | null };\n billingProvider: { name: string; taxId: string; npi: string; phone: string; address: BrowserBillAddress };\n renderingProvider: {\n name: string;\n specialty?: string;\n npi: string;\n taxonomy: string;\n licenseNumber?: string;\n licenseState?: string;\n isQme?: boolean;\n isAme?: boolean;\n };\n serviceLocation: { name?: string; address: BrowserBillAddress; placeOfServiceCode: string };\n diagnoses: string[];\n serviceLines: Array<{\n code: string;\n modifiers?: string[];\n units?: number;\n charge?: number;\n serviceDate?: string;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n }>;\n};\n\n/** Canonical immutable PDF snapshot sent with a bill submission. */\nexport type BrowserBillSubmissionDocument = {\n externalId?: string;\n filename: string;\n description?: string;\n documentType: BillReviewDocumentType;\n /** Opaque PWK report-type code selected by the component (for example OZ:J4). */\n reportTypeCode?: string;\n contentBase64: string;\n};\n\nexport type BrowserBillSubmissionInput = {\n bill: BrowserBillCreateInput;\n submission?: {\n route?: BillSubmissionRoute;\n destination?: SubmitBillInput[\"destination\"];\n attention?: string;\n subject?: string;\n note?: string;\n cc?: string[];\n };\n documents?: BrowserBillSubmissionDocument[];\n};\n\nexport type BrowserSubmittedBill = Record<string, unknown> & {\n id: string;\n externalId?: string | null;\n state?: string;\n};\n\nexport type BrowserBillSubmissionResult = {\n billId: string;\n bill: BrowserSubmittedBill;\n};\n\nexport type BillLifecycleClientOptions = {\n /** ID of an already-submitted bill. Bills are created only by the atomic server API. */\n billId: string;\n sessionEndpoint?: string | undefined;\n getSession?: BillLifecycleSessionProvider | undefined;\n apiBaseUrl?: string | undefined;\n fetch?: typeof globalThis.fetch | undefined;\n};\n\n/** Browser-session options for pre-submission reference-data lookups. */\nexport type BillReferenceClientOptions = Omit<BillLifecycleClientOptions, \"billId\">;\n\n/** Browser-session options for an atomic immutable bill submission. */\nexport type BillSubmissionClientOptions = BillReferenceClientOptions;\n\nexport type BillSubmissionClient = {\n submitBill: (\n input: BrowserBillSubmissionInput,\n options?: { idempotencyKey?: string },\n ) => Promise<BrowserBillSubmissionResult>;\n clearSession: () => void;\n};\n\n/** Input for the pre-submission delivery preview keyed on a payer-directory id. */\nexport type BillDeliveryPreviewInput = {\n claimsAdministratorId: string;\n /** Two-letter state; defaults to CA server-side. */\n injuryState?: string;\n};\n\nexport type BillReferenceClient = {\n searchClaimsAdministrators: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;\n searchDiagnosisCodes: (query: string, limit?: number, offset?: number) => Promise<BillDiagnosisCode[]>;\n lookupPostalCode: (postalCode: string) => Promise<BillPostalPlace | null>;\n /**\n * Delivery-route preview (recommended route + selectable options + payer\n * contacts) for a claims administrator BEFORE the bill exists — powers the\n * send-route picker shown at submit time.\n */\n getDeliveryPreview: (input: BillDeliveryPreviewInput) => Promise<BillDeliveryOptions>;\n clearSession: () => void;\n};\n\nexport type BillLifecycleClient = {\n getBillId: () => string;\n getLifecycle: (signal?: AbortSignal) => Promise<BillLifecycleData>;\n searchClaimsAdministrators: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;\n searchDiagnosisCodes: (query: string, limit?: number, offset?: number) => Promise<BillDiagnosisCode[]>;\n lookupPostalCode: (postalCode: string) => Promise<BillPostalPlace | null>;\n getDeliveryOptions: () => Promise<BillDeliveryOptions>;\n getDeliveryPreview: (input: BillDeliveryPreviewInput) => Promise<BillDeliveryOptions>;\n getAttachment: (attachmentId: string) => Promise<Blob>;\n getEor: (documentId: string) => Promise<Blob>;\n getPacket: () => Promise<Blob>;\n closeBill: (input: CloseBillInput) => Promise<BillLifecycleData>;\n reopenBill: (input: ReopenBillInput) => Promise<BillLifecycleData>;\n postPayment: (input: PostBillPaymentInput) => Promise<BillLifecycleData>;\n submitSecondReview: (input: SubmitSecondReviewInput) => Promise<BillLifecycleData>;\n resubmitBill: (input?: ResubmitBillInput) => Promise<BillLifecycleData>;\n simulateSandbox: (input: SimulateSandboxBillInput) => Promise<BillLifecycleData>;\n clearSession: () => void;\n};\n\nasync function responseError(response: Response, fallback: string): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; 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 { token?: unknown; expiresAt?: unknown; apiBaseUrl?: unknown; session?: unknown; data?: unknown };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\" ? nested as typeof candidate : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\"The billing session endpoint did not return a browser session token.\");\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\" ? { expiresAt: session.expiresAt } : {}),\n ...(typeof session.apiBaseUrl === \"string\" ? { apiBaseUrl: session.apiBaseUrl } : {}),\n };\n}\n\nfunction 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 ![\"sandbox\", \"live\"].includes(data.environment ?? \"\")\n || !data.bill\n || !data.patient\n || !data.injury\n || !data.lifecycle\n || !Array.isArray(data.lifecycle.actions)\n || !Array.isArray(data.eors)\n || !Array.isArray(data.activity)\n || !Array.isArray(data.payments)\n || !data.remittance\n || typeof data.remittance !== \"object\"\n || !data.delivery\n || typeof data.delivery !== \"object\"\n || !data.delivery.contacts\n || typeof data.delivery.contacts !== \"object\"\n || (data.rejection != null && (\n typeof data.rejection !== \"object\"\n || typeof data.rejection.reason !== \"string\"\n || (data.rejection.issues != null && (\n !Array.isArray(data.rejection.issues)\n || data.rejection.issues.some((issue) => (\n !issue\n || typeof issue !== \"object\"\n || typeof issue.description !== \"string\"\n || (issue.code != null && typeof issue.code !== \"string\")\n ))\n ))\n ))\n ) {\n throw new Error(\"The billing service returned an invalid bill lifecycle.\");\n }\n return data as BillLifecycleData;\n}\n\nfunction normalizeDeliveryOptions(value: unknown): BillDeliveryOptions {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The billing service returned invalid delivery options.\");\n }\n const data = value as Partial<BillDeliveryOptions>;\n if (\n typeof data.payerName !== \"string\"\n || !data.recommended\n || typeof data.recommended !== \"object\"\n || ![\"ebill\", \"fax\", \"mail\", \"email\"].includes(data.recommended.route ?? \"\")\n || !Array.isArray(data.options)\n || !data.contacts\n ) {\n throw new Error(\"The billing service returned invalid delivery options.\");\n }\n return data as BillDeliveryOptions;\n}\n\nfunction idempotencyKey(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") return globalThis.crypto.randomUUID();\n return `mb-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n\n/**\n * Browser-safe client for one atomic create-and-submit operation.\n *\n * The browser session is short-lived and origin-bound. The host application\n * never needs the Partner API document schema or a long-lived API key.\n */\nexport function createBillSubmissionClient({\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillSubmissionClientOptions = {}): BillSubmissionClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n let session: BillLifecycleSession | null = null;\n let sessionRequest: Promise<BillLifecycleSession> | null = null;\n\n const mintSession = async (signal: AbortSignal, force = false): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n if (!force && sessionRequest) return sessionRequest;\n const pending = getSession\n ? getSession({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n signal,\n }).then(async (response) => {\n if (!response.ok) throw await responseError(response, \"The billing session could not be created.\");\n return response.json();\n });\n const request = Promise.resolve(pending).then(normalizeSession).then((nextSession) => {\n session = nextSession;\n return nextSession;\n }).finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const submitBill = async (\n input: BrowserBillSubmissionInput,\n options: { idempotencyKey?: string } = {},\n ): Promise<BrowserBillSubmissionResult> => {\n const controller = new AbortController();\n const requestIdempotencyKey = options.idempotencyKey ?? idempotencyKey();\n let browserSession = await mintSession(controller.signal);\n const perform = (current: BillLifecycleSession) => {\n const base = (current.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n return fetcher(`${base}/partner/v2/browser/bills`, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${current.token}`,\n \"content-type\": \"application/json\",\n \"idempotency-key\": requestIdempotencyKey,\n },\n body: JSON.stringify(input),\n signal: controller.signal,\n });\n };\n let response = await perform(browserSession);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(controller.signal, true);\n response = await perform(browserSession);\n }\n if (!response.ok) throw await responseError(response, \"The bill could not be submitted.\");\n const body: unknown = await response.json().catch(() => null);\n const envelope = body && typeof body === \"object\" && \"data\" in body\n ? (body as { data?: unknown }).data\n : body;\n if (!envelope || typeof envelope !== \"object\" || typeof (envelope as { id?: unknown }).id !== \"string\") {\n throw new Error(\"The billing service submitted the bill but returned an invalid bill ID.\");\n }\n const bill = envelope as BrowserSubmittedBill;\n return { billId: bill.id, bill };\n };\n\n return {\n submitBill,\n clearSession() { session = null; sessionRequest = null; },\n };\n}\n\n/** Browser-safe, framework-neutral client for an already-submitted bill. */\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\") throw new Error(\"A Fetch API implementation is required.\");\n let session: BillLifecycleSession | null = null;\n let sessionRequest: Promise<BillLifecycleSession> | null = null;\n const currentBillId = billId.trim();\n if (!currentBillId) throw new Error(\"billId is required for the submitted-bill lifecycle client.\");\n\n const mintSession = async (signal: AbortSignal, force = false): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n if (!force && sessionRequest) return sessionRequest;\n const pending = getSession\n ? getSession({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n signal,\n }).then(async (response) => {\n if (!response.ok) throw await responseError(response, \"The billing session could not be created.\");\n return response.json();\n });\n const request = Promise.resolve(pending).then(normalizeSession).then((nextSession) => {\n session = nextSession;\n return nextSession;\n }).finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const request = async (path: string, init: RequestInit = {}, providedSignal?: AbortSignal): 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 billPath = (suffix = \"\"): string =>\n `/partner/v2/browser/bills/${encodeURIComponent(currentBillId)}${suffix}`;\n\n const loadLifecycle = async (signal?: AbortSignal) => {\n const response = await request(billPath(\"/lifecycle\"), {}, signal);\n if (!response.ok) throw await responseError(response, \"Bill lifecycle could not be loaded.\");\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const searchClaimsAdministrators = async (query: string, claimNumber?: string): 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(`/partner/v2/browser/claims-administrators?${params.toString()}`);\n if (!response.ok) throw await responseError(response, \"Claims administrator search is unavailable.\");\n const body = await response.json() as { results?: unknown };\n if (!Array.isArray(body.results)) throw new Error(\"Claims administrator search returned an invalid response.\");\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\") return [];\n return [{\n id: payer.id,\n name: payer.name,\n ...(typeof payer.hasElectronic === \"boolean\" ? { hasElectronic: payer.hasElectronic } : {}),\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 ? { confidence: payer.confidence as NonNullable<BillReviewPayer[\"confidence\"]> }\n : {}),\n ...(typeof payer.recommended === \"boolean\" ? { recommended: payer.recommended } : {}),\n ...(Array.isArray(payer.signals)\n ? {\n signals: payer.signals.flatMap((signal) => {\n if (!signal || typeof signal !== \"object\") return [];\n const candidate = signal as { kind?: unknown; state?: unknown; label?: unknown };\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 searchDiagnosisCodes = async (query: string, limit = 30, offset = 0): Promise<BillDiagnosisCode[]> => {\n const params = new URLSearchParams({ q: query.trim(), limit: String(Math.max(1, Math.min(100, limit))) });\n if (offset > 0) params.set(\"offset\", String(Math.max(0, Math.floor(offset))));\n const response = await request(`/partner/v2/browser/diagnosis-codes?${params.toString()}`);\n if (!response.ok) throw await responseError(response, \"Diagnosis-code search is unavailable.\");\n const body = await response.json() as { results?: unknown };\n if (!Array.isArray(body.results)) throw new Error(\"Diagnosis-code search returned an invalid response.\");\n return body.results.flatMap((value): BillDiagnosisCode[] => {\n if (!value || typeof value !== \"object\") return [];\n const candidate = value as { code?: unknown; description?: unknown };\n return typeof candidate.code === \"string\" && typeof candidate.description === \"string\"\n ? [{ code: candidate.code, description: candidate.description }]\n : [];\n });\n };\n\n const lookupPostalCode = async (postalCode: string): Promise<BillPostalPlace | null> => {\n const params = new URLSearchParams({ postalCode: postalCode.trim() });\n const response = await request(`/partner/v2/browser/postal-codes?${params.toString()}`);\n if (response.status === 404) return null;\n if (!response.ok) throw await responseError(response, \"ZIP lookup is unavailable.\");\n const body = await response.json() as { city?: unknown; state?: unknown };\n if (typeof body.city !== \"string\" || typeof body.state !== \"string\") {\n throw new Error(\"ZIP lookup returned an invalid response.\");\n }\n return { city: body.city, state: body.state };\n };\n\n const mutation = async (path: string, init: RequestInit, fallback: string) => {\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 const action = async (input: Record<string, unknown>, fallback: string): Promise<BillLifecycleData> => {\n const response = await mutation(billPath(\"/actions\"), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n }, fallback);\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n const simulateSandbox = async (input: SimulateSandboxBillInput): Promise<BillLifecycleData> => {\n const response = await mutation(billPath(\"/simulate\"), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n }, \"Sandbox lifecycle could not be simulated.\");\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n return {\n getBillId() { return currentBillId; },\n clearSession() { session = null; sessionRequest = null; },\n getLifecycle: loadLifecycle,\n searchClaimsAdministrators,\n searchDiagnosisCodes,\n lookupPostalCode,\n async getDeliveryOptions() {\n const response = await request(billPath(\"/delivery-options\"));\n if (!response.ok) throw await responseError(response, \"Delivery options could not be loaded.\");\n const body = await response.json() as { data?: unknown };\n return normalizeDeliveryOptions(body.data ?? body);\n },\n async getDeliveryPreview(input) {\n const params = new URLSearchParams({ claimsAdministratorId: input.claimsAdministratorId.trim() });\n if (input.injuryState?.trim()) params.set(\"injuryState\", input.injuryState.trim());\n const response = await request(`/partner/v2/browser/delivery-preview?${params.toString()}`);\n if (!response.ok) throw await responseError(response, \"Delivery routes could not be loaded.\");\n const body = await response.json() as { data?: unknown };\n return normalizeDeliveryOptions(body.data ?? body);\n },\n async getAttachment(attachmentId) {\n const response = await request(billPath(`/documents/${encodeURIComponent(attachmentId)}`));\n if (!response.ok) throw await responseError(response, \"Document could not be opened.\");\n return response.blob();\n },\n async getEor(documentId) {\n const response = await request(billPath(`/eors/${encodeURIComponent(documentId)}`));\n if (!response.ok) throw await responseError(response, \"EOR could not be opened.\");\n return response.blob();\n },\n async getPacket() {\n const response = await request(billPath(\"/packet\"));\n if (!response.ok) throw await responseError(response, \"Submission packet could not be downloaded.\");\n return response.blob();\n },\n closeBill(input) { return action({ action: \"close\", ...input }, \"Bill could not be closed.\"); },\n reopenBill(input) { return action({ action: \"reopen\", ...input }, \"Bill could not be reopened.\"); },\n postPayment(input) { return action({ action: \"post_payment\", penaltyAmount: 0, interestAmount: 0, ...input, checkNumber: input.checkNumber ?? \"\" }, \"Payment could not be posted.\"); },\n submitSecondReview(input) { return action({ action: \"second_review\", ...input }, \"Second Review could not be submitted.\"); },\n resubmitBill(input = {}) { return action({ action: \"resubmit\", ...input }, \"Bill could not be resubmitted.\"); },\n simulateSandbox,\n };\n}\n\n/**\n * Browser-safe client for reference data needed before a bill exists.\n *\n * Partners can pass the same short-lived session provider used by the submitted-bill\n * lifecycle without inventing a draft bill or exposing payer directory credentials.\n */\nexport function createBillReferenceClient(\n options: BillReferenceClientOptions = {},\n): BillReferenceClient {\n const lifecycle = createBillLifecycleClient({\n ...options,\n billId: \"pre-submission-reference-data\",\n });\n return {\n searchClaimsAdministrators: lifecycle.searchClaimsAdministrators,\n searchDiagnosisCodes: lifecycle.searchDiagnosisCodes,\n lookupPostalCode: lifecycle.lookupPostalCode,\n getDeliveryPreview: lifecycle.getDeliveryPreview,\n clearSession: lifecycle.clearSession,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Organization profile client (INC-1470): backs the embeddable\n// OrganizationOnboarding / BillingSettings components. Requires a browser\n// session minted with the OPTIONAL organization:manage permission; sessions\n// without it are rejected by the API and nothing else changes.\n\nexport type OrganizationPracticeIdentity = {\n name?: string; legalName?: string; taxId?: string; npi?: string;\n phone?: string; email?: string; website?: string;\n};\n\nexport type OrganizationBillingProviderInput = {\n id?: string; externalId?: string; name: string; taxId: string; npi: string;\n billType?: \"Professional\" | \"Institutional\"; phone?: string;\n billingStreet?: string; billingCity?: string; billingState?: string; billingZip?: string;\n};\n\nexport type OrganizationLocationInput = {\n id?: string; externalId?: string; name: string; street: string; city: string;\n state: string; zip: string; nickname?: string; posCode?: string;\n isPrimary?: boolean; active?: boolean;\n};\n\nexport type OrganizationChecklistItem = { id: string; label: string; complete: boolean };\n\nexport type OrganizationProfileData = {\n organizationId: string;\n practiceIdentity: OrganizationPracticeIdentity;\n billingProviders: Array<OrganizationBillingProviderInput & { id: string }>;\n locations: Array<OrganizationLocationInput & { id: string }>;\n w9: { filename: string; addDate: string; taxYear?: number } | null;\n onboarding: { status: string | null; complete: boolean; checklist: OrganizationChecklistItem[] };\n};\n\nexport type OrganizationClientOptions = {\n sessionEndpoint?: string;\n getSession?: BillLifecycleSessionProvider;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n};\n\nexport type OrganizationClient = {\n getOrganization: () => Promise<OrganizationProfileData>;\n saveBillingProfile: (input: {\n practiceIdentity?: OrganizationPracticeIdentity;\n billingProviders?: OrganizationBillingProviderInput[];\n }) => Promise<OrganizationProfileData>;\n saveLocations: (locations: OrganizationLocationInput[]) => Promise<OrganizationProfileData>;\n saveW9: (input: { filename: string; contentBase64: string; taxYear?: number }) => Promise<OrganizationProfileData>;\n};\n\nexport function createOrganizationClient({\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: OrganizationClientOptions = {}): OrganizationClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n let session: BillLifecycleSession | null = null;\n\n const mintSession = async (force = false): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n const pending = getSession\n ? getSession({ signal: new AbortController().signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n }).then(async (response) => {\n if (!response.ok) throw await responseError(response, \"The organization session could not be created.\");\n return response.json();\n });\n session = normalizeSession(await Promise.resolve(pending));\n return session;\n };\n\n const request = async (path: string, init: RequestInit = {}): Promise<OrganizationProfileData> => {\n let current = await mintSession();\n const perform = (active: BillLifecycleSession) => {\n const base = (active.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n const headers = new Headers(init.headers);\n headers.set(\"authorization\", `Bearer ${active.token}`);\n if (init.body) headers.set(\"content-type\", \"application/json\");\n return fetcher(`${base}${path}`, { ...init, headers });\n };\n let response = await perform(current);\n if (response.status === 401) {\n current = await mintSession(true);\n response = await perform(current);\n }\n if (!response.ok) throw await responseError(response, \"The organization request failed.\");\n const body = (await response.json()) as { data?: OrganizationProfileData };\n if (!body.data || typeof body.data !== \"object\") {\n throw new Error(\"The organization response was invalid.\");\n }\n return body.data;\n };\n\n return {\n getOrganization: () => request(\"/partner/v2/browser/organization\"),\n saveBillingProfile: (input) =>\n request(\"/partner/v2/browser/organization/billing-profile\", { method: \"PUT\", body: JSON.stringify(input) }),\n saveLocations: (locations) =>\n request(\"/partner/v2/browser/organization/locations\", { method: \"PUT\", body: JSON.stringify({ locations }) }),\n saveW9: (input) =>\n request(\"/partner/v2/browser/organization/w9\", { method: \"PUT\", body: JSON.stringify(input) }),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Bill Tasks dashboard (daisyBill-style worklist): a pure, framework-neutral\n// aggregation shared by the React and Angular components. Hosts flatten their\n// own work items and get back per-section rows bucketed by age in days.\n\nexport type BillTasksAgingBucket = {\n id: string;\n label: string;\n /** Exclusive lower bound in days. The first bucket also admits day 0. */\n minDays: number;\n /** Inclusive upper bound in days; null means unbounded. */\n maxDays: number | null;\n};\n\nexport const BILL_TASKS_AGING_BUCKETS: BillTasksAgingBucket[] = [\n { id: \"1-30\", label: \"1-30 Days Ago\", minDays: 0, maxDays: 30 },\n { id: \"31-60\", label: \"31-60 Days Ago\", minDays: 30, maxDays: 60 },\n { id: \"61-90\", label: \"61-90 Days Ago\", minDays: 60, maxDays: 90 },\n { id: \"91-180\", label: \"91-180 Days Ago\", minDays: 90, maxDays: 180 },\n { id: \"181+\", label: \"181+ Days Ago\", minDays: 180, maxDays: null },\n];\n\nexport type BillTasksDashboardItem = {\n sectionId: string;\n rowId: string;\n rowLabel: string;\n ageDays: number;\n balanceDue?: number;\n /** Opaque bill reference echoed back in click-through payloads. */\n ref?: string;\n};\n\nexport type BillTasksDashboardRow = {\n id: string;\n label: string;\n /** One count per aging bucket, in bucket order. */\n counts: number[];\n total: number;\n /** Collected item refs per aging bucket, in bucket order. */\n refs: string[][];\n};\n\nexport type BillTasksDashboardTone = \"violet\" | \"red\" | \"blue\" | \"green\" | \"amber\" | \"neutral\";\n\nexport type BillTasksDashboardSectionInput = {\n id: string;\n label: string;\n /** Shown under the section label as \"by {agingBasisLabel}\". */\n agingBasisLabel: string;\n tone: BillTasksDashboardTone;\n};\n\nexport type BillTasksDashboardSection = BillTasksDashboardSectionInput & {\n rows: BillTasksDashboardRow[];\n /** Per-bucket totals across the section's rows. */\n totals: number[];\n total: number;\n empty: boolean;\n};\n\nexport type BillTasksDashboardData = {\n sections: BillTasksDashboardSection[];\n grandTotals: number[];\n grandTotal: number;\n};\n\n/**\n * Bucket index for an item age: a bucket admits `minDays < ageDays <= maxDays`\n * (`maxDays: null` = unbounded) and the first bucket also admits day 0.\n * Ages beyond every bucket clamp into the last bucket.\n */\nexport function billTasksAgingBucketIndex(\n ageDays: number,\n buckets: BillTasksAgingBucket[] = BILL_TASKS_AGING_BUCKETS,\n): number {\n const days = Math.max(0, Math.floor(ageDays));\n const index = buckets.findIndex((bucket, position) =>\n (bucket.maxDays === null || days <= bucket.maxDays)\n && (days > bucket.minDays || position === 0));\n return index === -1 ? buckets.length - 1 : index;\n}\n\n/**\n * Aggregates flat work items into the daisyBill-style Bill Tasks dashboard.\n * Sections render in the given order even when empty; rows appear in\n * first-seen item order within their section.\n */\nexport function buildBillTasksDashboard(\n items: BillTasksDashboardItem[],\n sections: BillTasksDashboardSectionInput[],\n buckets: BillTasksAgingBucket[] = BILL_TASKS_AGING_BUCKETS,\n): BillTasksDashboardData {\n const zeros = () => buckets.map(() => 0);\n const built = sections.map((section): BillTasksDashboardSection => ({\n ...section,\n rows: [],\n totals: zeros(),\n total: 0,\n empty: true,\n }));\n const sectionById = new Map(built.map((section) => [section.id, section]));\n const rowByKey = new Map<string, BillTasksDashboardRow>();\n const grandTotals = zeros();\n let grandTotal = 0;\n\n for (const item of items) {\n const section = sectionById.get(item.sectionId);\n if (!section) continue;\n const key = `${item.sectionId}\u0000${item.rowId}`;\n let row = rowByKey.get(key);\n if (!row) {\n row = {\n id: item.rowId,\n label: item.rowLabel,\n counts: zeros(),\n total: 0,\n refs: buckets.map(() => []),\n };\n rowByKey.set(key, row);\n section.rows.push(row);\n section.empty = false;\n }\n const bucketIndex = billTasksAgingBucketIndex(item.ageDays, buckets);\n row.counts[bucketIndex] = (row.counts[bucketIndex] ?? 0) + 1;\n row.total += 1;\n if (item.ref) row.refs[bucketIndex]?.push(item.ref);\n section.totals[bucketIndex] = (section.totals[bucketIndex] ?? 0) + 1;\n section.total += 1;\n grandTotals[bucketIndex] = (grandTotals[bucketIndex] ?? 0) + 1;\n grandTotal += 1;\n }\n\n return { sections: built, grandTotals, grandTotal };\n}\n"],"mappings":"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","names":["request"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export const DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nexport const DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/session\";\n\nexport type BillReviewDocumentType =\n | \"final_report\"\n | \"letter_of_attestation\"\n | \"proof_of_service\"\n | \"form_122\"\n | \"return_to_work_voucher\"\n | \"w9\"\n | \"medical_records\"\n | \"appeal\"\n | \"other\";\n\nexport type BillReviewBillingProvider = {\n name: string;\n taxId: string;\n npi: string;\n billType: \"Professional\" | \"Institutional\";\n phone?: string;\n billingStreet?: string;\n billingCity?: string;\n billingState?: string;\n billingZip?: string;\n};\n\nexport type BillReviewClinician = {\n name: string;\n specialty: string;\n npi: string;\n taxonomy?: string;\n licenseNumber?: string;\n licenseState?: string;\n signaturePng?: string;\n signatureKey?: string;\n isQME?: boolean;\n isAME?: boolean;\n email?: string;\n active?: boolean;\n};\n\nexport type BillReviewLocation = {\n billingProviderId?: string;\n name: string;\n nickname?: string;\n street: string;\n city: string;\n state: string;\n zip: string;\n county?: string;\n posCode?: string;\n isPrimary?: boolean;\n active?: boolean;\n};\n\nexport type BillReviewLineItem = {\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge: number;\n feeSchedule?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n};\n\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 BillPostalPlace = { city: string; state: string };\nexport type BillDiagnosisCode = { code: string; description: string };\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 billingMode: \"med_legal\" | \"professional\";\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingSnapshot?: {\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n } | null;\n lineItems: BillReviewLineItem[];\n attachments: BillReviewAttachment[];\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n };\n patient: {\n name: string;\n firstName?: string;\n middleName?: string;\n lastName?: string;\n dob?: string;\n phone?: string;\n address?: {\n line1?: string;\n city?: string;\n state?: string;\n postalCode?: string;\n };\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 injuryDescription?: string;\n diagnosisCodes?: string[];\n claimPatternStatus?: BillReviewClaimPatternStatus;\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 billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n }>;\n};\n\nfunction pickDefined(\n source: object,\n keys: readonly string[],\n): Record<string, unknown> {\n const record = source as Record<string, unknown>;\n return Object.fromEntries(\n keys.flatMap((key) => record[key] === undefined ? [] : [[key, record[key]]]),\n );\n}\n\n/**\n * Removes read-only snapshot metadata before a review mutation is sent.\n * Lifecycle reads can include display-only fields such as entity IDs; the v2\n * write contract accepts only the values that should be frozen onto the bill.\n */\nexport function sanitizeBillReviewSaveInput(\n input: BillReviewSaveInput,\n): BillReviewSaveInput {\n return {\n claimsAdminId: input.claimsAdminId,\n ...(input.patientOverrides ? {\n patientOverrides: pickDefined(input.patientOverrides, [\n \"firstName\", \"middleName\", \"lastName\", \"dob\",\n ]) as NonNullable<BillReviewSaveInput[\"patientOverrides\"]>,\n } : {}),\n ...(input.injuryOverrides ? {\n injuryOverrides: pickDefined(input.injuryOverrides, [\n \"claimNumber\", \"employer\", \"doi\", \"injuryEndDate\",\n \"cumulativeTrauma\", \"adjNumber\",\n ]) as NonNullable<BillReviewSaveInput[\"injuryOverrides\"]>,\n } : {}),\n dos: input.dos,\n ...(input.dosEnd !== undefined ? { dosEnd: input.dosEnd } : {}),\n ...(input.authorizationNumber !== undefined\n ? { authorizationNumber: input.authorizationNumber }\n : {}),\n ...(input.billingProvider ? {\n billingProvider: pickDefined(input.billingProvider, [\n \"name\", \"taxId\", \"npi\", \"billType\", \"phone\", \"billingStreet\",\n \"billingCity\", \"billingState\", \"billingZip\",\n ]) as BillReviewBillingProvider,\n } : {}),\n ...(input.renderingProvider ? {\n renderingProvider: pickDefined(input.renderingProvider, [\n \"name\", \"specialty\", \"npi\", \"taxonomy\", \"licenseNumber\",\n \"licenseState\", \"signaturePng\", \"signatureKey\", \"isQME\", \"isAME\",\n \"email\", \"active\",\n ]) as BillReviewClinician,\n } : {}),\n ...(input.placeOfService ? {\n placeOfService: pickDefined(input.placeOfService, [\n \"billingProviderId\", \"name\", \"nickname\", \"street\", \"city\", \"state\",\n \"zip\", \"county\", \"posCode\", \"isPrimary\", \"active\",\n ]) as BillReviewLocation,\n } : {}),\n lineItems: input.lineItems.map((line) => pickDefined(line, [\n \"id\", \"code\", \"modifiers\", \"units\", \"charge\", \"serviceDate\",\n \"serviceDateEnd\", \"diagnosisPointers\",\n ]) as BillReviewSaveInput[\"lineItems\"][number]),\n };\n}\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\nexport type BillDeliveryOption = {\n route: BillSubmissionRoute;\n label: string;\n detail: string;\n fallback: boolean;\n confidence: string;\n payerName: string;\n target?: string;\n chKey?: string;\n payerId?: string;\n printAndMail?: boolean;\n costUsd?: number;\n};\nexport type BillDeliveryOptions = {\n payerName: string;\n recommended: BillDeliveryOption;\n options: BillDeliveryOption[];\n contacts: {\n faxNumber?: string | null;\n claimsEmail?: string | null;\n portalUrl?: string | null;\n mailingAddress?: string | null;\n adjusterName?: string | null;\n adjusterPhone?: string | null;\n adjusterEmail?: string | null;\n };\n};\nexport type SubmitBillInput = {\n route: BillSubmissionRoute;\n destination?: {\n faxNumber?: string;\n email?: string;\n mailingAddress?: string;\n };\n attention?: string;\n subject?: string;\n note?: string;\n /** CC recipients for the email route (at most 10). */\n cc?: string[];\n};\nexport type BillLifecycleActionId =\n | \"resubmit\"\n | \"second_review\"\n | \"independent_bill_review\"\n | \"view_eor\"\n | \"post_payment\"\n | \"close\"\n | \"reopen\"\n | \"send_duplicate\"\n | \"report_bill_status\";\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 BillActivityRecord = {\n id: string;\n type: string;\n createdAt: string;\n title?: string;\n description: string;\n actor: string | null;\n delivery: BillSubmissionRoute | null;\n amount: number | null;\n accepted: boolean | null;\n stcCategory: string | null;\n};\n\n/** One user-facing bill history row (daisyBill-style Date / Action / User / Details).\n * Server-presented: the wording is authored by MindBill so every surface (MindBill\n * app, React, Angular, embeds) reads identically. */\nexport type BillHistoryEntry = {\n id: string;\n /** ISO timestamp for ordering and the Date column. */\n date: string;\n /** Short Action label — \"Original Bill\", \"277 Accept\", \"Payment\", \"Note\", … */\n action: string;\n kind:\n | \"created\"\n | \"submission\"\n | \"ack\"\n | \"eor\"\n | \"payment\"\n | \"review\"\n | \"close\"\n | \"reopen\"\n | \"note\"\n | \"portal\"\n | \"task\"\n | \"system\";\n /** Who acted: a biller name, \"MindBill\", or the responding clearinghouse. */\n actor: string | null;\n /** The one-line Details column. */\n summary: string;\n /** Drives row highlighting: submissions are pale blue, notes pale yellow. */\n tone: \"submission\" | \"note\" | \"neutral\" | \"problem\" | \"success\";\n amount?: number;\n /** Expandable content; absent → the row is not expandable. */\n details?: {\n rows?: Array<{ label: string; value: string }>;\n documents?: Array<{ id: string; filename: string }>;\n complianceDueDates?: Array<{ date: string; text: string }>;\n codes?: Array<{ code: string; text: string }>;\n text?: string;\n };\n};\n\nexport type BillPaymentRecord = {\n id: string;\n method: \"check\" | \"eft\";\n checkNumber: string;\n status: string | null;\n depositDate: string | null;\n checkReceived: boolean | null;\n receivedDate: string | null;\n amount: number;\n principalAmount: number;\n feeAmount: number | null;\n feeReason: string | null;\n source: \"paper\" | \"835\" | \"portal\";\n postedAt: string;\n updatedAt: string | null;\n note: string | null;\n};\n\nexport type BillRemittanceSummary = {\n billedAmount: number;\n expectedAmount: number;\n payerAllowedAmount: number | null;\n payerReportedPaid: number | null;\n postedPrincipal: number;\n postedAdditional: number;\n totalPostedCash: number;\n balanceDue: number;\n denialReason: string | null;\n};\n\nexport type BillLifecycleDelivery = {\n payerName: string;\n contacts: BillDeliveryOptions[\"contacts\"];\n /**\n * Partner-safe directory details. `id` is an opaque MindBill directory ID;\n * clearinghouse and routing identifiers are intentionally never exposed.\n */\n directory?: BillClaimsAdministratorDirectory | null;\n};\n\nexport type BillClaimsAdministratorContact = {\n name?: string | null;\n phone?: string | null;\n email?: string | null;\n fax?: string | null;\n portalUrl?: string | null;\n address?: string | null;\n note?: string | null;\n};\n\nexport type BillClaimsAdministratorMailingAddress = {\n company?: string | null;\n address: string;\n notes?: string | null;\n submissionTypes?: string[];\n};\n\nexport type BillClaimsAdministratorPattern = {\n length?: number | null;\n pattern: string;\n example?: string | null;\n matches?: boolean | null;\n};\n\nexport type BillClaimsAdministratorDirectory = {\n id?: string;\n type?: string | null;\n description?: string | null;\n website?: string | null;\n aliases?: string[];\n affiliatedEntities?: string[];\n hours?: string | null;\n billReview?: BillClaimsAdministratorContact[];\n authorization?: BillClaimsAdministratorContact[];\n mailingAddresses?: BillClaimsAdministratorMailingAddress[];\n claimNumberPatterns?: BillClaimsAdministratorPattern[];\n};\n\n/** End-user-safe details explaining why the latest submission was rejected. */\nexport type BillRejectionIssue = {\n code?: string | null;\n description: string;\n /** Bill-submission field paths implicated by this issue. */\n fieldPaths?: string[];\n};\n\nexport type BillRejection = {\n reason: string;\n code?: string | null;\n issues?: BillRejectionIssue[];\n receivedAt?: string | null;\n source?: string | null;\n};\n\nexport type BillLifecycleData = BillReviewData & {\n environment: \"sandbox\" | \"live\";\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 activity: BillActivityRecord[];\n /** daisyBill-style presented history rows. Optional: absent when the API\n * predates the presented-history rollout — fall back to `activity`. */\n history?: BillHistoryEntry[];\n payments: BillPaymentRecord[];\n remittance: BillRemittanceSummary;\n delivery: BillLifecycleDelivery;\n rejection?: BillRejection | null;\n};\n\nexport type BillLifecycleSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillLifecycleSessionRequest = {\n signal: AbortSignal;\n};\n\nexport type BillLifecycleSessionProvider = (\n request: BillLifecycleSessionRequest,\n) => Promise<BillLifecycleSession>;\n\nexport type CloseBillInput = { reason: string };\nexport type ReopenBillInput = { reason: string };\nexport type PostBillPaymentInput = {\n amount: number;\n penaltyAmount?: number;\n interestAmount?: 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 /** Optional subset of disputed line items; omitted = the whole bill. */\n lineItemIds?: string[];\n /** SBR-1 box: whether the disputed service was authorized. */\n serviceAuthorized?: boolean;\n};\n\nexport type ReportBillStatusId =\n | \"message_left\"\n | \"eor_pending\"\n | \"eor_sent\"\n | \"bill_not_on_file\"\n | \"forwarded\";\n\nexport type ReportBillStatusOption = {\n id: ReportBillStatusId;\n label: string;\n description: string;\n};\n\n/** The five daisyBill-worded outcomes of a bill payment-status phone call. */\nexport const REPORT_BILL_STATUS_OPTIONS: ReportBillStatusOption[] = [\n {\n id: \"message_left\",\n label: \"Message Left Requesting Bill Payment Status\",\n description: \"Claims Administrator/Bill Review representative unavailable.\",\n },\n {\n id: \"eor_pending\",\n label: \"Explanation of Review (EOR) Pending\",\n description: \"Claims Administrator/Bill Review reported the bill is still in process and an EOR has not been generated or sent.\",\n },\n {\n id: \"eor_sent\",\n label: \"Explanation of Review (EOR) Sent\",\n description: \"Claims Administrator/Bill Review reported sending an EOR to the provider.\",\n },\n {\n id: \"bill_not_on_file\",\n label: \"Bill Not On File\",\n description: \"Claims Administrator/Bill Review reported not receiving the bill.\",\n },\n {\n id: \"forwarded\",\n label: \"Bill Forwarded to Different Payer / Network\",\n description: \"Claims Administrator/Bill Review reported forwarding the bill to a different payer.\",\n },\n];\n\n/**\n * Outcome of a phone call to the Claims Administrator / Bill Review vendor\n * about an outstanding bill, recorded through the lifecycle actions endpoint.\n */\nexport type ReportBillStatusInput = {\n status: ReportBillStatusId;\n company?: string;\n representativeName?: string;\n representativeRole?: string;\n phone?: string;\n callReference?: string;\n note?: string;\n};\n\n/**\n * Payload for the \"report_bill_status\" lifecycle action: records the outcome\n * of a phone call to the Claims Administrator / Bill Review vendor about an\n * outstanding bill. Posted through the generic lifecycle actions endpoint.\n */\nexport type ReportBillStatusActionInput = ReportBillStatusInput & {\n action: \"report_bill_status\";\n};\n\n/**\n * Payload for the \"send_duplicate\" lifecycle action: resends the immutable\n * submission packet, unchanged, over the selected delivery route — typically\n * after the payer reports the bill is not on file.\n */\nexport type SendDuplicateBillInput = {\n route: BillSubmissionRoute;\n destination?: SubmitBillInput[\"destination\"];\n attention?: string;\n subject?: string;\n note?: string;\n /** CC recipients for the email route (at most 10). */\n cc?: string[];\n};\n\nexport type ReportBillStatusContacts = {\n claimsAdmin: {\n name: string;\n hoursOfOperation?: string;\n phones: Array<{ label: string; value: string }>;\n } | null;\n billReview: { name: string; phone?: string } | null;\n};\n\n/**\n * Partner-safe \"who to call\" summary for the Report Bill Status flow, derived\n * from the lifecycle delivery block (payer contacts + optional directory).\n */\nexport function reportBillStatusContacts(\n delivery: BillLifecycleDelivery,\n): ReportBillStatusContacts {\n const payerName = delivery.payerName?.trim();\n const directory = delivery.directory ?? null;\n const phones: Array<{ label: string; value: string }> = [];\n const adjusterPhone = delivery.contacts.adjusterPhone?.trim();\n if (adjusterPhone) {\n const adjusterName = delivery.contacts.adjusterName?.trim();\n phones.push({\n label: adjusterName ? `Adjuster (${adjusterName})` : \"Adjuster\",\n value: adjusterPhone,\n });\n }\n const hours = directory?.hours?.trim();\n const claimsAdmin = payerName\n ? {\n name: payerName,\n ...(hours ? { hoursOfOperation: hours } : {}),\n phones,\n }\n : null;\n const billReviewContact = (directory?.billReview ?? []).find(\n (contact) => contact.name?.trim() || contact.phone?.trim(),\n );\n const billReview = billReviewContact\n ? {\n name: billReviewContact.name?.trim() || \"Bill Review\",\n ...(billReviewContact.phone?.trim() ? { phone: billReviewContact.phone.trim() } : {}),\n }\n : null;\n return { claimsAdmin, billReview };\n}\n\n/**\n * Default Second Bill Review dispute reason for an invalid med-legal denial.\n * Prefilled (editable) in the SBR panel.\n */\nexport const SECOND_REVIEW_REASON_TEMPLATE =\n \"This is an appeal of the invalid denial of this med-legal bill; per LC §4622 and the OMFS/MLFS, payment is due as billed.\";\n\n/** Days allowed to request Second Review after service of the denial EOR. */\nexport const SECOND_REVIEW_WINDOW_DAYS = 90;\n\nexport type SecondReviewDeadline = {\n /** ISO date (yyyy-mm-dd) of the latest denial/EOR document. */\n eorDate: string;\n /** ISO date (yyyy-mm-dd) 90 days after the EOR date. */\n deadline: string;\n};\n\n/**\n * The 90-day Second Review window anchored on the latest EOR date, or null\n * when the lifecycle data provides no parseable denial/EOR date.\n */\nexport function secondReviewDeadline(\n eors: Array<Pick<BillEorDocument, \"addedAt\">>,\n): SecondReviewDeadline | null {\n const times = eors\n .map((eor) => Date.parse(eor.addedAt))\n .filter((time) => Number.isFinite(time));\n if (!times.length) return null;\n const eorTime = Math.max(...times);\n const isoDate = (time: number): string => new Date(time).toISOString().slice(0, 10);\n return {\n eorDate: isoDate(eorTime),\n deadline: isoDate(eorTime + SECOND_REVIEW_WINDOW_DAYS * 86_400_000),\n };\n}\n/**\n * A corrected immutable snapshot submitted as the next attempt on the same bill.\n * The logical bill ID remains stable; only the submission/control-number attempt advances.\n */\nexport type ResubmitBillInput = {\n reason?: string;\n bill: BrowserBillCreateInput;\n documents?: BrowserBillSubmissionDocument[];\n};\nexport type SandboxSimulationScenario = \"accepted\" | \"rejected\" | \"processed\" | \"denied\" | \"partial_payment\" | \"paid\";\nexport type SimulateSandboxBillInput = {\n scenario: SandboxSimulationScenario;\n amount?: number;\n reasonCode?: string;\n};\n\nexport type BrowserBillAddress = {\n line1: string;\n line2?: string;\n city: string;\n state: string;\n postalCode: string;\n};\n\n/** Complete bill snapshot accepted by the browser create endpoint. */\nexport type BrowserBillCreateInput = {\n externalId?: string;\n billingMode?: \"med_legal\" | \"professional\";\n patient: {\n id?: string;\n externalId?: string;\n firstName: string;\n middleName?: string;\n lastName: string;\n dateOfBirth: string;\n ssn?: string;\n gender?: \"M\" | \"F\" | \"X\";\n phone?: string;\n address: BrowserBillAddress;\n };\n claim: {\n id?: string;\n externalId?: string;\n claimNumber: string;\n adjNumber?: string;\n employer: string;\n dateOfInjury: string;\n injuryState?: string;\n description?: string;\n claimsAdministrator: { id: string; name: string };\n };\n service: { date: string; endDate?: string | null; authorizationNumber?: string | null };\n billingProvider: { name: string; taxId: string; npi: string; phone: string; address: BrowserBillAddress };\n renderingProvider: {\n name: string;\n specialty?: string;\n npi: string;\n taxonomy: string;\n licenseNumber?: string;\n licenseState?: string;\n isQme?: boolean;\n isAme?: boolean;\n };\n serviceLocation: { name?: string; address: BrowserBillAddress; placeOfServiceCode: string };\n diagnoses: string[];\n serviceLines: Array<{\n code: string;\n modifiers?: string[];\n units?: number;\n charge?: number;\n serviceDate?: string;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n }>;\n};\n\n/** Canonical immutable PDF snapshot sent with a bill submission. */\nexport type BrowserBillSubmissionDocument = {\n externalId?: string;\n filename: string;\n description?: string;\n documentType: BillReviewDocumentType;\n /** Opaque PWK report-type code selected by the component (for example OZ:J4). */\n reportTypeCode?: string;\n contentBase64: string;\n};\n\nexport type BrowserBillSubmissionInput = {\n bill: BrowserBillCreateInput;\n submission?: {\n route?: BillSubmissionRoute;\n destination?: SubmitBillInput[\"destination\"];\n attention?: string;\n subject?: string;\n note?: string;\n cc?: string[];\n };\n documents?: BrowserBillSubmissionDocument[];\n};\n\nexport type BrowserSubmittedBill = Record<string, unknown> & {\n id: string;\n externalId?: string | null;\n state?: string;\n};\n\nexport type BrowserBillSubmissionResult = {\n billId: string;\n bill: BrowserSubmittedBill;\n};\n\nexport type BillLifecycleClientOptions = {\n /** ID of an already-submitted bill. Bills are created only by the atomic server API. */\n billId: string;\n sessionEndpoint?: string | undefined;\n getSession?: BillLifecycleSessionProvider | undefined;\n apiBaseUrl?: string | undefined;\n fetch?: typeof globalThis.fetch | undefined;\n};\n\n/** Browser-session options for pre-submission reference-data lookups. */\nexport type BillReferenceClientOptions = Omit<BillLifecycleClientOptions, \"billId\">;\n\n/** Browser-session options for an atomic immutable bill submission. */\nexport type BillSubmissionClientOptions = BillReferenceClientOptions;\n\nexport type BillSubmissionClient = {\n submitBill: (\n input: BrowserBillSubmissionInput,\n options?: { idempotencyKey?: string },\n ) => Promise<BrowserBillSubmissionResult>;\n clearSession: () => void;\n};\n\n/** Input for the pre-submission delivery preview keyed on a payer-directory id. */\nexport type BillDeliveryPreviewInput = {\n claimsAdministratorId: string;\n /** Two-letter state; defaults to CA server-side. */\n injuryState?: string;\n};\n\nexport type BillReferenceClient = {\n searchClaimsAdministrators: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;\n searchDiagnosisCodes: (query: string, limit?: number, offset?: number) => Promise<BillDiagnosisCode[]>;\n lookupPostalCode: (postalCode: string) => Promise<BillPostalPlace | null>;\n /**\n * Delivery-route preview (recommended route + selectable options + payer\n * contacts) for a claims administrator BEFORE the bill exists — powers the\n * send-route picker shown at submit time.\n */\n getDeliveryPreview: (input: BillDeliveryPreviewInput) => Promise<BillDeliveryOptions>;\n clearSession: () => void;\n};\n\nexport type BillLifecycleClient = {\n getBillId: () => string;\n getLifecycle: (signal?: AbortSignal) => Promise<BillLifecycleData>;\n searchClaimsAdministrators: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;\n searchDiagnosisCodes: (query: string, limit?: number, offset?: number) => Promise<BillDiagnosisCode[]>;\n lookupPostalCode: (postalCode: string) => Promise<BillPostalPlace | null>;\n getDeliveryOptions: () => Promise<BillDeliveryOptions>;\n getDeliveryPreview: (input: BillDeliveryPreviewInput) => Promise<BillDeliveryOptions>;\n getAttachment: (attachmentId: string) => Promise<Blob>;\n getEor: (documentId: string) => Promise<Blob>;\n getPacket: () => Promise<Blob>;\n closeBill: (input: CloseBillInput) => Promise<BillLifecycleData>;\n reopenBill: (input: ReopenBillInput) => Promise<BillLifecycleData>;\n postPayment: (input: PostBillPaymentInput) => Promise<BillLifecycleData>;\n submitSecondReview: (input: SubmitSecondReviewInput) => Promise<BillLifecycleData>;\n resubmitBill: (input: ResubmitBillInput) => Promise<BillLifecycleData>;\n sendDuplicateBill: (input: SendDuplicateBillInput) => Promise<BillLifecycleData>;\n reportBillStatus: (input: ReportBillStatusInput) => Promise<BillLifecycleData>;\n simulateSandbox: (input: SimulateSandboxBillInput) => Promise<BillLifecycleData>;\n clearSession: () => void;\n};\n\nasync function responseError(response: Response, fallback: string): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; 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 { token?: unknown; expiresAt?: unknown; apiBaseUrl?: unknown; session?: unknown; data?: unknown };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\" ? nested as typeof candidate : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\"The billing session endpoint did not return a browser session token.\");\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\" ? { expiresAt: session.expiresAt } : {}),\n ...(typeof session.apiBaseUrl === \"string\" ? { apiBaseUrl: session.apiBaseUrl } : {}),\n };\n}\n\nfunction 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 ![\"sandbox\", \"live\"].includes(data.environment ?? \"\")\n || !data.bill\n || !data.patient\n || !data.injury\n || !data.lifecycle\n || !Array.isArray(data.lifecycle.actions)\n || !Array.isArray(data.eors)\n || !Array.isArray(data.activity)\n || !Array.isArray(data.payments)\n || !data.remittance\n || typeof data.remittance !== \"object\"\n || !data.delivery\n || typeof data.delivery !== \"object\"\n || !data.delivery.contacts\n || typeof data.delivery.contacts !== \"object\"\n || (data.rejection != null && (\n typeof data.rejection !== \"object\"\n || typeof data.rejection.reason !== \"string\"\n || (data.rejection.issues != null && (\n !Array.isArray(data.rejection.issues)\n || data.rejection.issues.some((issue) => (\n !issue\n || typeof issue !== \"object\"\n || typeof issue.description !== \"string\"\n || (issue.code != null && typeof issue.code !== \"string\")\n ))\n ))\n ))\n ) {\n throw new Error(\"The billing service returned an invalid bill lifecycle.\");\n }\n return data as BillLifecycleData;\n}\n\nfunction normalizeDeliveryOptions(value: unknown): BillDeliveryOptions {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The billing service returned invalid delivery options.\");\n }\n const data = value as Partial<BillDeliveryOptions>;\n if (\n typeof data.payerName !== \"string\"\n || !data.recommended\n || typeof data.recommended !== \"object\"\n || ![\"ebill\", \"fax\", \"mail\", \"email\"].includes(data.recommended.route ?? \"\")\n || !Array.isArray(data.options)\n || !data.contacts\n ) {\n throw new Error(\"The billing service returned invalid delivery options.\");\n }\n return data as BillDeliveryOptions;\n}\n\nfunction idempotencyKey(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") return globalThis.crypto.randomUUID();\n return `mb-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n\n/**\n * Browser-safe client for one atomic create-and-submit operation.\n *\n * The browser session is short-lived and origin-bound. The host application\n * never needs the Partner API document schema or a long-lived API key.\n */\nexport function createBillSubmissionClient({\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillSubmissionClientOptions = {}): BillSubmissionClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n let session: BillLifecycleSession | null = null;\n let sessionRequest: Promise<BillLifecycleSession> | null = null;\n\n const mintSession = async (signal: AbortSignal, force = false): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n if (!force && sessionRequest) return sessionRequest;\n const pending = getSession\n ? getSession({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n signal,\n }).then(async (response) => {\n if (!response.ok) throw await responseError(response, \"The billing session could not be created.\");\n return response.json();\n });\n const request = Promise.resolve(pending).then(normalizeSession).then((nextSession) => {\n session = nextSession;\n return nextSession;\n }).finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const submitBill = async (\n input: BrowserBillSubmissionInput,\n options: { idempotencyKey?: string } = {},\n ): Promise<BrowserBillSubmissionResult> => {\n const controller = new AbortController();\n const requestIdempotencyKey = options.idempotencyKey ?? idempotencyKey();\n let browserSession = await mintSession(controller.signal);\n const perform = (current: BillLifecycleSession) => {\n const base = (current.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n return fetcher(`${base}/partner/v2/browser/bills`, {\n method: \"POST\",\n headers: {\n authorization: `Bearer ${current.token}`,\n \"content-type\": \"application/json\",\n \"idempotency-key\": requestIdempotencyKey,\n },\n body: JSON.stringify(input),\n signal: controller.signal,\n });\n };\n let response = await perform(browserSession);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(controller.signal, true);\n response = await perform(browserSession);\n }\n if (!response.ok) throw await responseError(response, \"The bill could not be submitted.\");\n const body: unknown = await response.json().catch(() => null);\n const envelope = body && typeof body === \"object\" && \"data\" in body\n ? (body as { data?: unknown }).data\n : body;\n if (!envelope || typeof envelope !== \"object\" || typeof (envelope as { id?: unknown }).id !== \"string\") {\n throw new Error(\"The billing service submitted the bill but returned an invalid bill ID.\");\n }\n const bill = envelope as BrowserSubmittedBill;\n return { billId: bill.id, bill };\n };\n\n return {\n submitBill,\n clearSession() { session = null; sessionRequest = null; },\n };\n}\n\n/** Browser-safe, framework-neutral client for an already-submitted bill. */\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\") throw new Error(\"A Fetch API implementation is required.\");\n let session: BillLifecycleSession | null = null;\n let sessionRequest: Promise<BillLifecycleSession> | null = null;\n const currentBillId = billId.trim();\n if (!currentBillId) throw new Error(\"billId is required for the submitted-bill lifecycle client.\");\n\n const mintSession = async (signal: AbortSignal, force = false): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n if (!force && sessionRequest) return sessionRequest;\n const pending = getSession\n ? getSession({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n signal,\n }).then(async (response) => {\n if (!response.ok) throw await responseError(response, \"The billing session could not be created.\");\n return response.json();\n });\n const request = Promise.resolve(pending).then(normalizeSession).then((nextSession) => {\n session = nextSession;\n return nextSession;\n }).finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const request = async (path: string, init: RequestInit = {}, providedSignal?: AbortSignal): 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 billPath = (suffix = \"\"): string =>\n `/partner/v2/browser/bills/${encodeURIComponent(currentBillId)}${suffix}`;\n\n const loadLifecycle = async (signal?: AbortSignal) => {\n const response = await request(billPath(\"/lifecycle\"), {}, signal);\n if (!response.ok) throw await responseError(response, \"Bill lifecycle could not be loaded.\");\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const searchClaimsAdministrators = async (query: string, claimNumber?: string): 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(`/partner/v2/browser/claims-administrators?${params.toString()}`);\n if (!response.ok) throw await responseError(response, \"Claims administrator search is unavailable.\");\n const body = await response.json() as { results?: unknown };\n if (!Array.isArray(body.results)) throw new Error(\"Claims administrator search returned an invalid response.\");\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\") return [];\n return [{\n id: payer.id,\n name: payer.name,\n ...(typeof payer.hasElectronic === \"boolean\" ? { hasElectronic: payer.hasElectronic } : {}),\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 ? { confidence: payer.confidence as NonNullable<BillReviewPayer[\"confidence\"]> }\n : {}),\n ...(typeof payer.recommended === \"boolean\" ? { recommended: payer.recommended } : {}),\n ...(Array.isArray(payer.signals)\n ? {\n signals: payer.signals.flatMap((signal) => {\n if (!signal || typeof signal !== \"object\") return [];\n const candidate = signal as { kind?: unknown; state?: unknown; label?: unknown };\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 searchDiagnosisCodes = async (query: string, limit = 30, offset = 0): Promise<BillDiagnosisCode[]> => {\n const params = new URLSearchParams({ q: query.trim(), limit: String(Math.max(1, Math.min(100, limit))) });\n if (offset > 0) params.set(\"offset\", String(Math.max(0, Math.floor(offset))));\n const response = await request(`/partner/v2/browser/diagnosis-codes?${params.toString()}`);\n if (!response.ok) throw await responseError(response, \"Diagnosis-code search is unavailable.\");\n const body = await response.json() as { results?: unknown };\n if (!Array.isArray(body.results)) throw new Error(\"Diagnosis-code search returned an invalid response.\");\n return body.results.flatMap((value): BillDiagnosisCode[] => {\n if (!value || typeof value !== \"object\") return [];\n const candidate = value as { code?: unknown; description?: unknown };\n return typeof candidate.code === \"string\" && typeof candidate.description === \"string\"\n ? [{ code: candidate.code, description: candidate.description }]\n : [];\n });\n };\n\n const lookupPostalCode = async (postalCode: string): Promise<BillPostalPlace | null> => {\n const params = new URLSearchParams({ postalCode: postalCode.trim() });\n const response = await request(`/partner/v2/browser/postal-codes?${params.toString()}`);\n if (response.status === 404) return null;\n if (!response.ok) throw await responseError(response, \"ZIP lookup is unavailable.\");\n const body = await response.json() as { city?: unknown; state?: unknown };\n if (typeof body.city !== \"string\" || typeof body.state !== \"string\") {\n throw new Error(\"ZIP lookup returned an invalid response.\");\n }\n return { city: body.city, state: body.state };\n };\n\n const mutation = async (path: string, init: RequestInit, fallback: string) => {\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 const action = async (input: Record<string, unknown>, fallback: string): Promise<BillLifecycleData> => {\n const response = await mutation(billPath(\"/actions\"), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n }, fallback);\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n const simulateSandbox = async (input: SimulateSandboxBillInput): Promise<BillLifecycleData> => {\n const response = await mutation(billPath(\"/simulate\"), {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n }, \"Sandbox lifecycle could not be simulated.\");\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n return {\n getBillId() { return currentBillId; },\n clearSession() { session = null; sessionRequest = null; },\n getLifecycle: loadLifecycle,\n searchClaimsAdministrators,\n searchDiagnosisCodes,\n lookupPostalCode,\n async getDeliveryOptions() {\n const response = await request(billPath(\"/delivery-options\"));\n if (!response.ok) throw await responseError(response, \"Delivery options could not be loaded.\");\n const body = await response.json() as { data?: unknown };\n return normalizeDeliveryOptions(body.data ?? body);\n },\n async getDeliveryPreview(input) {\n const params = new URLSearchParams({ claimsAdministratorId: input.claimsAdministratorId.trim() });\n if (input.injuryState?.trim()) params.set(\"injuryState\", input.injuryState.trim());\n const response = await request(`/partner/v2/browser/delivery-preview?${params.toString()}`);\n if (!response.ok) throw await responseError(response, \"Delivery routes could not be loaded.\");\n const body = await response.json() as { data?: unknown };\n return normalizeDeliveryOptions(body.data ?? body);\n },\n async getAttachment(attachmentId) {\n const response = await request(billPath(`/documents/${encodeURIComponent(attachmentId)}`));\n if (!response.ok) throw await responseError(response, \"Document could not be opened.\");\n return response.blob();\n },\n async getEor(documentId) {\n const response = await request(billPath(`/eors/${encodeURIComponent(documentId)}`));\n if (!response.ok) throw await responseError(response, \"EOR could not be opened.\");\n return response.blob();\n },\n async getPacket() {\n const response = await request(billPath(\"/packet\"));\n if (!response.ok) throw await responseError(response, \"Submission packet could not be downloaded.\");\n return response.blob();\n },\n closeBill(input) { return action({ action: \"close\", ...input }, \"Bill could not be closed.\"); },\n reopenBill(input) { return action({ action: \"reopen\", ...input }, \"Bill could not be reopened.\"); },\n postPayment(input) { return action({ action: \"post_payment\", penaltyAmount: 0, interestAmount: 0, ...input, checkNumber: input.checkNumber ?? \"\" }, \"Payment could not be posted.\"); },\n submitSecondReview(input) { return action({ action: \"second_review\", ...input }, \"Second Review could not be submitted.\"); },\n resubmitBill(input) { return action({ action: \"resubmit\", ...input }, \"Bill could not be resubmitted.\"); },\n sendDuplicateBill(input) { return action({ action: \"send_duplicate\", ...input }, \"Duplicate bill could not be sent.\"); },\n reportBillStatus(input) { return action({ action: \"report_bill_status\", ...input }, \"Bill status could not be reported.\"); },\n simulateSandbox,\n };\n}\n\n/**\n * Browser-safe client for reference data needed before a bill exists.\n *\n * Partners can pass the same short-lived session provider used by the submitted-bill\n * lifecycle without inventing a draft bill or exposing payer directory credentials.\n */\nexport function createBillReferenceClient(\n options: BillReferenceClientOptions = {},\n): BillReferenceClient {\n const lifecycle = createBillLifecycleClient({\n ...options,\n billId: \"pre-submission-reference-data\",\n });\n return {\n searchClaimsAdministrators: lifecycle.searchClaimsAdministrators,\n searchDiagnosisCodes: lifecycle.searchDiagnosisCodes,\n lookupPostalCode: lifecycle.lookupPostalCode,\n getDeliveryPreview: lifecycle.getDeliveryPreview,\n clearSession: lifecycle.clearSession,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Organization profile client (INC-1470): backs the embeddable\n// OrganizationOnboarding / BillingSettings components. Requires a browser\n// session minted with the OPTIONAL organization:manage permission; sessions\n// without it are rejected by the API and nothing else changes.\n\nexport type OrganizationPracticeIdentity = {\n name?: string; legalName?: string; taxId?: string; npi?: string;\n phone?: string; email?: string; website?: string;\n};\n\nexport type OrganizationBillingProviderInput = {\n id?: string; externalId?: string; name: string; taxId: string; npi: string;\n billType?: \"Professional\" | \"Institutional\"; phone?: string;\n billingStreet?: string; billingCity?: string; billingState?: string; billingZip?: string;\n};\n\nexport type OrganizationLocationInput = {\n id?: string; externalId?: string; name: string; street: string; city: string;\n state: string; zip: string; nickname?: string; posCode?: string;\n isPrimary?: boolean; active?: boolean;\n};\n\nexport type OrganizationChecklistItem = { id: string; label: string; complete: boolean };\n\nexport type OrganizationProfileData = {\n organizationId: string;\n practiceIdentity: OrganizationPracticeIdentity;\n billingProviders: Array<OrganizationBillingProviderInput & { id: string }>;\n locations: Array<OrganizationLocationInput & { id: string }>;\n w9: { filename: string; addDate: string; taxYear?: number } | null;\n onboarding: { status: string | null; complete: boolean; checklist: OrganizationChecklistItem[] };\n};\n\nexport type OrganizationClientOptions = {\n sessionEndpoint?: string;\n getSession?: BillLifecycleSessionProvider;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n};\n\nexport type OrganizationClient = {\n getOrganization: () => Promise<OrganizationProfileData>;\n saveBillingProfile: (input: {\n practiceIdentity?: OrganizationPracticeIdentity;\n billingProviders?: OrganizationBillingProviderInput[];\n }) => Promise<OrganizationProfileData>;\n saveLocations: (locations: OrganizationLocationInput[]) => Promise<OrganizationProfileData>;\n saveW9: (input: { filename: string; contentBase64: string; taxYear?: number }) => Promise<OrganizationProfileData>;\n};\n\nexport function createOrganizationClient({\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: OrganizationClientOptions = {}): OrganizationClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n let session: BillLifecycleSession | null = null;\n\n const mintSession = async (force = false): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n const pending = getSession\n ? getSession({ signal: new AbortController().signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\n }).then(async (response) => {\n if (!response.ok) throw await responseError(response, \"The organization session could not be created.\");\n return response.json();\n });\n session = normalizeSession(await Promise.resolve(pending));\n return session;\n };\n\n const request = async (path: string, init: RequestInit = {}): Promise<OrganizationProfileData> => {\n let current = await mintSession();\n const perform = (active: BillLifecycleSession) => {\n const base = (active.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n const headers = new Headers(init.headers);\n headers.set(\"authorization\", `Bearer ${active.token}`);\n if (init.body) headers.set(\"content-type\", \"application/json\");\n return fetcher(`${base}${path}`, { ...init, headers });\n };\n let response = await perform(current);\n if (response.status === 401) {\n current = await mintSession(true);\n response = await perform(current);\n }\n if (!response.ok) throw await responseError(response, \"The organization request failed.\");\n const body = (await response.json()) as { data?: OrganizationProfileData };\n if (!body.data || typeof body.data !== \"object\") {\n throw new Error(\"The organization response was invalid.\");\n }\n return body.data;\n };\n\n return {\n getOrganization: () => request(\"/partner/v2/browser/organization\"),\n saveBillingProfile: (input) =>\n request(\"/partner/v2/browser/organization/billing-profile\", { method: \"PUT\", body: JSON.stringify(input) }),\n saveLocations: (locations) =>\n request(\"/partner/v2/browser/organization/locations\", { method: \"PUT\", body: JSON.stringify({ locations }) }),\n saveW9: (input) =>\n request(\"/partner/v2/browser/organization/w9\", { method: \"PUT\", body: JSON.stringify(input) }),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Bill Tasks dashboard (daisyBill-style worklist): a pure, framework-neutral\n// aggregation shared by the React and Angular components. Hosts flatten their\n// own work items and get back per-section rows bucketed by age in days.\n\nexport type BillTasksAgingBucket = {\n id: string;\n label: string;\n /** Exclusive lower bound in days. The first bucket also admits day 0. */\n minDays: number;\n /** Inclusive upper bound in days; null means unbounded. */\n maxDays: number | null;\n};\n\nexport const BILL_TASKS_AGING_BUCKETS: BillTasksAgingBucket[] = [\n { id: \"1-30\", label: \"1-30 Days Ago\", minDays: 0, maxDays: 30 },\n { id: \"31-60\", label: \"31-60 Days Ago\", minDays: 30, maxDays: 60 },\n { id: \"61-90\", label: \"61-90 Days Ago\", minDays: 60, maxDays: 90 },\n { id: \"91-180\", label: \"91-180 Days Ago\", minDays: 90, maxDays: 180 },\n { id: \"181+\", label: \"181+ Days Ago\", minDays: 180, maxDays: null },\n];\n\nexport type BillTasksDashboardItem = {\n sectionId: string;\n rowId: string;\n rowLabel: string;\n ageDays: number;\n balanceDue?: number;\n /** Opaque bill reference echoed back in click-through payloads. */\n ref?: string;\n};\n\nexport type BillTasksDashboardRow = {\n id: string;\n label: string;\n /** One count per aging bucket, in bucket order. */\n counts: number[];\n total: number;\n /** Collected item refs per aging bucket, in bucket order. */\n refs: string[][];\n};\n\nexport type BillTasksDashboardTone = \"violet\" | \"red\" | \"blue\" | \"green\" | \"amber\" | \"neutral\";\n\nexport type BillTasksDashboardSectionInput = {\n id: string;\n label: string;\n /** Shown under the section label as \"by {agingBasisLabel}\". */\n agingBasisLabel: string;\n tone: BillTasksDashboardTone;\n};\n\nexport type BillTasksDashboardSection = BillTasksDashboardSectionInput & {\n rows: BillTasksDashboardRow[];\n /** Per-bucket totals across the section's rows. */\n totals: number[];\n total: number;\n empty: boolean;\n};\n\nexport type BillTasksDashboardData = {\n sections: BillTasksDashboardSection[];\n grandTotals: number[];\n grandTotal: number;\n};\n\n/**\n * Bucket index for an item age: a bucket admits `minDays < ageDays <= maxDays`\n * (`maxDays: null` = unbounded) and the first bucket also admits day 0.\n * Ages beyond every bucket clamp into the last bucket.\n */\nexport function billTasksAgingBucketIndex(\n ageDays: number,\n buckets: BillTasksAgingBucket[] = BILL_TASKS_AGING_BUCKETS,\n): number {\n const days = Math.max(0, Math.floor(ageDays));\n const index = buckets.findIndex((bucket, position) =>\n (bucket.maxDays === null || days <= bucket.maxDays)\n && (days > bucket.minDays || position === 0));\n return index === -1 ? buckets.length - 1 : index;\n}\n\n/**\n * Aggregates flat work items into the daisyBill-style Bill Tasks dashboard.\n * Sections render in the given order even when empty; rows appear in\n * first-seen item order within their section.\n */\nexport function buildBillTasksDashboard(\n items: BillTasksDashboardItem[],\n sections: BillTasksDashboardSectionInput[],\n buckets: BillTasksAgingBucket[] = BILL_TASKS_AGING_BUCKETS,\n): BillTasksDashboardData {\n const zeros = () => buckets.map(() => 0);\n const built = sections.map((section): BillTasksDashboardSection => ({\n ...section,\n rows: [],\n totals: zeros(),\n total: 0,\n empty: true,\n }));\n const sectionById = new Map(built.map((section) => [section.id, section]));\n const rowByKey = new Map<string, BillTasksDashboardRow>();\n const grandTotals = zeros();\n let grandTotal = 0;\n\n for (const item of items) {\n const section = sectionById.get(item.sectionId);\n if (!section) continue;\n const key = `${item.sectionId}\u0000${item.rowId}`;\n let row = rowByKey.get(key);\n if (!row) {\n row = {\n id: item.rowId,\n label: item.rowLabel,\n counts: zeros(),\n total: 0,\n refs: buckets.map(() => []),\n };\n rowByKey.set(key, row);\n section.rows.push(row);\n section.empty = false;\n }\n const bucketIndex = billTasksAgingBucketIndex(item.ageDays, buckets);\n row.counts[bucketIndex] = (row.counts[bucketIndex] ?? 0) + 1;\n row.total += 1;\n if (item.ref) row.refs[bucketIndex]?.push(item.ref);\n section.totals[bucketIndex] = (section.totals[bucketIndex] ?? 0) + 1;\n section.total += 1;\n grandTotals[bucketIndex] = (grandTotals[bucketIndex] ?? 0) + 1;\n grandTotal += 1;\n }\n\n return { sections: built, grandTotals, grandTotal };\n}\n"],"mappings":"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","names":["request"]}
|