@mindbill/angular 0.17.0 → 0.18.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.
@@ -1 +1 @@
1
- {"version":3,"file":"mindbill-angular.mjs","sources":["../../src/lib/lifecycle-store.ts","../../src/lib/appearance.ts","../../src/lib/bill-rejection.ts","../../src/lib/bill-rejection-notice.component.ts","../../src/lib/submission-format.ts","../../src/lib/submission-controls.ts","../../src/lib/bill-submission.component.ts","../../src/lib/bill-lifecycle.component.ts","../../src/lib/procedure-lines.ts","../../src/lib/billing-dashboard.component.ts","../../src/lib/status-aging-matrix.ts","../../src/lib/status-aging-matrix.component.ts","../../src/lib/bill-tasks-dashboard.ts","../../src/lib/bill-tasks-dashboard.component.ts","../../src/lib/billing-management-button.component.ts","../../src/lib/organization-onboarding.component.ts","../../src/mindbill-angular.ts"],"sourcesContent":["import { computed, signal } from \"@angular/core\";\nimport {\n createBillLifecycleClient,\n type BillLifecycleClient,\n type BillLifecycleClientOptions,\n type BillLifecycleData,\n type CloseBillInput,\n type PostBillPaymentInput,\n type ReportBillStatusInput,\n type ResubmitBillInput,\n type SendDuplicateBillInput,\n type SubmitNewBillInput,\n type SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\n\nexport class MindBillLifecycleStore {\n readonly billId = signal(\"\");\n readonly data = signal<BillLifecycleData | null>(null);\n readonly error = signal<Error | null>(null);\n readonly loading = signal(false);\n readonly mutating = signal(false);\n readonly ready = computed(() => this.data() !== null && !this.loading());\n private client: BillLifecycleClient | null = null;\n private refreshTimer: ReturnType<typeof setInterval> | null = null;\n\n connect(\n options: BillLifecycleClientOptions,\n refreshInterval = 60_000,\n ): void {\n this.disconnect();\n this.billId.set(options.billId);\n this.client = createBillLifecycleClient(options);\n void this.refresh();\n if (refreshInterval > 0) {\n this.refreshTimer = setInterval(() => void this.refresh(), refreshInterval);\n }\n }\n\n disconnect(): void {\n if (this.refreshTimer) clearInterval(this.refreshTimer);\n this.refreshTimer = null;\n this.client?.clearSession();\n this.client = null;\n }\n\n async refresh(): Promise<BillLifecycleData | null> {\n if (!this.client) return null;\n this.loading.set(this.data() === null);\n try {\n const data = await this.client.getLifecycle();\n this.data.set(data);\n this.error.set(null);\n return data;\n } catch (cause) {\n this.error.set(cause instanceof Error ? cause : new Error(\"Bill could not be loaded.\"));\n return null;\n } finally {\n this.loading.set(false);\n }\n }\n\n getDeliveryOptions() { return this.requireClient().getDeliveryOptions(); }\n getAttachment(id: string) { return this.requireClient().getAttachment(id); }\n getEor(id: string) { return this.requireClient().getEor(id); }\n closeBill(input: CloseBillInput) { return this.mutate(() => this.requireClient().closeBill(input)); }\n postPayment(input: PostBillPaymentInput) { return this.mutate(() => this.requireClient().postPayment(input)); }\n resubmitBill(input: ResubmitBillInput) { return this.mutate(() => this.requireClient().resubmitBill(input)); }\n submitNewBill(input: SubmitNewBillInput) { return this.mutate(() => this.requireClient().submitNewBill(input)); }\n submitSecondReview(input: SubmitSecondReviewInput) { return this.mutate(() => this.requireClient().submitSecondReview(input)); }\n sendDuplicateBill(input: SendDuplicateBillInput) { return this.mutate(() => this.requireClient().sendDuplicateBill(input)); }\n reportBillStatus(input: ReportBillStatusInput) { return this.mutate(() => this.requireClient().reportBillStatus(input)); }\n\n private requireClient(): BillLifecycleClient {\n if (!this.client) throw new Error(\"Connect the lifecycle store before using it.\");\n return this.client;\n }\n\n private async mutate(task: () => Promise<BillLifecycleData>): Promise<BillLifecycleData> {\n this.mutating.set(true);\n this.error.set(null);\n try {\n const data = await task();\n this.data.set(data);\n return data;\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(\"The billing request could not be completed.\");\n this.error.set(error);\n throw error;\n } finally {\n this.mutating.set(false);\n }\n }\n}\n","export type MindBillAngularThemePreset = \"mindbill\" | \"qme-companion\" | \"orange-bright\" | \"clinical-blue\";\n\nexport type MindBillAngularAppearance = {\n preset?: MindBillAngularThemePreset;\n accentColor?: string;\n accentTextColor?: string;\n backgroundColor?: string;\n surfaceColor?: string;\n textColor?: string;\n mutedColor?: string;\n borderColor?: string;\n borderRadius?: string;\n controlRadius?: string;\n fontFamily?: string;\n dangerColor?: string;\n};\n\nconst THEMES: Record<MindBillAngularThemePreset, Required<MindBillAngularAppearance>> = {\n mindbill: { preset: \"mindbill\", accentColor: \"#238dbd\", accentTextColor: \"#fff\", backgroundColor: \"#f3f8fa\", surfaceColor: \"#fff\", textColor: \"#203743\", mutedColor: \"#657982\", borderColor: \"#dbe6ea\", borderRadius: \"14px\", controlRadius: \"8px\", fontFamily: \"Inter,system-ui,sans-serif\", dangerColor: \"#b63d35\" },\n \"qme-companion\": { preset: \"qme-companion\", accentColor: \"#53b5dc\", accentTextColor: \"#173542\", backgroundColor: \"#f2f8fb\", surfaceColor: \"#fff\", textColor: \"#1d3440\", mutedColor: \"#617783\", borderColor: \"#d7e5eb\", borderRadius: \"12px\", controlRadius: \"8px\", fontFamily: \"Inter,system-ui,sans-serif\", dangerColor: \"#b83f3a\" },\n \"orange-bright\": { preset: \"orange-bright\", accentColor: \"#f4510b\", accentTextColor: \"#fff\", backgroundColor: \"#fffaf6\", surfaceColor: \"#fffefd\", textColor: \"#090f1f\", mutedColor: \"#626a73\", borderColor: \"#e7e1da\", borderRadius: \"16px\", controlRadius: \"10px\", fontFamily: \"Inter,system-ui,sans-serif\", dangerColor: \"#c4322b\" },\n \"clinical-blue\": { preset: \"clinical-blue\", accentColor: \"#1677ff\", accentTextColor: \"#fff\", backgroundColor: \"#f5f7fa\", surfaceColor: \"#fff\", textColor: \"#1f2d3d\", mutedColor: \"#66788a\", borderColor: \"#d9e2ec\", borderRadius: \"8px\", controlRadius: \"6px\", fontFamily: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\", dangerColor: \"#d4380d\" },\n};\n\nexport function mindBillAngularAppearanceStyle(appearance: MindBillAngularAppearance = { preset: \"mindbill\" }): Record<string, string> {\n const base = THEMES[appearance.preset ?? \"mindbill\"];\n return {\n \"--a\": appearance.accentColor ?? base.accentColor,\n \"--ac\": appearance.accentTextColor ?? base.accentTextColor,\n \"--bg\": appearance.backgroundColor ?? base.backgroundColor,\n \"--s\": appearance.surfaceColor ?? base.surfaceColor,\n \"--t\": appearance.textColor ?? base.textColor,\n \"--m\": appearance.mutedColor ?? base.mutedColor,\n \"--b\": appearance.borderColor ?? base.borderColor,\n \"--r\": appearance.borderRadius ?? base.borderRadius,\n \"--cr\": appearance.controlRadius ?? base.controlRadius,\n \"--font\": appearance.fontFamily ?? base.fontFamily,\n \"--danger\": appearance.dangerColor ?? base.dangerColor,\n };\n}\n","import type { BillRejection, BillRejectionIssue } from \"@mindbill/browser\";\n\nexport function billRejectionIssues(rejection: BillRejection): BillRejectionIssue[] {\n return rejection.issues?.length\n ? [...rejection.issues]\n : [{ code: rejection.code ?? null, description: rejection.reason }];\n}\n\nexport function billRejectionIssueSummary(rejection: BillRejection, count: number): string {\n const noun = count === 1 ? \"validation error\" : \"validation errors\";\n const source = rejection.source?.trim().replace(/\\.$/, \"\");\n if (!source) return `${count} ${noun}.`;\n if (/acknowledg/i.test(source)) return `${count} clearinghouse ${noun}.`;\n return `${count} ${noun} returned by ${source}.`;\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, Input } from \"@angular/core\";\nimport type { BillRejection } from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./appearance\";\nimport { mindBillAngularAppearanceStyle } from \"./appearance\";\nimport { billRejectionIssues, billRejectionIssueSummary } from \"./bill-rejection\";\n\n@Component({\n selector: \"mindbill-bill-rejection-notice\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <section class=\"notice\" [ngStyle]=\"themeStyle\" role=\"alert\" aria-label=\"Bill rejection reasons\">\n <div class=\"overview\">\n <header>\n <span class=\"icon\" aria-hidden=\"true\">!</span>\n <div><strong>{{ title }}</strong><span>Fix the {{ issues.length === 1 ? 'issue' : 'issues' }} below, then resubmit.</span></div>\n </header>\n <ol class=\"progress\" aria-label=\"Submission status\">\n <li><span aria-hidden=\"true\">✓</span><b>Sent</b>@if (submittedAt) { <small>{{ formatDate(submittedAt) }}</small> }</li>\n <li class=\"rejected\" aria-current=\"step\"><span aria-hidden=\"true\">!</span><b>Rejected</b>@if (rejection.receivedAt) { <small>{{ formatDate(rejection.receivedAt) }}</small> }</li>\n </ol>\n </div>\n <div class=\"issues\" aria-label=\"Rejection reasons\">\n <div class=\"issues-heading\"><strong><span aria-hidden=\"true\">△</span> Rejection reasons</strong><span>{{ issueSummary }}</span></div>\n <ol [attr.aria-label]=\"issues.length + ' rejection ' + (issues.length === 1 ? 'reason' : 'reasons')\">\n @for (issue of issues; track $index) {\n <li><span class=\"bullet\" aria-hidden=\"true\"></span><p>{{ issue.description }}</p>@if (issue.code) { <span class=\"code\">{{ issue.code }}</span> }</li>\n }\n </ol>\n @if (hasCodes) { <p class=\"code-note\"><span aria-hidden=\"true\">i</span> Technical error codes are included for support and auditability.</p> }\n </div>\n </section>\n `,\n styles: [`\n :host{display:block}.notice,.notice *{box-sizing:border-box}.notice{font-family:var(--font,Inter,system-ui,sans-serif);color:var(--t,#203743);border:1px solid color-mix(in srgb,var(--danger) 30%,var(--b));border-left:4px solid var(--danger);border-radius:var(--r,14px);background:color-mix(in srgb,var(--danger) 5%,var(--s));box-shadow:0 14px 38px color-mix(in srgb,var(--danger) 9%,transparent);padding:26px 28px 18px}.overview{display:grid;grid-template-columns:minmax(230px,.72fr) minmax(360px,1.28fr);align-items:start;gap:38px}header{display:flex;align-items:flex-start;gap:14px}header>div{display:grid;gap:5px}header strong{color:var(--danger);font-size:19px;line-height:1.25}header div>span{color:color-mix(in srgb,var(--danger) 48%,var(--t));font-size:14px;line-height:1.45}.icon{display:grid;place-items:center;flex:0 0 auto;width:42px;height:42px;border-radius:50%;background:var(--danger);box-shadow:0 5px 14px color-mix(in srgb,var(--danger) 25%,transparent);color:#fff;font-size:21px;font-weight:900}.progress{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));list-style:none;margin:5px 0 24px;padding:0}.progress li{display:grid;grid-template-rows:34px auto auto;gap:4px;position:relative;text-align:center;font-size:12px}.progress li:first-child:after{content:\"\";position:absolute;left:calc(50% + 17px);right:calc(-50% + 17px);top:16px;height:2px;background:color-mix(in srgb,var(--danger) 48%,var(--b))}.progress li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:34px;height:34px;border:2px solid color-mix(in srgb,var(--danger) 32%,var(--b));border-radius:50%;background:var(--s);color:var(--danger);font-size:16px;font-weight:900}.progress li.rejected>span{border-color:var(--danger);background:var(--danger);color:#fff}.progress b{font-size:13px}.progress small{color:var(--m);font-size:11px;line-height:1.3}.issues{border:1px solid color-mix(in srgb,var(--danger) 19%,var(--b));border-radius:12px;background:color-mix(in srgb,var(--danger) 2%,var(--s));overflow:hidden}.issues-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--danger) 14%,var(--b))}.issues-heading strong{display:flex;align-items:center;gap:8px;font-size:13px}.issues-heading strong>span{color:var(--danger);font-size:17px}.issues-heading>span{color:var(--m);font-size:12px;text-align:right}.issues ol{display:grid;gap:7px;list-style:none;margin:0;padding:10px 12px}.issues li{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:11px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--danger) 11%,var(--b));border-radius:8px;background:color-mix(in srgb,var(--danger) 1%,var(--s));box-shadow:0 1px 3px rgba(23,39,48,.04)}.bullet{width:7px;height:7px;border-radius:50%;background:var(--danger)}.issues p{margin:0;font-size:14px;line-height:1.45}.code{justify-self:end;border:1px solid color-mix(in srgb,var(--danger) 20%,var(--b));border-radius:999px;background:color-mix(in srgb,var(--danger) 6%,var(--s));color:var(--danger);font-size:11px;font-weight:850;line-height:1.2;padding:4px 8px}.code-note{display:flex;align-items:center;gap:7px;margin:0;padding:1px 16px 13px;color:var(--m);font-size:11px}.code-note>span{display:grid;place-items:center;width:16px;height:16px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:850}@media(max-width:700px){.notice{padding:18px 14px 14px}.overview{grid-template-columns:1fr;gap:18px}header strong{font-size:17px}.icon{width:36px;height:36px}.progress{margin:0 0 4px}.issues-heading{align-items:flex-start;flex-direction:column;gap:4px}.issues-heading>span{text-align:left}.issues li{grid-template-columns:8px minmax(0,1fr);gap:8px 10px}.code{grid-column:2;justify-self:start}}\n `],\n})\nexport class MindBillBillRejectionNoticeComponent {\n @Input({ required: true }) rejection!: BillRejection;\n @Input() submittedAt: string | null = null;\n @Input() title = \"Rejected — action required\";\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n\n get issues() { return billRejectionIssues(this.rejection); }\n get hasCodes(): boolean { return this.issues.some((issue) => Boolean(issue.code)); }\n get issueSummary(): string { return billRejectionIssueSummary(this.rejection, this.issues.length); }\n get themeStyle(): Record<string, string> { return mindBillAngularAppearanceStyle(this.appearance); }\n formatDate(value: string): string { const parsed = new Date(value); return Number.isNaN(parsed.getTime()) ? value : new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\", timeStyle: \"short\" }).format(parsed); }\n}\n","/** Date helpers shared by the Angular submission surfaces. Mirrors the React\n * package's parseBillSubmissionDate/formatBillSubmissionDate exactly so both\n * frameworks accept and render the same values. */\n\nexport function parseMindBillSubmissionDate(value: string): string | undefined {\n const trimmed = value.trim();\n const iso = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(trimmed);\n const us = /^(\\d{1,2})[/-](\\d{1,2})[/-](\\d{4})$/.exec(trimmed);\n const digits = /^(\\d{2})(\\d{2})(\\d{4})$/.exec(trimmed.replace(/\\D/g, \"\"));\n const match = iso ? [iso[2], iso[3], iso[1]] : us ? [us[1], us[2], us[3]] : digits ? [digits[1], digits[2], digits[3]] : null;\n if (!match) return undefined;\n const month = Number(match[0]);\n const day = Number(match[1]);\n const year = Number(match[2]);\n const date = new Date(Date.UTC(year, month - 1, day));\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return undefined;\n return `${String(year).padStart(4, \"0\")}-${String(month).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}`;\n}\n\nexport function formatMindBillSubmissionDate(value: string | null | undefined): string {\n const parsed = value ? parseMindBillSubmissionDate(value) : undefined;\n if (!parsed) return \"\";\n const [year, month, day] = parsed.split(\"-\");\n return `${month}/${day}/${year}`;\n}\n\nexport type MindBillProcedureComboOption = { id: string; label: string; detail?: string };\n\n/** Accepts complete CPT (5 digits), HCPCS (letter + 4 digits), or California\n * medical-legal codes typed directly into the procedure picker. */\nexport function mindBillCustomProcedureOption(query: string): MindBillProcedureComboOption | null {\n const code = query.trim().toUpperCase().replace(/\\s+/g, \"\");\n if (!/^(?:\\d{5}|[A-Z]\\d{4}|ML(?:20[0-5]|PRR))$/.test(code)) return null;\n return { id: code, label: code, detail: \"Use this CPT, HCPCS, or medical-legal code\" };\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from \"@angular/core\";\nimport { formatMindBillSubmissionDate, parseMindBillSubmissionDate } from \"./submission-format\";\n\nexport type MindBillComboOption = { id: string; label: string; detail?: string };\n\n/** Styled searchable dropdown shared by the submission form's procedure,\n * modifier, taxonomy, payer, and diagnosis pickers. Mirrors the React\n * package's ComboBox: query filtering, optional custom-code creation,\n * loading states, and infinite scroll via (endReached). */\n@Component({\n selector: \"mindbill-combo-box\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"combo\">\n <input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-invalid]=\"invalid || null\"\n [attr.aria-expanded]=\"showMenu\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"open ? query : value\"\n (focus)=\"onFocus()\"\n (click)=\"onFocus()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (showMenu) {\n <div class=\"menu\" role=\"listbox\" (scroll)=\"onScroll($event)\">\n @if (loading && !visible.length) { <div class=\"status\">Loading…</div> }\n @else if (visible.length) {\n @for (option of visible; track option.id) {\n <button type=\"button\" role=\"option\" (mousedown)=\"$event.preventDefault()\" (click)=\"choose(option)\">\n <strong>{{ option.label }}</strong>\n @if (option.detail) { <small>{{ option.detail }}</small> }\n </button>\n }\n } @else { <div class=\"status\">No matches</div> }\n @if (loadingMore) { <div class=\"status\">Loading more…</div> }\n </div>\n }\n </div>\n `,\n styles: [`\n :host{display:block}\n .combo{position:relative}\n input{width:100%;min-height:46px;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 12px;color:var(--t);font:inherit;font-weight:450}\n input:focus{outline:3px solid color-mix(in srgb,var(--a) 22%,transparent);border-color:var(--a)}\n input[aria-invalid=\"true\"]{border-color:#c83c3c}\n .menu{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:30;max-height:320px;overflow:auto;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);box-shadow:0 14px 35px #172b3730}\n .menu button{display:grid;width:100%;gap:3px;border:0;border-bottom:1px solid color-mix(in srgb,var(--b) 60%,transparent);background:var(--s);padding:11px 14px;text-align:left;color:var(--t);font:inherit;cursor:pointer}\n .menu button:last-child{border-bottom:0}\n .menu button:hover{background:color-mix(in srgb,var(--a) 7%,var(--s))}\n .menu strong{font-weight:720}\n .menu small{color:var(--m);font-size:12px}\n .status{padding:11px 14px;color:var(--m);font-size:13px}\n `],\n})\nexport class MindBillComboBoxComponent {\n @Input() value = \"\";\n @Input() placeholder = \"\";\n @Input() options: MindBillComboOption[] = [];\n @Input() disabled = false;\n @Input() loading = false;\n @Input() loadingMore = false;\n @Input() invalid = false;\n @Input() preserveValueOnOpen = false;\n @Input() ariaLabel = \"\";\n @Input() createOption?: (query: string) => MindBillComboOption | null;\n @Output() opened = new EventEmitter<void>();\n @Output() queryChange = new EventEmitter<string>();\n @Output() endReached = new EventEmitter<void>();\n @Output() selected = new EventEmitter<MindBillComboOption>();\n\n open = false;\n query = \"\";\n private closeTimer?: ReturnType<typeof setTimeout>;\n\n get visible(): MindBillComboOption[] {\n const q = this.query.trim().toLowerCase();\n const matches = q\n ? this.options.filter((option) => `${option.id} ${option.label} ${option.detail ?? \"\"}`.toLowerCase().includes(q))\n : this.options;\n const custom = this.createOption?.(this.query) ?? null;\n return custom && !matches.some((option) => option.id.toUpperCase() === custom.id.toUpperCase())\n ? [...matches, custom]\n : matches;\n }\n\n get showMenu(): boolean {\n return this.open && (this.loading || this.visible.length > 0 || this.query.trim().length >= 2);\n }\n\n onFocus(): void {\n clearTimeout(this.closeTimer);\n const next = this.preserveValueOnOpen ? this.value : \"\";\n this.open = true;\n this.query = next;\n this.opened.emit();\n if (next) this.queryChange.emit(next);\n }\n\n onInput(event: Event): void {\n this.open = true;\n this.query = (event.target as HTMLInputElement).value;\n this.queryChange.emit(this.query);\n }\n\n onBlur(): void {\n this.closeTimer = setTimeout(() => { this.open = false; }, 120);\n }\n\n onScroll(event: Event): void {\n const menu = event.currentTarget as HTMLElement;\n if (menu.scrollHeight - menu.scrollTop - menu.clientHeight < 120) this.endReached.emit();\n }\n\n choose(option: MindBillComboOption): void {\n this.selected.emit(option);\n this.open = false;\n this.query = \"\";\n }\n}\n\n/** MM/DD/YYYY masked date input. Emits only parseable ISO dates (or \"\" when\n * cleared) and reformats the display once a complete date round-trips, exactly\n * like the React package's TextDateInput. */\n@Component({\n selector: \"mindbill-date-input\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <input\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n placeholder=\"MM/DD/YYYY\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-invalid]=\"invalid || null\"\n [disabled]=\"disabled\"\n [value]=\"display\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (invalid) { <small>Use MM/DD/YYYY</small> }\n `,\n styles: [`\n :host{display:block}\n input{width:100%;min-height:46px;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 12px;color:var(--t);font:inherit;font-weight:450}\n input:focus{outline:3px solid color-mix(in srgb,var(--a) 22%,transparent);border-color:var(--a)}\n input[aria-invalid=\"true\"]{border-color:#c83c3c}\n small{display:block;margin-top:6px;color:#c83c3c;font-weight:450}\n `],\n})\nexport class MindBillDateInputComponent implements OnChanges {\n @Input() value: string | null | undefined;\n @Input() disabled = false;\n @Input() ariaLabel = \"\";\n @Output() valueChange = new EventEmitter<string>();\n\n display = \"\";\n invalid = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"value\"]) {\n this.display = formatMindBillSubmissionDate(this.value);\n this.invalid = false;\n }\n }\n\n onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).value;\n const parsed = parseMindBillSubmissionDate(next);\n this.display = next;\n this.invalid = Boolean(next && !parsed);\n if (!next.trim()) this.valueChange.emit(\"\");\n else if (parsed) this.valueChange.emit(parsed);\n }\n\n onBlur(): void {\n this.invalid = Boolean(this.display && !parseMindBillSubmissionDate(this.display));\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ChangeDetectorRef, Component, EventEmitter, HostListener, inject, Input, OnChanges, Output, SimpleChanges } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport {\n createBillReferenceClient,\n createBillSubmissionClient,\n defaultBillReviewPayerOption,\n type BillDiagnosisCode,\n type BillLifecycleSessionProvider,\n type BillReviewPayer,\n type BillReviewPayerOption,\n type BrowserBillCreateInput,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionInput,\n type BrowserBillSubmissionResult,\n} from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\nimport { MindBillComboBoxComponent, MindBillDateInputComponent, type MindBillComboOption } from \"./submission-controls\";\nimport { mindBillCustomProcedureOption, parseMindBillSubmissionDate } from \"./submission-format\";\n\nexport type MindBillSubmissionAttachment = Omit<BrowserBillSubmissionDocument, \"contentBase64\"> & {\n contentBase64?: string;\n contentUrl?: string;\n loadBlob?: () => Promise<Blob>;\n locked?: boolean;\n badge?: string;\n};\n\nexport type MindBillSubmissionProcedureOption = {\n code: string;\n description: string;\n allowedAmount?: number;\n};\n\nexport type MindBillSubmissionModifierOption = { code: string; description: string };\nexport type MindBillSubmissionTaxonomyOption = { code: string; description: string };\n\nconst MAX_PDF_BYTES = 25 * 1024 * 1024;\nconst MAX_UPLOAD_BYTES = 100 * 1024 * 1024;\nconst MAX_DOCUMENTS = 20;\n\nconst PROCEDURES: MindBillSubmissionProcedureOption[] = [\n { code: \"ML200\", description: \"Missed appointment for a medical-legal evaluation\", allowedAmount: 503.75 },\n { code: \"ML201\", description: \"Comprehensive medical-legal evaluation\", allowedAmount: 2015 },\n { code: \"ML202\", description: \"Follow-up medical-legal evaluation\", allowedAmount: 1316.25 },\n { code: \"ML203\", description: \"Supplemental medical-legal evaluation\", allowedAmount: 650 },\n { code: \"ML204\", description: \"Medical-legal testimony\", allowedAmount: 113.75 },\n { code: \"ML205\", description: \"Review of sub rosa recordings\", allowedAmount: 81.25 },\n { code: \"MLPRR\", description: \"Medical-legal record review\", allowedAmount: 3 },\n { code: \"90791\", description: \"Psychiatric diagnostic evaluation\" },\n { code: \"90792\", description: \"Psychiatric diagnostic evaluation with medical services\" },\n { code: \"90832\", description: \"Psychotherapy, 30 minutes\" },\n { code: \"90834\", description: \"Psychotherapy, 45 minutes\" },\n { code: \"90837\", description: \"Psychotherapy, 60 minutes\" },\n { code: \"99203\", description: \"New patient office visit, level 3\" },\n { code: \"99204\", description: \"New patient office visit, level 4\" },\n { code: \"99205\", description: \"New patient office visit, level 5\", allowedAmount: 349.48 },\n { code: \"99213\", description: \"Established patient office visit, level 3\" },\n { code: \"99214\", description: \"Established patient office visit, level 4\" },\n { code: \"99215\", description: \"Established patient office visit, level 5\" },\n { code: \"96130\", description: \"Psychological testing evaluation, first hour\" },\n { code: \"96131\", description: \"Psychological testing evaluation, each additional hour\", allowedAmount: 131.96 },\n { code: \"97161\", description: \"Physical therapy evaluation, low complexity\" },\n { code: \"97162\", description: \"Physical therapy evaluation, moderate complexity\" },\n { code: \"97163\", description: \"Physical therapy evaluation, high complexity\" },\n { code: \"97110\", description: \"Therapeutic exercises\" },\n { code: \"97140\", description: \"Manual therapy techniques\" },\n { code: \"98940\", description: \"Chiropractic manipulative treatment, 1–2 regions\" },\n { code: \"98941\", description: \"Chiropractic manipulative treatment, 3–4 regions\" },\n { code: \"72141\", description: \"MRI cervical spine without contrast\" },\n { code: \"72148\", description: \"MRI lumbar spine without contrast\" },\n { code: \"73721\", description: \"MRI lower-extremity joint without contrast\" },\n { code: \"20610\", description: \"Major joint injection or aspiration\" },\n { code: \"99070\", description: \"Supplies and materials\" },\n];\n\nconst MODIFIERS: MindBillSubmissionModifierOption[] = [\n { code: \"92\", description: \"Primary Treating Physician evaluation\" },\n { code: \"93\", description: \"Interpreter required\" },\n { code: \"94\", description: \"Agreed Medical Evaluator\" },\n { code: \"95\", description: \"Qualified Medical Evaluator\" },\n { code: \"96\", description: \"Psychiatric/psychological evaluation\" },\n { code: \"97\", description: \"Toxicology evaluation\" },\n { code: \"98\", description: \"Oncology evaluation\" },\n { code: \"59\", description: \"Distinct procedural service\" },\n { code: \"XE\", description: \"Separate encounter\" },\n { code: \"XS\", description: \"Separate structure\" },\n { code: \"XP\", description: \"Separate practitioner\" },\n { code: \"XU\", description: \"Unusual non-overlapping service\" },\n];\n\nconst TAXONOMIES: MindBillSubmissionTaxonomyOption[] = [\n { code: \"103G00000X\", description: \"Clinical Neuropsychologist\" },\n { code: \"103T00000X\", description: \"Psychologist\" },\n { code: \"111N00000X\", description: \"Chiropractor\" },\n { code: \"207Q00000X\", description: \"Family Medicine\" },\n { code: \"207R00000X\", description: \"Internal Medicine\" },\n { code: \"207X00000X\", description: \"Orthopaedic Surgery\" },\n { code: \"207XS0117X\", description: \"Orthopaedic Surgery of the Spine\" },\n { code: \"208100000X\", description: \"Physical Medicine & Rehabilitation\" },\n { code: \"2083X0100X\", description: \"Occupational Medicine\" },\n { code: \"2084N0400X\", description: \"Neurology\" },\n { code: \"2084P0800X\", description: \"Psychiatry\" },\n { code: \"208VP0000X\", description: \"Pain Medicine\" },\n { code: \"213E00000X\", description: \"Podiatrist\" },\n { code: \"225100000X\", description: \"Physical Therapist\" },\n { code: \"225X00000X\", description: \"Occupational Therapist\" },\n { code: \"363A00000X\", description: \"Physician Assistant\" },\n { code: \"363L00000X\", description: \"Nurse Practitioner\" },\n];\n\nconst QUICK_DIAGNOSES: Array<BillDiagnosisCode & { label: string }> = [\n { label: \"Psych\", code: \"Z04.6\", description: \"General psychiatric examination requested by authority\" },\n { label: \"Back\", code: \"M54.50\", description: \"Low back pain, unspecified\" },\n { label: \"Neck\", code: \"M54.2\", description: \"Cervicalgia\" },\n { label: \"Left hand\", code: \"M79.642\", description: \"Pain in left hand\" },\n { label: \"Right hand\", code: \"M79.641\", description: \"Pain in right hand\" },\n { label: \"Left knee\", code: \"M25.562\", description: \"Pain in left knee\" },\n { label: \"Right knee\", code: \"M25.561\", description: \"Pain in right knee\" },\n];\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", bg: \"#f3f8fa\", s: \"#fff\", t: \"#203743\", m: \"#657982\", b: \"#dbe6ea\", r: \"14px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", bg: \"#f2f8fb\", s: \"#fff\", t: \"#1d3440\", m: \"#617783\", b: \"#d7e5eb\", r: \"12px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", bg: \"#fffaf6\", s: \"#fffefd\", t: \"#090f1f\", m: \"#626a73\", b: \"#e7e1da\", r: \"16px\", cr: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", bg: \"#fff\", s: \"#fff\", t: \"#1f2d3d\", m: \"#66788a\", b: \"#d9e2ec\", r: \"8px\", cr: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\nfunction deepCopyBill(value: BrowserBillCreateInput): BrowserBillCreateInput {\n return JSON.parse(JSON.stringify(value)) as BrowserBillCreateInput;\n}\n\nfunction required(value: unknown): boolean {\n return typeof value === \"string\" ? value.trim().length > 0 : value != null;\n}\n\nasync function blobToBase64(blob: Blob): Promise<string> {\n const buffer = new Uint8Array(await blob.arrayBuffer());\n let binary = \"\";\n for (const byte of buffer) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\n@Component({\n selector: \"mindbill-bill-submission\",\n standalone: true,\n imports: [CommonModule, FormsModule, MindBillComboBoxComponent, MindBillDateInputComponent],\n template: `\n <form class=\"mbs\" [ngStyle]=\"themeStyle\" (submit)=\"submit($event)\" novalidate>\n <div class=\"intro\"><div><h2>{{ heading }}</h2><p>{{ description }}</p></div><span><b>*</b> Required</span></div>\n\n <fieldset id=\"mbs-patient\"><legend>Patient</legend><div class=\"grid\">\n <label [class.invalid]=\"bad('patient.firstName')\">First name <b>*</b><input name=\"firstName\" [(ngModel)]=\"bill.patient.firstName\"></label>\n <label [class.invalid]=\"bad('patient.lastName')\">Last name <b>*</b><input name=\"lastName\" [(ngModel)]=\"bill.patient.lastName\"></label>\n <label [class.invalid]=\"bad('patient.dateOfBirth')\">Date of birth <b>*</b><mindbill-date-input ariaLabel=\"Date of birth\" [value]=\"bill.patient.dateOfBirth\" (valueChange)=\"setDate('patient.dateOfBirth', $event)\"/></label>\n <label>Phone (optional)<input name=\"phone\" type=\"tel\" [(ngModel)]=\"bill.patient.phone\"></label>\n <label class=\"wide\" [class.invalid]=\"bad('patient.address.line1')\">Address <b>*</b><input name=\"address\" [(ngModel)]=\"bill.patient.address.line1\"></label>\n <label [class.invalid]=\"bad('patient.address.postalCode')\">ZIP <b>*</b><input name=\"zip\" [(ngModel)]=\"bill.patient.address.postalCode\" (ngModelChange)=\"postalChanged($event)\" inputmode=\"numeric\">@if (postalStatus) { <small>{{ postalStatus }}</small> }</label>\n <label [class.invalid]=\"bad('patient.address.city')\">City <b>*</b><input name=\"city\" [(ngModel)]=\"bill.patient.address.city\"></label>\n <label [class.invalid]=\"bad('patient.address.state')\">State <b>*</b><input name=\"state\" [(ngModel)]=\"bill.patient.address.state\" maxlength=\"2\"></label>\n </div></fieldset>\n\n <fieldset id=\"mbs-claim\"><legend>Injury &amp; claim</legend><div class=\"grid\">\n <label [class.invalid]=\"bad('service.date')\">Date of service <b>*</b><mindbill-date-input ariaLabel=\"Date of service\" [value]=\"bill.service.date\" (valueChange)=\"setDate('service.date', $event)\"/></label>\n <label [class.invalid]=\"bad('claim.dateOfInjury')\">Date of injury <b>*</b><mindbill-date-input ariaLabel=\"Date of injury\" [value]=\"bill.claim.dateOfInjury\" (valueChange)=\"setDate('claim.dateOfInjury', $event)\"/></label>\n <label class=\"wide\">Treatment authorization # (optional)<input name=\"authNumber\" [ngModel]=\"bill.service.authorizationNumber || ''\" (ngModelChange)=\"setAuthorizationNumber($event)\" placeholder=\"Utilization-review authorization number\"><small>Rides on the bill as CMS-1500 Box 23 / 837 REF*G1.</small></label>\n <label [class.invalid]=\"bad('claim.claimNumber')\">Claim number <b>*</b><input name=\"claimNumber\" [(ngModel)]=\"bill.claim.claimNumber\"></label>\n <label [class.invalid]=\"bad('claim.employer')\">Employer <b>*</b><input name=\"employer\" [(ngModel)]=\"bill.claim.employer\"></label>\n <div class=\"wide lookup\" [class.invalid]=\"bad('claim.claimsAdministrator')\"><label>Claims administrator <b>*</b></label>\n <input name=\"payerQuery\" [(ngModel)]=\"payerQuery\" (focus)=\"searchPayers()\" (input)=\"searchPayers()\" placeholder=\"Search the MindBill payer directory…\" autocomplete=\"off\">\n @if (payerBusy) { <small>Searching directory…</small> }\n @if (payerResults.length) { <div class=\"options\">@for (payer of payerResults; track payer.id) { <button type=\"button\" (click)=\"selectPayer(payer)\"><strong>{{ payer.name }}</strong><span>{{ payer.hasElectronic ? 'Electronic routing' : 'Paper / fax' }}@if (payer.confidence) { · {{ payer.confidence }} match }</span></button> }</div> }\n @if (bill.claim.claimsAdministrator.id) { <small class=\"selected\">✓ Routed to {{ bill.claim.claimsAdministrator.name }}</small> }\n </div>\n @if (payerSelectionRequired && subpayorOptions.length) {\n <div class=\"wide lookup\" [class.invalid]=\"bad('claim.claimsAdministrator.payerId')\"><label>Payer <b>*</b></label>\n <mindbill-combo-box ariaLabel=\"Payer\" [value]=\"subpayorLabel\" [invalid]=\"bad('claim.claimsAdministrator.payerId')\" [preserveValueOnOpen]=\"true\" placeholder=\"Select the payer for this claims administrator…\" [options]=\"subpayorComboOptions\" (selected)=\"selectSubpayor($event)\"/>\n @if (subpayorLabel) { <small class=\"selected\">✓ Payer set: {{ subpayorLabel }}</small> }\n @else { <small>This claims administrator routes bills per payer. Choose the payer that should receive this bill.</small> }\n </div>\n }\n <label class=\"wide\">Injury description (optional)<input name=\"description\" [(ngModel)]=\"bill.claim.description\"></label>\n <div class=\"wide diagnosis\" [class.invalid]=\"bad('diagnoses')\"><label>Diagnosis codes (ICD-10) <b>*</b></label>\n <div class=\"quick\">@for (item of quickDiagnoses; track item.code) { <button type=\"button\" [class.on]=\"hasDiagnosis(item.code)\" (click)=\"toggleDiagnosis(item)\">{{ hasDiagnosis(item.code) ? '✓' : '+' }} {{ item.label }}</button> }</div>\n @if (bill.diagnoses.length) { <div class=\"chips\">@for (code of bill.diagnoses; track code) { <button type=\"button\" (click)=\"removeDiagnosis(code)\"><strong>{{ code }}</strong> ×</button> }</div> }\n <input name=\"diagnosisQuery\" [(ngModel)]=\"diagnosisQuery\" (focus)=\"searchDiagnoses(true)\" (input)=\"searchDiagnoses(true)\" placeholder=\"Search ICD-10 codes…\" autocomplete=\"off\">\n @if (diagnosisBusy && !diagnosisResults.length) { <small>Searching ICD-10 directory…</small> }\n @if (diagnosisResults.length) { <div class=\"options diagnoses\" (scroll)=\"diagnosisScrolled($event)\">@for (item of diagnosisResults; track item.code) { <button type=\"button\" (click)=\"addDiagnosis(item)\"><strong>{{ item.code }}</strong><span>{{ item.description }}</span></button> }</div> }\n </div>\n </div></fieldset>\n\n <fieldset id=\"mbs-provider\"><legend>Providers &amp; place of service</legend><div class=\"grid\">\n <h3 class=\"wide\">Billing provider</h3>\n <label [class.invalid]=\"bad('billingProvider.name')\">Billing provider name <b>*</b><input name=\"billingProvider\" [(ngModel)]=\"bill.billingProvider.name\"></label>\n <label [class.invalid]=\"bad('billingProvider.taxId')\">Tax ID <b>*</b><input name=\"taxId\" [(ngModel)]=\"bill.billingProvider.taxId\"></label>\n <label [class.invalid]=\"bad('billingProvider.npi')\">Billing NPI <b>*</b><input name=\"billingNpi\" [(ngModel)]=\"bill.billingProvider.npi\" inputmode=\"numeric\" maxlength=\"10\"></label>\n <label [class.invalid]=\"bad('billingProvider.phone')\">Billing phone <b>*</b><input name=\"billingPhone\" type=\"tel\" [(ngModel)]=\"bill.billingProvider.phone\"></label>\n <label class=\"wide\" [class.invalid]=\"bad('billingProvider.address.line1')\">Billing address <b>*</b><input name=\"billingAddress\" [(ngModel)]=\"bill.billingProvider.address.line1\"></label>\n <label [class.invalid]=\"bad('billingProvider.address.postalCode')\">Billing ZIP <b>*</b><input name=\"billingZip\" [(ngModel)]=\"bill.billingProvider.address.postalCode\" inputmode=\"numeric\"></label>\n <label [class.invalid]=\"bad('billingProvider.address.city')\">Billing city <b>*</b><input name=\"billingCity\" [(ngModel)]=\"bill.billingProvider.address.city\"></label>\n <label [class.invalid]=\"bad('billingProvider.address.state')\">Billing state <b>*</b><input name=\"billingState\" [(ngModel)]=\"bill.billingProvider.address.state\" maxlength=\"2\"></label>\n <h3 class=\"wide\">Rendering provider</h3>\n <label [class.invalid]=\"bad('renderingProvider.name')\">Rendering provider name <b>*</b><input name=\"renderingProvider\" [(ngModel)]=\"bill.renderingProvider.name\"></label>\n <label [class.invalid]=\"bad('renderingProvider.npi')\">Rendering provider NPI <b>*</b><input name=\"renderingNpi\" [(ngModel)]=\"bill.renderingProvider.npi\" inputmode=\"numeric\" maxlength=\"10\"></label>\n <div class=\"wide\" [class.invalid]=\"bad('renderingProvider.taxonomy')\"><label>Rendering taxonomy <b>*</b></label>\n <mindbill-combo-box ariaLabel=\"Rendering taxonomy\" [value]=\"bill.renderingProvider.taxonomy || ''\" [invalid]=\"bad('renderingProvider.taxonomy')\" [preserveValueOnOpen]=\"true\" placeholder=\"Search specialty name or taxonomy code…\" [options]=\"taxonomyComboOptions\" [createOption]=\"customTaxonomyOption\" (selected)=\"selectTaxonomy($event)\"/>\n <small>Search by specialty name or 10-character taxonomy code.</small>\n </div>\n <h3 class=\"wide\">Place of service</h3>\n <label [class.invalid]=\"bad('serviceLocation.placeOfServiceCode')\">Place of service code <b>*</b><input name=\"pos\" [(ngModel)]=\"bill.serviceLocation.placeOfServiceCode\" placeholder=\"11\" inputmode=\"numeric\" maxlength=\"2\"></label>\n <label class=\"wide\" [class.invalid]=\"bad('serviceLocation.address.line1')\">Service address <b>*</b><input name=\"serviceAddress\" [(ngModel)]=\"bill.serviceLocation.address.line1\"></label>\n <label [class.invalid]=\"bad('serviceLocation.address.postalCode')\">Service ZIP <b>*</b><input name=\"serviceZip\" [(ngModel)]=\"bill.serviceLocation.address.postalCode\" inputmode=\"numeric\"></label>\n <label [class.invalid]=\"bad('serviceLocation.address.city')\">Service city <b>*</b><input name=\"serviceCity\" [(ngModel)]=\"bill.serviceLocation.address.city\"></label>\n <label [class.invalid]=\"bad('serviceLocation.address.state')\">Service state <b>*</b><input name=\"serviceState\" [(ngModel)]=\"bill.serviceLocation.address.state\" maxlength=\"2\"></label>\n </div></fieldset>\n\n <fieldset id=\"mbs-lines\" [class.invalid-set]=\"bad('serviceLines')\"><legend>Service lines</legend>\n <div class=\"line-head\"><span>Procedure code *</span><span>Modifiers</span><span>Dx</span><span>Units *</span><span>Allowed</span><span></span></div>\n @for (line of bill.serviceLines; track $index; let index = $index) { <div class=\"service-line\">\n <div class=\"cell\"><span class=\"mobile-label\">Procedure</span>\n <mindbill-combo-box [ariaLabel]=\"'Procedure code ' + (index + 1)\" [value]=\"line.code\" placeholder=\"Search or enter code…\" [options]=\"procedureComboOptions\" [createOption]=\"customProcedureOption\" (selected)=\"selectProcedure(index, $event)\"/>\n @if (line.code) { <small>{{ procedureDescription(line.code) || 'Custom CPT, HCPCS, or medical-legal code' }}</small> }\n </div>\n <div class=\"cell\"><span class=\"mobile-label\">Modifiers</span>\n @if (line.modifiers?.length) { <div class=\"chips\">@for (modifier of line.modifiers; track modifier) { <button type=\"button\" (click)=\"removeModifier(index, modifier)\" [attr.aria-label]=\"'Remove modifier ' + modifier\">−{{ modifier }} ×</button> }</div> }\n <mindbill-combo-box [ariaLabel]=\"'Modifiers ' + (index + 1)\" value=\"\" [placeholder]=\"line.modifiers?.length ? line.modifiers!.length + ' modifier' + (line.modifiers!.length === 1 ? '' : 's') : 'Add modifiers…'\" [options]=\"modifierComboOptions(line)\" (selected)=\"addModifier(index, $event)\"/>\n </div>\n <div class=\"cell\"><span class=\"mobile-label\">Dx pointers</span>\n <div class=\"dx\">\n @if (bill.diagnoses.length) {\n @for (code of bill.diagnoses; track code; let dxIndex = $index) {\n <button type=\"button\" [class.on]=\"hasDiagnosisPointer(line, dxIndex + 1)\" [title]=\"dxLetter(dxIndex + 1) + ' — ' + code\" [attr.aria-pressed]=\"hasDiagnosisPointer(line, dxIndex + 1)\" [attr.aria-label]=\"'Point line ' + (index + 1) + ' at diagnosis ' + code\" (click)=\"toggleDiagnosisPointer(index, dxIndex + 1)\">{{ dxLetter(dxIndex + 1) }}</button>\n }\n } @else { <small>Add diagnoses above</small> }\n </div>\n </div>\n <label><span class=\"mobile-label\">Units</span><input [name]=\"'units'+index\" type=\"number\" min=\"1\" [(ngModel)]=\"line.units\"></label>\n <strong>{{ allowed(line) == null ? '—' : (allowed(line) | currency) }}</strong>\n <button class=\"remove\" type=\"button\" (click)=\"removeLine(index)\" aria-label=\"Remove service line\">×</button>\n </div> }\n <div class=\"total\"><span>Total</span><strong>{{ totalAllowed | currency }}</strong></div>\n </fieldset>\n\n <fieldset><legend>Attachments</legend>\n @for (attachment of workingAttachments; track attachment.filename; let index = $index) { <div class=\"attachment\" [class.locked]=\"attachment.locked\"><div><strong>{{ attachment.filename }}</strong><span>{{ attachment.description || attachment.badge || 'Supporting document' }}</span></div><div class=\"attachment-actions\"><button type=\"button\" (click)=\"previewAttachment(attachment)\">Preview</button>@if (!attachment.locked) { <button type=\"button\" (click)=\"removeAttachment(index)\" aria-label=\"Remove attachment\">×</button> }</div></div> }\n <label class=\"dropzone\" [class.drag-active]=\"dragActive\"><input type=\"file\" accept=\"application/pdf,.pdf\" multiple (change)=\"filesSelected($event)\"><strong>Drop additional PDF files here, or click to choose</strong><span>Add supporting documents by dropping them anywhere on this screen.</span></label>\n </fieldset>\n\n @if (errorMessage) { <div class=\"error\" role=\"alert\">{{ errorMessage }}</div> }\n <div class=\"submit-row\"><span>{{ invalidFields.size ? 'Complete the highlighted required fields.' : 'All required billing data is ready.' }}</span><button type=\"submit\" [disabled]=\"submitting\">{{ submitting ? 'Submitting…' : submitLabel }}</button></div>\n @if (dragActive) { <div class=\"drop-overlay\" aria-hidden=\"true\"><div><strong>Drop PDFs to attach</strong><span>Supporting documents are added to this submission.</span></div></div> }\n </form>\n `,\n styles: [`\n :host{display:block}.mbs{--danger:#c83c3c;font-family:var(--font);color:var(--t)}*{box-sizing:border-box}.intro{display:flex;justify-content:space-between;align-items:start;margin:0 0 24px}.intro h2{margin:0;font-size:24px;font-weight:600}.intro p{margin:6px 0 0;color:var(--m)}.intro>span{color:var(--m);font-size:13px}.mbs b{color:inherit}.intro b,label>b,.lookup>label>b,.diagnosis>label>b,.cell>label>b{color:var(--danger)}fieldset{border:1px solid var(--b);border-radius:var(--r);margin:0 0 22px;padding:24px 26px 26px;background:var(--s)}legend{padding:0 10px;font-size:18px;font-weight:700}.grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 28px}.wide{grid-column:1/-1}h3{margin:4px 0 -4px;padding-top:12px;border-top:1px solid var(--b);font-size:16px}h3:first-child{border:0;padding-top:0}label,.lookup,.diagnosis{display:grid;gap:8px;font-size:14px;font-weight:700}.grid>label{display:flex;flex-wrap:wrap;align-content:start;align-items:center;column-gap:4px;row-gap:8px}.grid>label>input,.grid>label>select,.grid>label>small,.grid>label>mindbill-date-input{flex:0 0 100%}.grid>div.wide{display:grid;gap:8px;font-size:14px;font-weight:700}input,select{width:100%;min-height:46px;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 12px;color:var(--t);font:inherit;font-weight:450}input:focus,select:focus{outline:3px solid color-mix(in srgb,var(--a) 22%,transparent);border-color:var(--a)}.invalid input,.invalid select,.invalid-set{border-color:var(--danger)!important;background:color-mix(in srgb,var(--danger) 4%,var(--s))}.invalid>label{color:var(--danger)}small{color:var(--m);font-weight:450}.selected{color:#238655}.options{position:relative;z-index:4;max-height:300px;overflow:auto;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);box-shadow:0 14px 35px #172b3730}.options button{display:grid;width:100%;gap:3px;border:0;border-bottom:1px solid var(--b);background:var(--s);padding:12px 14px;text-align:left;color:var(--t);cursor:pointer}.options button:hover{background:color-mix(in srgb,var(--a) 7%,var(--s))}.options span{color:var(--m);font-size:12px}.quick,.chips{display:flex;flex-wrap:wrap;gap:8px}.quick button,.chips button{border:1px solid var(--b);border-radius:999px;background:var(--s);padding:7px 11px;color:var(--t);font:inherit;font-size:13px;cursor:pointer}.quick .on{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.chips button{border-color:color-mix(in srgb,var(--a) 40%,var(--b));background:color-mix(in srgb,var(--a) 7%,var(--s));font-weight:700}.dx{display:flex;flex-wrap:wrap;gap:5px;padding-top:6px}.dx button{width:30px;height:30px;border:1px solid var(--b);border-radius:8px;background:var(--s);color:var(--m);font:inherit;font-size:13px;font-weight:750;cursor:pointer;padding:0}.dx button.on{border-color:var(--a);background:color-mix(in srgb,var(--a) 10%,var(--s));color:var(--a)}.line-head,.service-line{display:grid;grid-template-columns:1.5fr 1.35fr .8fr .5fr .7fr 36px;gap:14px;align-items:start}.line-head{padding:0 0 9px;color:var(--m);font-size:12px;font-weight:700}.service-line{border-top:1px solid var(--b);padding:12px 0}.service-line label,.service-line .cell{display:grid;gap:6px;font-size:14px;font-weight:700}.service-line strong{text-align:right;padding-top:12px}.remove{border:0;background:transparent;color:var(--m);font-size:25px;cursor:pointer}.mobile-label{display:none}.total{display:flex;justify-content:flex-end;gap:36px;border-top:1px solid var(--b);padding-top:14px;font-size:17px}.attachment{display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid var(--b);border-radius:var(--cr);margin-bottom:10px;padding:14px 16px}.attachment.locked{border-color:#9fd6b4;background:#f3fcf6}.attachment>div:first-child{display:grid;gap:4px}.attachment span{color:var(--m);font-size:13px}.attachment-actions{display:flex;gap:8px}.attachment button{border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:8px 12px;color:var(--t);font-weight:700;cursor:pointer}.dropzone{position:relative;display:grid;min-height:170px;place-content:center;gap:8px;border:2px dashed color-mix(in srgb,var(--m) 60%,transparent);border-radius:var(--cr);text-align:center;cursor:pointer;transition:border-color .15s,background .15s}.dropzone.drag-active{border-color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.dropzone span{color:var(--m);font-weight:450}.drop-overlay{position:fixed;inset:0;z-index:60;display:grid;place-content:center;background:color-mix(in srgb,var(--a) 14%,#ffffffd9);pointer-events:none}.drop-overlay div{display:grid;gap:6px;border:2px dashed var(--a);border-radius:var(--r);background:var(--s);padding:34px 44px;text-align:center;box-shadow:0 24px 60px #172b3740}.drop-overlay strong{font-size:19px}.drop-overlay span{color:var(--m)}.error{margin:0 0 14px;border-left:4px solid var(--danger);border-radius:var(--cr);background:color-mix(in srgb,var(--danger) 10%,var(--s));padding:14px;color:var(--danger)}.submit-row{position:sticky;bottom:0;z-index:3;display:flex;align-items:center;justify-content:space-between;border:1px solid var(--b);border-radius:var(--r);background:color-mix(in srgb,var(--s) 96%,transparent);box-shadow:0 -8px 24px #172b3718;padding:14px 18px}.submit-row>span{color:#43835f}.submit-row button{min-width:190px;border:0;border-radius:var(--cr);background:var(--a);color:var(--ac);padding:12px 24px;font:inherit;font-weight:800;cursor:pointer}.submit-row button:disabled{opacity:.6;cursor:wait}\n @media(max-width:760px){fieldset{padding:18px 16px}.grid{grid-template-columns:1fr}.wide{grid-column:auto}.intro{display:grid;gap:10px}.line-head{display:none}.service-line{grid-template-columns:1fr 1fr}.service-line>*{grid-column:1/-1}.service-line label:nth-child(3){grid-column:1}.service-line>strong{grid-column:2;grid-row:3;text-align:left}.service-line>.remove{grid-column:1/-1}.mobile-label{display:block;color:var(--m);font-size:12px}.attachment{align-items:flex-start}.attachment-actions{align-items:center}.submit-row>span{display:none}.submit-row button{width:100%}}\n `],\n})\nexport class MindBillBillSubmissionComponent implements OnChanges {\n @Input() initialBill!: BrowserBillCreateInput;\n @Input() attachments: MindBillSubmissionAttachment[] = [];\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Input() sessionEndpoint = \"/api/mindbill/session\";\n @Input() getSession?: BillLifecycleSessionProvider;\n @Input() apiBaseUrl?: string;\n @Input() heading = \"Bill information\";\n @Input() description = \"Review the bill details, add attachments, and submit.\";\n @Input() submitLabel = \"Submit bill\";\n @Input() attentionFields: string[] = [];\n @Input() procedureOptions: MindBillSubmissionProcedureOption[] = PROCEDURES;\n @Input() modifierOptions: MindBillSubmissionModifierOption[] = MODIFIERS;\n @Input() taxonomyOptions: MindBillSubmissionTaxonomyOption[] = TAXONOMIES;\n @Input() submitter?: (input: BrowserBillSubmissionInput) => Promise<BrowserBillSubmissionResult>;\n @Output() submitted = new EventEmitter<BrowserBillSubmissionResult>();\n @Output() submissionError = new EventEmitter<Error>();\n @Output() billChange = new EventEmitter<BrowserBillCreateInput>();\n\n bill = {} as BrowserBillCreateInput;\n workingAttachments: MindBillSubmissionAttachment[] = [];\n payerQuery = \"\";\n payerResults: BillReviewPayer[] = [];\n payerBusy = false;\n /** Payer (subpayor) choices for the selected claims administrator. */\n subpayorOptions: BillReviewPayerOption[] = [];\n payerSelectionRequired = false;\n diagnosisQuery = \"\";\n diagnosisResults: BillDiagnosisCode[] = [];\n diagnosisOffset = 0;\n diagnosisBusy = false;\n submitting = false;\n errorMessage = \"\";\n postalStatus = \"\";\n dragActive = false;\n invalidFields = new Set<string>();\n attentionFieldSet = new Set<string>();\n readonly quickDiagnoses = QUICK_DIAGNOSES;\n // Zoneless-safe rendering: async work (debounced lookups, fetches, file reads)\n // must schedule change detection explicitly for zone-less Angular hosts.\n private readonly changeDetector = inject(ChangeDetectorRef);\n readonly customProcedureOption = mindBillCustomProcedureOption;\n readonly customTaxonomyOption = (query: string): MindBillComboOption | null => {\n const code = query.trim().toUpperCase();\n return /^[A-Z0-9]{10}$/.test(code) ? { id: code, label: code, detail: \"Use this taxonomy code\" } : null;\n };\n private searchTimer?: ReturnType<typeof setTimeout>;\n private postalTimer?: ReturnType<typeof setTimeout>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"initialBill\"] && this.initialBill) {\n this.bill = deepCopyBill(this.initialBill);\n if (!this.bill.serviceLines.length) this.bill.serviceLines = [{ code: \"\", units: 1 }];\n this.ensureTrailingLine();\n this.payerQuery = this.bill.claim.claimsAdministrator.name ?? \"\";\n this.subpayorOptions = [];\n this.payerSelectionRequired = false;\n }\n if (changes[\"attachments\"]) this.workingAttachments = this.attachments.map((item) => ({ ...item }));\n if (changes[\"attentionFields\"]) this.attentionFieldSet = new Set(this.attentionFields);\n }\n\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!, \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--bg\": this.appearance.backgroundColor ?? base[\"bg\"]!, \"--s\": this.appearance.surfaceColor ?? base[\"s\"]!,\n \"--t\": this.appearance.textColor ?? base[\"t\"]!, \"--m\": this.appearance.mutedColor ?? base[\"m\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!, \"--r\": this.appearance.borderRadius ?? base[\"r\"]!,\n \"--cr\": this.appearance.controlRadius ?? base[\"cr\"]!, \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n\n get procedureComboOptions(): MindBillComboOption[] {\n return this.procedureOptions.map((item) => ({ id: item.code, label: item.code, detail: item.description }));\n }\n\n get taxonomyComboOptions(): MindBillComboOption[] {\n return this.taxonomyOptions.map((item) => ({ id: item.code, label: item.description, detail: item.code }));\n }\n\n modifierComboOptions(line: BrowserBillCreateInput[\"serviceLines\"][number]): MindBillComboOption[] {\n return this.modifierOptions\n .filter((item) => !(line.modifiers ?? []).includes(item.code))\n .map((item) => ({ id: item.code, label: `−${item.code}`, detail: item.description }));\n }\n\n private referenceClient() {\n return createBillReferenceClient({ sessionEndpoint: this.sessionEndpoint, ...(this.getSession ? { getSession: this.getSession } : {}), ...(this.apiBaseUrl ? { apiBaseUrl: this.apiBaseUrl } : {}) });\n }\n\n setDate(path: \"patient.dateOfBirth\" | \"service.date\" | \"claim.dateOfInjury\", value: string): void {\n if (path === \"patient.dateOfBirth\") this.bill.patient.dateOfBirth = value;\n else if (path === \"service.date\") this.bill.service.date = value;\n else this.bill.claim.dateOfInjury = value;\n if (value) this.invalidFields.delete(path);\n this.billChange.emit(this.bill);\n }\n\n postalChanged(value: string): void {\n clearTimeout(this.postalTimer);\n this.postalStatus = \"\";\n if (!/^\\d{5}$/.test(value.trim())) return;\n this.postalStatus = \"Looking up ZIP…\";\n this.postalTimer = setTimeout(async () => {\n try {\n const place = await this.referenceClient().lookupPostalCode(value);\n if (place) {\n this.bill.patient.address.city = place.city;\n this.bill.patient.address.state = place.state.toUpperCase();\n this.postalStatus = `${place.city}, ${place.state.toUpperCase()} filled from ZIP`;\n this.invalidFields.delete(\"patient.address.city\");\n this.invalidFields.delete(\"patient.address.state\");\n this.billChange.emit(this.bill);\n } else {\n this.postalStatus = \"ZIP not found\";\n }\n } catch {\n this.postalStatus = \"ZIP lookup unavailable\";\n }\n this.changeDetector.markForCheck();\n }, 180);\n }\n\n searchPayers(): void {\n clearTimeout(this.searchTimer);\n this.searchTimer = setTimeout(async () => {\n this.payerBusy = true;\n try { this.payerResults = await this.referenceClient().searchClaimsAdministrators(this.payerQuery, this.bill.claim.claimNumber); }\n catch { this.payerResults = []; }\n finally { this.payerBusy = false; this.changeDetector.markForCheck(); }\n }, 180);\n }\n\n selectPayer(payer: BillReviewPayer): void {\n this.payerSelectionRequired = payer.payerSelectionRequired === true;\n this.subpayorOptions = this.payerSelectionRequired\n ? (payer.payers ?? []).map((option) => ({ ...option }))\n : [];\n const preselected = defaultBillReviewPayerOption(payer);\n this.bill.claim.claimsAdministrator = {\n id: payer.id,\n name: payer.name,\n ...(preselected ? { payerId: preselected.id } : {}),\n };\n this.payerQuery = payer.name;\n this.payerResults = [];\n this.invalidFields.delete(\"claim.claimsAdministrator\");\n this.invalidFields.delete(\"claim.claimsAdministrator.payerId\");\n this.billChange.emit(this.bill);\n }\n\n get subpayorComboOptions(): MindBillComboOption[] {\n return this.subpayorOptions.map((option) => ({\n id: option.id,\n label: option.label,\n ...(option.default ? { detail: \"Default\" } : {}),\n }));\n }\n\n get subpayorLabel(): string {\n const payerId = this.bill.claim?.claimsAdministrator?.payerId;\n return this.subpayorOptions.find((option) => option.id === payerId)?.label ?? \"\";\n }\n\n selectSubpayor(option: MindBillComboOption): void {\n this.bill.claim.claimsAdministrator = { ...this.bill.claim.claimsAdministrator, payerId: option.id };\n this.invalidFields.delete(\"claim.claimsAdministrator.payerId\");\n this.billChange.emit(this.bill);\n }\n\n searchDiagnoses(reset: boolean): void {\n if (this.diagnosisBusy) return;\n if (reset) { this.diagnosisOffset = 0; this.diagnosisResults = []; }\n clearTimeout(this.searchTimer);\n this.searchTimer = setTimeout(async () => {\n this.diagnosisBusy = true;\n try {\n const results = await this.referenceClient().searchDiagnosisCodes(this.diagnosisQuery, 60, this.diagnosisOffset);\n this.diagnosisResults = reset ? results : [...this.diagnosisResults, ...results];\n this.diagnosisOffset = this.diagnosisResults.length;\n } catch { if (reset) this.diagnosisResults = []; }\n finally { this.diagnosisBusy = false; this.changeDetector.markForCheck(); }\n }, reset ? 160 : 0);\n }\n\n diagnosisScrolled(event: Event): void {\n const element = event.currentTarget as HTMLElement;\n if (element.scrollTop + element.clientHeight >= element.scrollHeight - 80) this.searchDiagnoses(false);\n }\n\n hasDiagnosis(code: string): boolean { return this.bill.diagnoses.includes(code); }\n toggleDiagnosis(item: BillDiagnosisCode): void {\n if (this.hasDiagnosis(item.code)) this.removeDiagnosis(item.code);\n else this.addDiagnosis(item);\n }\n addDiagnosis(item: BillDiagnosisCode): void { if (!this.hasDiagnosis(item.code)) this.bill.diagnoses.push(item.code); this.diagnosisQuery = \"\"; this.diagnosisResults = []; this.invalidFields.delete(\"diagnoses\"); this.billChange.emit(this.bill); }\n removeDiagnosis(code: string): void { this.bill.diagnoses = this.bill.diagnoses.filter((item) => item !== code); this.billChange.emit(this.bill); }\n\n ensureTrailingLine(): void {\n const last = this.bill.serviceLines.at(-1);\n if (!last || last.code.trim()) this.bill.serviceLines.push({ code: \"\", units: 1 });\n this.billChange.emit(this.bill);\n }\n removeLine(index: number): void { this.bill.serviceLines.splice(index, 1); if (!this.bill.serviceLines.length) this.bill.serviceLines.push({ code: \"\", units: 1 }); this.ensureTrailingLine(); }\n selectProcedure(index: number, option: MindBillComboOption): void {\n this.bill.serviceLines[index]!.code = option.id;\n this.invalidFields.delete(\"serviceLines\");\n this.ensureTrailingLine();\n }\n addModifier(index: number, option: MindBillComboOption): void {\n const line = this.bill.serviceLines[index]!;\n line.modifiers = [...new Set([...(line.modifiers ?? []), option.id])];\n this.billChange.emit(this.bill);\n }\n removeModifier(index: number, modifier: string): void {\n const line = this.bill.serviceLines[index]!;\n line.modifiers = (line.modifiers ?? []).filter((item) => item !== modifier);\n this.billChange.emit(this.bill);\n }\n dxLetter(pointer: number): string { return String.fromCharCode(64 + pointer); }\n hasDiagnosisPointer(line: BrowserBillCreateInput[\"serviceLines\"][number], pointer: number): boolean {\n return (line.diagnosisPointers ?? []).includes(pointer);\n }\n toggleDiagnosisPointer(index: number, pointer: number): void {\n const line = this.bill.serviceLines[index]!;\n line.diagnosisPointers = this.hasDiagnosisPointer(line, pointer)\n ? (line.diagnosisPointers ?? []).filter((item) => item !== pointer)\n : [...(line.diagnosisPointers ?? []), pointer].sort((left, right) => left - right);\n this.billChange.emit(this.bill);\n }\n setAuthorizationNumber(value: string): void {\n this.bill.service.authorizationNumber = value.trim() ? value : null;\n this.billChange.emit(this.bill);\n }\n selectTaxonomy(option: MindBillComboOption): void {\n this.bill.renderingProvider.taxonomy = option.id;\n this.invalidFields.delete(\"renderingProvider.taxonomy\");\n this.billChange.emit(this.bill);\n }\n procedureDescription(code: string): string { return this.procedureOptions.find((item) => item.code.toLowerCase() === code.trim().toLowerCase())?.description ?? \"\"; }\n allowed(line: BrowserBillCreateInput[\"serviceLines\"][number]): number | null { const base = this.procedureOptions.find((item) => item.code.toLowerCase() === line.code.trim().toLowerCase())?.allowedAmount; return base == null ? (line.charge ?? null) : Math.round(base * Math.max(1, line.units ?? 1) * 100) / 100; }\n get totalAllowed(): number { return this.bill.serviceLines.reduce((sum, line) => sum + (this.allowed(line) ?? 0), 0); }\n\n @HostListener(\"window:dragover\", [\"$event\"])\n onWindowDragOver(event: DragEvent): void {\n if (event.dataTransfer?.types.includes(\"Files\")) { event.preventDefault(); this.dragActive = true; this.changeDetector.markForCheck(); }\n }\n @HostListener(\"window:dragleave\", [\"$event\"])\n onWindowDragLeave(event: DragEvent): void {\n if (!event.relatedTarget) { this.dragActive = false; this.changeDetector.markForCheck(); }\n }\n @HostListener(\"window:drop\", [\"$event\"])\n onWindowDrop(event: DragEvent): void {\n if (event.dataTransfer?.files.length) { event.preventDefault(); this.dragActive = false; void this.addFiles(event.dataTransfer.files); this.changeDetector.markForCheck(); }\n }\n\n private async addFiles(fileList: FileList | File[]): Promise<void> {\n const files = Array.from(fileList);\n if (!files.length) return;\n this.errorMessage = \"\";\n const invalid = files.find((file) => file.type !== \"application/pdf\" && !file.name.toLowerCase().endsWith(\".pdf\"));\n if (invalid) { this.errorMessage = `${invalid.name} is not a PDF.`; return; }\n const oversized = files.find((file) => file.size > MAX_PDF_BYTES);\n if (oversized) { this.errorMessage = `${oversized.name} is larger than 25 MB.`; return; }\n if (this.workingAttachments.length + files.length > MAX_DOCUMENTS) { this.errorMessage = `A bill can include at most ${MAX_DOCUMENTS} attachments.`; return; }\n const existingBytes = this.workingAttachments.reduce((sum, item) => sum + (item.contentBase64 ? item.contentBase64.length * 0.75 : 0), 0);\n if (existingBytes + files.reduce((sum, file) => sum + file.size, 0) > MAX_UPLOAD_BYTES) { this.errorMessage = \"Attachments exceed the 100 MB upload limit.\"; return; }\n for (const file of files) this.workingAttachments.push({ filename: file.name, description: \"Supporting document\", documentType: \"other\", contentBase64: await blobToBase64(file), contentUrl: URL.createObjectURL(file) });\n this.changeDetector.markForCheck();\n }\n\n async filesSelected(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n await this.addFiles(input.files ?? []);\n input.value = \"\";\n }\n removeAttachment(index: number): void { const item = this.workingAttachments[index]; if (item?.contentUrl?.startsWith(\"blob:\")) URL.revokeObjectURL(item.contentUrl); this.workingAttachments.splice(index, 1); }\n async previewAttachment(attachment: MindBillSubmissionAttachment): Promise<void> {\n if (attachment.loadBlob) {\n const url = URL.createObjectURL(await attachment.loadBlob());\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n setTimeout(() => URL.revokeObjectURL(url), 60_000);\n } else if (attachment.contentUrl) window.open(attachment.contentUrl, \"_blank\", \"noopener,noreferrer\");\n else if (attachment.contentBase64) window.open(`data:application/pdf;base64,${attachment.contentBase64}`, \"_blank\", \"noopener,noreferrer\");\n }\n\n bad(path: string): boolean { return this.invalidFields.has(path) || this.attentionFieldSet.has(path); }\n private validate(): boolean {\n const candidates: Array<[string, unknown]> = [\n [\"patient.firstName\", this.bill.patient.firstName], [\"patient.lastName\", this.bill.patient.lastName], [\"patient.dateOfBirth\", parseMindBillSubmissionDate(this.bill.patient.dateOfBirth ?? \"\")],\n [\"patient.address.line1\", this.bill.patient.address.line1], [\"patient.address.city\", this.bill.patient.address.city], [\"patient.address.state\", this.bill.patient.address.state], [\"patient.address.postalCode\", this.bill.patient.address.postalCode],\n [\"service.date\", parseMindBillSubmissionDate(this.bill.service.date ?? \"\")], [\"claim.dateOfInjury\", parseMindBillSubmissionDate(this.bill.claim.dateOfInjury ?? \"\")], [\"claim.claimNumber\", this.bill.claim.claimNumber], [\"claim.employer\", this.bill.claim.employer],\n [\"claim.claimsAdministrator\", this.bill.claim.claimsAdministrator.id],\n [\"claim.claimsAdministrator.payerId\", !this.payerSelectionRequired || this.bill.claim.claimsAdministrator.payerId],\n [\"diagnoses\", this.bill.diagnoses.length],\n [\"billingProvider.name\", this.bill.billingProvider.name], [\"billingProvider.taxId\", this.bill.billingProvider.taxId], [\"billingProvider.npi\", this.bill.billingProvider.npi], [\"billingProvider.phone\", this.bill.billingProvider.phone],\n [\"billingProvider.address.line1\", this.bill.billingProvider.address.line1], [\"billingProvider.address.city\", this.bill.billingProvider.address.city], [\"billingProvider.address.state\", this.bill.billingProvider.address.state], [\"billingProvider.address.postalCode\", this.bill.billingProvider.address.postalCode],\n [\"renderingProvider.name\", this.bill.renderingProvider.name], [\"renderingProvider.npi\", this.bill.renderingProvider.npi], [\"renderingProvider.taxonomy\", this.bill.renderingProvider.taxonomy],\n [\"serviceLocation.placeOfServiceCode\", this.bill.serviceLocation.placeOfServiceCode], [\"serviceLocation.address.line1\", this.bill.serviceLocation.address.line1], [\"serviceLocation.address.city\", this.bill.serviceLocation.address.city], [\"serviceLocation.address.state\", this.bill.serviceLocation.address.state], [\"serviceLocation.address.postalCode\", this.bill.serviceLocation.address.postalCode],\n [\"serviceLines\", this.bill.serviceLines.some((line) => required(line.code) && (line.units ?? 1) > 0)],\n ];\n this.invalidFields = new Set(candidates.filter(([, value]) => !value || !required(value)).map(([path]) => path));\n if (this.invalidFields.size) {\n this.errorMessage = `Complete ${this.invalidFields.size} highlighted required field${this.invalidFields.size === 1 ? \"\" : \"s\"} before submitting.`;\n setTimeout(() => document.querySelector(\".mbs .invalid,.mbs .invalid-set\")?.scrollIntoView({ behavior: \"smooth\", block: \"center\" }));\n return false;\n }\n return true;\n }\n\n private async submissionDocuments(): Promise<BrowserBillSubmissionDocument[]> {\n const documents: BrowserBillSubmissionDocument[] = [];\n for (const attachment of this.workingAttachments) {\n let contentBase64 = attachment.contentBase64;\n if (!contentBase64 && attachment.loadBlob) contentBase64 = await blobToBase64(await attachment.loadBlob());\n if (!contentBase64 && attachment.contentUrl) {\n const response = await fetch(attachment.contentUrl);\n if (!response.ok) throw new Error(`Could not load ${attachment.filename}.`);\n contentBase64 = await blobToBase64(await response.blob());\n }\n if (!contentBase64) continue;\n documents.push({\n filename: attachment.filename,\n documentType: attachment.documentType,\n contentBase64,\n ...(attachment.externalId ? { externalId: attachment.externalId } : {}),\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportTypeCode ? { reportTypeCode: attachment.reportTypeCode } : {}),\n });\n }\n return documents;\n }\n\n async submit(event: Event): Promise<void> {\n event.preventDefault();\n this.errorMessage = \"\";\n if (!this.validate()) return;\n this.submitting = true;\n try {\n const bill = deepCopyBill(this.bill);\n bill.patient.dateOfBirth = parseMindBillSubmissionDate(bill.patient.dateOfBirth ?? \"\") ?? bill.patient.dateOfBirth;\n bill.service.date = parseMindBillSubmissionDate(bill.service.date ?? \"\") ?? bill.service.date;\n bill.claim.dateOfInjury = parseMindBillSubmissionDate(bill.claim.dateOfInjury ?? \"\") ?? bill.claim.dateOfInjury;\n bill.serviceLines = bill.serviceLines\n .filter((line) => line.code.trim())\n .map((line) => {\n const charge = line.charge ?? this.allowed(line);\n return charge == null ? line : { ...line, charge };\n });\n const input: BrowserBillSubmissionInput = { bill, documents: await this.submissionDocuments() };\n const result = this.submitter\n ? await this.submitter(input)\n : await createBillSubmissionClient({ sessionEndpoint: this.sessionEndpoint, ...(this.getSession ? { getSession: this.getSession } : {}), ...(this.apiBaseUrl ? { apiBaseUrl: this.apiBaseUrl } : {}) }).submitBill(input);\n this.submitted.emit(result);\n } catch (value) {\n const error = value instanceof Error ? value : new Error(\"The bill could not be submitted.\");\n this.errorMessage = error.message;\n this.submissionError.emit(error);\n } finally { this.submitting = false; this.changeDetector.markForCheck(); }\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, effect } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport {\n REPORT_BILL_STATUS_OPTIONS,\n reportBillStatusContacts,\n type BillDeliveryOption,\n type BillDeliveryOptions,\n type BillLifecycleData,\n type BillLifecycleSessionProvider,\n type BrowserBillCreateInput,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionInput,\n type BrowserBillSubmissionResult,\n type ReportBillStatusId,\n type BillSubmissionRoute,\n} from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./appearance\";\nimport { mindBillAngularAppearanceStyle } from \"./appearance\";\nimport { MindBillBillRejectionNoticeComponent } from \"./bill-rejection-notice.component\";\nimport { MindBillBillSubmissionComponent, type MindBillSubmissionAttachment } from \"./bill-submission.component\";\nimport { MindBillLifecycleStore } from \"./lifecycle-store\";\n\nexport type { MindBillAngularAppearance, MindBillAngularThemePreset } from \"./appearance\";\n\n@Component({\n selector: \"mindbill-bill-lifecycle\",\n standalone: true,\n imports: [CommonModule, FormsModule, MindBillBillRejectionNoticeComponent, MindBillBillSubmissionComponent],\n template: `\n <section class=\"mb\" [ngStyle]=\"themeStyle\">\n @if (!billId) {\n <div class=\"state error\"><strong>A submitted bill ID is required.</strong></div>\n } @else if (store.loading() && !store.data()) {\n <div class=\"state\">Loading billing…</div>\n } @else if (store.error() && !store.data()) {\n <div class=\"state error\"><strong>Billing is temporarily unavailable</strong><span>{{ store.error()?.message }}</span><button type=\"button\" (click)=\"store.refresh()\">Try again</button></div>\n } @else if (store.data(); as data) {\n <header class=\"summary\">\n <div><span class=\"eyebrow\">Bill {{ data.bill.billNumber }}</span><h2>{{ stateLabel(data) }}</h2><p>{{ lifecycleDetail(data) }}</p></div>\n <div class=\"money\"><span>{{ data.bill.balanceDue | currency }}</span><small>balance</small></div>\n </header>\n\n @if (data.lifecycle.state.toLowerCase() === 'rejected' && data.rejection) {\n <mindbill-bill-rejection-notice\n class=\"rejection\"\n [rejection]=\"data.rejection\"\n [submittedAt]=\"data.lifecycle.submittedAt ?? null\"\n [appearance]=\"appearance\"\n />\n } @else {\n <section class=\"card progress\" aria-label=\"Bill lifecycle\">\n <ol>@for (stage of lifecycleStages; track stage.id; let i=$index) { <li [class.complete]=\"i < currentStageIndex(data)\" [class.current]=\"i === currentStageIndex(data)\"><b>{{ i < currentStageIndex(data) ? '✓' : i + 1 }}</b><span>{{ stage.label }}</span></li> }</ol>\n </section>\n }\n\n <section class=\"card snapshot\" aria-label=\"Bill snapshot\">\n <div class=\"card-title\"><div><h3>Bill snapshot</h3><p>The immutable values submitted to the payer.</p></div></div>\n <dl><div><dt>Patient</dt><dd>{{ data.patient.name }}</dd></div><div><dt>Claim</dt><dd>{{ data.injury.claimNumber || '—' }}</dd></div><div><dt>Payer</dt><dd>{{ data.delivery.payerName || data.injury.claimsAdminName || '—' }}</dd></div><div><dt>Date of service</dt><dd>{{ data.bill.dos || '—' }}</dd></div><div><dt>Charged</dt><dd>{{ data.bill.totalCharge | currency }}</dd></div><div><dt>Balance</dt><dd>{{ data.bill.balanceDue | currency }}</dd></div></dl>\n </section>\n\n <div class=\"columns\">\n <section class=\"card\"><div class=\"card-title\"><div><h3>Remittance</h3><p>Amounts reported by the payer and posted to this bill.</p></div></div><dl><div><dt>Billed</dt><dd>{{ data.remittance.billedAmount | currency }}</dd></div><div><dt>Payer reported</dt><dd>{{ data.remittance.payerReportedPaid == null ? '—' : (data.remittance.payerReportedPaid | currency) }}</dd></div><div><dt>Principal posted</dt><dd>{{ data.remittance.postedPrincipal | currency }}</dd></div><div><dt>Penalty &amp; interest</dt><dd>{{ data.remittance.postedAdditional | currency }}</dd></div><div><dt>Total received</dt><dd>{{ data.remittance.totalPostedCash | currency }}</dd></div><div><dt>Balance</dt><dd>{{ data.remittance.balanceDue | currency }}</dd></div></dl></section>\n <section class=\"card\"><div class=\"card-title\"><div><h3>{{ data.delivery.payerName || 'Payer' }}</h3><p>Billing and follow-up contacts.</p></div></div><p class=\"muted\">{{ payerContact(data) }}</p></section>\n </div>\n\n <section class=\"card\"><div class=\"card-title\"><div><h3>Documents</h3><p>Documents preserved with the submitted bill.</p></div><span>{{ data.bill.attachments.length }}</span></div>@if (data.bill.attachments.length) { <ul class=\"rows\">@for (doc of data.bill.attachments; track doc.id) { <li><div><strong>{{ doc.filename }}</strong><small>{{ doc.description || doc.documentType }}</small></div><button type=\"button\" (click)=\"openAttachment(doc.id, doc.filename)\">View</button></li> }</ul> } @else { <p class=\"muted\">No documents available.</p> }</section>\n\n <section class=\"card\"><div class=\"card-title\"><div><h3>Payments</h3><p>Payments posted to this bill.</p></div><span>{{ data.payments.length }}</span></div>@if (data.payments.length) { <ul class=\"rows\">@for (payment of data.payments; track payment.id) { <li><div><strong>{{ payment.amount | currency }}</strong><small>{{ payment.method | uppercase }} · {{ payment.depositDate || payment.postedAt }}</small></div></li> }</ul> } @else { <p class=\"muted\">No payments posted.</p> }</section>\n\n <section class=\"card\"><div class=\"card-title\"><div><h3>Bill history</h3><p>Submissions, payer responses, follow-up, and payments.</p></div><span>{{ data.history?.length ?? data.activity.length }}</span></div>\n @if (data.history?.length) {\n <!-- Date/Action/User/Details table: submissions are pale-blue\n expandable rows (documents + compliance due dates), notes pale-yellow,\n 277 responses expand into decoded status-code sentences. Rows arrive\n pre-worded from the MindBill API (BillLifecycleData.history). -->\n <div class=\"history\">\n <div class=\"history-head\" aria-hidden=\"true\"><span>Date</span><span>Action</span><span>User</span><span>Details</span></div>\n <ul class=\"history-rows\">\n @for (entry of data.history; track entry.id) {\n <li [class.is-submission]=\"entry.tone === 'submission'\" [class.is-note]=\"entry.tone === 'note'\" [class.is-problem]=\"entry.tone === 'problem'\">\n <button type=\"button\" class=\"history-line\" [disabled]=\"!entry.details\" [attr.aria-expanded]=\"entry.details ? isHistoryOpen(entry.id) : null\" (click)=\"toggleHistory(entry.id)\">\n <span class=\"h-date\">{{ historyDate(entry.date) }}</span>\n <span class=\"h-action\">{{ entry.action }}</span>\n <span class=\"h-actor\">{{ entry.actor || '—' }}</span>\n <span class=\"h-summary\">@if (entry.details) { <i [class.open]=\"isHistoryOpen(entry.id)\" aria-hidden=\"true\"></i> }{{ entry.summary }}</span>\n </button>\n @if (entry.details; as details) {\n @if (isHistoryOpen(entry.id)) {\n <div class=\"history-details\">\n @if (details.rows?.length) { <dl class=\"h-kv\">@for (row of details.rows ?? []; track row.label) { <div><dt>{{ row.label }}</dt><dd>{{ row.value }}</dd></div> }</dl> }\n @if (details.documents?.length) { <dl class=\"h-kv\"><div><dt>Documents</dt><dd>@for (doc of details.documents ?? []; track doc.id) { <span class=\"h-doc\">{{ doc.filename }}</span> }</dd></div></dl> }\n @if (details.codes?.length) { <dl class=\"h-codes\">@for (code of details.codes ?? []; track code.code) { <div><dt>{{ code.code }}</dt><dd>{{ code.text }}</dd></div> }</dl> }\n @if (details.complianceDueDates?.length) { <div class=\"h-due\"><em>Compliance Due Dates</em><dl>@for (due of details.complianceDueDates ?? []; track due.text) { <div><dt>{{ historyDate(due.date) }}</dt><dd>{{ due.text }}</dd></div> }</dl></div> }\n @if (details.text) { <p class=\"h-text\">{{ details.text }}</p> }\n </div>\n }\n }\n </li>\n }\n </ul>\n </div>\n } @else {\n <ul class=\"timeline\">@for (event of data.activity; track event.id) { <li><i></i><div><strong>{{ activityLabel(event.type) }}</strong><p>{{ event.description }}</p><small>{{ event.createdAt | date:'medium' }}</small></div></li> }</ul>\n }\n </section>\n\n @if (notice) { <p class=\"notice\">{{ notice }}</p> }\n <div class=\"actions\">@for (action of data.lifecycle.actions; track action.id) { @if (action.id !== 'view_eor' || data.eors.length) { <button type=\"button\" [class.primary]=\"action.primary\" [disabled]=\"!action.enabled || store.mutating()\" (click)=\"beginAction(action.id, data)\">{{ action.label }}</button> } }</div>\n\n @if (panel === 'payment') { <form class=\"card action-form\" (submit)=\"$event.preventDefault(); postPayment()\"><h3>Post payment</h3><label>Amount<input required type=\"number\" min=\"0.01\" step=\"0.01\" [(ngModel)]=\"payment.amount\" name=\"amount\"></label><label>Method<select [(ngModel)]=\"payment.method\" name=\"method\"><option value=\"check\">Check</option><option value=\"eft\">EFT</option></select></label><label>Deposit date<input required type=\"date\" [(ngModel)]=\"payment.depositDate\" name=\"depositDate\"></label><div><button type=\"button\" (click)=\"panel=''\">Cancel</button><button class=\"primary\" type=\"submit\">Post payment</button></div></form> }\n @if (panel === 'review') { <form class=\"card action-form\" (submit)=\"$event.preventDefault(); submitReview()\"><h3>Submit Second Bill Review</h3><label>Reason<textarea required [(ngModel)]=\"review.reason\" name=\"reason\"></textarea></label><label>Payer claim control number<input required [(ngModel)]=\"review.payerClaimControlNumber\" name=\"control\"></label><label>Disputed amount<input type=\"number\" min=\"0\" step=\"0.01\" [(ngModel)]=\"review.disputedAmount\" name=\"disputed\"></label><div><button type=\"button\" (click)=\"panel=''\">Cancel</button><button class=\"primary\" type=\"submit\">Submit review</button></div></form> }\n @if (panel === 'close') { <form class=\"card action-form\" (submit)=\"$event.preventDefault(); closeBill()\"><h3>Close bill</h3><label>Reason<textarea required [(ngModel)]=\"closeReason\" name=\"closeReason\"></textarea></label><div><button type=\"button\" (click)=\"panel=''\">Cancel</button><button class=\"primary\" type=\"submit\">Close bill</button></div></form> }\n @if (panel === 'report_status') {\n <form class=\"card action-form\" (submit)=\"$event.preventDefault(); reportStatus()\">\n <h3>Report Bill Status</h3>\n <p class=\"muted\">{{ reportContactSummary }}</p>\n <div class=\"report-options\" role=\"radiogroup\" aria-label=\"Reported bill payment status\">\n @for (option of reportStatusOptions; track option.id) {\n <label class=\"report-option\"><input type=\"radio\" [value]=\"option.id\" [(ngModel)]=\"report.status\" name=\"reportStatus\"><span><strong>{{ option.label }}</strong><small>{{ option.description }}</small></span></label>\n }\n </div>\n <label>Company<input [(ngModel)]=\"report.company\" name=\"reportCompany\"></label>\n <label>Name<input [(ngModel)]=\"report.representativeName\" name=\"reportRepresentativeName\"></label>\n <label>Role<input [(ngModel)]=\"report.representativeRole\" name=\"reportRepresentativeRole\"></label>\n <label>Phone Number<input [(ngModel)]=\"report.phone\" name=\"reportPhone\"></label>\n <label>Call Reference Number<input [(ngModel)]=\"report.callReference\" name=\"reportCallReference\"></label>\n <label>Message Note<textarea [(ngModel)]=\"report.note\" name=\"reportNote\"></textarea></label>\n <div><button type=\"button\" (click)=\"panel=''\">Cancel</button><button class=\"primary\" type=\"submit\" [disabled]=\"!report.status || store.mutating()\">Save</button></div>\n </form>\n }\n @if (panel === 'resubmit' && correctionInitialBill) {\n <div class=\"correction-backdrop\" (mousedown)=\"closeCorrectionBackdrop($event)\">\n <section class=\"correction-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Correct and resubmit\">\n <button type=\"button\" class=\"dialog-close\" aria-label=\"Close\" (click)=\"panel=''\">×</button>\n <header><h2>Correct and resubmit</h2><p>The original submission remains immutable. Review the rejected values and create the next submission attempt on this bill.</p></header>\n @if (data.rejection; as rejection) {\n <div class=\"correction-reason\"><strong>{{ rejection.reason || 'Why it was rejected' }}</strong>@for (issue of rejection.issues || []; track issue.code) { <span><b>{{ issue.code }}</b> {{ issue.description }}</span> }</div>\n }\n @if (payerContact(data) !== 'No payer contact details are available.') { <p class=\"contact-hint\"><strong>Questions?</strong> {{ payerContact(data) }}</p> }\n <label class=\"correction-note\">Correction note (optional)<textarea [(ngModel)]=\"correctionReason\" name=\"correctionReason\" placeholder=\"What changed before resubmission?\"></textarea></label>\n <mindbill-bill-submission\n [initialBill]=\"correctionInitialBill\"\n [attachments]=\"correctionAttachments\"\n [attentionFields]=\"correctionAttentionFields\"\n [appearance]=\"appearance\"\n [sessionEndpoint]=\"sessionEndpoint\"\n [getSession]=\"getSession\"\n [apiBaseUrl]=\"apiBaseUrl\"\n [submitter]=\"resubmitFromForm\"\n heading=\"Corrected bill information\"\n description=\"Correct the highlighted values, confirm every required field, then resubmit.\"\n submitLabel=\"Resubmit bill\"\n (submitted)=\"finishCorrection()\"\n />\n </section>\n </div>\n }\n @if (panel === 'duplicate' && correctionInitialBill) {\n <div class=\"correction-backdrop\" (mousedown)=\"closeCorrectionBackdrop($event)\">\n <section class=\"correction-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Send duplicate bill\">\n <button type=\"button\" class=\"dialog-close\" aria-label=\"Close\" (click)=\"panel=''\">×</button>\n <header><h2>Send duplicate bill</h2><p>The original submission remains immutable. Review or edit this fresh bill before choosing its delivery route and confirming transmission.</p></header>\n <mindbill-bill-submission\n [initialBill]=\"correctionInitialBill\"\n [attachments]=\"correctionAttachments\"\n [appearance]=\"appearance\"\n [sessionEndpoint]=\"sessionEndpoint\"\n [getSession]=\"getSession\"\n [apiBaseUrl]=\"apiBaseUrl\"\n [submitter]=\"duplicateFromForm\"\n heading=\"Duplicate bill information\"\n description=\"Review every field. The final step confirms the payer delivery route before the duplicate is sent.\"\n submitLabel=\"Continue to delivery\"\n (submitted)=\"finishDuplicate()\"\n />\n </section>\n </div>\n }\n @if (panel === 'duplicate_route') {\n <form class=\"card action-form\" (submit)=\"$event.preventDefault(); sendDuplicate()\">\n <h3>Confirm duplicate bill delivery</h3>\n @if (!duplicateDelivery) {\n <p class=\"muted\">{{ duplicateDeliveryError || 'Loading delivery options…' }}</p>\n <div><button type=\"button\" (click)=\"panel='duplicate'\">Back</button>@if (duplicateDeliveryError) { <button class=\"primary\" type=\"button\" (click)=\"loadDuplicateDelivery()\">Try again</button> }</div>\n } @else {\n <p class=\"muted\">Confirm how this edited duplicate will be delivered to {{ duplicateDelivery.payerName }}.</p>\n <label>Delivery method<select [(ngModel)]=\"duplicate.route\" name=\"duplicateRoute\">@for (option of duplicateRoutes(); track option.route) { <option [ngValue]=\"option.route\">{{ option.label }}</option> }</select></label>\n @if (duplicate.route === 'fax') { <label>Fax number<input required [(ngModel)]=\"duplicate.faxNumber\" name=\"duplicateFax\" placeholder=\"(000) 000-0000\"></label> }\n @if (duplicate.route === 'email') { <label>Email<input required type=\"email\" [(ngModel)]=\"duplicate.email\" name=\"duplicateEmail\" placeholder=\"claims@payer.example\"></label> }\n @if (duplicate.route === 'mail') { <label>Mailing address<textarea required [(ngModel)]=\"duplicate.mailingAddress\" name=\"duplicateMail\"></textarea></label> }\n <div><button type=\"button\" (click)=\"panel='duplicate'\">Back</button><button class=\"primary\" type=\"submit\" [disabled]=\"store.mutating() || !duplicateReady()\">Send duplicate</button></div>\n }\n </form>\n }\n @if (panel === 'submit_new_bill' && correctionInitialBill) {\n <div class=\"correction-backdrop\" (mousedown)=\"closeCorrectionBackdrop($event)\">\n <section class=\"correction-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Submit New Bill\">\n <button type=\"button\" class=\"dialog-close\" aria-label=\"Close\" (click)=\"panel=''\">×</button>\n <header><h2>Submit New Bill</h2><p>This closed bill stays closed and keeps its record. Review the carried-over snapshot and submit a fresh bill — both bills stay linked in the submissions timeline.</p><button type=\"button\" class=\"header-cancel\" (click)=\"panel=''\">Cancel</button></header>\n <label class=\"correction-note\">Submission note (optional)<textarea [(ngModel)]=\"correctionReason\" name=\"newBillReason\" placeholder=\"Why is a new bill being submitted?\"></textarea></label>\n <mindbill-bill-submission\n [initialBill]=\"correctionInitialBill\"\n [attachments]=\"correctionAttachments\"\n [appearance]=\"appearance\"\n [sessionEndpoint]=\"sessionEndpoint\"\n [getSession]=\"getSession\"\n [apiBaseUrl]=\"apiBaseUrl\"\n [submitter]=\"submitNewBillFromForm\"\n heading=\"New bill information\"\n description=\"The closed bill stays unchanged. This form submits a fresh bill linked to it.\"\n submitLabel=\"Submit New Bill\"\n (submitted)=\"finishNewBill()\"\n />\n </section>\n </div>\n }\n }\n </section>\n `,\n styles: [`\n :host{display:block}.mb{font-family:var(--font);color:var(--t);background:var(--bg);padding:20px}.summary,.card,.columns,.rejection{display:block;max-width:1120px;margin:0 auto 16px}.summary{display:flex;justify-content:space-between;align-items:end}.summary h2{margin:4px 0}.summary p,.muted{color:var(--m)}.eyebrow,dt{font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--m)}.money{text-align:right}.money span{display:block;font-size:28px;font-weight:800}.money small{color:var(--m)}.card{background:var(--s);border:1px solid var(--b);border-radius:var(--r);padding:20px}.card-title{display:flex;justify-content:space-between;gap:20px}.card-title h3{margin:0}.card-title p{margin:5px 0;color:var(--m)}.progress ol{display:flex;list-style:none;padding:0;margin:0}.progress li{flex:1;text-align:center;position:relative;color:var(--m)}.progress li:before{content:\"\";position:absolute;top:16px;left:0;right:0;border-top:2px solid var(--b)}.progress li:first-child:before{left:50%}.progress li:last-child:before{right:50%}.progress b{position:relative;z-index:1;display:grid;place-items:center;width:32px;height:32px;margin:auto;border:2px solid var(--b);border-radius:50%;background:var(--s)}.progress .complete b,.progress .current b{border-color:var(--a);background:var(--a);color:var(--ac)}.progress span{display:block;margin-top:8px;font-size:12px;font-weight:700}.snapshot dl,.columns dl{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.snapshot dd,.columns dd{font-weight:700;margin:6px 0}.columns{display:grid;grid-template-columns:1fr 1fr;gap:16px}.columns .card{margin:0}.rows,.timeline{list-style:none;margin:12px 0 0;padding:0}.rows li{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-top:1px solid var(--b)}.rows small{display:block;color:var(--m);margin-top:3px}.timeline li{display:flex;gap:14px;padding:10px 0}.timeline i{width:10px;height:10px;margin-top:5px;border:3px solid var(--a);border-radius:50%}.timeline p{margin:4px 0}.timeline small{color:var(--m)}button,input,select,textarea{font:inherit;border:1px solid var(--b);border-radius:var(--cr);padding:9px 12px;background:var(--s);color:var(--t)}button{cursor:pointer;font-weight:700}.primary{background:var(--a);border-color:var(--a);color:var(--ac)}.actions{max-width:1120px;margin:0 auto;display:flex;justify-content:flex-end;gap:10px}.action-form{display:grid;gap:12px}.action-form label{display:grid;gap:5px;font-weight:700}.action-form div{display:flex;justify-content:flex-end;gap:10px}.state{max-width:720px;margin:auto;padding:32px;text-align:center}.state span{display:block;margin:8px}.error{color:#9b1c1c}.notice{max-width:1120px;margin:0 auto 12px;color:var(--m)}@media(max-width:760px){.mb{padding:12px}.summary,.columns{display:block}.money{text-align:left;margin-top:12px}.columns .card{margin-bottom:12px}.snapshot dl,.columns dl{grid-template-columns:1fr 1fr}.progress span{font-size:10px}.card{padding:15px}}\n .history{border:1px solid var(--b);border-radius:10px;overflow:hidden;margin-top:12px}.history-head{display:grid;grid-template-columns:96px 150px 130px minmax(0,1fr);gap:12px;padding:8px 14px;background:color-mix(in srgb,var(--b) 26%,var(--s));color:var(--m);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.history-rows{list-style:none;margin:0;padding:0}.history-rows>li{border-top:1px solid var(--b)}.history-rows>li.is-submission{background:color-mix(in srgb,var(--a) 9%,var(--s))}.history-rows>li.is-note{background:color-mix(in srgb,#f2c344 13%,var(--s))}\n .history-line{display:grid;grid-template-columns:96px 150px 130px minmax(0,1fr);gap:12px;width:100%;padding:10px 14px;border:0;border-radius:0;background:transparent;text-align:left;font-weight:400;cursor:default}.history-line:not(:disabled){cursor:pointer}.history-line:not(:disabled):hover .h-summary{text-decoration:underline}\n .h-date,.h-actor{color:var(--m);font-size:13px;overflow-wrap:anywhere}.h-action{font-weight:700;font-size:13.5px}.is-problem .h-action{color:#9b1c1c}.h-summary{display:flex;gap:7px;min-width:0;font-size:13.5px;line-height:1.45;overflow-wrap:anywhere}\n .h-summary i{flex:0 0 auto;margin-top:5px;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--m);border-radius:0;transition:transform .12s ease}.h-summary i.open{transform:rotate(90deg)}\n .history-details{padding:4px 14px 14px 122px;font-size:13.5px;line-height:1.5}.h-kv,.h-codes,.h-due dl{display:grid;gap:4px;margin:0}.h-kv>div{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--b) 60%,transparent);padding-top:4px}\n .h-kv dt,.h-codes dt,.h-due dt{font-size:13px;font-weight:700;letter-spacing:0;text-transform:none;color:var(--t)}.h-kv dd,.h-codes dd,.h-due dd{margin:0;overflow-wrap:anywhere}.h-doc{display:block}\n .h-codes>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:12px}.h-codes dt{font-weight:800}\n .h-due{margin-top:8px}.h-due em{display:block;color:var(--m);font-size:12.5px;margin-bottom:4px}.h-due dl>div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--b) 60%,transparent);padding-top:4px}\n .h-text{margin:8px 0 0;white-space:pre-wrap}\n @media(max-width:760px){.history-head{display:none}.history-line{grid-template-columns:1fr;gap:2px;padding:10px 12px}.history-details{padding:4px 12px 12px}.h-kv>div,.h-due dl>div{grid-template-columns:1fr}}\n .report-options{display:grid;gap:8px}.action-form label.report-option{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--b);border-radius:var(--cr);padding:10px 12px;font-weight:400;cursor:pointer}.report-option input{width:16px;min-height:16px;margin-top:3px;padding:0;border:0}.report-option strong{display:block;font-size:13.5px}.report-option small{display:block;color:var(--m);margin-top:2px;font-size:12.5px}\n .correction-backdrop{position:fixed;inset:0;z-index:100;overflow:auto;background:#172b37b8;padding:28px}.correction-dialog{position:relative;max-width:1180px;margin:0 auto;background:var(--bg);border-radius:var(--r);box-shadow:0 24px 80px #0006;padding:26px}.correction-dialog>header{padding-right:48px;margin-bottom:18px}.correction-dialog h2{margin:0 0 6px}.correction-dialog p{margin:0;color:var(--m)}.dialog-close{position:absolute;right:20px;top:20px;width:40px;height:40px;padding:0;font-size:24px}.correction-reason{display:grid;gap:8px;margin-bottom:14px;border-left:4px solid #c43d3d;border-radius:8px;background:#fff5f5;padding:14px;color:#8f2525}.correction-reason span{display:block}.correction-reason b{margin-right:6px}.contact-hint{margin:0 0 14px!important;border:1px solid var(--b);border-radius:8px;background:var(--s);padding:12px!important;color:var(--t)!important}.correction-note{display:grid;gap:6px;margin-bottom:18px;font-weight:700}.correction-note textarea{min-height:76px}.correction-dialog mindbill-bill-submission{display:block}.correction-dialog .mb{padding:0}.correction-dialog .header-cancel{margin-top:10px}@media(max-width:760px){.correction-backdrop{padding:0}.correction-dialog{min-height:100%;border-radius:0;padding:18px 12px}.dialog-close{right:12px;top:12px}}\n `],\n})\nexport class MindBillBillLifecycleComponent implements OnChanges, OnDestroy {\n @Input() billId = \"\";\n @Input() sessionEndpoint = \"/api/mindbill/session\";\n @Input() apiBaseUrl = \"https://app.mindbill.org\";\n @Input() getSession?: BillLifecycleSessionProvider;\n @Input() refreshInterval = 60_000;\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Output() billingError = new EventEmitter<Error>();\n\n readonly store = new MindBillLifecycleStore();\n readonly lifecycleStages = [\n { id: \"submitted\", label: \"Submitted\" }, { id: \"accepted\", label: \"Accepted\" },\n { id: \"response\", label: \"Payer response\" }, { id: \"follow_up\", label: \"Follow-up\" },\n { id: \"closed\", label: \"Closed\" },\n ];\n panel = \"\";\n notice = \"\";\n closeReason = \"\";\n payment = { amount: 0, method: \"check\" as \"check\" | \"eft\", depositDate: new Date().toISOString().slice(0, 10) };\n review = { reason: \"\", payerClaimControlNumber: \"\", disputedAmount: 0 };\n readonly reportStatusOptions = REPORT_BILL_STATUS_OPTIONS;\n report: { status: ReportBillStatusId | null; company: string; representativeName: string; representativeRole: string; phone: string; callReference: string; note: string } =\n { status: null, company: \"\", representativeName: \"\", representativeRole: \"\", phone: \"\", callReference: \"\", note: \"\" };\n reportContactSummary = \"\";\n duplicateDelivery: BillDeliveryOptions | null = null;\n duplicateDeliveryError = \"\";\n duplicateDraftInput: BrowserBillSubmissionInput | null = null;\n duplicate = { route: \"ebill\" as BillSubmissionRoute, faxNumber: \"\", email: \"\", mailingAddress: \"\" };\n correctionInitialBill: BrowserBillCreateInput | null = null;\n correctionAttachments: MindBillSubmissionAttachment[] = [];\n correctionAttentionFields: string[] = [];\n correctionReason = \"\";\n\n constructor() { effect(() => { const error = this.store.error(); if (error) this.billingError.emit(error); }); }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"billId\"] || changes[\"sessionEndpoint\"] || changes[\"apiBaseUrl\"] || changes[\"getSession\"]) {\n if (!this.billId.trim()) { this.store.disconnect(); return; }\n this.store.connect({ billId: this.billId, sessionEndpoint: this.sessionEndpoint, apiBaseUrl: this.apiBaseUrl, ...(this.getSession ? { getSession: this.getSession } : {}) }, this.refreshInterval);\n }\n }\n ngOnDestroy(): void { this.store.disconnect(); }\n\n get themeStyle(): Record<string, string> {\n return mindBillAngularAppearanceStyle(this.appearance);\n }\n stateLabel(data: BillLifecycleData): string { return data.lifecycle.state.replace(/_/g, \" \").replace(/\\b\\w/g, (value) => value.toUpperCase()); }\n lifecycleDetail(data: BillLifecycleData): string { return data.lifecycle.submittedAt ? `Submitted ${new Date(data.lifecycle.submittedAt).toLocaleDateString()}${data.lifecycle.agingDays != null ? ` · ${data.lifecycle.agingDays} days old` : \"\"}` : \"Submitted bill\"; }\n currentStageIndex(data: BillLifecycleData): number { const value = data.lifecycle.state.toLowerCase(); if (value.includes(\"closed\") || value.includes(\"written_off\")) return 4; if (value.includes(\"second_review\") || value.includes(\"ibr\") || value.includes(\"lien\") || value.includes(\"appeal\")) return 3; if (value.includes(\"processed\") || value.includes(\"paid\") || value.includes(\"denied\") || value.includes(\"rejected\") || value.includes(\"response\")) return 2; if (value.includes(\"accepted\")) return 1; return 0; }\n activityLabel(type: string): string { return type.replace(/[._-]+/g, \" \").replace(/\\b\\w/g, (value) => value.toUpperCase()); }\n private readonly historyExpanded = new Set<string>();\n toggleHistory(id: string): void { if (this.historyExpanded.has(id)) this.historyExpanded.delete(id); else this.historyExpanded.add(id); }\n isHistoryOpen(id: string): boolean { return this.historyExpanded.has(id); }\n historyDate(iso: string): string { const parsed = new Date(iso); return Number.isNaN(parsed.getTime()) ? iso : parsed.toLocaleDateString(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }); }\n payerContact(data: BillLifecycleData): string { const contacts = data.delivery.contacts; return contacts.adjusterName || contacts.adjusterPhone || contacts.adjusterEmail || contacts.claimsEmail || contacts.faxNumber || contacts.mailingAddress || \"No payer contact details are available.\"; }\n beginAction(action: string, data: BillLifecycleData): void {\n if (action === \"resubmit\") this.prepareCorrection(data);\n else if (action === \"submit_new_bill\") this.prepareNewBill(data);\n else if (action === \"post_payment\") this.panel = \"payment\";\n else if (action === \"second_review\" || action === \"independent_bill_review\") this.panel = \"review\";\n else if (action === \"close\") this.panel = \"close\";\n else if (action === \"send_duplicate\") this.prepareDuplicate(data);\n else if (action === \"report_bill_status\") this.beginReportStatus(data);\n else if (action === \"view_eor\" && data.eors[0]) void this.openEor(data.eors[0].id, data.eors[0].filename);\n }\n beginReportStatus(data: BillLifecycleData): void {\n const contacts = reportBillStatusContacts(data.delivery);\n const parts: string[] = [];\n if (contacts.claimsAdmin) {\n const phones = contacts.claimsAdmin.phones.map((phone) => `${phone.label} ${phone.value}`).join(\", \");\n parts.push(`${contacts.claimsAdmin.name}${phones ? ` (${phones})` : \"\"}${contacts.claimsAdmin.hoursOfOperation ? ` · Hours: ${contacts.claimsAdmin.hoursOfOperation}` : \"\"}`);\n }\n if (contacts.billReview) parts.push(`Bill Review: ${contacts.billReview.name}${contacts.billReview.phone ? ` ${contacts.billReview.phone}` : \"\"}`);\n this.reportContactSummary = parts.length\n ? `Call ${parts.join(\" · \")} to request the payment status of this bill, then record the status reported and who provided it.`\n : \"Call the Claims Administrator or Bill Review vendor for this bill, then record the status reported and who provided it.\";\n this.report = { status: null, company: \"\", representativeName: \"\", representativeRole: \"\", phone: \"\", callReference: \"\", note: \"\" };\n this.panel = \"report_status\";\n }\n async reportStatus(): Promise<void> {\n const status = this.report.status;\n if (!status) return;\n await this.store.reportBillStatus({\n status,\n ...(this.report.company.trim() ? { company: this.report.company.trim() } : {}),\n ...(this.report.representativeName.trim() ? { representativeName: this.report.representativeName.trim() } : {}),\n ...(this.report.representativeRole.trim() ? { representativeRole: this.report.representativeRole.trim() } : {}),\n ...(this.report.phone.trim() ? { phone: this.report.phone.trim() } : {}),\n ...(this.report.callReference.trim() ? { callReference: this.report.callReference.trim() } : {}),\n ...(this.report.note.trim() ? { note: this.report.note.trim() } : {}),\n });\n this.panel = \"\"; this.notice = \"Bill status reported.\";\n }\n async openAttachment(id: string, filename: string): Promise<void> { this.openBlob(await this.store.getAttachment(id), filename); }\n async openEor(id: string, filename: string): Promise<void> { this.openBlob(await this.store.getEor(id), filename); }\n async postPayment(): Promise<void> { await this.store.postPayment(this.payment); this.panel = \"\"; this.notice = \"Payment posted.\"; }\n async submitReview(): Promise<void> { await this.store.submitSecondReview({ ...this.review, ...(this.review.disputedAmount > 0 ? { disputedAmount: this.review.disputedAmount } : {}), attachmentIds: this.store.data()?.bill.attachments.map((document) => document.id) ?? [], route: \"ebill\" }); this.panel = \"\"; this.notice = \"Second Review submitted.\"; }\n async closeBill(): Promise<void> { if (!this.closeReason.trim()) return; await this.store.closeBill({ reason: this.closeReason }); this.panel = \"\"; this.notice = \"Bill closed.\"; }\n readonly resubmitFromForm = async (input: BrowserBillSubmissionInput): Promise<BrowserBillSubmissionResult> => {\n const data = await this.store.resubmitBill({\n bill: input.bill,\n ...(input.documents?.length ? { documents: input.documents } : {}),\n ...(this.correctionReason.trim() ? { reason: this.correctionReason.trim() } : {}),\n });\n return { billId: data.bill.id, bill: { id: data.bill.id, state: data.lifecycle.state } };\n };\n finishCorrection(): void { this.panel = \"\"; this.correctionReason = \"\"; this.notice = \"Corrected submission sent.\"; }\n readonly duplicateFromForm = async (input: BrowserBillSubmissionInput): Promise<BrowserBillSubmissionResult> => {\n this.duplicateDraftInput = input;\n this.panel = \"duplicate_route\";\n await this.loadDuplicateDelivery();\n const billId = this.store.data()?.bill.id || this.billId;\n return { billId, bill: { id: billId, state: \"draft\" } };\n };\n finishDuplicate(): void { /* The route-confirmation panel owns the final transmission. */ }\n async loadDuplicateDelivery(): Promise<void> {\n this.duplicateDeliveryError = \"\";\n if (this.duplicateDelivery) return;\n try {\n const delivery = await this.store.getDeliveryOptions();\n this.duplicateDelivery = delivery;\n this.duplicate.route = delivery.recommended.route;\n this.duplicate.faxNumber = delivery.contacts.faxNumber || \"\";\n this.duplicate.email = delivery.contacts.claimsEmail || \"\";\n this.duplicate.mailingAddress = delivery.contacts.mailingAddress || \"\";\n } catch (cause) {\n this.duplicateDeliveryError = cause instanceof Error ? cause.message : \"Delivery options could not be loaded.\";\n }\n }\n duplicateRoutes(): BillDeliveryOption[] {\n const seen = new Set<BillSubmissionRoute>();\n return (this.duplicateDelivery?.options ?? []).filter((option) => {\n if (seen.has(option.route)) return false;\n seen.add(option.route);\n return true;\n });\n }\n duplicateReady(): boolean {\n if (!this.duplicateDraftInput) return false;\n if (this.duplicate.route === \"fax\") return this.duplicate.faxNumber.replace(/\\D/g, \"\").length >= 10;\n if (this.duplicate.route === \"email\") return this.duplicate.email.includes(\"@\");\n if (this.duplicate.route === \"mail\") return this.duplicate.mailingAddress.trim().length > 2;\n return true;\n }\n async sendDuplicate(): Promise<void> {\n if (!this.duplicateDelivery || !this.duplicateDraftInput || !this.duplicateReady()) return;\n const route = this.duplicate.route;\n const destination = route === \"fax\" ? { faxNumber: this.duplicate.faxNumber.trim() }\n : route === \"email\" ? { email: this.duplicate.email.trim() }\n : route === \"mail\" ? { mailingAddress: this.duplicate.mailingAddress.trim() }\n : null;\n await this.store.sendDuplicateBill({\n bill: this.duplicateDraftInput.bill,\n ...(this.duplicateDraftInput.documents?.length ? { documents: this.duplicateDraftInput.documents } : {}),\n submission: { route, ...(destination ? { destination } : {}) },\n });\n this.panel = \"\";\n this.notice = \"Duplicate bill sent.\";\n }\n // \"Submit New Bill\" from a CLOSED bill: same prefilled submission form as the\n // correction flow, but the server keeps the closed bill closed and creates a\n // fresh original linked to it (both records chain in the submissions timeline).\n readonly submitNewBillFromForm = async (input: BrowserBillSubmissionInput): Promise<BrowserBillSubmissionResult> => {\n const data = await this.store.submitNewBill({\n bill: input.bill,\n ...(input.documents?.length ? { documents: input.documents } : {}),\n ...(this.correctionReason.trim() ? { reason: this.correctionReason.trim() } : {}),\n });\n return { billId: data.bill.id, bill: { id: data.bill.id, state: data.lifecycle.state } };\n };\n finishNewBill(): void { this.panel = \"\"; this.correctionReason = \"\"; this.notice = \"New bill submitted.\"; }\n closeCorrectionBackdrop(event: MouseEvent): void { if (event.currentTarget === event.target) this.panel = \"\"; }\n private prepareCorrection(data: BillLifecycleData): void {\n this.correctionInitialBill = correctionBill(data);\n this.correctionAttachments = data.bill.attachments.map((attachment) => ({\n filename: attachment.filename,\n documentType: correctionDocumentType(attachment.documentType),\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => this.store.getAttachment(attachment.id),\n ...(attachment.documentType === \"w9\" ? { locked: true, badge: \"Auto-attached\" } : {}),\n }));\n this.correctionAttentionFields = [...new Set(data.rejection?.issues?.flatMap((issue) => issue.fieldPaths || []) ?? [])];\n this.correctionReason = \"\";\n this.panel = \"resubmit\";\n }\n private prepareDuplicate(data: BillLifecycleData): void {\n this.correctionInitialBill = correctionBill(data);\n this.correctionAttachments = data.bill.attachments.map((attachment) => ({\n filename: attachment.filename,\n documentType: correctionDocumentType(attachment.documentType),\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => this.store.getAttachment(attachment.id),\n ...(attachment.documentType === \"w9\" ? { locked: true, badge: \"Auto-attached\" } : {}),\n }));\n this.correctionAttentionFields = [];\n this.duplicateDraftInput = null;\n this.duplicateDelivery = null;\n this.duplicateDeliveryError = \"\";\n this.panel = \"duplicate\";\n }\n private prepareNewBill(data: BillLifecycleData): void {\n this.correctionInitialBill = correctionBill(data);\n this.correctionAttachments = data.bill.attachments.map((attachment) => ({\n filename: attachment.filename,\n documentType: correctionDocumentType(attachment.documentType),\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => this.store.getAttachment(attachment.id),\n ...(attachment.documentType === \"w9\" ? { locked: true, badge: \"Auto-attached\" } : {}),\n }));\n // No rejection context on a closed bill — nothing to highlight.\n this.correctionAttentionFields = [];\n this.correctionReason = \"\";\n this.panel = \"submit_new_bill\";\n }\n private openBlob(blob: Blob, filename: string): void { const url = URL.createObjectURL(blob); const link = document.createElement(\"a\"); link.href = url; link.target = \"_blank\"; link.rel = \"noopener\"; link.download = filename; link.click(); setTimeout(() => URL.revokeObjectURL(url), 60_000); }\n}\n\nconst CORRECTION_DOCUMENT_TYPES = new Set([\"final_report\", \"letter_of_attestation\", \"proof_of_service\", \"form_122\", \"return_to_work_voucher\", \"w9\", \"medical_records\", \"appeal\", \"other\"]);\nfunction correctionDocumentType(value: string): BrowserBillSubmissionDocument[\"documentType\"] { return (CORRECTION_DOCUMENT_TYPES.has(value) ? value : \"other\") as BrowserBillSubmissionDocument[\"documentType\"]; }\nfunction correctionBill(data: BillLifecycleData): BrowserBillCreateInput {\n const billing = data.bill.billingSnapshot?.billingProvider;\n const rendering = data.bill.billingSnapshot?.renderingProvider;\n const location = data.bill.billingSnapshot?.placeOfService;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n return {\n billingMode: data.bill.billingMode,\n patient: {\n firstName: data.patient.firstName || nameParts[0] || \"\",\n ...(data.patient.middleName ? { middleName: data.patient.middleName } : {}),\n lastName: data.patient.lastName || nameParts.slice(1).join(\" \") || \"\",\n dateOfBirth: data.patient.dob || \"\",\n ...(data.patient.phone ? { phone: data.patient.phone } : {}),\n address: { line1: data.patient.address?.line1 || \"\", city: data.patient.address?.city || \"\", state: data.patient.address?.state || \"\", postalCode: data.patient.address?.postalCode || \"\" },\n },\n claim: {\n claimNumber: data.injury.claimNumber || \"\",\n ...(data.injury.adjNumber ? { adjNumber: data.injury.adjNumber } : {}),\n employer: data.injury.employer || \"\",\n dateOfInjury: data.injury.doi || \"\",\n ...(data.injury.injuryDescription ? { description: data.injury.injuryDescription } : {}),\n claimsAdministrator: { id: data.injury.claimsAdminId || \"\", name: data.injury.claimsAdminName || \"\" },\n },\n service: { date: data.bill.dos, ...(data.bill.dosEnd !== undefined ? { endDate: data.bill.dosEnd } : {}), ...(data.bill.authorizationNumber !== undefined ? { authorizationNumber: data.bill.authorizationNumber } : {}) },\n billingProvider: {\n name: billing?.name || \"\", taxId: billing?.taxId || \"\", npi: billing?.npi || \"\", phone: billing?.phone || \"\",\n address: { line1: billing?.billingStreet || \"\", city: billing?.billingCity || \"\", state: billing?.billingState || \"\", postalCode: billing?.billingZip || \"\" },\n },\n renderingProvider: {\n name: rendering?.name || \"\", npi: rendering?.npi || \"\", taxonomy: rendering?.taxonomy || \"\",\n ...(rendering?.specialty ? { specialty: rendering.specialty } : {}), ...(rendering?.licenseNumber ? { licenseNumber: rendering.licenseNumber } : {}), ...(rendering?.licenseState ? { licenseState: rendering.licenseState } : {}),\n ...(rendering?.isQME !== undefined ? { isQme: rendering.isQME } : {}), ...(rendering?.isAME !== undefined ? { isAme: rendering.isAME } : {}),\n },\n serviceLocation: {\n ...(location?.name ? { name: location.name } : {}),\n address: { line1: location?.street || \"\", city: location?.city || \"\", state: location?.state || \"\", postalCode: location?.zip || \"\" },\n placeOfServiceCode: location?.posCode || \"\",\n },\n diagnoses: [...(data.injury.diagnosisCodes || [])],\n serviceLines: data.bill.lineItems.map((line) => ({ code: line.code, modifiers: [...line.modifiers], units: line.units, charge: line.charge, ...(line.serviceDate ? { serviceDate: line.serviceDate } : {}), ...(line.serviceDateEnd !== undefined ? { serviceDateEnd: line.serviceDateEnd } : {}), ...(line.diagnosisPointers ? { diagnosisPointers: [...line.diagnosisPointers] } : {}) })),\n };\n}\n","export type ProcedureLine = {\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge: number;\n feeSchedule?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n};\n\nconst EMPTY_PROCEDURE_LINE: ProcedureLine = {\n code: \"\",\n modifiers: [],\n units: 1,\n charge: 0,\n};\n\nexport function isEmptyProcedureLine(line: ProcedureLine): boolean {\n return !line.code.trim()\n && line.modifiers.length === 0\n && line.units === 1\n && !line.serviceDate\n && !line.serviceDateEnd\n && !(line.diagnosisPointers?.length)\n && !line.charge;\n}\n\n/** Keeps completed/partial lines plus one keyboard-ready empty row. */\nexport function ensureTrailingProcedureLine(\n lines: readonly ProcedureLine[],\n): ProcedureLine[] {\n const entered = lines\n .filter((line) => !isEmptyProcedureLine(line))\n .map((line) => ({ ...line, modifiers: [...line.modifiers] }));\n\n return entered.length < 50\n ? [...entered, { ...EMPTY_PROCEDURE_LINE, modifiers: [] }]\n : entered;\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, Directive, EventEmitter, Input, Output } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\n\nexport type MindBillDashboardBill = {\n id: string;\n billNumber?: string | number;\n externalId?: string;\n patientName: string;\n claimNumber?: string;\n payerName?: string;\n state: string;\n submittedAt?: string;\n updatedAt?: string;\n agingDays?: number;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n href?: string;\n workItemLabel?: string;\n};\n\nexport type MindBillAgingBucketId = \"current\" | \"31-60\" | \"61-90\" | \"91+\";\nexport type MindBillAgingBucket = { id: MindBillAgingBucketId; label: string; count: number; balance: number };\nexport type MindBillDashboardSummary = {\n totalBilled: number;\n totalPaid: number;\n outstanding: number;\n openCount: number;\n submittedThisMonth: number;\n closedThisMonth: number;\n bills: MindBillDashboardBill[];\n aging: MindBillAgingBucket[];\n};\nexport type MindBillReportDimension = \"status\" | \"payer\" | \"aging\";\nexport type MindBillReportRow = { key: string; label: string; billCount: number; totalBilled: number; totalPaid: number; balanceDue: number };\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", bg: \"#f3f8fa\", s: \"#fff\", t: \"#203743\", m: \"#657982\", b: \"#dbe6ea\", r: \"14px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", bg: \"#f2f8fb\", s: \"#fff\", t: \"#1d3440\", m: \"#617783\", b: \"#d7e5eb\", r: \"12px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", bg: \"#fffaf6\", s: \"#fffefd\", t: \"#090f1f\", m: \"#626a73\", b: \"#e7e1da\", r: \"16px\", cr: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", bg: \"#f5f7fa\", s: \"#fff\", t: \"#1f2d3d\", m: \"#66788a\", b: \"#d9e2ec\", r: \"8px\", cr: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\nexport function mindBillAgingDays(bill: MindBillDashboardBill, now = new Date()): number {\n if (bill.agingDays != null) return Math.max(0, Math.floor(bill.agingDays));\n const source = bill.submittedAt ?? bill.updatedAt;\n if (!source) return 0;\n const time = new Date(source).getTime();\n return Number.isFinite(time) ? Math.max(0, Math.floor((now.getTime() - time) / 86_400_000)) : 0;\n}\n\nexport function mindBillAgingBucket(days: number): MindBillAgingBucketId {\n if (days <= 30) return \"current\";\n if (days <= 60) return \"31-60\";\n if (days <= 90) return \"61-90\";\n return \"91+\";\n}\n\nexport function summarizeMindBillDashboard(bills: MindBillDashboardBill[], now = new Date()): MindBillDashboardSummary {\n const aging: MindBillAgingBucket[] = [\n { id: \"current\", label: \"0–30 days\", count: 0, balance: 0 },\n { id: \"31-60\", label: \"31–60 days\", count: 0, balance: 0 },\n { id: \"61-90\", label: \"61–90 days\", count: 0, balance: 0 },\n { id: \"91+\", label: \"91+ days\", count: 0, balance: 0 },\n ];\n for (const bill of bills) {\n const bucket = aging.find((item) => item.id === mindBillAgingBucket(mindBillAgingDays(bill, now)))!;\n bucket.count += 1;\n bucket.balance += bill.balanceDue;\n }\n return {\n totalBilled: bills.reduce((sum, item) => sum + item.totalCharge, 0),\n totalPaid: bills.reduce((sum, item) => sum + item.totalPaid, 0),\n outstanding: bills.reduce((sum, item) => sum + item.balanceDue, 0),\n openCount: bills.filter((item) => !/closed|paid|written.off/i.test(item.state)).length,\n submittedThisMonth: bills.filter((item) => sameMonth(item.submittedAt, now)).length,\n closedThisMonth: bills.filter((item) => /closed|paid|written.off/i.test(item.state) && sameMonth(item.updatedAt ?? item.submittedAt, now)).length,\n bills,\n aging,\n };\n}\n\nfunction sameMonth(value: string | undefined, now: Date): boolean {\n if (!value) return false;\n const date = new Date(value);\n return Number.isFinite(date.getTime()) && date.getUTCFullYear() === now.getUTCFullYear() && date.getUTCMonth() === now.getUTCMonth();\n}\n\nexport function buildMindBillReportRows(bills: MindBillDashboardBill[], dimension: MindBillReportDimension): MindBillReportRow[] {\n const rows = new Map<string, MindBillReportRow>();\n for (const bill of bills) {\n const key = dimension === \"payer\" ? bill.payerName || \"Unassigned payer\" : dimension === \"aging\" ? mindBillAgingBucket(mindBillAgingDays(bill)) : bill.state;\n const label = key.replace(/_/g, \" \").replace(/\\b\\w/g, (value) => value.toUpperCase());\n const row = rows.get(key) ?? { key, label, billCount: 0, totalBilled: 0, totalPaid: 0, balanceDue: 0 };\n row.billCount += 1; row.totalBilled += bill.totalCharge; row.totalPaid += bill.totalPaid; row.balanceDue += bill.balanceDue;\n rows.set(key, row);\n }\n return [...rows.values()].sort((a, b) => b.balanceDue - a.balanceDue || a.label.localeCompare(b.label));\n}\n\nexport function buildMindBillReportCsv(rows: MindBillReportRow[]): string {\n const quote = (value: string | number) => `\"${String(value).replace(/\"/g, '\"\"')}\"`;\n return [\"Group,Bills,Total billed,Total paid,Balance due\", ...rows.map((row) => [row.label, row.billCount, row.totalBilled, row.totalPaid, row.balanceDue].map(quote).join(\",\"))].join(\"\\n\");\n}\n\n@Directive()\nabstract class DashboardBase {\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!, \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--bg\": this.appearance.backgroundColor ?? base[\"bg\"]!, \"--s\": this.appearance.surfaceColor ?? base[\"s\"]!,\n \"--t\": this.appearance.textColor ?? base[\"t\"]!, \"--m\": this.appearance.mutedColor ?? base[\"m\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!, \"--r\": this.appearance.borderRadius ?? base[\"r\"]!,\n \"--cr\": this.appearance.controlRadius ?? base[\"cr\"]!, \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n}\n\nconst sharedStyles = `\n :host{display:block}.mbd{font-family:var(--font);color:var(--t)}button,input,select{font:inherit}.card{background:var(--s);border:1px solid var(--b);border-radius:var(--r)}\n .money{font-variant-numeric:tabular-nums}.muted{color:var(--m)}.pill{display:inline-flex;border-radius:999px;background:color-mix(in srgb,var(--a) 12%,var(--s));color:var(--a);font-size:12px;font-weight:750;padding:5px 9px}\n`;\n\n@Component({\n selector: \"mindbill-bill-aging-summary\", standalone: true, imports: [CommonModule],\n template: `<section class=\"mbd aging\" [ngStyle]=\"themeStyle\" aria-label=\"Accounts receivable aging\">@for (bucket of buckets; track bucket.id) { <button type=\"button\" class=\"card\" [class.selected]=\"selectedBucket === bucket.id\" (click)=\"bucketSelected.emit(bucket.id)\"><div><strong>{{ bucket.label }}</strong><span>{{ bucket.count }} bill{{ bucket.count === 1 ? '' : 's' }}</span></div><b class=\"money\">{{ bucket.balance | currency }}</b><i><em [style.width.%]=\"width(bucket.balance)\"></em></i></button> }</section>`,\n styles: [sharedStyles, `.aging{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.aging>button{border:1px solid var(--b);padding:16px;text-align:left;color:var(--t);cursor:pointer}.aging>button:hover,.aging>button.selected{border-color:var(--a);background:color-mix(in srgb,var(--a) 6%,var(--s))}.aging button>div{display:flex;justify-content:space-between;gap:8px}.aging span{color:var(--m);font-size:12px}.aging b{display:block;font-size:20px;margin:14px 0 12px}.aging i{display:block;height:5px;border-radius:99px;background:color-mix(in srgb,var(--b) 70%,transparent);overflow:hidden}.aging em{display:block;height:100%;background:var(--a)}@media(max-width:760px){.aging{grid-template-columns:1fr 1fr}}`],\n})\nexport class MindBillBillAgingSummaryComponent extends DashboardBase {\n @Input() buckets: MindBillAgingBucket[] = [];\n @Input() selectedBucket: MindBillAgingBucketId | \"\" = \"\";\n @Output() bucketSelected = new EventEmitter<MindBillAgingBucketId>();\n width(balance: number): number { const max = Math.max(1, ...this.buckets.map((item) => item.balance)); return Math.max(balance ? 8 : 0, balance / max * 100); }\n}\n\n@Component({\n selector: \"mindbill-bill-list\", standalone: true, imports: [CommonModule],\n template: `<section class=\"mbd list card\" [ngStyle]=\"themeStyle\"><div class=\"head\"><strong>Bill</strong><strong>Payer</strong><strong>Status</strong><strong>Age</strong><strong>Balance</strong></div>@for (bill of bills; track bill.id) { <button type=\"button\" (click)=\"billSelected.emit(bill)\"><span><b>{{ bill.patientName }}</b><small>{{ bill.claimNumber || bill.workItemLabel || bill.externalId || bill.id }}</small></span><span>{{ bill.payerName || '—' }}</span><span><i class=\"pill\">{{ label(bill.state) }}</i></span><span>{{ age(bill) }} days</span><span class=\"money\"><b>{{ bill.balanceDue | currency }}</b><small>{{ bill.totalPaid | currency }} paid</small></span></button> } @empty { <p class=\"empty\">No bills match these filters.</p> }</section>`,\n styles: [sharedStyles, `.list{overflow:hidden}.head,.list button{display:grid;grid-template-columns:1.6fr 1.2fr .85fr .55fr .8fr;gap:18px;align-items:center;text-align:left}.head{padding:11px 16px;background:color-mix(in srgb,var(--bg) 78%,var(--s));color:var(--m);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.list button{width:100%;border:0;border-top:1px solid var(--b);background:var(--s);color:var(--t);padding:15px 16px;cursor:pointer}.list button:hover{background:color-mix(in srgb,var(--a) 5%,var(--s))}.list span,.list small{min-width:0}.list small{display:block;color:var(--m);margin-top:4px}.money{text-align:right}.empty{padding:24px;text-align:center;color:var(--m)}@media(max-width:760px){.head{display:none}.list button{grid-template-columns:1fr auto;gap:10px}.list button>span:nth-child(2){grid-column:1}.list button>span:nth-child(3){grid-row:1;grid-column:2}.list button>span:nth-child(4){grid-column:1}.money{grid-column:2;grid-row:2/4}}`],\n})\nexport class MindBillBillListComponent extends DashboardBase {\n @Input() bills: MindBillDashboardBill[] = [];\n @Output() billSelected = new EventEmitter<MindBillDashboardBill>();\n age(bill: MindBillDashboardBill): number { return mindBillAgingDays(bill); }\n label(value: string): string { return value.replace(/_/g, \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase()); }\n}\n\n@Component({\n selector: \"mindbill-billing-dashboard\", standalone: true, imports: [CommonModule, FormsModule, MindBillBillAgingSummaryComponent, MindBillBillListComponent],\n template: `<section class=\"mbd dashboard\" [ngStyle]=\"themeStyle\"><header><div><p>Billing operations</p><h2>{{ heading }}</h2><span class=\"muted\">{{ description }}</span></div><button type=\"button\" (click)=\"createBill.emit()\">+ New bill</button></header><div class=\"metrics\"><article class=\"card\"><span>Total billed</span><b>{{ summary.totalBilled | currency }}</b></article><article class=\"card\"><span>Outstanding</span><b>{{ summary.outstanding | currency }}</b></article><article class=\"card\"><span>Submitted this month</span><b>{{ summary.submittedThisMonth }}</b></article><article class=\"card\"><span>Closed this month</span><b>{{ summary.closedThisMonth }}</b></article></div><mindbill-bill-aging-summary [buckets]=\"summary.aging\" [selectedBucket]=\"agingBucket\" [appearance]=\"appearance\" (bucketSelected)=\"toggleAging($event)\"/><div class=\"filters\"><input [(ngModel)]=\"query\" placeholder=\"Search patient, claim, or payer\" aria-label=\"Search bills\"><select [(ngModel)]=\"state\"><option value=\"\">All statuses</option>@for (option of states; track option) { <option [value]=\"option\">{{ label(option) }}</option> }</select>@if (agingBucket) { <button type=\"button\" class=\"clear\" (click)=\"agingBucket=''\">{{ agingLabel }} ×</button> }</div><mindbill-bill-list [bills]=\"filteredBills\" [appearance]=\"appearance\" (billSelected)=\"billSelected.emit($event)\"/></section>`,\n styles: [sharedStyles, `.dashboard{display:grid;gap:18px}.dashboard header{display:flex;justify-content:space-between;align-items:end;gap:20px}.dashboard h2{font-size:28px;margin:2px 0 5px}.dashboard header p{margin:0;color:var(--a);font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.dashboard header button{border:0;border-radius:var(--cr);background:var(--a);color:var(--ac);padding:11px 16px;font-weight:750;cursor:pointer}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.metrics article{padding:18px}.metrics span{display:block;color:var(--m);font-size:12px}.metrics b{display:block;margin-top:8px;font-size:24px}.filters{display:grid;grid-template-columns:1fr 190px auto;gap:10px}.filters input,.filters select,.filters .clear{border:1px solid var(--b);border-radius:var(--cr);background:var(--s);color:var(--t);padding:11px 13px}.filters .clear{color:var(--a);font-weight:700;cursor:pointer}@media(max-width:760px){.dashboard header{align-items:start}.metrics{grid-template-columns:1fr 1fr}.filters{grid-template-columns:1fr}}`],\n})\nexport class MindBillBillingDashboardComponent extends DashboardBase {\n @Input() bills: MindBillDashboardBill[] = [];\n @Input() heading = \"Billing dashboard\";\n @Input() description = \"Track every submitted bill from payer acceptance through payment.\";\n @Output() billSelected = new EventEmitter<MindBillDashboardBill>();\n @Output() createBill = new EventEmitter<void>();\n query = \"\"; state = \"\"; agingBucket: MindBillAgingBucketId | \"\" = \"\";\n get summary(): MindBillDashboardSummary { return summarizeMindBillDashboard(this.bills); }\n get states(): string[] { return [...new Set(this.bills.map((bill) => bill.state))].sort(); }\n get filteredBills(): MindBillDashboardBill[] { const query = this.query.trim().toLowerCase(); return this.bills.filter((bill) => (!this.state || bill.state === this.state) && (!this.agingBucket || mindBillAgingBucket(mindBillAgingDays(bill)) === this.agingBucket) && (!query || [bill.patientName, bill.claimNumber, bill.payerName, bill.externalId, bill.billNumber].some((value) => String(value ?? \"\").toLowerCase().includes(query)))); }\n get agingLabel(): string { return this.summary.aging.find((item) => item.id === this.agingBucket)?.label ?? \"\"; }\n toggleAging(bucket: MindBillAgingBucketId): void { this.agingBucket = this.agingBucket === bucket ? \"\" : bucket; }\n label(value: string): string { return value.replace(/_/g, \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase()); }\n}\n\n@Component({\n selector: \"mindbill-billing-report\", standalone: true, imports: [CommonModule, FormsModule],\n template: `<section class=\"mbd report card\" [ngStyle]=\"themeStyle\"><header><div><h2>{{ heading }}</h2><p>Operational totals grouped for reconciliation and follow-up.</p></div><div><select [(ngModel)]=\"dimension\"><option value=\"status\">Status</option><option value=\"payer\">Payer</option><option value=\"aging\">Aging</option></select><button type=\"button\" (click)=\"downloadCsv()\">Export CSV</button></div></header><div class=\"thead\"><b>Group</b><b>Bills</b><b>Total billed</b><b>Total paid</b><b>Balance due</b></div>@for (row of rows; track row.key) { <div class=\"row\"><strong>{{ row.label }}</strong><span>{{ row.billCount }}</span><span>{{ row.totalBilled | currency }}</span><span>{{ row.totalPaid | currency }}</span><b>{{ row.balanceDue | currency }}</b></div> }</section>`,\n styles: [sharedStyles, `.report{overflow:hidden}.report header{display:flex;justify-content:space-between;align-items:center;padding:18px}.report h2{margin:0;font-size:22px}.report p{margin:4px 0 0;color:var(--m)}.report header div:last-child{display:flex;gap:8px}.report select,.report button{border:1px solid var(--b);border-radius:var(--cr);background:var(--s);color:var(--t);padding:9px 12px}.report button{background:var(--a);border-color:var(--a);color:var(--ac);font-weight:750;cursor:pointer}.thead,.row{display:grid;grid-template-columns:1.5fr .5fr 1fr 1fr 1fr;gap:14px;padding:12px 18px;border-top:1px solid var(--b);align-items:center}.thead{background:color-mix(in srgb,var(--bg) 78%,var(--s));color:var(--m);font-size:11px;text-transform:uppercase}.row span,.row b:not(:first-child){text-align:right;font-variant-numeric:tabular-nums}@media(max-width:700px){.report header{align-items:flex-start}.thead{display:none}.row{grid-template-columns:1fr 1fr}.row>*:nth-child(n+2){text-align:right}.row strong{grid-column:1}.row span:nth-child(2){grid-column:2}.row span:nth-child(3)::before{content:'Billed ';color:var(--m)}.row span:nth-child(4)::before{content:'Paid ';color:var(--m)}.row b::before{content:'Due ';color:var(--m)}}`],\n})\nexport class MindBillBillingReportComponent extends DashboardBase {\n @Input() bills: MindBillDashboardBill[] = [];\n @Input() heading = \"Billing report\";\n dimension: MindBillReportDimension = \"status\";\n get rows(): MindBillReportRow[] { return buildMindBillReportRows(this.bills, this.dimension); }\n downloadCsv(): void { const blob = new Blob([buildMindBillReportCsv(this.rows)], { type: \"text/csv;charset=utf-8\" }); const url = URL.createObjectURL(blob); const link = document.createElement(\"a\"); link.href = url; link.download = `mindbill-${this.dimension}-report.csv`; link.click(); setTimeout(() => URL.revokeObjectURL(url), 1000); }\n}\n","import type { MindBillAgingBucketId, MindBillDashboardBill } from \"./billing-dashboard.component\";\n\nexport type MindBillStatusAgingCell = {\n state: string;\n bucket: MindBillAgingBucketId | \"total\";\n count: number;\n balance: number;\n bills: MindBillDashboardBill[];\n};\n\nexport type MindBillStatusAgingRow = {\n state: string;\n label: string;\n cells: MindBillStatusAgingCell[];\n total: MindBillStatusAgingCell;\n};\n\nexport type MindBillStatusAgingMatrix = {\n rows: MindBillStatusAgingRow[];\n columnTotals: MindBillStatusAgingCell[];\n grandTotal: MindBillStatusAgingCell;\n};\n\nexport const MINDBILL_STATUS_AGING_BUCKETS: { id: MindBillAgingBucketId; label: string }[] = [\n { id: \"current\", label: \"0–30 days\" },\n { id: \"31-60\", label: \"31–60 days\" },\n { id: \"61-90\", label: \"61–90 days\" },\n { id: \"91+\", label: \"91+ days\" },\n];\n\nconst DEFAULT_STATE_ORDER = [\n \"draft\", \"incomplete\", \"created\", \"sent\", \"submitted\", \"accepted\", \"processed\",\n \"paid\", \"underpaid\", \"denied\", \"rejected\", \"appealing\", \"second_review\", \"ibr\", \"lien\", \"closed\",\n];\n\nconst agingDays = (bill: MindBillDashboardBill, now: Date): number => {\n if (bill.agingDays != null) return Math.max(0, Math.floor(bill.agingDays));\n const source = bill.submittedAt ?? bill.updatedAt;\n if (!source) return 0;\n const time = new Date(source).getTime();\n return Number.isFinite(time) ? Math.max(0, Math.floor((now.getTime() - time) / 86_400_000)) : 0;\n};\n\nconst agingBucketIndex = (days: number): number => (days <= 30 ? 0 : days <= 60 ? 1 : days <= 90 ? 2 : 3);\n\nconst stateLabel = (state: string) => state.replace(/_/g, \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\nconst emptyCell = (state: string, bucket: MindBillAgingBucketId | \"total\"): MindBillStatusAgingCell => ({ state, bucket, count: 0, balance: 0, bills: [] });\n\nexport function buildMindBillStatusAgingMatrix(\n bills: MindBillDashboardBill[],\n stateOrder: string[] = DEFAULT_STATE_ORDER,\n now = new Date(),\n): MindBillStatusAgingMatrix {\n const orderIndex = new Map(stateOrder.map((state, index) => [state.toLowerCase(), index]));\n const states = [...new Set(bills.map((bill) => bill.state))].sort((a, b) => {\n const left = orderIndex.get(a.toLowerCase()) ?? stateOrder.length;\n const right = orderIndex.get(b.toLowerCase()) ?? stateOrder.length;\n return left - right || a.localeCompare(b);\n });\n const columnTotals = MINDBILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(\"all\", bucket.id));\n const grandTotal = emptyCell(\"all\", \"total\");\n const rows = states.map((state) => ({\n state,\n label: stateLabel(state),\n cells: MINDBILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(state, bucket.id)),\n total: emptyCell(state, \"total\"),\n }));\n const rowByState = new Map(rows.map((row) => [row.state, row]));\n for (const bill of bills) {\n const row = rowByState.get(bill.state)!;\n const bucketIndex = agingBucketIndex(agingDays(bill, now));\n for (const cell of [row.cells[bucketIndex]!, row.total, columnTotals[bucketIndex]!, grandTotal]) {\n cell.count += 1;\n cell.balance += bill.balanceDue;\n cell.bills.push(bill);\n }\n }\n return { rows, columnTotals, grandTotal };\n}\n\nexport function buildMindBillStatusAgingCsv(bills: MindBillDashboardBill[], stateOrder?: string[]): string {\n const matrix = buildMindBillStatusAgingMatrix(bills, stateOrder);\n const quote = (value: string | number) => `\"${String(value).replace(/\"/g, '\"\"')}\"`;\n const header = [\"Status\", ...MINDBILL_STATUS_AGING_BUCKETS.map((bucket) => bucket.label), \"Total\"];\n const lines = matrix.rows.map((row) => [row.label, ...row.cells.map((cell) => cell.count), row.total.count]);\n lines.push([\"Total\", ...matrix.columnTotals.map((cell) => cell.count), matrix.grandTotal.count]);\n return [header, ...lines].map((line) => line.map(quote).join(\",\")).join(\"\\n\");\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\nimport type { MindBillDashboardBill } from \"./billing-dashboard.component\";\nimport {\n buildMindBillStatusAgingMatrix,\n MINDBILL_STATUS_AGING_BUCKETS,\n type MindBillStatusAgingCell,\n type MindBillStatusAgingMatrix,\n} from \"./status-aging-matrix\";\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", bg: \"#f3f8fa\", s: \"#fff\", t: \"#203743\", m: \"#657982\", b: \"#dbe6ea\", r: \"14px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", bg: \"#f2f8fb\", s: \"#fff\", t: \"#1d3440\", m: \"#617783\", b: \"#d7e5eb\", r: \"12px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", bg: \"#fffaf6\", s: \"#fffefd\", t: \"#090f1f\", m: \"#626a73\", b: \"#e7e1da\", r: \"16px\", cr: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", bg: \"#f5f7fa\", s: \"#fff\", t: \"#1f2d3d\", m: \"#66788a\", b: \"#d9e2ec\", r: \"8px\", cr: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\n@Component({\n selector: \"mindbill-status-aging-matrix\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <section class=\"mbmx\" [ngStyle]=\"themeStyle\" aria-label=\"Bills by status and age\">\n <header><h2>{{ heading }}</h2><p>{{ description }}</p></header>\n <div class=\"card\">\n <table>\n <thead>\n <tr><th class=\"status\">Status</th>@for (bucket of buckets; track bucket.id) { <th>{{ bucket.label }}</th> }<th>Total</th></tr>\n </thead>\n <tbody>\n @for (row of matrix.rows; track row.state) {\n <tr>\n <td class=\"status\"><i class=\"pill\">{{ row.label }}</i></td>\n @for (cell of row.cells; track cell.bucket) {\n <td><button type=\"button\" [disabled]=\"cell.count === 0\" (click)=\"cellSelected.emit(cell)\"><b [class.zero]=\"cell.count === 0\">{{ cell.count === 0 ? '—' : cell.count }}</b>@if (showBalances && cell.count > 0) { <small>{{ cell.balance | currency }}</small> }</button></td>\n }\n <td class=\"rowtotal\"><button type=\"button\" [disabled]=\"row.total.count === 0\" (click)=\"cellSelected.emit(row.total)\"><b>{{ row.total.count }}</b>@if (showBalances) { <small>{{ row.total.balance | currency }}</small> }</button></td>\n </tr>\n }\n <tr class=\"totals\">\n <td class=\"status\">Total</td>\n @for (cell of matrix.columnTotals; track cell.bucket) {\n <td><button type=\"button\" [disabled]=\"cell.count === 0\" (click)=\"cellSelected.emit(cell)\"><b [class.zero]=\"cell.count === 0\">{{ cell.count === 0 ? '—' : cell.count }}</b>@if (showBalances && cell.count > 0) { <small>{{ cell.balance | currency }}</small> }</button></td>\n }\n <td class=\"rowtotal\"><button type=\"button\" [disabled]=\"matrix.grandTotal.count === 0\" (click)=\"cellSelected.emit(matrix.grandTotal)\"><b>{{ matrix.grandTotal.count }}</b>@if (showBalances) { <small>{{ matrix.grandTotal.balance | currency }}</small> }</button></td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n `,\n styles: [`\n :host{display:block}\n .mbmx{font-family:var(--font);color:var(--t)}\n .mbmx header{margin-bottom:16px}.mbmx h2{margin:0;font-size:24px}.mbmx header p{margin:5px 0 0;color:var(--m)}\n .card{background:var(--s);border:1px solid var(--b);border-radius:var(--r);overflow:auto}\n table{width:100%;border-collapse:collapse;min-width:640px}\n th{padding:13px 16px;border-bottom:1px solid var(--b);color:var(--m);font-size:11px;letter-spacing:.06em;text-transform:uppercase;text-align:right;white-space:nowrap}\n th.status{text-align:left}\n td{padding:0;border-bottom:1px solid var(--b);border-left:1px solid color-mix(in srgb,var(--b) 55%,transparent);text-align:right}\n td.status{border-left:0;padding:14px 16px;text-align:left;white-space:nowrap}\n tr:last-child td{border-bottom:0}\n .pill{display:inline-flex;border-radius:999px;background:color-mix(in srgb,var(--a) 12%,var(--s));color:var(--a);font-size:12px;font-style:normal;font-weight:750;padding:5px 9px}\n td button{display:block;width:100%;min-height:56px;padding:9px 16px;border:0;background:none;color:var(--t);font:inherit;text-align:right;cursor:pointer}\n td button:disabled{cursor:default}\n td button:not(:disabled):hover{background:color-mix(in srgb,var(--a) 8%,var(--s))}\n td button b{display:block;font-size:17px;font-weight:760;font-variant-numeric:tabular-nums}\n td button b.zero{color:var(--m);font-weight:500}\n td button small{display:block;margin-top:2px;color:var(--m);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}\n td.rowtotal,tr.totals td{background:color-mix(in srgb,var(--bg) 78%,var(--s));font-weight:750}\n tr.totals td.status{color:var(--t);font-weight:750}\n `],\n})\nexport class MindBillStatusAgingMatrixComponent {\n @Input() bills: MindBillDashboardBill[] = [];\n @Input() heading = \"Bills by status and age\";\n @Input() description = \"Every bill grouped by lifecycle status, then by days outstanding.\";\n @Input() stateOrder?: string[];\n @Input() showBalances = true;\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Output() cellSelected = new EventEmitter<MindBillStatusAgingCell>();\n\n readonly buckets = MINDBILL_STATUS_AGING_BUCKETS;\n\n get matrix(): MindBillStatusAgingMatrix {\n return buildMindBillStatusAgingMatrix(this.bills, this.stateOrder);\n }\n\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!, \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--bg\": this.appearance.backgroundColor ?? base[\"bg\"]!, \"--s\": this.appearance.surfaceColor ?? base[\"s\"]!,\n \"--t\": this.appearance.textColor ?? base[\"t\"]!, \"--m\": this.appearance.mutedColor ?? base[\"m\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!, \"--r\": this.appearance.borderRadius ?? base[\"r\"]!,\n \"--cr\": this.appearance.controlRadius ?? base[\"cr\"]!, \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n}\n","import type {\n BillTasksAgingBucket,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardTone,\n} from \"@mindbill/browser\";\n\n// Pure helpers behind <mindbill-bill-tasks-dashboard>; the aggregation itself\n// (buildBillTasksDashboard) is shared from @mindbill/browser.\n\nexport type MindBillBillTasksCell = {\n sectionId: string;\n rowId: string;\n /** Null for a row's \"Task Total\" cell (all buckets). */\n bucketId: string | null;\n refs: string[];\n count: number;\n};\n\nexport const MINDBILL_BILL_TASKS_TONES: Record<BillTasksDashboardTone, string> = {\n violet: \"#7c53c3\",\n red: \"#cf4437\",\n blue: \"#2f7fd1\",\n green: \"#2c9a5b\",\n amber: \"#d9931f\",\n neutral: \"#8195a1\",\n};\n\nexport const MINDBILL_BILL_TASKS_PILL_BASES = [\"#2c9a5b\", \"#1f9aa8\", \"#dcbb28\", \"#e08a2e\", \"#d75d8a\"];\n\nexport function mindBillBillTasksTone(tone: BillTasksDashboardTone): string {\n return MINDBILL_BILL_TASKS_TONES[tone] ?? MINDBILL_BILL_TASKS_TONES.neutral;\n}\n\nexport function mindBillBillTasksPillBase(index: number): string {\n return MINDBILL_BILL_TASKS_PILL_BASES[index % MINDBILL_BILL_TASKS_PILL_BASES.length]!;\n}\n\n/** Click-through payload for a bucket cell (bucketIndex) or a row total (null). */\nexport function mindBillBillTasksCell(\n section: BillTasksDashboardSection,\n row: BillTasksDashboardRow,\n bucketIndex: number | null,\n buckets: BillTasksAgingBucket[],\n): MindBillBillTasksCell {\n if (bucketIndex === null) {\n return {\n sectionId: section.id,\n rowId: row.id,\n bucketId: null,\n refs: row.refs.flat(),\n count: row.total,\n };\n }\n return {\n sectionId: section.id,\n rowId: row.id,\n bucketId: buckets[bucketIndex]?.id ?? null,\n refs: row.refs[bucketIndex] ?? [],\n count: row.counts[bucketIndex] ?? 0,\n };\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport {\n BILL_TASKS_AGING_BUCKETS,\n type BillTasksAgingBucket,\n type BillTasksDashboardData,\n type BillTasksDashboardRow,\n type BillTasksDashboardSection,\n} from \"@mindbill/browser\";\nimport { mindBillAngularAppearanceStyle, type MindBillAngularAppearance } from \"./appearance\";\nimport {\n mindBillBillTasksCell,\n mindBillBillTasksPillBase,\n mindBillBillTasksTone,\n type MindBillBillTasksCell,\n} from \"./bill-tasks-dashboard\";\n\n// \"Bill Tasks\" dashboard: one rounded, tone-colored card per\n// task section, rows bucketed by age in days with colored bucket header pills,\n// per-cell click-through counts, and a closing grand-total card. The pure\n// aggregation lives in @mindbill/browser (buildBillTasksDashboard) so React\n// and Angular render the exact same data shape.\n\n@Component({\n selector: \"mindbill-bill-tasks-dashboard\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"mbtk\" [ngStyle]=\"themeStyle\">\n @if (heading) { <header class=\"heading\"><h2>{{ heading }}</h2></header> }\n @for (section of data?.sections ?? []; track section.id) {\n <section class=\"card\" [style.borderColor]=\"tone(section)\" [attr.aria-label]=\"section.label\">\n <div class=\"grid head\" [style.borderBottomColor]=\"tone(section)\">\n <span class=\"title\">\n <i class=\"dot\" [style.background]=\"tone(section)\"></i>\n <span class=\"title-text\"><strong>{{ section.label }}</strong><span class=\"basis\">by {{ section.agingBasisLabel }}</span></span>\n </span>\n @for (bucket of buckets; track bucket.id; let bucketIndex = $index) {\n <span class=\"pill\" [style.background]=\"pillBackground(bucketIndex)\" [style.color]=\"pillColor(bucketIndex)\">{{ bucket.label }}</span>\n }\n <span class=\"colhead\">Task Total</span>\n </div>\n @if (section.empty) {\n <p class=\"empty\">{{ emptyLabel }}</p>\n } @else {\n @for (row of section.rows; track row.id) {\n <div class=\"grid row\">\n <span class=\"rowlabel\">{{ row.label }}</span>\n @for (bucket of buckets; track bucket.id; let bucketIndex = $index) {\n <span class=\"count\">\n @if ((row.counts[bucketIndex] ?? 0) > 0) {\n <button type=\"button\" class=\"link\" (click)=\"select(section, row, bucketIndex)\">{{ row.counts[bucketIndex] }}</button>\n } @else { <span class=\"zero\">0</span> }\n </span>\n }\n <span class=\"total\">\n @if (row.total > 0) {\n <button type=\"button\" class=\"link\" (click)=\"select(section, row, null)\">{{ row.total }}</button>\n } @else { <span class=\"zero\">0</span> }\n </span>\n </div>\n }\n <div class=\"grid row totals\">\n <span class=\"rowlabel\">Total</span>\n @for (bucket of buckets; track bucket.id; let bucketIndex = $index) {\n <span class=\"count\">{{ section.totals[bucketIndex] ?? 0 }}</span>\n }\n <span class=\"total\">{{ section.total }}</span>\n </div>\n }\n </section>\n }\n <section class=\"card grand\" [attr.aria-label]=\"grandTotalLabel\">\n <div class=\"grid row totals\">\n <span class=\"rowlabel grand-label\">{{ grandTotalLabel }}</span>\n @for (bucket of buckets; track bucket.id; let bucketIndex = $index) {\n <span class=\"count\">{{ data?.grandTotals?.[bucketIndex] ?? 0 }}</span>\n }\n <span class=\"total\">{{ data?.grandTotal ?? 0 }}</span>\n </div>\n </section>\n </div>\n `,\n styles: [`\n :host{display:block}\n .mbtk{color:var(--t);font-family:var(--font);font-size:14px}\n .heading{margin-bottom:14px}.heading h2{margin:0;font-size:24px}\n .card{margin-bottom:16px;border:1.5px solid var(--b);border-radius:var(--r);background:var(--s);overflow:hidden}\n .grid{display:grid;grid-template-columns:var(--cols);gap:0 10px;align-items:center;padding:0 16px}\n .head{padding:12px 16px;border-bottom:1px solid var(--b)}\n .title{display:flex;align-items:center;gap:9px;min-width:0}\n .dot{flex:0 0 auto;width:11px;height:11px;border-radius:50%}\n .title-text{min-width:0}\n .title-text strong{display:block;font-size:15.5px;line-height:1.3}\n .basis{display:block;color:var(--m);font-size:12px;line-height:1.35}\n .pill{justify-self:stretch;padding:5px 6px;border-radius:999px;font-size:11px;font-weight:750;line-height:1.25;text-align:center;white-space:nowrap}\n .colhead{justify-self:stretch;color:var(--m);font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;text-align:center;white-space:nowrap}\n .row{border-top:1px solid color-mix(in srgb,var(--b) 60%,transparent);min-height:44px}\n .row:first-of-type{border-top:0}\n .rowlabel{color:var(--m);font-size:13px;line-height:1.35;padding:9px 0;overflow-wrap:anywhere}\n .count,.total{text-align:center;font-variant-numeric:tabular-nums}\n .zero{color:var(--m)}\n .link{border:0;background:none;padding:6px 8px;color:var(--a);font:inherit;font-weight:750;font-variant-numeric:tabular-nums;cursor:pointer;border-radius:6px}\n .link:hover{text-decoration:underline;background:color-mix(in srgb,var(--a) 8%,transparent)}\n .totals{background:color-mix(in srgb,var(--bg) 78%,var(--s));border-top:1px solid var(--b);font-weight:760}\n .totals .rowlabel{color:var(--t);font-weight:760}\n .empty{margin:0;padding:22px 16px;color:var(--m);text-align:center}\n .grand{border-color:var(--b)}\n .grand .row{min-height:52px}\n .grand-label{font-size:14px;font-weight:800}\n @media(max-width:760px){.pill,.colhead,.count{display:none}.grid{grid-template-columns:minmax(0,1fr) auto}}\n `],\n})\nexport class MindBillBillTasksDashboardComponent {\n @Input() data: BillTasksDashboardData | null = null;\n @Input() buckets: BillTasksAgingBucket[] = BILL_TASKS_AGING_BUCKETS;\n @Input() heading = \"\";\n @Input() grandTotalLabel = \"Bill Tasks Total\";\n @Input() emptyLabel = \"No Tasks\";\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Output() cellSelected = new EventEmitter<MindBillBillTasksCell>();\n\n get themeStyle(): Record<string, string> {\n return {\n ...mindBillAngularAppearanceStyle(this.appearance),\n \"--cols\": `minmax(150px,1.6fr) repeat(${this.buckets.length},minmax(84px,1fr)) minmax(84px,1fr)`,\n };\n }\n\n tone(section: BillTasksDashboardSection): string {\n return mindBillBillTasksTone(section.tone);\n }\n\n pillBackground(index: number): string {\n return `color-mix(in srgb,${mindBillBillTasksPillBase(index)} 20%,var(--s))`;\n }\n\n pillColor(index: number): string {\n return `color-mix(in srgb,${mindBillBillTasksPillBase(index)} 62%,var(--t))`;\n }\n\n select(section: BillTasksDashboardSection, row: BillTasksDashboardRow, bucketIndex: number | null): void {\n this.cellSelected.emit(mindBillBillTasksCell(section, row, bucketIndex, this.buckets));\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from \"@angular/core\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\n\nexport type MindBillManagementSession = { url: string };\nexport type MindBillManagementSessionProvider = () => Promise<MindBillManagementSession | string>;\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", b: \"#dbe6ea\", r: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", b: \"#d7e5eb\", r: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", b: \"#e7e1da\", r: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", b: \"#d9e2ec\", r: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\n@Component({\n selector: \"mindbill-billing-management-button\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"management\" [ngStyle]=\"themeStyle\">\n <button type=\"button\" [disabled]=\"loading\" (click)=\"openBillingManagement()\">\n <span>{{ loading ? loadingLabel : label }}</span><span aria-hidden=\"true\">↗</span>\n </button>\n @if (errorMessage) { <p role=\"alert\">{{ errorMessage }}</p> }\n </div>\n `,\n styles: [`\n :host{display:inline-block}.management{font-family:var(--font)}button{display:inline-flex;align-items:center;justify-content:center;gap:10px;border:1px solid var(--a);border-radius:var(--r);background:var(--a);color:var(--ac);padding:11px 16px;font:inherit;font-weight:750;cursor:pointer}button:disabled{opacity:.65;cursor:wait}p{max-width:360px;margin:7px 0 0;color:#b42318;font-size:13px}\n `],\n})\nexport class MindBillBillingManagementButtonComponent {\n @Input() sessionEndpoint = \"/api/mindbill/management-session\";\n @Input() sessionProvider?: MindBillManagementSessionProvider;\n @Input() label = \"Billing management\";\n @Input() loadingLabel = \"Opening billing…\";\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Output() opened = new EventEmitter<string>();\n @Output() failed = new EventEmitter<unknown>();\n\n loading = false;\n errorMessage = \"\";\n private readonly changeDetector = inject(ChangeDetectorRef);\n\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!,\n \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!,\n \"--r\": this.appearance.controlRadius ?? base[\"r\"]!,\n \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n\n async openBillingManagement(): Promise<void> {\n if (this.loading || typeof window === \"undefined\") return;\n this.loading = true;\n this.errorMessage = \"\";\n const popup = window.open(\"about:blank\", \"_blank\", \"noopener,noreferrer\");\n try {\n const result = this.sessionProvider\n ? await this.sessionProvider()\n : await this.fetchSession();\n const url = typeof result === \"string\" ? result : result.url;\n if (!url) throw new Error(\"The billing management session did not include a URL.\");\n if (popup) popup.location.replace(url);\n else window.location.assign(url);\n this.opened.emit(url);\n } catch (error) {\n popup?.close();\n this.errorMessage = error instanceof Error ? error.message : \"Billing management could not be opened.\";\n this.changeDetector.markForCheck();\n this.failed.emit(error);\n } finally {\n this.loading = false;\n this.changeDetector.markForCheck();\n }\n }\n\n private async fetchSession(): Promise<MindBillManagementSession> {\n const response = await fetch(this.sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { accept: \"application/json\" },\n });\n const body = await response.json().catch(() => ({})) as { url?: string; data?: { url?: string }; message?: string };\n if (!response.ok) throw new Error(body.message || \"Billing management could not be opened.\");\n const url = body.url ?? body.data?.url;\n if (!url) throw new Error(\"The billing management session did not include a URL.\");\n return { url };\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ChangeDetectorRef, Component, EventEmitter, inject, Input, OnInit, Output } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport {\n createOrganizationClient,\n type BillLifecycleSessionProvider,\n type OrganizationBillingProviderInput,\n type OrganizationClient,\n type OrganizationLocationInput,\n type OrganizationProfileData,\n} from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\n\n// Embeddable organization onboarding (INC-1470): practice identity, billing\n// provider, locations, and the W-9 captured once and saved straight to\n// MindBill through the partner browser session (organization:manage\n// permission). variant=\"settings\" stacks every section for edit-after-setup.\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", bg: \"#f3f8fa\", s: \"#fff\", t: \"#203743\", m: \"#657982\", b: \"#dbe6ea\", r: \"14px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", bg: \"#f2f8fb\", s: \"#fff\", t: \"#1d3440\", m: \"#617783\", b: \"#d7e5eb\", r: \"12px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", bg: \"#fffaf6\", s: \"#fffefd\", t: \"#090f1f\", m: \"#626a73\", b: \"#e7e1da\", r: \"16px\", cr: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", bg: \"#fff\", s: \"#fff\", t: \"#1f2d3d\", m: \"#66788a\", b: \"#d9e2ec\", r: \"8px\", cr: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\ntype StepId = \"practice\" | \"locations\" | \"w9\" | \"review\";\n\nasync function fileToBase64(file: File): Promise<string> {\n const buffer = new Uint8Array(await file.arrayBuffer());\n let binary = \"\";\n for (const byte of buffer) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\n@Component({\n selector: \"mindbill-organization-onboarding\",\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n <section class=\"mbob\" [ngStyle]=\"themeStyle\">\n <div class=\"card\">\n <header><h2>{{ heading }}</h2><p>{{ description }}</p></header>\n @if (loadError) { <div class=\"error\" role=\"alert\">{{ loadError }}</div> }\n\n @if (variant === 'onboarding') {\n <div class=\"steps\">\n @for (item of steps; track item.id) {\n <button type=\"button\" [class.active]=\"step === item.id\" [class.done]=\"saved[item.id]\" (click)=\"step = item.id\"><i>{{ saved[item.id] ? '✓' : '' }}</i>{{ item.label }}</button>\n }\n </div>\n }\n\n @if (variant === 'settings' || step === 'practice') {\n <div class=\"grid\">\n <label>Practice name<input [(ngModel)]=\"identity.name\" [disabled]=\"saving\"></label>\n <label>Legal name<input [(ngModel)]=\"identity.legalName\" [disabled]=\"saving\"></label>\n <label>Tax ID (EIN)<input [(ngModel)]=\"identity.taxId\" placeholder=\"94-1234567\" [disabled]=\"saving\"></label>\n <label>Group NPI<input [(ngModel)]=\"identity.npi\" [disabled]=\"saving\"></label>\n <label>Phone<input [(ngModel)]=\"identity.phone\" [disabled]=\"saving\"></label>\n <label>Email<input [(ngModel)]=\"identity.email\" [disabled]=\"saving\"></label>\n </div>\n <h3>Billing provider (pay-to)</h3>\n <div class=\"grid\">\n <label>Billing provider name<input [(ngModel)]=\"provider.name\" [disabled]=\"saving\"></label>\n <label>Billing tax ID<input [(ngModel)]=\"provider.taxId\" [disabled]=\"saving\"></label>\n <label>Billing NPI<input [(ngModel)]=\"provider.npi\" [disabled]=\"saving\"></label>\n <label>Billing phone<input [(ngModel)]=\"provider.phone\" [disabled]=\"saving\"></label>\n <label class=\"span\">Street<input [(ngModel)]=\"provider.billingStreet\" [disabled]=\"saving\"></label>\n <label>City<input [(ngModel)]=\"provider.billingCity\" [disabled]=\"saving\"></label>\n <label>State<input [(ngModel)]=\"provider.billingState\" maxlength=\"2\" [disabled]=\"saving\"></label>\n <label>ZIP<input [(ngModel)]=\"provider.billingZip\" [disabled]=\"saving\"></label>\n </div>\n <div class=\"actions\"><span>{{ saved['practice'] ? 'Saved to MindBill.' : 'Saved once, used on every bill.' }}</span><button type=\"button\" class=\"save\" [disabled]=\"saving\" (click)=\"savePractice()\">{{ saving ? 'Saving…' : 'Save practice' }}</button></div>\n }\n\n @if (variant === 'settings') { <h3>Locations</h3> }\n @if (variant === 'settings' || step === 'locations') {\n @for (location of locations; track $index; let index = $index) {\n <div class=\"loc\">\n <label>Name<input [(ngModel)]=\"location.name\" [disabled]=\"saving\"></label>\n <label>Street<input [(ngModel)]=\"location.street\" [disabled]=\"saving\"></label>\n <label>City<input [(ngModel)]=\"location.city\" [disabled]=\"saving\"></label>\n <label>State<input [(ngModel)]=\"location.state\" maxlength=\"2\" [disabled]=\"saving\"></label>\n <label>ZIP<input [(ngModel)]=\"location.zip\" [disabled]=\"saving\"></label>\n <label class=\"primary\"><input type=\"radio\" name=\"mbob-primary\" [checked]=\"location.isPrimary === true\" (change)=\"setPrimary(index)\"> Primary</label>\n <button type=\"button\" class=\"remove\" aria-label=\"Remove location\" (click)=\"locations.splice(index, 1)\">×</button>\n </div>\n }\n <button type=\"button\" class=\"add\" (click)=\"addLocation()\">+ Add location</button>\n <div class=\"actions\"><span>{{ saved['locations'] ? 'Saved to MindBill.' : 'Where evaluations happen.' }}</span><button type=\"button\" class=\"save\" [disabled]=\"saving\" (click)=\"saveLocations()\">{{ saving ? 'Saving…' : 'Save locations' }}</button></div>\n }\n\n @if (variant === 'settings') { <h3>Practice W-9</h3> }\n @if (variant === 'settings' || step === 'w9') {\n @if (profile?.w9; as w9) {\n <div class=\"w9-current\"><div><strong>{{ w9.filename }}</strong><span> · added {{ w9.addDate }}</span></div><span>Rides on every bill automatically</span></div>\n }\n <label class=\"drop\">\n <input type=\"file\" accept=\"application/pdf,.pdf\" (change)=\"w9Selected($event)\">\n <strong>{{ w9File ? w9File.name : (profile?.w9 ? 'Replace the W-9 PDF' : 'Drop the practice W-9 PDF here, or click to choose') }}</strong>\n <span>The W-9 is auto-attached to every submission.</span>\n </label>\n <div class=\"actions\"><span>{{ saved['w9'] ? 'Saved to MindBill.' : '' }}</span><button type=\"button\" class=\"save\" [disabled]=\"saving || !w9File\" (click)=\"saveW9()\">{{ saving ? 'Uploading…' : 'Save W-9' }}</button></div>\n }\n\n @if (variant === 'settings') { <h3>Checklist</h3> }\n @if (variant === 'settings' || step === 'review') {\n <div class=\"check\">\n @for (item of profile?.onboarding?.checklist ?? []; track item.id) {\n <div class=\"check-item\" [class.complete]=\"item.complete\"><i>{{ item.complete ? '✓' : '•' }}</i><span>{{ item.label }}</span></div>\n }\n @if (profile?.onboarding?.complete) { <p class=\"done-copy\">Billing setup is complete — bills submitted from your product carry this profile automatically.</p> }\n @else { <p class=\"muted\">Items above complete themselves as each section is saved.</p> }\n </div>\n }\n\n @if (errorMessage) { <div class=\"error\" role=\"alert\">{{ errorMessage }}</div> }\n </div>\n </section>\n `,\n styles: [`\n :host{display:block}\n .mbob{font-family:var(--font);color:var(--t);font-size:15px}.mbob *{box-sizing:border-box}\n .card{border:1px solid var(--b);border-radius:var(--r);background:var(--s);padding:24px}\n header{margin-bottom:18px}header h2{margin:0;font-size:22px}header p{margin:5px 0 0;color:var(--m)}\n .steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}\n .steps button{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--b);border-radius:999px;background:var(--s);padding:7px 13px;color:var(--m);font:inherit;font-size:13px;font-weight:700;cursor:pointer}\n .steps button.active{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}\n .steps button.done i{color:#159447;font-style:normal}\n .grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 22px}.span{grid-column:1/-1}\n label{display:grid;gap:7px;font-size:13px;font-weight:720}\n input:not([type=radio]):not([type=file]){width:100%;min-height:44px;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 12px;color:var(--t);font:inherit;font-weight:450}\n input:focus{outline:3px solid color-mix(in srgb,var(--a) 22%,transparent);border-color:var(--a)}\n h3{margin:20px 0 12px;padding-top:16px;border-top:1px solid var(--b);font-size:15px}\n .loc{display:grid;grid-template-columns:1.2fr 1.4fr .9fr .4fr .6fr auto auto;gap:10px;align-items:end;border-top:1px solid color-mix(in srgb,var(--b) 60%,transparent);padding:12px 0}\n .loc:first-of-type{border-top:0}\n .primary{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--m);white-space:nowrap;padding-bottom:12px}\n .remove{border:0;background:transparent;color:var(--m);font-size:20px;cursor:pointer;padding-bottom:8px}\n .add{border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 14px;color:var(--t);font:inherit;font-weight:700;cursor:pointer}\n .drop{display:grid;place-content:center;gap:6px;min-height:150px;border:2px dashed color-mix(in srgb,var(--m) 55%,transparent);border-radius:var(--cr);text-align:center;cursor:pointer;position:relative}\n .drop input{position:absolute;inset:0;opacity:0;cursor:pointer}\n .drop span{color:var(--m);font-size:13px}\n .w9-current{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid #9fd6b4;border-radius:var(--cr);background:#f3fcf6;padding:12px 14px;margin-bottom:14px}\n .w9-current span{color:var(--m);font-size:13px}\n .check{display:grid;gap:9px}\n .check-item{display:flex;align-items:center;gap:10px;border:1px solid var(--b);border-radius:var(--cr);padding:11px 14px}\n .check-item.complete{border-color:#9fd6b4;background:#f3fcf6}\n .check-item i{font-style:normal}\n .actions{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:20px}\n .actions>span{color:var(--m)}\n .save{min-width:170px;border:0;border-radius:var(--cr);background:var(--a);color:var(--ac);padding:12px 22px;font:inherit;font-weight:780;cursor:pointer}\n .save:disabled{opacity:.6;cursor:wait}\n .error{margin-top:14px;border-left:4px solid #c83c3c;border-radius:var(--cr);background:color-mix(in srgb,#c83c3c 8%,var(--s));padding:12px 14px;color:#c83c3c}\n .done-copy{color:#159447;font-weight:750}\n .muted{color:var(--m)}\n @media(max-width:820px){.grid{grid-template-columns:1fr}.span{grid-column:auto}.loc{grid-template-columns:1fr 1fr;align-items:center}}\n `],\n})\nexport class MindBillOrganizationOnboardingComponent implements OnInit {\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Input() sessionEndpoint = \"/api/mindbill/session\";\n @Input() getSession?: BillLifecycleSessionProvider;\n @Input() apiBaseUrl?: string;\n @Input() heading = \"Billing setup\";\n @Input() description = \"Practice identity, locations, and the W-9 — saved once, used on every bill.\";\n @Input() variant: \"onboarding\" | \"settings\" = \"onboarding\";\n @Output() saved$ = new EventEmitter<OrganizationProfileData>();\n @Output() completed = new EventEmitter<OrganizationProfileData>();\n @Output() organizationError = new EventEmitter<Error>();\n\n readonly steps: Array<{ id: StepId; label: string }> = [\n { id: \"practice\", label: \"Practice & billing\" },\n { id: \"locations\", label: \"Locations\" },\n { id: \"w9\", label: \"W-9\" },\n { id: \"review\", label: \"Review\" },\n ];\n\n profile: OrganizationProfileData | null = null;\n loadError = \"\";\n errorMessage = \"\";\n step: StepId = \"practice\";\n saving = false;\n saved: Record<string, boolean> = {};\n identity = { name: \"\", legalName: \"\", taxId: \"\", npi: \"\", phone: \"\", email: \"\" };\n provider: OrganizationBillingProviderInput = { name: \"\", taxId: \"\", npi: \"\", billType: \"Professional\", phone: \"\", billingStreet: \"\", billingCity: \"\", billingState: \"\", billingZip: \"\" };\n locations: OrganizationLocationInput[] = [{ name: \"\", street: \"\", city: \"\", state: \"\", zip: \"\", isPrimary: false }];\n w9File: File | null = null;\n\n private readonly changeDetector = inject(ChangeDetectorRef);\n private completedFired = false;\n private client!: OrganizationClient;\n\n ngOnInit(): void {\n this.client = createOrganizationClient({\n sessionEndpoint: this.sessionEndpoint,\n ...(this.getSession ? { getSession: this.getSession } : {}),\n ...(this.apiBaseUrl ? { apiBaseUrl: this.apiBaseUrl } : {}),\n });\n this.client.getOrganization()\n .then((profile) => { this.loadError = \"\"; this.adoptProfile(profile); })\n .catch((error: unknown) => {\n const failure = error instanceof Error ? error : new Error(\"The organization could not be loaded.\");\n this.loadError = failure.message;\n this.organizationError.emit(failure);\n })\n .finally(() => this.changeDetector.markForCheck());\n }\n\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!, \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--bg\": this.appearance.backgroundColor ?? base[\"bg\"]!, \"--s\": this.appearance.surfaceColor ?? base[\"s\"]!,\n \"--t\": this.appearance.textColor ?? base[\"t\"]!, \"--m\": this.appearance.mutedColor ?? base[\"m\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!, \"--r\": this.appearance.borderRadius ?? base[\"r\"]!,\n \"--cr\": this.appearance.controlRadius ?? base[\"cr\"]!, \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n\n private adoptProfile(profile: OrganizationProfileData): void {\n this.profile = profile;\n this.identity = {\n name: profile.practiceIdentity.name ?? this.identity.name,\n legalName: profile.practiceIdentity.legalName ?? this.identity.legalName,\n taxId: profile.practiceIdentity.taxId ?? this.identity.taxId,\n npi: profile.practiceIdentity.npi ?? this.identity.npi,\n phone: profile.practiceIdentity.phone ?? this.identity.phone,\n email: profile.practiceIdentity.email ?? this.identity.email,\n };\n if (profile.billingProviders[0]) this.provider = { billType: \"Professional\", ...profile.billingProviders[0] };\n if (profile.locations.length) this.locations = profile.locations.map((item) => ({ ...item }));\n if (profile.onboarding.complete && !this.completedFired) {\n this.completedFired = true;\n this.completed.emit(profile);\n }\n }\n\n addLocation(): void {\n this.locations.push({ name: \"\", street: \"\", city: \"\", state: \"\", zip: \"\", isPrimary: false });\n }\n\n setPrimary(index: number): void {\n this.locations = this.locations.map((item, itemIndex) => ({ ...item, isPrimary: itemIndex === index }));\n }\n\n w9Selected(event: Event): void {\n this.w9File = (event.target as HTMLInputElement).files?.[0] ?? null;\n }\n\n private async run(work: () => Promise<OrganizationProfileData>, stepId: StepId): Promise<void> {\n this.saving = true;\n this.errorMessage = \"\";\n try {\n const profile = await work();\n this.adoptProfile(profile);\n this.saved[stepId] = true;\n this.saved$.emit(profile);\n if (this.variant === \"onboarding\") {\n const order: StepId[] = [\"practice\", \"locations\", \"w9\", \"review\"];\n const next = order[order.indexOf(stepId) + 1];\n if (next) this.step = next;\n }\n } catch (error) {\n const failure = error instanceof Error ? error : new Error(\"Saving failed.\");\n this.errorMessage = failure.message;\n this.organizationError.emit(failure);\n } finally {\n this.saving = false;\n this.changeDetector.markForCheck();\n }\n }\n\n savePractice(): void {\n void this.run(() => this.client.saveBillingProfile({\n practiceIdentity: this.identity,\n ...(this.provider.name.trim() || this.provider.taxId.trim() || this.provider.npi.trim()\n ? { billingProviders: [this.provider] }\n : {}),\n }), \"practice\");\n }\n\n saveLocations(): void {\n void this.run(() => this.client.saveLocations(this.locations.filter((item) => item.name.trim() || item.street.trim())), \"locations\");\n }\n\n saveW9(): void {\n void this.run(async () => {\n if (!this.w9File) throw new Error(\"Choose the practice W-9 PDF first.\");\n return this.client.saveW9({ filename: this.w9File.name, contentBase64: await fileToBase64(this.w9File) });\n }, \"w9\");\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["THEME"],"mappings":"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"}
1
+ {"version":3,"file":"mindbill-angular.mjs","sources":["../../src/lib/lifecycle-store.ts","../../src/lib/appearance.ts","../../src/lib/bill-rejection.ts","../../src/lib/bill-rejection-notice.component.ts","../../src/lib/submission-format.ts","../../src/lib/submission-controls.ts","../../src/lib/bill-submission.component.ts","../../src/lib/bill-lifecycle.component.ts","../../src/lib/procedure-lines.ts","../../src/lib/billing-dashboard.component.ts","../../src/lib/status-aging-matrix.ts","../../src/lib/status-aging-matrix.component.ts","../../src/lib/bill-tasks-dashboard.ts","../../src/lib/bill-tasks-dashboard.component.ts","../../src/lib/billing-management-button.component.ts","../../src/lib/organization-onboarding.component.ts","../../src/mindbill-angular.ts"],"sourcesContent":["import { computed, signal } from \"@angular/core\";\nimport {\n createBillLifecycleClient,\n type BillLifecycleClient,\n type BillLifecycleClientOptions,\n type BillLifecycleData,\n type CloseBillInput,\n type PostBillPaymentInput,\n type ReportBillStatusInput,\n type ResubmitBillInput,\n type SendDuplicateBillInput,\n type SubmitNewBillInput,\n type SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\n\nexport class MindBillLifecycleStore {\n readonly billId = signal(\"\");\n readonly data = signal<BillLifecycleData | null>(null);\n readonly error = signal<Error | null>(null);\n readonly loading = signal(false);\n readonly mutating = signal(false);\n readonly ready = computed(() => this.data() !== null && !this.loading());\n private client: BillLifecycleClient | null = null;\n private refreshTimer: ReturnType<typeof setInterval> | null = null;\n\n connect(\n options: BillLifecycleClientOptions,\n refreshInterval = 60_000,\n ): void {\n this.disconnect();\n this.billId.set(options.billId);\n this.client = createBillLifecycleClient(options);\n void this.refresh();\n if (refreshInterval > 0) {\n this.refreshTimer = setInterval(() => void this.refresh(), refreshInterval);\n }\n }\n\n disconnect(): void {\n if (this.refreshTimer) clearInterval(this.refreshTimer);\n this.refreshTimer = null;\n this.client?.clearSession();\n this.client = null;\n }\n\n async refresh(): Promise<BillLifecycleData | null> {\n if (!this.client) return null;\n this.loading.set(this.data() === null);\n try {\n const data = await this.client.getLifecycle();\n this.data.set(data);\n this.error.set(null);\n return data;\n } catch (cause) {\n this.error.set(cause instanceof Error ? cause : new Error(\"Bill could not be loaded.\"));\n return null;\n } finally {\n this.loading.set(false);\n }\n }\n\n getDeliveryOptions() { return this.requireClient().getDeliveryOptions(); }\n getAttachment(id: string) { return this.requireClient().getAttachment(id); }\n getEor(id: string) { return this.requireClient().getEor(id); }\n closeBill(input: CloseBillInput) { return this.mutate(() => this.requireClient().closeBill(input)); }\n postPayment(input: PostBillPaymentInput) { return this.mutate(() => this.requireClient().postPayment(input)); }\n resubmitBill(input: ResubmitBillInput) { return this.mutate(() => this.requireClient().resubmitBill(input)); }\n submitNewBill(input: SubmitNewBillInput) { return this.mutate(() => this.requireClient().submitNewBill(input)); }\n submitSecondReview(input: SubmitSecondReviewInput) { return this.mutate(() => this.requireClient().submitSecondReview(input)); }\n sendDuplicateBill(input: SendDuplicateBillInput) { return this.mutate(() => this.requireClient().sendDuplicateBill(input)); }\n reportBillStatus(input: ReportBillStatusInput) { return this.mutate(() => this.requireClient().reportBillStatus(input)); }\n\n private requireClient(): BillLifecycleClient {\n if (!this.client) throw new Error(\"Connect the lifecycle store before using it.\");\n return this.client;\n }\n\n private async mutate(task: () => Promise<BillLifecycleData>): Promise<BillLifecycleData> {\n this.mutating.set(true);\n this.error.set(null);\n try {\n const data = await task();\n this.data.set(data);\n return data;\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(\"The billing request could not be completed.\");\n this.error.set(error);\n throw error;\n } finally {\n this.mutating.set(false);\n }\n }\n}\n","export type MindBillAngularThemePreset = \"mindbill\" | \"qme-companion\" | \"orange-bright\" | \"clinical-blue\";\n\nexport type MindBillAngularAppearance = {\n preset?: MindBillAngularThemePreset;\n accentColor?: string;\n accentTextColor?: string;\n backgroundColor?: string;\n surfaceColor?: string;\n textColor?: string;\n mutedColor?: string;\n borderColor?: string;\n borderRadius?: string;\n controlRadius?: string;\n fontFamily?: string;\n dangerColor?: string;\n};\n\nconst THEMES: Record<MindBillAngularThemePreset, Required<MindBillAngularAppearance>> = {\n mindbill: { preset: \"mindbill\", accentColor: \"#238dbd\", accentTextColor: \"#fff\", backgroundColor: \"#f3f8fa\", surfaceColor: \"#fff\", textColor: \"#203743\", mutedColor: \"#657982\", borderColor: \"#dbe6ea\", borderRadius: \"14px\", controlRadius: \"8px\", fontFamily: \"Inter,system-ui,sans-serif\", dangerColor: \"#b63d35\" },\n \"qme-companion\": { preset: \"qme-companion\", accentColor: \"#53b5dc\", accentTextColor: \"#173542\", backgroundColor: \"#f2f8fb\", surfaceColor: \"#fff\", textColor: \"#1d3440\", mutedColor: \"#617783\", borderColor: \"#d7e5eb\", borderRadius: \"12px\", controlRadius: \"8px\", fontFamily: \"Inter,system-ui,sans-serif\", dangerColor: \"#b83f3a\" },\n \"orange-bright\": { preset: \"orange-bright\", accentColor: \"#f4510b\", accentTextColor: \"#fff\", backgroundColor: \"#fffaf6\", surfaceColor: \"#fffefd\", textColor: \"#090f1f\", mutedColor: \"#626a73\", borderColor: \"#e7e1da\", borderRadius: \"16px\", controlRadius: \"10px\", fontFamily: \"Inter,system-ui,sans-serif\", dangerColor: \"#c4322b\" },\n \"clinical-blue\": { preset: \"clinical-blue\", accentColor: \"#1677ff\", accentTextColor: \"#fff\", backgroundColor: \"#f5f7fa\", surfaceColor: \"#fff\", textColor: \"#1f2d3d\", mutedColor: \"#66788a\", borderColor: \"#d9e2ec\", borderRadius: \"8px\", controlRadius: \"6px\", fontFamily: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\", dangerColor: \"#d4380d\" },\n};\n\nexport function mindBillAngularAppearanceStyle(appearance: MindBillAngularAppearance = { preset: \"mindbill\" }): Record<string, string> {\n const base = THEMES[appearance.preset ?? \"mindbill\"];\n return {\n \"--a\": appearance.accentColor ?? base.accentColor,\n \"--ac\": appearance.accentTextColor ?? base.accentTextColor,\n \"--bg\": appearance.backgroundColor ?? base.backgroundColor,\n \"--s\": appearance.surfaceColor ?? base.surfaceColor,\n \"--t\": appearance.textColor ?? base.textColor,\n \"--m\": appearance.mutedColor ?? base.mutedColor,\n \"--b\": appearance.borderColor ?? base.borderColor,\n \"--r\": appearance.borderRadius ?? base.borderRadius,\n \"--cr\": appearance.controlRadius ?? base.controlRadius,\n \"--font\": appearance.fontFamily ?? base.fontFamily,\n \"--danger\": appearance.dangerColor ?? base.dangerColor,\n };\n}\n","import type { BillRejection, BillRejectionIssue } from \"@mindbill/browser\";\n\nexport function billRejectionIssues(rejection: BillRejection): BillRejectionIssue[] {\n return rejection.issues?.length\n ? [...rejection.issues]\n : [{ code: rejection.code ?? null, description: rejection.reason }];\n}\n\nexport function billRejectionIssueSummary(rejection: BillRejection, count: number): string {\n const noun = count === 1 ? \"validation error\" : \"validation errors\";\n const source = rejection.source?.trim().replace(/\\.$/, \"\");\n if (!source) return `${count} ${noun}.`;\n if (/acknowledg/i.test(source)) return `${count} clearinghouse ${noun}.`;\n return `${count} ${noun} returned by ${source}.`;\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, Input } from \"@angular/core\";\nimport type { BillRejection } from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./appearance\";\nimport { mindBillAngularAppearanceStyle } from \"./appearance\";\nimport { billRejectionIssues, billRejectionIssueSummary } from \"./bill-rejection\";\n\n@Component({\n selector: \"mindbill-bill-rejection-notice\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <section class=\"notice\" [ngStyle]=\"themeStyle\" role=\"alert\" aria-label=\"Bill rejection reasons\">\n <div class=\"overview\">\n <header>\n <span class=\"icon\" aria-hidden=\"true\">!</span>\n <div><strong>{{ title }}</strong><span>Fix the {{ issues.length === 1 ? 'issue' : 'issues' }} below, then resubmit.</span></div>\n </header>\n <ol class=\"progress\" aria-label=\"Submission status\">\n <li><span aria-hidden=\"true\">✓</span><b>Sent</b>@if (submittedAt) { <small>{{ formatDate(submittedAt) }}</small> }</li>\n <li class=\"rejected\" aria-current=\"step\"><span aria-hidden=\"true\">!</span><b>Rejected</b>@if (rejection.receivedAt) { <small>{{ formatDate(rejection.receivedAt) }}</small> }</li>\n </ol>\n </div>\n <div class=\"issues\" aria-label=\"Rejection reasons\">\n <div class=\"issues-heading\"><strong><span aria-hidden=\"true\">△</span> Rejection reasons</strong><span>{{ issueSummary }}</span></div>\n <ol [attr.aria-label]=\"issues.length + ' rejection ' + (issues.length === 1 ? 'reason' : 'reasons')\">\n @for (issue of issues; track $index) {\n <li><span class=\"bullet\" aria-hidden=\"true\"></span><p>{{ issue.description }}</p>@if (issue.code) { <span class=\"code\">{{ issue.code }}</span> }</li>\n }\n </ol>\n @if (hasCodes) { <p class=\"code-note\"><span aria-hidden=\"true\">i</span> Technical error codes are included for support and auditability.</p> }\n </div>\n </section>\n `,\n styles: [`\n :host{display:block}.notice,.notice *{box-sizing:border-box}.notice{font-family:var(--font,Inter,system-ui,sans-serif);color:var(--t,#203743);border:1px solid color-mix(in srgb,var(--danger) 30%,var(--b));border-left:4px solid var(--danger);border-radius:var(--r,14px);background:color-mix(in srgb,var(--danger) 5%,var(--s));box-shadow:0 14px 38px color-mix(in srgb,var(--danger) 9%,transparent);padding:26px 28px 18px}.overview{display:grid;grid-template-columns:minmax(230px,.72fr) minmax(360px,1.28fr);align-items:start;gap:38px}header{display:flex;align-items:flex-start;gap:14px}header>div{display:grid;gap:5px}header strong{color:var(--danger);font-size:19px;line-height:1.25}header div>span{color:color-mix(in srgb,var(--danger) 48%,var(--t));font-size:14px;line-height:1.45}.icon{display:grid;place-items:center;flex:0 0 auto;width:42px;height:42px;border-radius:50%;background:var(--danger);box-shadow:0 5px 14px color-mix(in srgb,var(--danger) 25%,transparent);color:#fff;font-size:21px;font-weight:900}.progress{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));list-style:none;margin:5px 0 24px;padding:0}.progress li{display:grid;grid-template-rows:34px auto auto;gap:4px;position:relative;text-align:center;font-size:12px}.progress li:first-child:after{content:\"\";position:absolute;left:calc(50% + 17px);right:calc(-50% + 17px);top:16px;height:2px;background:color-mix(in srgb,var(--danger) 48%,var(--b))}.progress li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:34px;height:34px;border:2px solid color-mix(in srgb,var(--danger) 32%,var(--b));border-radius:50%;background:var(--s);color:var(--danger);font-size:16px;font-weight:900}.progress li.rejected>span{border-color:var(--danger);background:var(--danger);color:#fff}.progress b{font-size:13px}.progress small{color:var(--m);font-size:11px;line-height:1.3}.issues{border:1px solid color-mix(in srgb,var(--danger) 19%,var(--b));border-radius:12px;background:color-mix(in srgb,var(--danger) 2%,var(--s));overflow:hidden}.issues-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--danger) 14%,var(--b))}.issues-heading strong{display:flex;align-items:center;gap:8px;font-size:13px}.issues-heading strong>span{color:var(--danger);font-size:17px}.issues-heading>span{color:var(--m);font-size:12px;text-align:right}.issues ol{display:grid;gap:7px;list-style:none;margin:0;padding:10px 12px}.issues li{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:11px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--danger) 11%,var(--b));border-radius:8px;background:color-mix(in srgb,var(--danger) 1%,var(--s));box-shadow:0 1px 3px rgba(23,39,48,.04)}.bullet{width:7px;height:7px;border-radius:50%;background:var(--danger)}.issues p{margin:0;font-size:14px;line-height:1.45}.code{justify-self:end;border:1px solid color-mix(in srgb,var(--danger) 20%,var(--b));border-radius:999px;background:color-mix(in srgb,var(--danger) 6%,var(--s));color:var(--danger);font-size:11px;font-weight:850;line-height:1.2;padding:4px 8px}.code-note{display:flex;align-items:center;gap:7px;margin:0;padding:1px 16px 13px;color:var(--m);font-size:11px}.code-note>span{display:grid;place-items:center;width:16px;height:16px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:850}@media(max-width:700px){.notice{padding:18px 14px 14px}.overview{grid-template-columns:1fr;gap:18px}header strong{font-size:17px}.icon{width:36px;height:36px}.progress{margin:0 0 4px}.issues-heading{align-items:flex-start;flex-direction:column;gap:4px}.issues-heading>span{text-align:left}.issues li{grid-template-columns:8px minmax(0,1fr);gap:8px 10px}.code{grid-column:2;justify-self:start}}\n `],\n})\nexport class MindBillBillRejectionNoticeComponent {\n @Input({ required: true }) rejection!: BillRejection;\n @Input() submittedAt: string | null = null;\n @Input() title = \"Rejected — action required\";\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n\n get issues() { return billRejectionIssues(this.rejection); }\n get hasCodes(): boolean { return this.issues.some((issue) => Boolean(issue.code)); }\n get issueSummary(): string { return billRejectionIssueSummary(this.rejection, this.issues.length); }\n get themeStyle(): Record<string, string> { return mindBillAngularAppearanceStyle(this.appearance); }\n formatDate(value: string): string { const parsed = new Date(value); return Number.isNaN(parsed.getTime()) ? value : new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\", timeStyle: \"short\" }).format(parsed); }\n}\n","/** Date helpers shared by the Angular submission surfaces. Mirrors the React\n * package's parseBillSubmissionDate/formatBillSubmissionDate exactly so both\n * frameworks accept and render the same values. */\n\nexport function parseMindBillSubmissionDate(value: string): string | undefined {\n const trimmed = value.trim();\n const iso = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(trimmed);\n const us = /^(\\d{1,2})[/-](\\d{1,2})[/-](\\d{4})$/.exec(trimmed);\n const digits = /^(\\d{2})(\\d{2})(\\d{4})$/.exec(trimmed.replace(/\\D/g, \"\"));\n const match = iso ? [iso[2], iso[3], iso[1]] : us ? [us[1], us[2], us[3]] : digits ? [digits[1], digits[2], digits[3]] : null;\n if (!match) return undefined;\n const month = Number(match[0]);\n const day = Number(match[1]);\n const year = Number(match[2]);\n const date = new Date(Date.UTC(year, month - 1, day));\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return undefined;\n return `${String(year).padStart(4, \"0\")}-${String(month).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}`;\n}\n\nexport function formatMindBillSubmissionDate(value: string | null | undefined): string {\n const parsed = value ? parseMindBillSubmissionDate(value) : undefined;\n if (!parsed) return \"\";\n const [year, month, day] = parsed.split(\"-\");\n return `${month}/${day}/${year}`;\n}\n\nexport type MindBillProcedureComboOption = { id: string; label: string; detail?: string };\n\n/** Accepts complete CPT (5 digits), HCPCS (letter + 4 digits), or California\n * medical-legal codes typed directly into the procedure picker. */\nexport function mindBillCustomProcedureOption(query: string): MindBillProcedureComboOption | null {\n const code = query.trim().toUpperCase().replace(/\\s+/g, \"\");\n if (!/^(?:\\d{5}|[A-Z]\\d{4}|ML(?:20[0-5]|PRR))$/.test(code)) return null;\n return { id: code, label: code, detail: \"Use this CPT, HCPCS, or medical-legal code\" };\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from \"@angular/core\";\nimport { formatMindBillSubmissionDate, parseMindBillSubmissionDate } from \"./submission-format\";\n\nexport type MindBillComboOption = { id: string; label: string; detail?: string };\n\n/** Styled searchable dropdown shared by the submission form's procedure,\n * modifier, taxonomy, payer, and diagnosis pickers. Mirrors the React\n * package's ComboBox: query filtering, optional custom-code creation,\n * loading states, and infinite scroll via (endReached). */\n@Component({\n selector: \"mindbill-combo-box\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"combo\">\n <input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-invalid]=\"invalid || null\"\n [attr.aria-expanded]=\"showMenu\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [value]=\"open ? query : value\"\n (focus)=\"onFocus()\"\n (click)=\"onFocus()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (showMenu) {\n <div class=\"menu\" role=\"listbox\" (scroll)=\"onScroll($event)\">\n @if (loading && !visible.length) { <div class=\"status\">Loading…</div> }\n @else if (visible.length) {\n @for (option of visible; track option.id) {\n <button type=\"button\" role=\"option\" (mousedown)=\"$event.preventDefault()\" (click)=\"choose(option)\">\n <strong>{{ option.label }}</strong>\n @if (option.detail) { <small>{{ option.detail }}</small> }\n </button>\n }\n } @else { <div class=\"status\">No matches</div> }\n @if (loadingMore) { <div class=\"status\">Loading more…</div> }\n </div>\n }\n </div>\n `,\n styles: [`\n :host{display:block}\n .combo{position:relative}\n input{width:100%;min-height:46px;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 12px;color:var(--t);font:inherit;font-weight:450}\n input:focus{outline:3px solid color-mix(in srgb,var(--a) 22%,transparent);border-color:var(--a)}\n input[aria-invalid=\"true\"]{border-color:#c83c3c}\n .menu{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:30;max-height:320px;overflow:auto;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);box-shadow:0 14px 35px #172b3730}\n .menu button{display:grid;width:100%;gap:3px;border:0;border-bottom:1px solid color-mix(in srgb,var(--b) 60%,transparent);background:var(--s);padding:11px 14px;text-align:left;color:var(--t);font:inherit;cursor:pointer}\n .menu button:last-child{border-bottom:0}\n .menu button:hover{background:color-mix(in srgb,var(--a) 7%,var(--s))}\n .menu strong{font-weight:720}\n .menu small{color:var(--m);font-size:12px}\n .status{padding:11px 14px;color:var(--m);font-size:13px}\n `],\n})\nexport class MindBillComboBoxComponent {\n @Input() value = \"\";\n @Input() placeholder = \"\";\n @Input() options: MindBillComboOption[] = [];\n @Input() disabled = false;\n @Input() loading = false;\n @Input() loadingMore = false;\n @Input() invalid = false;\n @Input() preserveValueOnOpen = false;\n @Input() ariaLabel = \"\";\n @Input() createOption?: (query: string) => MindBillComboOption | null;\n @Output() opened = new EventEmitter<void>();\n @Output() queryChange = new EventEmitter<string>();\n @Output() endReached = new EventEmitter<void>();\n @Output() selected = new EventEmitter<MindBillComboOption>();\n\n open = false;\n query = \"\";\n private closeTimer?: ReturnType<typeof setTimeout>;\n\n get visible(): MindBillComboOption[] {\n const q = this.query.trim().toLowerCase();\n const matches = q\n ? this.options.filter((option) => `${option.id} ${option.label} ${option.detail ?? \"\"}`.toLowerCase().includes(q))\n : this.options;\n const custom = this.createOption?.(this.query) ?? null;\n return custom && !matches.some((option) => option.id.toUpperCase() === custom.id.toUpperCase())\n ? [...matches, custom]\n : matches;\n }\n\n get showMenu(): boolean {\n return this.open && (this.loading || this.visible.length > 0 || this.query.trim().length >= 2);\n }\n\n onFocus(): void {\n clearTimeout(this.closeTimer);\n const next = this.preserveValueOnOpen ? this.value : \"\";\n this.open = true;\n this.query = next;\n this.opened.emit();\n if (next) this.queryChange.emit(next);\n }\n\n onInput(event: Event): void {\n this.open = true;\n this.query = (event.target as HTMLInputElement).value;\n this.queryChange.emit(this.query);\n }\n\n onBlur(): void {\n this.closeTimer = setTimeout(() => { this.open = false; }, 120);\n }\n\n onScroll(event: Event): void {\n const menu = event.currentTarget as HTMLElement;\n if (menu.scrollHeight - menu.scrollTop - menu.clientHeight < 120) this.endReached.emit();\n }\n\n choose(option: MindBillComboOption): void {\n this.selected.emit(option);\n this.open = false;\n this.query = \"\";\n }\n}\n\n/** MM/DD/YYYY masked date input. Emits only parseable ISO dates (or \"\" when\n * cleared) and reformats the display once a complete date round-trips, exactly\n * like the React package's TextDateInput. */\n@Component({\n selector: \"mindbill-date-input\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <input\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"off\"\n placeholder=\"MM/DD/YYYY\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-invalid]=\"invalid || null\"\n [disabled]=\"disabled\"\n [value]=\"display\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n @if (invalid) { <small>Use MM/DD/YYYY</small> }\n `,\n styles: [`\n :host{display:block}\n input{width:100%;min-height:46px;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 12px;color:var(--t);font:inherit;font-weight:450}\n input:focus{outline:3px solid color-mix(in srgb,var(--a) 22%,transparent);border-color:var(--a)}\n input[aria-invalid=\"true\"]{border-color:#c83c3c}\n small{display:block;margin-top:6px;color:#c83c3c;font-weight:450}\n `],\n})\nexport class MindBillDateInputComponent implements OnChanges {\n @Input() value: string | null | undefined;\n @Input() disabled = false;\n @Input() ariaLabel = \"\";\n @Output() valueChange = new EventEmitter<string>();\n\n display = \"\";\n invalid = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"value\"]) {\n this.display = formatMindBillSubmissionDate(this.value);\n this.invalid = false;\n }\n }\n\n onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).value;\n const parsed = parseMindBillSubmissionDate(next);\n this.display = next;\n this.invalid = Boolean(next && !parsed);\n if (!next.trim()) this.valueChange.emit(\"\");\n else if (parsed) this.valueChange.emit(parsed);\n }\n\n onBlur(): void {\n this.invalid = Boolean(this.display && !parseMindBillSubmissionDate(this.display));\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ChangeDetectorRef, Component, EventEmitter, HostListener, inject, Input, OnChanges, Output, SimpleChanges } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport {\n createBillReferenceClient,\n createBillSubmissionClient,\n defaultBillReviewPayerOption,\n type BillDiagnosisCode,\n type BillLifecycleSessionProvider,\n type BillReviewPayer,\n type BillReviewPayerOption,\n type BrowserBillCreateInput,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionInput,\n type BrowserBillSubmissionResult,\n} from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\nimport { MindBillComboBoxComponent, MindBillDateInputComponent, type MindBillComboOption } from \"./submission-controls\";\nimport { mindBillCustomProcedureOption, parseMindBillSubmissionDate } from \"./submission-format\";\n\nexport type MindBillSubmissionAttachment = Omit<BrowserBillSubmissionDocument, \"contentBase64\"> & {\n contentBase64?: string;\n contentUrl?: string;\n loadBlob?: () => Promise<Blob>;\n locked?: boolean;\n badge?: string;\n};\n\nexport type MindBillSubmissionProcedureOption = {\n code: string;\n description: string;\n allowedAmount?: number;\n};\n\nexport type MindBillSubmissionModifierOption = { code: string; description: string };\nexport type MindBillSubmissionTaxonomyOption = { code: string; description: string };\n\nconst MAX_PDF_BYTES = 25 * 1024 * 1024;\nconst MAX_UPLOAD_BYTES = 100 * 1024 * 1024;\nconst MAX_DOCUMENTS = 20;\n\nconst PROCEDURES: MindBillSubmissionProcedureOption[] = [\n { code: \"ML200\", description: \"Missed appointment for a medical-legal evaluation\", allowedAmount: 503.75 },\n { code: \"ML201\", description: \"Comprehensive medical-legal evaluation\", allowedAmount: 2015 },\n { code: \"ML202\", description: \"Follow-up medical-legal evaluation\", allowedAmount: 1316.25 },\n { code: \"ML203\", description: \"Supplemental medical-legal evaluation\", allowedAmount: 650 },\n { code: \"ML204\", description: \"Medical-legal testimony\", allowedAmount: 113.75 },\n { code: \"ML205\", description: \"Review of sub rosa recordings\", allowedAmount: 81.25 },\n { code: \"MLPRR\", description: \"Medical-legal record review\", allowedAmount: 3 },\n { code: \"90791\", description: \"Psychiatric diagnostic evaluation\" },\n { code: \"90792\", description: \"Psychiatric diagnostic evaluation with medical services\" },\n { code: \"90832\", description: \"Psychotherapy, 30 minutes\" },\n { code: \"90834\", description: \"Psychotherapy, 45 minutes\" },\n { code: \"90837\", description: \"Psychotherapy, 60 minutes\" },\n { code: \"99203\", description: \"New patient office visit, level 3\" },\n { code: \"99204\", description: \"New patient office visit, level 4\" },\n { code: \"99205\", description: \"New patient office visit, level 5\", allowedAmount: 349.48 },\n { code: \"99213\", description: \"Established patient office visit, level 3\" },\n { code: \"99214\", description: \"Established patient office visit, level 4\" },\n { code: \"99215\", description: \"Established patient office visit, level 5\" },\n { code: \"96130\", description: \"Psychological testing evaluation, first hour\" },\n { code: \"96131\", description: \"Psychological testing evaluation, each additional hour\", allowedAmount: 131.96 },\n { code: \"97161\", description: \"Physical therapy evaluation, low complexity\" },\n { code: \"97162\", description: \"Physical therapy evaluation, moderate complexity\" },\n { code: \"97163\", description: \"Physical therapy evaluation, high complexity\" },\n { code: \"97110\", description: \"Therapeutic exercises\" },\n { code: \"97140\", description: \"Manual therapy techniques\" },\n { code: \"98940\", description: \"Chiropractic manipulative treatment, 1–2 regions\" },\n { code: \"98941\", description: \"Chiropractic manipulative treatment, 3–4 regions\" },\n { code: \"72141\", description: \"MRI cervical spine without contrast\" },\n { code: \"72148\", description: \"MRI lumbar spine without contrast\" },\n { code: \"73721\", description: \"MRI lower-extremity joint without contrast\" },\n { code: \"20610\", description: \"Major joint injection or aspiration\" },\n { code: \"99070\", description: \"Supplies and materials\" },\n];\n\nconst MODIFIERS: MindBillSubmissionModifierOption[] = [\n { code: \"92\", description: \"Primary Treating Physician evaluation\" },\n { code: \"93\", description: \"Interpreter required\" },\n { code: \"94\", description: \"Agreed Medical Evaluator\" },\n { code: \"95\", description: \"Qualified Medical Evaluator\" },\n { code: \"96\", description: \"Psychiatric/psychological evaluation\" },\n { code: \"97\", description: \"Toxicology evaluation\" },\n { code: \"98\", description: \"Oncology evaluation\" },\n { code: \"59\", description: \"Distinct procedural service\" },\n { code: \"XE\", description: \"Separate encounter\" },\n { code: \"XS\", description: \"Separate structure\" },\n { code: \"XP\", description: \"Separate practitioner\" },\n { code: \"XU\", description: \"Unusual non-overlapping service\" },\n];\n\nconst TAXONOMIES: MindBillSubmissionTaxonomyOption[] = [\n { code: \"103G00000X\", description: \"Clinical Neuropsychologist\" },\n { code: \"103T00000X\", description: \"Psychologist\" },\n { code: \"111N00000X\", description: \"Chiropractor\" },\n { code: \"207Q00000X\", description: \"Family Medicine\" },\n { code: \"207R00000X\", description: \"Internal Medicine\" },\n { code: \"207X00000X\", description: \"Orthopaedic Surgery\" },\n { code: \"207XS0117X\", description: \"Orthopaedic Surgery of the Spine\" },\n { code: \"208100000X\", description: \"Physical Medicine & Rehabilitation\" },\n { code: \"2083X0100X\", description: \"Occupational Medicine\" },\n { code: \"2084N0400X\", description: \"Neurology\" },\n { code: \"2084P0800X\", description: \"Psychiatry\" },\n { code: \"208VP0000X\", description: \"Pain Medicine\" },\n { code: \"213E00000X\", description: \"Podiatrist\" },\n { code: \"225100000X\", description: \"Physical Therapist\" },\n { code: \"225X00000X\", description: \"Occupational Therapist\" },\n { code: \"363A00000X\", description: \"Physician Assistant\" },\n { code: \"363L00000X\", description: \"Nurse Practitioner\" },\n];\n\nconst QUICK_DIAGNOSES: Array<BillDiagnosisCode & { label: string }> = [\n { label: \"Psych\", code: \"Z04.6\", description: \"General psychiatric examination requested by authority\" },\n { label: \"Back\", code: \"M54.50\", description: \"Low back pain, unspecified\" },\n { label: \"Neck\", code: \"M54.2\", description: \"Cervicalgia\" },\n { label: \"Left hand\", code: \"M79.642\", description: \"Pain in left hand\" },\n { label: \"Right hand\", code: \"M79.641\", description: \"Pain in right hand\" },\n { label: \"Left knee\", code: \"M25.562\", description: \"Pain in left knee\" },\n { label: \"Right knee\", code: \"M25.561\", description: \"Pain in right knee\" },\n];\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", bg: \"#f3f8fa\", s: \"#fff\", t: \"#203743\", m: \"#657982\", b: \"#dbe6ea\", r: \"14px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", bg: \"#f2f8fb\", s: \"#fff\", t: \"#1d3440\", m: \"#617783\", b: \"#d7e5eb\", r: \"12px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", bg: \"#fffaf6\", s: \"#fffefd\", t: \"#090f1f\", m: \"#626a73\", b: \"#e7e1da\", r: \"16px\", cr: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", bg: \"#fff\", s: \"#fff\", t: \"#1f2d3d\", m: \"#66788a\", b: \"#d9e2ec\", r: \"8px\", cr: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\nfunction deepCopyBill(value: BrowserBillCreateInput): BrowserBillCreateInput {\n return JSON.parse(JSON.stringify(value)) as BrowserBillCreateInput;\n}\n\nfunction required(value: unknown): boolean {\n return typeof value === \"string\" ? value.trim().length > 0 : value != null;\n}\n\nasync function blobToBase64(blob: Blob): Promise<string> {\n const buffer = new Uint8Array(await blob.arrayBuffer());\n let binary = \"\";\n for (const byte of buffer) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\n@Component({\n selector: \"mindbill-bill-submission\",\n standalone: true,\n imports: [CommonModule, FormsModule, MindBillComboBoxComponent, MindBillDateInputComponent],\n template: `\n <form class=\"mbs\" [ngStyle]=\"themeStyle\" (submit)=\"submit($event)\" novalidate>\n <div class=\"intro\"><div><h2>{{ heading }}</h2><p>{{ description }}</p></div><span><b>*</b> Required</span></div>\n\n <fieldset id=\"mbs-patient\"><legend>Patient</legend><div class=\"grid\">\n <label [class.invalid]=\"bad('patient.firstName')\">First name <b>*</b><input name=\"firstName\" [(ngModel)]=\"bill.patient.firstName\"></label>\n <label [class.invalid]=\"bad('patient.lastName')\">Last name <b>*</b><input name=\"lastName\" [(ngModel)]=\"bill.patient.lastName\"></label>\n <label [class.invalid]=\"bad('patient.dateOfBirth')\">Date of birth <b>*</b><mindbill-date-input ariaLabel=\"Date of birth\" [value]=\"bill.patient.dateOfBirth\" (valueChange)=\"setDate('patient.dateOfBirth', $event)\"/></label>\n <label>Phone (optional)<input name=\"phone\" type=\"tel\" [(ngModel)]=\"bill.patient.phone\"></label>\n <label class=\"wide\" [class.invalid]=\"bad('patient.address.line1')\">Address <b>*</b><input name=\"address\" [(ngModel)]=\"bill.patient.address.line1\"></label>\n <label [class.invalid]=\"bad('patient.address.postalCode')\">ZIP <b>*</b><input name=\"zip\" [(ngModel)]=\"bill.patient.address.postalCode\" (ngModelChange)=\"postalChanged($event)\" inputmode=\"numeric\">@if (postalStatus) { <small>{{ postalStatus }}</small> }</label>\n <label [class.invalid]=\"bad('patient.address.city')\">City <b>*</b><input name=\"city\" [(ngModel)]=\"bill.patient.address.city\"></label>\n <label [class.invalid]=\"bad('patient.address.state')\">State <b>*</b><input name=\"state\" [(ngModel)]=\"bill.patient.address.state\" maxlength=\"2\"></label>\n </div></fieldset>\n\n <fieldset id=\"mbs-claim\"><legend>Injury &amp; claim</legend><div class=\"grid\">\n <label [class.invalid]=\"bad('service.date')\">Date of service <b>*</b><mindbill-date-input ariaLabel=\"Date of service\" [value]=\"bill.service.date\" (valueChange)=\"setDate('service.date', $event)\"/></label>\n <label [class.invalid]=\"bad('claim.dateOfInjury')\">Date of injury <b>*</b><mindbill-date-input ariaLabel=\"Date of injury\" [value]=\"bill.claim.dateOfInjury\" (valueChange)=\"setDate('claim.dateOfInjury', $event)\"/></label>\n <label class=\"wide\">Treatment authorization # (optional)<input name=\"authNumber\" [ngModel]=\"bill.service.authorizationNumber || ''\" (ngModelChange)=\"setAuthorizationNumber($event)\" placeholder=\"Utilization-review authorization number\"><small>Rides on the bill as CMS-1500 Box 23 / 837 REF*G1.</small></label>\n <label [class.invalid]=\"bad('claim.claimNumber')\">Claim number <b>*</b><input name=\"claimNumber\" [(ngModel)]=\"bill.claim.claimNumber\"></label>\n <label [class.invalid]=\"bad('claim.employer')\">Employer <b>*</b><input name=\"employer\" [(ngModel)]=\"bill.claim.employer\"></label>\n <div class=\"wide lookup\" [class.invalid]=\"bad('claim.claimsAdministrator')\"><label>Claims administrator <b>*</b></label>\n <input name=\"payerQuery\" [(ngModel)]=\"payerQuery\" (focus)=\"searchPayers()\" (input)=\"searchPayers()\" placeholder=\"Search the MindBill payer directory…\" autocomplete=\"off\">\n @if (payerBusy) { <small>Searching directory…</small> }\n @if (payerResults.length) { <div class=\"options\">@for (payer of payerResults; track payer.id) { <button type=\"button\" (click)=\"selectPayer(payer)\"><strong>{{ payer.name }}</strong><span>{{ payer.hasElectronic ? 'Electronic routing' : 'Paper / fax' }}@if (payer.confidence) { · {{ payer.confidence }} match }</span></button> }</div> }\n @if (bill.claim.claimsAdministrator.id) { <small class=\"selected\">✓ Routed to {{ bill.claim.claimsAdministrator.name }}</small> }\n </div>\n @if (payerSelectionRequired && subpayorOptions.length) {\n <div class=\"wide lookup\" [class.invalid]=\"bad('claim.claimsAdministrator.payerId')\"><label>Payer <b>*</b></label>\n <mindbill-combo-box ariaLabel=\"Payer\" [value]=\"subpayorLabel\" [invalid]=\"bad('claim.claimsAdministrator.payerId')\" [preserveValueOnOpen]=\"true\" placeholder=\"Select the payer for this claims administrator…\" [options]=\"subpayorComboOptions\" (selected)=\"selectSubpayor($event)\"/>\n @if (subpayorLabel) { <small class=\"selected\">✓ Payer set: {{ subpayorLabel }}</small> }\n @else { <small>This claims administrator routes bills per payer. Choose the payer that should receive this bill.</small> }\n </div>\n }\n <label class=\"wide\">Injury description (optional)<input name=\"description\" [(ngModel)]=\"bill.claim.description\"></label>\n <div class=\"wide diagnosis\" [class.invalid]=\"bad('diagnoses')\"><label>Diagnosis codes (ICD-10) <b>*</b></label>\n <div class=\"quick\">@for (item of quickDiagnoses; track item.code) { <button type=\"button\" [class.on]=\"hasDiagnosis(item.code)\" (click)=\"toggleDiagnosis(item)\">{{ hasDiagnosis(item.code) ? '✓' : '+' }} {{ item.label }}</button> }</div>\n @if (bill.diagnoses.length) { <div class=\"chips\">@for (code of bill.diagnoses; track code) { <button type=\"button\" (click)=\"removeDiagnosis(code)\"><strong>{{ code }}</strong> ×</button> }</div> }\n <input name=\"diagnosisQuery\" [(ngModel)]=\"diagnosisQuery\" (focus)=\"searchDiagnoses(true)\" (input)=\"searchDiagnoses(true)\" placeholder=\"Search ICD-10 codes…\" autocomplete=\"off\">\n @if (diagnosisBusy && !diagnosisResults.length) { <small>Searching ICD-10 directory…</small> }\n @if (diagnosisResults.length) { <div class=\"options diagnoses\" (scroll)=\"diagnosisScrolled($event)\">@for (item of diagnosisResults; track item.code) { <button type=\"button\" (click)=\"addDiagnosis(item)\"><strong>{{ item.code }}</strong><span>{{ item.description }}</span></button> }</div> }\n </div>\n </div></fieldset>\n\n <fieldset id=\"mbs-provider\"><legend>Providers &amp; place of service</legend><div class=\"grid\">\n <h3 class=\"wide\">Billing provider</h3>\n @if (inlineBillingProvider; as provider) {\n <label [class.invalid]=\"bad('billingProvider.name')\">Billing provider name <b>*</b><input name=\"billingProvider\" [(ngModel)]=\"provider.name\"></label>\n <label>Tax ID type<select name=\"taxIdType\" [ngModel]=\"provider.taxIdType ?? 'EIN'\" (ngModelChange)=\"setBillingTaxIdType($event)\"><option value=\"EIN\">EIN</option><option value=\"SSN\">SSN</option></select></label>\n <label [class.invalid]=\"bad('billingProvider.taxId')\">{{ provider.taxIdType === 'SSN' ? 'SSN' : 'EIN' }} <b>*</b><input name=\"taxId\" [(ngModel)]=\"provider.taxId\" [type]=\"provider.taxIdType === 'SSN' ? 'password' : 'text'\" autocomplete=\"off\" inputmode=\"numeric\"></label>\n <label [class.invalid]=\"bad('billingProvider.npi')\">Billing NPI <b>*</b><input name=\"billingNpi\" [(ngModel)]=\"provider.npi\" inputmode=\"numeric\" maxlength=\"10\"></label>\n <label [class.invalid]=\"bad('billingProvider.phone')\">Billing phone <b>*</b><input name=\"billingPhone\" type=\"tel\" [(ngModel)]=\"provider.phone\"></label>\n <label class=\"wide\" [class.invalid]=\"bad('billingProvider.address.line1')\">Billing address <b>*</b><input name=\"billingAddress\" [(ngModel)]=\"provider.address.line1\"></label>\n <label [class.invalid]=\"bad('billingProvider.address.postalCode')\">Billing ZIP <b>*</b><input name=\"billingZip\" [(ngModel)]=\"provider.address.postalCode\" inputmode=\"numeric\"></label>\n <label [class.invalid]=\"bad('billingProvider.address.city')\">Billing city <b>*</b><input name=\"billingCity\" [(ngModel)]=\"provider.address.city\"></label>\n <label [class.invalid]=\"bad('billingProvider.address.state')\">Billing state <b>*</b><input name=\"billingState\" [(ngModel)]=\"provider.address.state\" maxlength=\"2\"></label>\n } @else {\n <div class=\"wide\" [class.invalid]=\"bad('billingProvider.savedProviderId') || bad('billingProvider.sourceBillId')\"><span>Using a saved billing provider</span><small>The saved tax ID is resolved securely when you submit, without returning the SSN to this form.</small><div class=\"quick\"><button type=\"button\" (click)=\"useManualBillingProvider()\">Enter a different billing provider</button></div></div>\n }\n <h3 class=\"wide\">Rendering provider</h3>\n <label [class.invalid]=\"bad('renderingProvider.name')\">Rendering provider name <b>*</b><input name=\"renderingProvider\" [(ngModel)]=\"bill.renderingProvider.name\"></label>\n <label [class.invalid]=\"bad('renderingProvider.npi')\">Rendering provider NPI <b>*</b><input name=\"renderingNpi\" [(ngModel)]=\"bill.renderingProvider.npi\" inputmode=\"numeric\" maxlength=\"10\"></label>\n <div class=\"wide\" [class.invalid]=\"bad('renderingProvider.taxonomy')\"><label>Rendering taxonomy <b>*</b></label>\n <mindbill-combo-box ariaLabel=\"Rendering taxonomy\" [value]=\"bill.renderingProvider.taxonomy || ''\" [invalid]=\"bad('renderingProvider.taxonomy')\" [preserveValueOnOpen]=\"true\" placeholder=\"Search specialty name or taxonomy code…\" [options]=\"taxonomyComboOptions\" [createOption]=\"customTaxonomyOption\" (selected)=\"selectTaxonomy($event)\"/>\n <small>Search by specialty name or 10-character taxonomy code.</small>\n </div>\n <h3 class=\"wide\">Place of service</h3>\n <label [class.invalid]=\"bad('serviceLocation.placeOfServiceCode')\">Place of service code <b>*</b><input name=\"pos\" [(ngModel)]=\"bill.serviceLocation.placeOfServiceCode\" placeholder=\"11\" inputmode=\"numeric\" maxlength=\"2\"></label>\n <label class=\"wide\" [class.invalid]=\"bad('serviceLocation.address.line1')\">Service address <b>*</b><input name=\"serviceAddress\" [(ngModel)]=\"bill.serviceLocation.address.line1\"></label>\n <label [class.invalid]=\"bad('serviceLocation.address.postalCode')\">Service ZIP <b>*</b><input name=\"serviceZip\" [(ngModel)]=\"bill.serviceLocation.address.postalCode\" inputmode=\"numeric\"></label>\n <label [class.invalid]=\"bad('serviceLocation.address.city')\">Service city <b>*</b><input name=\"serviceCity\" [(ngModel)]=\"bill.serviceLocation.address.city\"></label>\n <label [class.invalid]=\"bad('serviceLocation.address.state')\">Service state <b>*</b><input name=\"serviceState\" [(ngModel)]=\"bill.serviceLocation.address.state\" maxlength=\"2\"></label>\n </div></fieldset>\n\n <fieldset id=\"mbs-lines\" [class.invalid-set]=\"bad('serviceLines')\"><legend>Service lines</legend>\n <div class=\"line-head\"><span>Procedure code *</span><span>Modifiers</span><span>Dx</span><span>Units *</span><span>Allowed</span><span></span></div>\n @for (line of bill.serviceLines; track $index; let index = $index) { <div class=\"service-line\">\n <div class=\"cell\"><span class=\"mobile-label\">Procedure</span>\n <mindbill-combo-box [ariaLabel]=\"'Procedure code ' + (index + 1)\" [value]=\"line.code\" placeholder=\"Search or enter code…\" [options]=\"procedureComboOptions\" [createOption]=\"customProcedureOption\" (selected)=\"selectProcedure(index, $event)\"/>\n @if (line.code) { <small>{{ procedureDescription(line.code) || 'Custom CPT, HCPCS, or medical-legal code' }}</small> }\n </div>\n <div class=\"cell\"><span class=\"mobile-label\">Modifiers</span>\n @if (line.modifiers?.length) { <div class=\"chips\">@for (modifier of line.modifiers; track modifier) { <button type=\"button\" (click)=\"removeModifier(index, modifier)\" [attr.aria-label]=\"'Remove modifier ' + modifier\">−{{ modifier }} ×</button> }</div> }\n <mindbill-combo-box [ariaLabel]=\"'Modifiers ' + (index + 1)\" value=\"\" [placeholder]=\"line.modifiers?.length ? line.modifiers!.length + ' modifier' + (line.modifiers!.length === 1 ? '' : 's') : 'Add modifiers…'\" [options]=\"modifierComboOptions(line)\" (selected)=\"addModifier(index, $event)\"/>\n </div>\n <div class=\"cell\"><span class=\"mobile-label\">Dx pointers</span>\n <div class=\"dx\">\n @if (bill.diagnoses.length) {\n @for (code of bill.diagnoses; track code; let dxIndex = $index) {\n <button type=\"button\" [class.on]=\"hasDiagnosisPointer(line, dxIndex + 1)\" [title]=\"dxLetter(dxIndex + 1) + ' — ' + code\" [attr.aria-pressed]=\"hasDiagnosisPointer(line, dxIndex + 1)\" [attr.aria-label]=\"'Point line ' + (index + 1) + ' at diagnosis ' + code\" (click)=\"toggleDiagnosisPointer(index, dxIndex + 1)\">{{ dxLetter(dxIndex + 1) }}</button>\n }\n } @else { <small>Add diagnoses above</small> }\n </div>\n </div>\n <label><span class=\"mobile-label\">Units</span><input [name]=\"'units'+index\" type=\"number\" min=\"1\" [(ngModel)]=\"line.units\"></label>\n <strong>{{ allowed(line) == null ? '—' : (allowed(line) | currency) }}</strong>\n <button class=\"remove\" type=\"button\" (click)=\"removeLine(index)\" aria-label=\"Remove service line\">×</button>\n </div> }\n <div class=\"total\"><span>Total</span><strong>{{ totalAllowed | currency }}</strong></div>\n </fieldset>\n\n <fieldset><legend>Attachments</legend>\n @for (attachment of workingAttachments; track attachment.filename; let index = $index) { <div class=\"attachment\" [class.locked]=\"attachment.locked\"><div><strong>{{ attachment.filename }}</strong><span>{{ attachment.description || attachment.badge || 'Supporting document' }}</span></div><div class=\"attachment-actions\"><button type=\"button\" (click)=\"previewAttachment(attachment)\">Preview</button>@if (!attachment.locked) { <button type=\"button\" (click)=\"removeAttachment(index)\" aria-label=\"Remove attachment\">×</button> }</div></div> }\n <label class=\"dropzone\" [class.drag-active]=\"dragActive\"><input type=\"file\" accept=\"application/pdf,.pdf\" multiple (change)=\"filesSelected($event)\"><strong>Drop additional PDF files here, or click to choose</strong><span>Add supporting documents by dropping them anywhere on this screen.</span></label>\n </fieldset>\n\n @if (errorMessage) { <div class=\"error\" role=\"alert\">{{ errorMessage }}</div> }\n <div class=\"submit-row\"><span>{{ invalidFields.size ? 'Complete the highlighted required fields.' : 'All required billing data is ready.' }}</span><button type=\"submit\" [disabled]=\"submitting\">{{ submitting ? 'Submitting…' : submitLabel }}</button></div>\n @if (dragActive) { <div class=\"drop-overlay\" aria-hidden=\"true\"><div><strong>Drop PDFs to attach</strong><span>Supporting documents are added to this submission.</span></div></div> }\n </form>\n `,\n styles: [`\n :host{display:block}.mbs{--danger:#c83c3c;font-family:var(--font);color:var(--t)}*{box-sizing:border-box}.intro{display:flex;justify-content:space-between;align-items:start;margin:0 0 24px}.intro h2{margin:0;font-size:24px;font-weight:600}.intro p{margin:6px 0 0;color:var(--m)}.intro>span{color:var(--m);font-size:13px}.mbs b{color:inherit}.intro b,label>b,.lookup>label>b,.diagnosis>label>b,.cell>label>b{color:var(--danger)}fieldset{border:1px solid var(--b);border-radius:var(--r);margin:0 0 22px;padding:24px 26px 26px;background:var(--s)}legend{padding:0 10px;font-size:18px;font-weight:700}.grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 28px}.wide{grid-column:1/-1}h3{margin:4px 0 -4px;padding-top:12px;border-top:1px solid var(--b);font-size:16px}h3:first-child{border:0;padding-top:0}label,.lookup,.diagnosis{display:grid;gap:8px;font-size:14px;font-weight:700}.grid>label{display:flex;flex-wrap:wrap;align-content:start;align-items:center;column-gap:4px;row-gap:8px}.grid>label>input,.grid>label>select,.grid>label>small,.grid>label>mindbill-date-input{flex:0 0 100%}.grid>div.wide{display:grid;gap:8px;font-size:14px;font-weight:700}input,select{width:100%;min-height:46px;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 12px;color:var(--t);font:inherit;font-weight:450}input:focus,select:focus{outline:3px solid color-mix(in srgb,var(--a) 22%,transparent);border-color:var(--a)}.invalid input,.invalid select,.invalid-set{border-color:var(--danger)!important;background:color-mix(in srgb,var(--danger) 4%,var(--s))}.invalid>label{color:var(--danger)}small{color:var(--m);font-weight:450}.selected{color:#238655}.options{position:relative;z-index:4;max-height:300px;overflow:auto;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);box-shadow:0 14px 35px #172b3730}.options button{display:grid;width:100%;gap:3px;border:0;border-bottom:1px solid var(--b);background:var(--s);padding:12px 14px;text-align:left;color:var(--t);cursor:pointer}.options button:hover{background:color-mix(in srgb,var(--a) 7%,var(--s))}.options span{color:var(--m);font-size:12px}.quick,.chips{display:flex;flex-wrap:wrap;gap:8px}.quick button,.chips button{border:1px solid var(--b);border-radius:999px;background:var(--s);padding:7px 11px;color:var(--t);font:inherit;font-size:13px;cursor:pointer}.quick .on{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.chips button{border-color:color-mix(in srgb,var(--a) 40%,var(--b));background:color-mix(in srgb,var(--a) 7%,var(--s));font-weight:700}.dx{display:flex;flex-wrap:wrap;gap:5px;padding-top:6px}.dx button{width:30px;height:30px;border:1px solid var(--b);border-radius:8px;background:var(--s);color:var(--m);font:inherit;font-size:13px;font-weight:750;cursor:pointer;padding:0}.dx button.on{border-color:var(--a);background:color-mix(in srgb,var(--a) 10%,var(--s));color:var(--a)}.line-head,.service-line{display:grid;grid-template-columns:1.5fr 1.35fr .8fr .5fr .7fr 36px;gap:14px;align-items:start}.line-head{padding:0 0 9px;color:var(--m);font-size:12px;font-weight:700}.service-line{border-top:1px solid var(--b);padding:12px 0}.service-line label,.service-line .cell{display:grid;gap:6px;font-size:14px;font-weight:700}.service-line strong{text-align:right;padding-top:12px}.remove{border:0;background:transparent;color:var(--m);font-size:25px;cursor:pointer}.mobile-label{display:none}.total{display:flex;justify-content:flex-end;gap:36px;border-top:1px solid var(--b);padding-top:14px;font-size:17px}.attachment{display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid var(--b);border-radius:var(--cr);margin-bottom:10px;padding:14px 16px}.attachment.locked{border-color:#9fd6b4;background:#f3fcf6}.attachment>div:first-child{display:grid;gap:4px}.attachment span{color:var(--m);font-size:13px}.attachment-actions{display:flex;gap:8px}.attachment button{border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:8px 12px;color:var(--t);font-weight:700;cursor:pointer}.dropzone{position:relative;display:grid;min-height:170px;place-content:center;gap:8px;border:2px dashed color-mix(in srgb,var(--m) 60%,transparent);border-radius:var(--cr);text-align:center;cursor:pointer;transition:border-color .15s,background .15s}.dropzone.drag-active{border-color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.dropzone span{color:var(--m);font-weight:450}.drop-overlay{position:fixed;inset:0;z-index:60;display:grid;place-content:center;background:color-mix(in srgb,var(--a) 14%,#ffffffd9);pointer-events:none}.drop-overlay div{display:grid;gap:6px;border:2px dashed var(--a);border-radius:var(--r);background:var(--s);padding:34px 44px;text-align:center;box-shadow:0 24px 60px #172b3740}.drop-overlay strong{font-size:19px}.drop-overlay span{color:var(--m)}.error{margin:0 0 14px;border-left:4px solid var(--danger);border-radius:var(--cr);background:color-mix(in srgb,var(--danger) 10%,var(--s));padding:14px;color:var(--danger)}.submit-row{position:sticky;bottom:0;z-index:3;display:flex;align-items:center;justify-content:space-between;border:1px solid var(--b);border-radius:var(--r);background:color-mix(in srgb,var(--s) 96%,transparent);box-shadow:0 -8px 24px #172b3718;padding:14px 18px}.submit-row>span{color:#43835f}.submit-row button{min-width:190px;border:0;border-radius:var(--cr);background:var(--a);color:var(--ac);padding:12px 24px;font:inherit;font-weight:800;cursor:pointer}.submit-row button:disabled{opacity:.6;cursor:wait}\n @media(max-width:760px){fieldset{padding:18px 16px}.grid{grid-template-columns:1fr}.wide{grid-column:auto}.intro{display:grid;gap:10px}.line-head{display:none}.service-line{grid-template-columns:1fr 1fr}.service-line>*{grid-column:1/-1}.service-line label:nth-child(3){grid-column:1}.service-line>strong{grid-column:2;grid-row:3;text-align:left}.service-line>.remove{grid-column:1/-1}.mobile-label{display:block;color:var(--m);font-size:12px}.attachment{align-items:flex-start}.attachment-actions{align-items:center}.submit-row>span{display:none}.submit-row button{width:100%}}\n `],\n})\nexport class MindBillBillSubmissionComponent implements OnChanges {\n @Input() initialBill!: BrowserBillCreateInput;\n @Input() attachments: MindBillSubmissionAttachment[] = [];\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Input() sessionEndpoint = \"/api/mindbill/session\";\n @Input() getSession?: BillLifecycleSessionProvider;\n @Input() apiBaseUrl?: string;\n @Input() heading = \"Bill information\";\n @Input() description = \"Review the bill details, add attachments, and submit.\";\n @Input() submitLabel = \"Submit bill\";\n @Input() attentionFields: string[] = [];\n @Input() procedureOptions: MindBillSubmissionProcedureOption[] = PROCEDURES;\n @Input() modifierOptions: MindBillSubmissionModifierOption[] = MODIFIERS;\n @Input() taxonomyOptions: MindBillSubmissionTaxonomyOption[] = TAXONOMIES;\n @Input() submitter?: (input: BrowserBillSubmissionInput) => Promise<BrowserBillSubmissionResult>;\n @Output() submitted = new EventEmitter<BrowserBillSubmissionResult>();\n @Output() submissionError = new EventEmitter<Error>();\n @Output() billChange = new EventEmitter<BrowserBillCreateInput>();\n\n bill = {} as BrowserBillCreateInput;\n get inlineBillingProvider(): Extract<BrowserBillCreateInput['billingProvider'], { name: string }> | null {\n const provider = this.bill.billingProvider;\n return provider && 'name' in provider ? provider : null;\n }\n\n setBillingTaxIdType(type: 'EIN' | 'SSN'): void {\n const provider = this.inlineBillingProvider;\n if (!provider || (provider.taxIdType ?? 'EIN') === type) return;\n provider.taxIdType = type;\n provider.taxId = '';\n }\n\n useManualBillingProvider(): void {\n this.bill.billingProvider = { name: '', taxId: '', taxIdType: 'EIN', npi: '', phone: '', address: { line1: '', city: '', state: '', postalCode: '' } };\n }\n workingAttachments: MindBillSubmissionAttachment[] = [];\n payerQuery = \"\";\n payerResults: BillReviewPayer[] = [];\n payerBusy = false;\n /** Payer (subpayor) choices for the selected claims administrator. */\n subpayorOptions: BillReviewPayerOption[] = [];\n payerSelectionRequired = false;\n diagnosisQuery = \"\";\n diagnosisResults: BillDiagnosisCode[] = [];\n diagnosisOffset = 0;\n diagnosisBusy = false;\n submitting = false;\n errorMessage = \"\";\n postalStatus = \"\";\n dragActive = false;\n invalidFields = new Set<string>();\n attentionFieldSet = new Set<string>();\n readonly quickDiagnoses = QUICK_DIAGNOSES;\n // Zoneless-safe rendering: async work (debounced lookups, fetches, file reads)\n // must schedule change detection explicitly for zone-less Angular hosts.\n private readonly changeDetector = inject(ChangeDetectorRef);\n readonly customProcedureOption = mindBillCustomProcedureOption;\n readonly customTaxonomyOption = (query: string): MindBillComboOption | null => {\n const code = query.trim().toUpperCase();\n return /^[A-Z0-9]{10}$/.test(code) ? { id: code, label: code, detail: \"Use this taxonomy code\" } : null;\n };\n private searchTimer?: ReturnType<typeof setTimeout>;\n private postalTimer?: ReturnType<typeof setTimeout>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"initialBill\"] && this.initialBill) {\n this.bill = deepCopyBill(this.initialBill);\n if (!this.bill.serviceLines.length) this.bill.serviceLines = [{ code: \"\", units: 1 }];\n this.ensureTrailingLine();\n this.payerQuery = this.bill.claim.claimsAdministrator.name ?? \"\";\n this.subpayorOptions = [];\n this.payerSelectionRequired = false;\n }\n if (changes[\"attachments\"]) this.workingAttachments = this.attachments.map((item) => ({ ...item }));\n if (changes[\"attentionFields\"]) this.attentionFieldSet = new Set(this.attentionFields);\n }\n\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!, \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--bg\": this.appearance.backgroundColor ?? base[\"bg\"]!, \"--s\": this.appearance.surfaceColor ?? base[\"s\"]!,\n \"--t\": this.appearance.textColor ?? base[\"t\"]!, \"--m\": this.appearance.mutedColor ?? base[\"m\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!, \"--r\": this.appearance.borderRadius ?? base[\"r\"]!,\n \"--cr\": this.appearance.controlRadius ?? base[\"cr\"]!, \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n\n get procedureComboOptions(): MindBillComboOption[] {\n return this.procedureOptions.map((item) => ({ id: item.code, label: item.code, detail: item.description }));\n }\n\n get taxonomyComboOptions(): MindBillComboOption[] {\n return this.taxonomyOptions.map((item) => ({ id: item.code, label: item.description, detail: item.code }));\n }\n\n modifierComboOptions(line: BrowserBillCreateInput[\"serviceLines\"][number]): MindBillComboOption[] {\n return this.modifierOptions\n .filter((item) => !(line.modifiers ?? []).includes(item.code))\n .map((item) => ({ id: item.code, label: `−${item.code}`, detail: item.description }));\n }\n\n private referenceClient() {\n return createBillReferenceClient({ sessionEndpoint: this.sessionEndpoint, ...(this.getSession ? { getSession: this.getSession } : {}), ...(this.apiBaseUrl ? { apiBaseUrl: this.apiBaseUrl } : {}) });\n }\n\n setDate(path: \"patient.dateOfBirth\" | \"service.date\" | \"claim.dateOfInjury\", value: string): void {\n if (path === \"patient.dateOfBirth\") this.bill.patient.dateOfBirth = value;\n else if (path === \"service.date\") this.bill.service.date = value;\n else this.bill.claim.dateOfInjury = value;\n if (value) this.invalidFields.delete(path);\n this.billChange.emit(this.bill);\n }\n\n postalChanged(value: string): void {\n clearTimeout(this.postalTimer);\n this.postalStatus = \"\";\n if (!/^\\d{5}$/.test(value.trim())) return;\n this.postalStatus = \"Looking up ZIP…\";\n this.postalTimer = setTimeout(async () => {\n try {\n const place = await this.referenceClient().lookupPostalCode(value);\n if (place) {\n this.bill.patient.address.city = place.city;\n this.bill.patient.address.state = place.state.toUpperCase();\n this.postalStatus = `${place.city}, ${place.state.toUpperCase()} filled from ZIP`;\n this.invalidFields.delete(\"patient.address.city\");\n this.invalidFields.delete(\"patient.address.state\");\n this.billChange.emit(this.bill);\n } else {\n this.postalStatus = \"ZIP not found\";\n }\n } catch {\n this.postalStatus = \"ZIP lookup unavailable\";\n }\n this.changeDetector.markForCheck();\n }, 180);\n }\n\n searchPayers(): void {\n clearTimeout(this.searchTimer);\n this.searchTimer = setTimeout(async () => {\n this.payerBusy = true;\n try { this.payerResults = await this.referenceClient().searchClaimsAdministrators(this.payerQuery, this.bill.claim.claimNumber); }\n catch { this.payerResults = []; }\n finally { this.payerBusy = false; this.changeDetector.markForCheck(); }\n }, 180);\n }\n\n selectPayer(payer: BillReviewPayer): void {\n this.payerSelectionRequired = payer.payerSelectionRequired === true;\n this.subpayorOptions = this.payerSelectionRequired\n ? (payer.payers ?? []).map((option) => ({ ...option }))\n : [];\n const preselected = defaultBillReviewPayerOption(payer);\n this.bill.claim.claimsAdministrator = {\n id: payer.id,\n name: payer.name,\n ...(preselected ? { payerId: preselected.id } : {}),\n };\n this.payerQuery = payer.name;\n this.payerResults = [];\n this.invalidFields.delete(\"claim.claimsAdministrator\");\n this.invalidFields.delete(\"claim.claimsAdministrator.payerId\");\n this.billChange.emit(this.bill);\n }\n\n get subpayorComboOptions(): MindBillComboOption[] {\n return this.subpayorOptions.map((option) => ({\n id: option.id,\n label: option.label,\n ...(option.default ? { detail: \"Default\" } : {}),\n }));\n }\n\n get subpayorLabel(): string {\n const payerId = this.bill.claim?.claimsAdministrator?.payerId;\n return this.subpayorOptions.find((option) => option.id === payerId)?.label ?? \"\";\n }\n\n selectSubpayor(option: MindBillComboOption): void {\n this.bill.claim.claimsAdministrator = { ...this.bill.claim.claimsAdministrator, payerId: option.id };\n this.invalidFields.delete(\"claim.claimsAdministrator.payerId\");\n this.billChange.emit(this.bill);\n }\n\n searchDiagnoses(reset: boolean): void {\n if (this.diagnosisBusy) return;\n if (reset) { this.diagnosisOffset = 0; this.diagnosisResults = []; }\n clearTimeout(this.searchTimer);\n this.searchTimer = setTimeout(async () => {\n this.diagnosisBusy = true;\n try {\n const results = await this.referenceClient().searchDiagnosisCodes(this.diagnosisQuery, 60, this.diagnosisOffset);\n this.diagnosisResults = reset ? results : [...this.diagnosisResults, ...results];\n this.diagnosisOffset = this.diagnosisResults.length;\n } catch { if (reset) this.diagnosisResults = []; }\n finally { this.diagnosisBusy = false; this.changeDetector.markForCheck(); }\n }, reset ? 160 : 0);\n }\n\n diagnosisScrolled(event: Event): void {\n const element = event.currentTarget as HTMLElement;\n if (element.scrollTop + element.clientHeight >= element.scrollHeight - 80) this.searchDiagnoses(false);\n }\n\n hasDiagnosis(code: string): boolean { return this.bill.diagnoses.includes(code); }\n toggleDiagnosis(item: BillDiagnosisCode): void {\n if (this.hasDiagnosis(item.code)) this.removeDiagnosis(item.code);\n else this.addDiagnosis(item);\n }\n addDiagnosis(item: BillDiagnosisCode): void { if (!this.hasDiagnosis(item.code)) this.bill.diagnoses.push(item.code); this.diagnosisQuery = \"\"; this.diagnosisResults = []; this.invalidFields.delete(\"diagnoses\"); this.billChange.emit(this.bill); }\n removeDiagnosis(code: string): void { this.bill.diagnoses = this.bill.diagnoses.filter((item) => item !== code); this.billChange.emit(this.bill); }\n\n ensureTrailingLine(): void {\n const last = this.bill.serviceLines.at(-1);\n if (!last || last.code.trim()) this.bill.serviceLines.push({ code: \"\", units: 1 });\n this.billChange.emit(this.bill);\n }\n removeLine(index: number): void { this.bill.serviceLines.splice(index, 1); if (!this.bill.serviceLines.length) this.bill.serviceLines.push({ code: \"\", units: 1 }); this.ensureTrailingLine(); }\n selectProcedure(index: number, option: MindBillComboOption): void {\n this.bill.serviceLines[index]!.code = option.id;\n this.invalidFields.delete(\"serviceLines\");\n this.ensureTrailingLine();\n }\n addModifier(index: number, option: MindBillComboOption): void {\n const line = this.bill.serviceLines[index]!;\n line.modifiers = [...new Set([...(line.modifiers ?? []), option.id])];\n this.billChange.emit(this.bill);\n }\n removeModifier(index: number, modifier: string): void {\n const line = this.bill.serviceLines[index]!;\n line.modifiers = (line.modifiers ?? []).filter((item) => item !== modifier);\n this.billChange.emit(this.bill);\n }\n dxLetter(pointer: number): string { return String.fromCharCode(64 + pointer); }\n hasDiagnosisPointer(line: BrowserBillCreateInput[\"serviceLines\"][number], pointer: number): boolean {\n return (line.diagnosisPointers ?? []).includes(pointer);\n }\n toggleDiagnosisPointer(index: number, pointer: number): void {\n const line = this.bill.serviceLines[index]!;\n line.diagnosisPointers = this.hasDiagnosisPointer(line, pointer)\n ? (line.diagnosisPointers ?? []).filter((item) => item !== pointer)\n : [...(line.diagnosisPointers ?? []), pointer].sort((left, right) => left - right);\n this.billChange.emit(this.bill);\n }\n setAuthorizationNumber(value: string): void {\n this.bill.service.authorizationNumber = value.trim() ? value : null;\n this.billChange.emit(this.bill);\n }\n selectTaxonomy(option: MindBillComboOption): void {\n this.bill.renderingProvider.taxonomy = option.id;\n this.invalidFields.delete(\"renderingProvider.taxonomy\");\n this.billChange.emit(this.bill);\n }\n procedureDescription(code: string): string { return this.procedureOptions.find((item) => item.code.toLowerCase() === code.trim().toLowerCase())?.description ?? \"\"; }\n allowed(line: BrowserBillCreateInput[\"serviceLines\"][number]): number | null { const base = this.procedureOptions.find((item) => item.code.toLowerCase() === line.code.trim().toLowerCase())?.allowedAmount; return base == null ? (line.charge ?? null) : Math.round(base * Math.max(1, line.units ?? 1) * 100) / 100; }\n get totalAllowed(): number { return this.bill.serviceLines.reduce((sum, line) => sum + (this.allowed(line) ?? 0), 0); }\n\n @HostListener(\"window:dragover\", [\"$event\"])\n onWindowDragOver(event: DragEvent): void {\n if (event.dataTransfer?.types.includes(\"Files\")) { event.preventDefault(); this.dragActive = true; this.changeDetector.markForCheck(); }\n }\n @HostListener(\"window:dragleave\", [\"$event\"])\n onWindowDragLeave(event: DragEvent): void {\n if (!event.relatedTarget) { this.dragActive = false; this.changeDetector.markForCheck(); }\n }\n @HostListener(\"window:drop\", [\"$event\"])\n onWindowDrop(event: DragEvent): void {\n if (event.dataTransfer?.files.length) { event.preventDefault(); this.dragActive = false; void this.addFiles(event.dataTransfer.files); this.changeDetector.markForCheck(); }\n }\n\n private async addFiles(fileList: FileList | File[]): Promise<void> {\n const files = Array.from(fileList);\n if (!files.length) return;\n this.errorMessage = \"\";\n const invalid = files.find((file) => file.type !== \"application/pdf\" && !file.name.toLowerCase().endsWith(\".pdf\"));\n if (invalid) { this.errorMessage = `${invalid.name} is not a PDF.`; return; }\n const oversized = files.find((file) => file.size > MAX_PDF_BYTES);\n if (oversized) { this.errorMessage = `${oversized.name} is larger than 25 MB.`; return; }\n if (this.workingAttachments.length + files.length > MAX_DOCUMENTS) { this.errorMessage = `A bill can include at most ${MAX_DOCUMENTS} attachments.`; return; }\n const existingBytes = this.workingAttachments.reduce((sum, item) => sum + (item.contentBase64 ? item.contentBase64.length * 0.75 : 0), 0);\n if (existingBytes + files.reduce((sum, file) => sum + file.size, 0) > MAX_UPLOAD_BYTES) { this.errorMessage = \"Attachments exceed the 100 MB upload limit.\"; return; }\n for (const file of files) this.workingAttachments.push({ filename: file.name, description: \"Supporting document\", documentType: \"other\", contentBase64: await blobToBase64(file), contentUrl: URL.createObjectURL(file) });\n this.changeDetector.markForCheck();\n }\n\n async filesSelected(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n await this.addFiles(input.files ?? []);\n input.value = \"\";\n }\n removeAttachment(index: number): void { const item = this.workingAttachments[index]; if (item?.contentUrl?.startsWith(\"blob:\")) URL.revokeObjectURL(item.contentUrl); this.workingAttachments.splice(index, 1); }\n async previewAttachment(attachment: MindBillSubmissionAttachment): Promise<void> {\n if (attachment.loadBlob) {\n const url = URL.createObjectURL(await attachment.loadBlob());\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n setTimeout(() => URL.revokeObjectURL(url), 60_000);\n } else if (attachment.contentUrl) window.open(attachment.contentUrl, \"_blank\", \"noopener,noreferrer\");\n else if (attachment.contentBase64) window.open(`data:application/pdf;base64,${attachment.contentBase64}`, \"_blank\", \"noopener,noreferrer\");\n }\n\n bad(path: string): boolean { return this.invalidFields.has(path) || this.attentionFieldSet.has(path); }\n private validate(): boolean {\n const candidates: Array<[string, unknown]> = [\n [\"patient.firstName\", this.bill.patient.firstName], [\"patient.lastName\", this.bill.patient.lastName], [\"patient.dateOfBirth\", parseMindBillSubmissionDate(this.bill.patient.dateOfBirth ?? \"\")],\n [\"patient.address.line1\", this.bill.patient.address.line1], [\"patient.address.city\", this.bill.patient.address.city], [\"patient.address.state\", this.bill.patient.address.state], [\"patient.address.postalCode\", this.bill.patient.address.postalCode],\n [\"service.date\", parseMindBillSubmissionDate(this.bill.service.date ?? \"\")], [\"claim.dateOfInjury\", parseMindBillSubmissionDate(this.bill.claim.dateOfInjury ?? \"\")], [\"claim.claimNumber\", this.bill.claim.claimNumber], [\"claim.employer\", this.bill.claim.employer],\n [\"claim.claimsAdministrator\", this.bill.claim.claimsAdministrator.id],\n [\"claim.claimsAdministrator.payerId\", !this.payerSelectionRequired || this.bill.claim.claimsAdministrator.payerId],\n [\"diagnoses\", this.bill.diagnoses.length],\n [\"renderingProvider.name\", this.bill.renderingProvider.name], [\"renderingProvider.npi\", this.bill.renderingProvider.npi], [\"renderingProvider.taxonomy\", this.bill.renderingProvider.taxonomy],\n [\"serviceLocation.placeOfServiceCode\", this.bill.serviceLocation.placeOfServiceCode], [\"serviceLocation.address.line1\", this.bill.serviceLocation.address.line1], [\"serviceLocation.address.city\", this.bill.serviceLocation.address.city], [\"serviceLocation.address.state\", this.bill.serviceLocation.address.state], [\"serviceLocation.address.postalCode\", this.bill.serviceLocation.address.postalCode],\n [\"serviceLines\", this.bill.serviceLines.some((line) => required(line.code) && (line.units ?? 1) > 0)],\n ];\n const provider = this.bill.billingProvider;\n if ('savedProviderId' in provider) {\n candidates.push(['billingProvider.savedProviderId', provider.savedProviderId]);\n } else if ('sourceBillId' in provider) {\n candidates.push(['billingProvider.sourceBillId', provider.sourceBillId]);\n } else {\n candidates.push(\n ['billingProvider.name', provider.name], ['billingProvider.taxId', provider.taxId], ['billingProvider.npi', provider.npi], ['billingProvider.phone', provider.phone],\n ['billingProvider.address.line1', provider.address.line1], ['billingProvider.address.city', provider.address.city], ['billingProvider.address.state', provider.address.state], ['billingProvider.address.postalCode', provider.address.postalCode],\n );\n }\n this.invalidFields = new Set(candidates.filter(([, value]) => !value || !required(value)).map(([path]) => path));\n if (this.invalidFields.size) {\n this.errorMessage = `Complete ${this.invalidFields.size} highlighted required field${this.invalidFields.size === 1 ? \"\" : \"s\"} before submitting.`;\n setTimeout(() => document.querySelector(\".mbs .invalid,.mbs .invalid-set\")?.scrollIntoView({ behavior: \"smooth\", block: \"center\" }));\n return false;\n }\n return true;\n }\n\n private async submissionDocuments(): Promise<BrowserBillSubmissionDocument[]> {\n const documents: BrowserBillSubmissionDocument[] = [];\n for (const attachment of this.workingAttachments) {\n let contentBase64 = attachment.contentBase64;\n if (!contentBase64 && attachment.loadBlob) contentBase64 = await blobToBase64(await attachment.loadBlob());\n if (!contentBase64 && attachment.contentUrl) {\n const response = await fetch(attachment.contentUrl);\n if (!response.ok) throw new Error(`Could not load ${attachment.filename}.`);\n contentBase64 = await blobToBase64(await response.blob());\n }\n if (!contentBase64) continue;\n documents.push({\n filename: attachment.filename,\n documentType: attachment.documentType,\n contentBase64,\n ...(attachment.externalId ? { externalId: attachment.externalId } : {}),\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportTypeCode ? { reportTypeCode: attachment.reportTypeCode } : {}),\n });\n }\n return documents;\n }\n\n async submit(event: Event): Promise<void> {\n event.preventDefault();\n this.errorMessage = \"\";\n if (!this.validate()) return;\n this.submitting = true;\n try {\n const bill = deepCopyBill(this.bill);\n bill.patient.dateOfBirth = parseMindBillSubmissionDate(bill.patient.dateOfBirth ?? \"\") ?? bill.patient.dateOfBirth;\n bill.service.date = parseMindBillSubmissionDate(bill.service.date ?? \"\") ?? bill.service.date;\n bill.claim.dateOfInjury = parseMindBillSubmissionDate(bill.claim.dateOfInjury ?? \"\") ?? bill.claim.dateOfInjury;\n bill.serviceLines = bill.serviceLines\n .filter((line) => line.code.trim())\n .map((line) => {\n const charge = line.charge ?? this.allowed(line);\n return charge == null ? line : { ...line, charge };\n });\n const input: BrowserBillSubmissionInput = { bill, documents: await this.submissionDocuments() };\n const result = this.submitter\n ? await this.submitter(input)\n : await createBillSubmissionClient({ sessionEndpoint: this.sessionEndpoint, ...(this.getSession ? { getSession: this.getSession } : {}), ...(this.apiBaseUrl ? { apiBaseUrl: this.apiBaseUrl } : {}) }).submitBill(input);\n this.submitted.emit(result);\n } catch (value) {\n const error = value instanceof Error ? value : new Error(\"The bill could not be submitted.\");\n this.errorMessage = error.message;\n this.submissionError.emit(error);\n } finally { this.submitting = false; this.changeDetector.markForCheck(); }\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, effect } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport {\n REPORT_BILL_STATUS_OPTIONS,\n reportBillStatusContacts,\n type BillDeliveryOption,\n type BillDeliveryOptions,\n type BillLifecycleData,\n type BillLifecycleSessionProvider,\n type BrowserBillCreateInput,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionInput,\n type BrowserBillSubmissionResult,\n type ReportBillStatusId,\n type BillSubmissionRoute,\n} from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./appearance\";\nimport { mindBillAngularAppearanceStyle } from \"./appearance\";\nimport { MindBillBillRejectionNoticeComponent } from \"./bill-rejection-notice.component\";\nimport { MindBillBillSubmissionComponent, type MindBillSubmissionAttachment } from \"./bill-submission.component\";\nimport { MindBillLifecycleStore } from \"./lifecycle-store\";\n\nexport type { MindBillAngularAppearance, MindBillAngularThemePreset } from \"./appearance\";\n\n@Component({\n selector: \"mindbill-bill-lifecycle\",\n standalone: true,\n imports: [CommonModule, FormsModule, MindBillBillRejectionNoticeComponent, MindBillBillSubmissionComponent],\n template: `\n <section class=\"mb\" [ngStyle]=\"themeStyle\">\n @if (!billId) {\n <div class=\"state error\"><strong>A submitted bill ID is required.</strong></div>\n } @else if (store.loading() && !store.data()) {\n <div class=\"state\">Loading billing…</div>\n } @else if (store.error() && !store.data()) {\n <div class=\"state error\"><strong>Billing is temporarily unavailable</strong><span>{{ store.error()?.message }}</span><button type=\"button\" (click)=\"store.refresh()\">Try again</button></div>\n } @else if (store.data(); as data) {\n <header class=\"summary\">\n <div><span class=\"eyebrow\">Bill {{ data.bill.billNumber }}</span><h2>{{ stateLabel(data) }}</h2><p>{{ lifecycleDetail(data) }}</p></div>\n <div class=\"money\"><span>{{ data.bill.balanceDue | currency }}</span><small>balance</small></div>\n </header>\n\n @if (data.lifecycle.state.toLowerCase() === 'rejected' && data.rejection) {\n <mindbill-bill-rejection-notice\n class=\"rejection\"\n [rejection]=\"data.rejection\"\n [submittedAt]=\"data.lifecycle.submittedAt ?? null\"\n [appearance]=\"appearance\"\n />\n } @else {\n <section class=\"card progress\" aria-label=\"Bill lifecycle\">\n <ol>@for (stage of lifecycleStages; track stage.id; let i=$index) { <li [class.complete]=\"i < currentStageIndex(data)\" [class.current]=\"i === currentStageIndex(data)\"><b>{{ i < currentStageIndex(data) ? '✓' : i + 1 }}</b><span>{{ stage.label }}</span></li> }</ol>\n </section>\n }\n\n <section class=\"card snapshot\" aria-label=\"Bill snapshot\">\n <div class=\"card-title\"><div><h3>Bill snapshot</h3><p>The immutable values submitted to the payer.</p></div></div>\n <dl><div><dt>Patient</dt><dd>{{ data.patient.name }}</dd></div><div><dt>Claim</dt><dd>{{ data.injury.claimNumber || '—' }}</dd></div><div><dt>Payer</dt><dd>{{ data.delivery.payerName || data.injury.claimsAdminName || '—' }}</dd></div><div><dt>Date of service</dt><dd>{{ data.bill.dos || '—' }}</dd></div><div><dt>Charged</dt><dd>{{ data.bill.totalCharge | currency }}</dd></div><div><dt>Balance</dt><dd>{{ data.bill.balanceDue | currency }}</dd></div></dl>\n </section>\n\n <div class=\"columns\">\n <section class=\"card\"><div class=\"card-title\"><div><h3>Remittance</h3><p>Amounts reported by the payer and posted to this bill.</p></div></div><dl><div><dt>Billed</dt><dd>{{ data.remittance.billedAmount | currency }}</dd></div><div><dt>Payer reported</dt><dd>{{ data.remittance.payerReportedPaid == null ? '—' : (data.remittance.payerReportedPaid | currency) }}</dd></div><div><dt>Principal posted</dt><dd>{{ data.remittance.postedPrincipal | currency }}</dd></div><div><dt>Penalty &amp; interest</dt><dd>{{ data.remittance.postedAdditional | currency }}</dd></div><div><dt>Total received</dt><dd>{{ data.remittance.totalPostedCash | currency }}</dd></div><div><dt>Balance</dt><dd>{{ data.remittance.balanceDue | currency }}</dd></div></dl></section>\n <section class=\"card\"><div class=\"card-title\"><div><h3>{{ data.delivery.payerName || 'Payer' }}</h3><p>Billing and follow-up contacts.</p></div></div><p class=\"muted\">{{ payerContact(data) }}</p></section>\n </div>\n\n <section class=\"card\"><div class=\"card-title\"><div><h3>Documents</h3><p>Documents preserved with the submitted bill.</p></div><span>{{ data.bill.attachments.length }}</span></div>@if (data.bill.attachments.length) { <ul class=\"rows\">@for (doc of data.bill.attachments; track doc.id) { <li><div><strong>{{ doc.filename }}</strong><small>{{ doc.description || doc.documentType }}</small></div><button type=\"button\" (click)=\"openAttachment(doc.id, doc.filename)\">View</button></li> }</ul> } @else { <p class=\"muted\">No documents available.</p> }</section>\n\n <section class=\"card\"><div class=\"card-title\"><div><h3>Payments</h3><p>Payments posted to this bill.</p></div><span>{{ data.payments.length }}</span></div>@if (data.payments.length) { <ul class=\"rows\">@for (payment of data.payments; track payment.id) { <li><div><strong>{{ payment.amount | currency }}</strong><small>{{ payment.method | uppercase }} · {{ payment.depositDate || payment.postedAt }}</small></div></li> }</ul> } @else { <p class=\"muted\">No payments posted.</p> }</section>\n\n <section class=\"card\"><div class=\"card-title\"><div><h3>Bill history</h3><p>Submissions, payer responses, follow-up, and payments.</p></div><span>{{ data.history?.length ?? data.activity.length }}</span></div>\n @if (data.history?.length) {\n <!-- Date/Action/User/Details table: submissions are pale-blue\n expandable rows (documents + compliance due dates), notes pale-yellow,\n 277 responses expand into decoded status-code sentences. Rows arrive\n pre-worded from the MindBill API (BillLifecycleData.history). -->\n <div class=\"history\">\n <div class=\"history-head\" aria-hidden=\"true\"><span>Date</span><span>Action</span><span>User</span><span>Details</span></div>\n <ul class=\"history-rows\">\n @for (entry of data.history; track entry.id) {\n <li [class.is-submission]=\"entry.tone === 'submission'\" [class.is-note]=\"entry.tone === 'note'\" [class.is-problem]=\"entry.tone === 'problem'\">\n <button type=\"button\" class=\"history-line\" [disabled]=\"!entry.details\" [attr.aria-expanded]=\"entry.details ? isHistoryOpen(entry.id) : null\" (click)=\"toggleHistory(entry.id)\">\n <span class=\"h-date\">{{ historyDate(entry.date) }}</span>\n <span class=\"h-action\">{{ entry.action }}</span>\n <span class=\"h-actor\">{{ entry.actor || '—' }}</span>\n <span class=\"h-summary\">@if (entry.details) { <i [class.open]=\"isHistoryOpen(entry.id)\" aria-hidden=\"true\"></i> }{{ entry.summary }}</span>\n </button>\n @if (entry.details; as details) {\n @if (isHistoryOpen(entry.id)) {\n <div class=\"history-details\">\n @if (details.rows?.length) { <dl class=\"h-kv\">@for (row of details.rows ?? []; track row.label) { <div><dt>{{ row.label }}</dt><dd>{{ row.value }}</dd></div> }</dl> }\n @if (details.documents?.length) { <dl class=\"h-kv\"><div><dt>Documents</dt><dd>@for (doc of details.documents ?? []; track doc.id) { <span class=\"h-doc\">{{ doc.filename }}</span> }</dd></div></dl> }\n @if (details.codes?.length) { <dl class=\"h-codes\">@for (code of details.codes ?? []; track code.code) { <div><dt>{{ code.code }}</dt><dd>{{ code.text }}</dd></div> }</dl> }\n @if (details.complianceDueDates?.length) { <div class=\"h-due\"><em>Compliance Due Dates</em><dl>@for (due of details.complianceDueDates ?? []; track due.text) { <div><dt>{{ historyDate(due.date) }}</dt><dd>{{ due.text }}</dd></div> }</dl></div> }\n @if (details.text) { <p class=\"h-text\">{{ details.text }}</p> }\n </div>\n }\n }\n </li>\n }\n </ul>\n </div>\n } @else {\n <ul class=\"timeline\">@for (event of data.activity; track event.id) { <li><i></i><div><strong>{{ activityLabel(event.type) }}</strong><p>{{ event.description }}</p><small>{{ event.createdAt | date:'medium' }}</small></div></li> }</ul>\n }\n </section>\n\n @if (notice) { <p class=\"notice\">{{ notice }}</p> }\n <div class=\"actions\">@for (action of data.lifecycle.actions; track action.id) { @if (action.id !== 'view_eor' || data.eors.length) { <button type=\"button\" [class.primary]=\"action.primary\" [disabled]=\"!action.enabled || store.mutating()\" (click)=\"beginAction(action.id, data)\">{{ action.label }}</button> } }</div>\n\n @if (panel === 'payment') { <form class=\"card action-form\" (submit)=\"$event.preventDefault(); postPayment()\"><h3>Post payment</h3><label>Amount<input required type=\"number\" min=\"0.01\" step=\"0.01\" [(ngModel)]=\"payment.amount\" name=\"amount\"></label><label>Method<select [(ngModel)]=\"payment.method\" name=\"method\"><option value=\"check\">Check</option><option value=\"eft\">EFT</option></select></label><label>Deposit date<input required type=\"date\" [(ngModel)]=\"payment.depositDate\" name=\"depositDate\"></label><div><button type=\"button\" (click)=\"panel=''\">Cancel</button><button class=\"primary\" type=\"submit\">Post payment</button></div></form> }\n @if (panel === 'review') { <form class=\"card action-form\" (submit)=\"$event.preventDefault(); submitReview()\"><h3>Submit Second Bill Review</h3><label>Reason<textarea required [(ngModel)]=\"review.reason\" name=\"reason\"></textarea></label><label>Payer claim control number<input required [(ngModel)]=\"review.payerClaimControlNumber\" name=\"control\"></label><label>Disputed amount<input type=\"number\" min=\"0\" step=\"0.01\" [(ngModel)]=\"review.disputedAmount\" name=\"disputed\"></label><div><button type=\"button\" (click)=\"panel=''\">Cancel</button><button class=\"primary\" type=\"submit\">Submit review</button></div></form> }\n @if (panel === 'close') { <form class=\"card action-form\" (submit)=\"$event.preventDefault(); closeBill()\"><h3>Close bill</h3><label>Reason<textarea required [(ngModel)]=\"closeReason\" name=\"closeReason\"></textarea></label><div><button type=\"button\" (click)=\"panel=''\">Cancel</button><button class=\"primary\" type=\"submit\">Close bill</button></div></form> }\n @if (panel === 'report_status') {\n <form class=\"card action-form\" (submit)=\"$event.preventDefault(); reportStatus()\">\n <h3>Report Bill Status</h3>\n <p class=\"muted\">{{ reportContactSummary }}</p>\n <div class=\"report-options\" role=\"radiogroup\" aria-label=\"Reported bill payment status\">\n @for (option of reportStatusOptions; track option.id) {\n <label class=\"report-option\"><input type=\"radio\" [value]=\"option.id\" [(ngModel)]=\"report.status\" name=\"reportStatus\"><span><strong>{{ option.label }}</strong><small>{{ option.description }}</small></span></label>\n }\n </div>\n <label>Company<input [(ngModel)]=\"report.company\" name=\"reportCompany\"></label>\n <label>Name<input [(ngModel)]=\"report.representativeName\" name=\"reportRepresentativeName\"></label>\n <label>Role<input [(ngModel)]=\"report.representativeRole\" name=\"reportRepresentativeRole\"></label>\n <label>Phone Number<input [(ngModel)]=\"report.phone\" name=\"reportPhone\"></label>\n <label>Call Reference Number<input [(ngModel)]=\"report.callReference\" name=\"reportCallReference\"></label>\n <label>Message Note<textarea [(ngModel)]=\"report.note\" name=\"reportNote\"></textarea></label>\n <div><button type=\"button\" (click)=\"panel=''\">Cancel</button><button class=\"primary\" type=\"submit\" [disabled]=\"!report.status || store.mutating()\">Save</button></div>\n </form>\n }\n @if (panel === 'resubmit' && correctionInitialBill) {\n <div class=\"correction-backdrop\" (mousedown)=\"closeCorrectionBackdrop($event)\">\n <section class=\"correction-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Correct and resubmit\">\n <button type=\"button\" class=\"dialog-close\" aria-label=\"Close\" (click)=\"panel=''\">×</button>\n <header><h2>Correct and resubmit</h2><p>The original submission remains immutable. Review the rejected values and create the next submission attempt on this bill.</p></header>\n @if (data.rejection; as rejection) {\n <div class=\"correction-reason\"><strong>{{ rejection.reason || 'Why it was rejected' }}</strong>@for (issue of rejection.issues || []; track issue.code) { <span><b>{{ issue.code }}</b> {{ issue.description }}</span> }</div>\n }\n @if (payerContact(data) !== 'No payer contact details are available.') { <p class=\"contact-hint\"><strong>Questions?</strong> {{ payerContact(data) }}</p> }\n <label class=\"correction-note\">Correction note (optional)<textarea [(ngModel)]=\"correctionReason\" name=\"correctionReason\" placeholder=\"What changed before resubmission?\"></textarea></label>\n <mindbill-bill-submission\n [initialBill]=\"correctionInitialBill\"\n [attachments]=\"correctionAttachments\"\n [attentionFields]=\"correctionAttentionFields\"\n [appearance]=\"appearance\"\n [sessionEndpoint]=\"sessionEndpoint\"\n [getSession]=\"getSession\"\n [apiBaseUrl]=\"apiBaseUrl\"\n [submitter]=\"resubmitFromForm\"\n heading=\"Corrected bill information\"\n description=\"Correct the highlighted values, confirm every required field, then resubmit.\"\n submitLabel=\"Resubmit bill\"\n (submitted)=\"finishCorrection()\"\n />\n </section>\n </div>\n }\n @if (panel === 'duplicate' && correctionInitialBill) {\n <div class=\"correction-backdrop\" (mousedown)=\"closeCorrectionBackdrop($event)\">\n <section class=\"correction-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Send duplicate bill\">\n <button type=\"button\" class=\"dialog-close\" aria-label=\"Close\" (click)=\"panel=''\">×</button>\n <header><h2>Send duplicate bill</h2><p>The original submission remains immutable. Review or edit this fresh bill before choosing its delivery route and confirming transmission.</p></header>\n <mindbill-bill-submission\n [initialBill]=\"correctionInitialBill\"\n [attachments]=\"correctionAttachments\"\n [appearance]=\"appearance\"\n [sessionEndpoint]=\"sessionEndpoint\"\n [getSession]=\"getSession\"\n [apiBaseUrl]=\"apiBaseUrl\"\n [submitter]=\"duplicateFromForm\"\n heading=\"Duplicate bill information\"\n description=\"Review every field. The final step confirms the payer delivery route before the duplicate is sent.\"\n submitLabel=\"Continue to delivery\"\n (submitted)=\"finishDuplicate()\"\n />\n </section>\n </div>\n }\n @if (panel === 'duplicate_route') {\n <form class=\"card action-form\" (submit)=\"$event.preventDefault(); sendDuplicate()\">\n <h3>Confirm duplicate bill delivery</h3>\n @if (!duplicateDelivery) {\n <p class=\"muted\">{{ duplicateDeliveryError || 'Loading delivery options…' }}</p>\n <div><button type=\"button\" (click)=\"panel='duplicate'\">Back</button>@if (duplicateDeliveryError) { <button class=\"primary\" type=\"button\" (click)=\"loadDuplicateDelivery()\">Try again</button> }</div>\n } @else {\n <p class=\"muted\">Confirm how this edited duplicate will be delivered to {{ duplicateDelivery.payerName }}.</p>\n <label>Delivery method<select [(ngModel)]=\"duplicate.route\" name=\"duplicateRoute\">@for (option of duplicateRoutes(); track option.route) { <option [ngValue]=\"option.route\">{{ option.label }}</option> }</select></label>\n @if (duplicate.route === 'fax') { <label>Fax number<input required [(ngModel)]=\"duplicate.faxNumber\" name=\"duplicateFax\" placeholder=\"(000) 000-0000\"></label> }\n @if (duplicate.route === 'email') { <label>Email<input required type=\"email\" [(ngModel)]=\"duplicate.email\" name=\"duplicateEmail\" placeholder=\"claims@payer.example\"></label> }\n @if (duplicate.route === 'mail') { <label>Mailing address<textarea required [(ngModel)]=\"duplicate.mailingAddress\" name=\"duplicateMail\"></textarea></label> }\n <div><button type=\"button\" (click)=\"panel='duplicate'\">Back</button><button class=\"primary\" type=\"submit\" [disabled]=\"store.mutating() || !duplicateReady()\">Send duplicate</button></div>\n }\n </form>\n }\n @if (panel === 'submit_new_bill' && correctionInitialBill) {\n <div class=\"correction-backdrop\" (mousedown)=\"closeCorrectionBackdrop($event)\">\n <section class=\"correction-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Submit New Bill\">\n <button type=\"button\" class=\"dialog-close\" aria-label=\"Close\" (click)=\"panel=''\">×</button>\n <header><h2>Submit New Bill</h2><p>This closed bill stays closed and keeps its record. Review the carried-over snapshot and submit a fresh bill — both bills stay linked in the submissions timeline.</p><button type=\"button\" class=\"header-cancel\" (click)=\"panel=''\">Cancel</button></header>\n <label class=\"correction-note\">Submission note (optional)<textarea [(ngModel)]=\"correctionReason\" name=\"newBillReason\" placeholder=\"Why is a new bill being submitted?\"></textarea></label>\n <mindbill-bill-submission\n [initialBill]=\"correctionInitialBill\"\n [attachments]=\"correctionAttachments\"\n [appearance]=\"appearance\"\n [sessionEndpoint]=\"sessionEndpoint\"\n [getSession]=\"getSession\"\n [apiBaseUrl]=\"apiBaseUrl\"\n [submitter]=\"submitNewBillFromForm\"\n heading=\"New bill information\"\n description=\"The closed bill stays unchanged. This form submits a fresh bill linked to it.\"\n submitLabel=\"Submit New Bill\"\n (submitted)=\"finishNewBill()\"\n />\n </section>\n </div>\n }\n }\n </section>\n `,\n styles: [`\n :host{display:block}.mb{font-family:var(--font);color:var(--t);background:var(--bg);padding:20px}.summary,.card,.columns,.rejection{display:block;max-width:1120px;margin:0 auto 16px}.summary{display:flex;justify-content:space-between;align-items:end}.summary h2{margin:4px 0}.summary p,.muted{color:var(--m)}.eyebrow,dt{font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--m)}.money{text-align:right}.money span{display:block;font-size:28px;font-weight:800}.money small{color:var(--m)}.card{background:var(--s);border:1px solid var(--b);border-radius:var(--r);padding:20px}.card-title{display:flex;justify-content:space-between;gap:20px}.card-title h3{margin:0}.card-title p{margin:5px 0;color:var(--m)}.progress ol{display:flex;list-style:none;padding:0;margin:0}.progress li{flex:1;text-align:center;position:relative;color:var(--m)}.progress li:before{content:\"\";position:absolute;top:16px;left:0;right:0;border-top:2px solid var(--b)}.progress li:first-child:before{left:50%}.progress li:last-child:before{right:50%}.progress b{position:relative;z-index:1;display:grid;place-items:center;width:32px;height:32px;margin:auto;border:2px solid var(--b);border-radius:50%;background:var(--s)}.progress .complete b,.progress .current b{border-color:var(--a);background:var(--a);color:var(--ac)}.progress span{display:block;margin-top:8px;font-size:12px;font-weight:700}.snapshot dl,.columns dl{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.snapshot dd,.columns dd{font-weight:700;margin:6px 0}.columns{display:grid;grid-template-columns:1fr 1fr;gap:16px}.columns .card{margin:0}.rows,.timeline{list-style:none;margin:12px 0 0;padding:0}.rows li{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-top:1px solid var(--b)}.rows small{display:block;color:var(--m);margin-top:3px}.timeline li{display:flex;gap:14px;padding:10px 0}.timeline i{width:10px;height:10px;margin-top:5px;border:3px solid var(--a);border-radius:50%}.timeline p{margin:4px 0}.timeline small{color:var(--m)}button,input,select,textarea{font:inherit;border:1px solid var(--b);border-radius:var(--cr);padding:9px 12px;background:var(--s);color:var(--t)}button{cursor:pointer;font-weight:700}.primary{background:var(--a);border-color:var(--a);color:var(--ac)}.actions{max-width:1120px;margin:0 auto;display:flex;justify-content:flex-end;gap:10px}.action-form{display:grid;gap:12px}.action-form label{display:grid;gap:5px;font-weight:700}.action-form div{display:flex;justify-content:flex-end;gap:10px}.state{max-width:720px;margin:auto;padding:32px;text-align:center}.state span{display:block;margin:8px}.error{color:#9b1c1c}.notice{max-width:1120px;margin:0 auto 12px;color:var(--m)}@media(max-width:760px){.mb{padding:12px}.summary,.columns{display:block}.money{text-align:left;margin-top:12px}.columns .card{margin-bottom:12px}.snapshot dl,.columns dl{grid-template-columns:1fr 1fr}.progress span{font-size:10px}.card{padding:15px}}\n .history{border:1px solid var(--b);border-radius:10px;overflow:hidden;margin-top:12px}.history-head{display:grid;grid-template-columns:96px 150px 130px minmax(0,1fr);gap:12px;padding:8px 14px;background:color-mix(in srgb,var(--b) 26%,var(--s));color:var(--m);font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.history-rows{list-style:none;margin:0;padding:0}.history-rows>li{border-top:1px solid var(--b)}.history-rows>li.is-submission{background:color-mix(in srgb,var(--a) 9%,var(--s))}.history-rows>li.is-note{background:color-mix(in srgb,#f2c344 13%,var(--s))}\n .history-line{display:grid;grid-template-columns:96px 150px 130px minmax(0,1fr);gap:12px;width:100%;padding:10px 14px;border:0;border-radius:0;background:transparent;text-align:left;font-weight:400;cursor:default}.history-line:not(:disabled){cursor:pointer}.history-line:not(:disabled):hover .h-summary{text-decoration:underline}\n .h-date,.h-actor{color:var(--m);font-size:13px;overflow-wrap:anywhere}.h-action{font-weight:700;font-size:13.5px}.is-problem .h-action{color:#9b1c1c}.h-summary{display:flex;gap:7px;min-width:0;font-size:13.5px;line-height:1.45;overflow-wrap:anywhere}\n .h-summary i{flex:0 0 auto;margin-top:5px;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--m);border-radius:0;transition:transform .12s ease}.h-summary i.open{transform:rotate(90deg)}\n .history-details{padding:4px 14px 14px 122px;font-size:13.5px;line-height:1.5}.h-kv,.h-codes,.h-due dl{display:grid;gap:4px;margin:0}.h-kv>div{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--b) 60%,transparent);padding-top:4px}\n .h-kv dt,.h-codes dt,.h-due dt{font-size:13px;font-weight:700;letter-spacing:0;text-transform:none;color:var(--t)}.h-kv dd,.h-codes dd,.h-due dd{margin:0;overflow-wrap:anywhere}.h-doc{display:block}\n .h-codes>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:12px}.h-codes dt{font-weight:800}\n .h-due{margin-top:8px}.h-due em{display:block;color:var(--m);font-size:12.5px;margin-bottom:4px}.h-due dl>div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--b) 60%,transparent);padding-top:4px}\n .h-text{margin:8px 0 0;white-space:pre-wrap}\n @media(max-width:760px){.history-head{display:none}.history-line{grid-template-columns:1fr;gap:2px;padding:10px 12px}.history-details{padding:4px 12px 12px}.h-kv>div,.h-due dl>div{grid-template-columns:1fr}}\n .report-options{display:grid;gap:8px}.action-form label.report-option{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--b);border-radius:var(--cr);padding:10px 12px;font-weight:400;cursor:pointer}.report-option input{width:16px;min-height:16px;margin-top:3px;padding:0;border:0}.report-option strong{display:block;font-size:13.5px}.report-option small{display:block;color:var(--m);margin-top:2px;font-size:12.5px}\n .correction-backdrop{position:fixed;inset:0;z-index:100;overflow:auto;background:#172b37b8;padding:28px}.correction-dialog{position:relative;max-width:1180px;margin:0 auto;background:var(--bg);border-radius:var(--r);box-shadow:0 24px 80px #0006;padding:26px}.correction-dialog>header{padding-right:48px;margin-bottom:18px}.correction-dialog h2{margin:0 0 6px}.correction-dialog p{margin:0;color:var(--m)}.dialog-close{position:absolute;right:20px;top:20px;width:40px;height:40px;padding:0;font-size:24px}.correction-reason{display:grid;gap:8px;margin-bottom:14px;border-left:4px solid #c43d3d;border-radius:8px;background:#fff5f5;padding:14px;color:#8f2525}.correction-reason span{display:block}.correction-reason b{margin-right:6px}.contact-hint{margin:0 0 14px!important;border:1px solid var(--b);border-radius:8px;background:var(--s);padding:12px!important;color:var(--t)!important}.correction-note{display:grid;gap:6px;margin-bottom:18px;font-weight:700}.correction-note textarea{min-height:76px}.correction-dialog mindbill-bill-submission{display:block}.correction-dialog .mb{padding:0}.correction-dialog .header-cancel{margin-top:10px}@media(max-width:760px){.correction-backdrop{padding:0}.correction-dialog{min-height:100%;border-radius:0;padding:18px 12px}.dialog-close{right:12px;top:12px}}\n `],\n})\nexport class MindBillBillLifecycleComponent implements OnChanges, OnDestroy {\n @Input() billId = \"\";\n @Input() sessionEndpoint = \"/api/mindbill/session\";\n @Input() apiBaseUrl = \"https://app.mindbill.org\";\n @Input() getSession?: BillLifecycleSessionProvider;\n @Input() refreshInterval = 60_000;\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Output() billingError = new EventEmitter<Error>();\n\n readonly store = new MindBillLifecycleStore();\n readonly lifecycleStages = [\n { id: \"submitted\", label: \"Submitted\" }, { id: \"accepted\", label: \"Accepted\" },\n { id: \"response\", label: \"Payer response\" }, { id: \"follow_up\", label: \"Follow-up\" },\n { id: \"closed\", label: \"Closed\" },\n ];\n panel = \"\";\n notice = \"\";\n closeReason = \"\";\n payment = { amount: 0, method: \"check\" as \"check\" | \"eft\", depositDate: new Date().toISOString().slice(0, 10) };\n review = { reason: \"\", payerClaimControlNumber: \"\", disputedAmount: 0 };\n readonly reportStatusOptions = REPORT_BILL_STATUS_OPTIONS;\n report: { status: ReportBillStatusId | null; company: string; representativeName: string; representativeRole: string; phone: string; callReference: string; note: string } =\n { status: null, company: \"\", representativeName: \"\", representativeRole: \"\", phone: \"\", callReference: \"\", note: \"\" };\n reportContactSummary = \"\";\n duplicateDelivery: BillDeliveryOptions | null = null;\n duplicateDeliveryError = \"\";\n duplicateDraftInput: BrowserBillSubmissionInput | null = null;\n duplicate = { route: \"ebill\" as BillSubmissionRoute, faxNumber: \"\", email: \"\", mailingAddress: \"\" };\n correctionInitialBill: BrowserBillCreateInput | null = null;\n correctionAttachments: MindBillSubmissionAttachment[] = [];\n correctionAttentionFields: string[] = [];\n correctionReason = \"\";\n\n constructor() { effect(() => { const error = this.store.error(); if (error) this.billingError.emit(error); }); }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes[\"billId\"] || changes[\"sessionEndpoint\"] || changes[\"apiBaseUrl\"] || changes[\"getSession\"]) {\n if (!this.billId.trim()) { this.store.disconnect(); return; }\n this.store.connect({ billId: this.billId, sessionEndpoint: this.sessionEndpoint, apiBaseUrl: this.apiBaseUrl, ...(this.getSession ? { getSession: this.getSession } : {}) }, this.refreshInterval);\n }\n }\n ngOnDestroy(): void { this.store.disconnect(); }\n\n get themeStyle(): Record<string, string> {\n return mindBillAngularAppearanceStyle(this.appearance);\n }\n stateLabel(data: BillLifecycleData): string { return data.lifecycle.state.replace(/_/g, \" \").replace(/\\b\\w/g, (value) => value.toUpperCase()); }\n lifecycleDetail(data: BillLifecycleData): string { return data.lifecycle.submittedAt ? `Submitted ${new Date(data.lifecycle.submittedAt).toLocaleDateString()}${data.lifecycle.agingDays != null ? ` · ${data.lifecycle.agingDays} days old` : \"\"}` : \"Submitted bill\"; }\n currentStageIndex(data: BillLifecycleData): number { const value = data.lifecycle.state.toLowerCase(); if (value.includes(\"closed\") || value.includes(\"written_off\")) return 4; if (value.includes(\"second_review\") || value.includes(\"ibr\") || value.includes(\"lien\") || value.includes(\"appeal\")) return 3; if (value.includes(\"processed\") || value.includes(\"paid\") || value.includes(\"denied\") || value.includes(\"rejected\") || value.includes(\"response\")) return 2; if (value.includes(\"accepted\")) return 1; return 0; }\n activityLabel(type: string): string { return type.replace(/[._-]+/g, \" \").replace(/\\b\\w/g, (value) => value.toUpperCase()); }\n private readonly historyExpanded = new Set<string>();\n toggleHistory(id: string): void { if (this.historyExpanded.has(id)) this.historyExpanded.delete(id); else this.historyExpanded.add(id); }\n isHistoryOpen(id: string): boolean { return this.historyExpanded.has(id); }\n historyDate(iso: string): string { const parsed = new Date(iso); return Number.isNaN(parsed.getTime()) ? iso : parsed.toLocaleDateString(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }); }\n payerContact(data: BillLifecycleData): string { const contacts = data.delivery.contacts; return contacts.adjusterName || contacts.adjusterPhone || contacts.adjusterEmail || contacts.claimsEmail || contacts.faxNumber || contacts.mailingAddress || \"No payer contact details are available.\"; }\n beginAction(action: string, data: BillLifecycleData): void {\n if (action === \"resubmit\") this.prepareCorrection(data);\n else if (action === \"submit_new_bill\") this.prepareNewBill(data);\n else if (action === \"post_payment\") this.panel = \"payment\";\n else if (action === \"second_review\" || action === \"independent_bill_review\") this.panel = \"review\";\n else if (action === \"close\") this.panel = \"close\";\n else if (action === \"send_duplicate\") this.prepareDuplicate(data);\n else if (action === \"report_bill_status\") this.beginReportStatus(data);\n else if (action === \"view_eor\" && data.eors[0]) void this.openEor(data.eors[0].id, data.eors[0].filename);\n }\n beginReportStatus(data: BillLifecycleData): void {\n const contacts = reportBillStatusContacts(data.delivery);\n const parts: string[] = [];\n if (contacts.claimsAdmin) {\n const phones = contacts.claimsAdmin.phones.map((phone) => `${phone.label} ${phone.value}`).join(\", \");\n parts.push(`${contacts.claimsAdmin.name}${phones ? ` (${phones})` : \"\"}${contacts.claimsAdmin.hoursOfOperation ? ` · Hours: ${contacts.claimsAdmin.hoursOfOperation}` : \"\"}`);\n }\n if (contacts.billReview) parts.push(`Bill Review: ${contacts.billReview.name}${contacts.billReview.phone ? ` ${contacts.billReview.phone}` : \"\"}`);\n this.reportContactSummary = parts.length\n ? `Call ${parts.join(\" · \")} to request the payment status of this bill, then record the status reported and who provided it.`\n : \"Call the Claims Administrator or Bill Review vendor for this bill, then record the status reported and who provided it.\";\n this.report = { status: null, company: \"\", representativeName: \"\", representativeRole: \"\", phone: \"\", callReference: \"\", note: \"\" };\n this.panel = \"report_status\";\n }\n async reportStatus(): Promise<void> {\n const status = this.report.status;\n if (!status) return;\n await this.store.reportBillStatus({\n status,\n ...(this.report.company.trim() ? { company: this.report.company.trim() } : {}),\n ...(this.report.representativeName.trim() ? { representativeName: this.report.representativeName.trim() } : {}),\n ...(this.report.representativeRole.trim() ? { representativeRole: this.report.representativeRole.trim() } : {}),\n ...(this.report.phone.trim() ? { phone: this.report.phone.trim() } : {}),\n ...(this.report.callReference.trim() ? { callReference: this.report.callReference.trim() } : {}),\n ...(this.report.note.trim() ? { note: this.report.note.trim() } : {}),\n });\n this.panel = \"\"; this.notice = \"Bill status reported.\";\n }\n async openAttachment(id: string, filename: string): Promise<void> { this.openBlob(await this.store.getAttachment(id), filename); }\n async openEor(id: string, filename: string): Promise<void> { this.openBlob(await this.store.getEor(id), filename); }\n async postPayment(): Promise<void> { await this.store.postPayment(this.payment); this.panel = \"\"; this.notice = \"Payment posted.\"; }\n async submitReview(): Promise<void> { await this.store.submitSecondReview({ ...this.review, ...(this.review.disputedAmount > 0 ? { disputedAmount: this.review.disputedAmount } : {}), attachmentIds: this.store.data()?.bill.attachments.map((document) => document.id) ?? [], route: \"ebill\" }); this.panel = \"\"; this.notice = \"Second Review submitted.\"; }\n async closeBill(): Promise<void> { if (!this.closeReason.trim()) return; await this.store.closeBill({ reason: this.closeReason }); this.panel = \"\"; this.notice = \"Bill closed.\"; }\n readonly resubmitFromForm = async (input: BrowserBillSubmissionInput): Promise<BrowserBillSubmissionResult> => {\n const data = await this.store.resubmitBill({\n bill: input.bill,\n ...(input.documents?.length ? { documents: input.documents } : {}),\n ...(this.correctionReason.trim() ? { reason: this.correctionReason.trim() } : {}),\n });\n return { billId: data.bill.id, bill: { id: data.bill.id, state: data.lifecycle.state } };\n };\n finishCorrection(): void { this.panel = \"\"; this.correctionReason = \"\"; this.notice = \"Corrected submission sent.\"; }\n readonly duplicateFromForm = async (input: BrowserBillSubmissionInput): Promise<BrowserBillSubmissionResult> => {\n this.duplicateDraftInput = input;\n this.panel = \"duplicate_route\";\n await this.loadDuplicateDelivery();\n const billId = this.store.data()?.bill.id || this.billId;\n return { billId, bill: { id: billId, state: \"draft\" } };\n };\n finishDuplicate(): void { /* The route-confirmation panel owns the final transmission. */ }\n async loadDuplicateDelivery(): Promise<void> {\n this.duplicateDeliveryError = \"\";\n if (this.duplicateDelivery) return;\n try {\n const delivery = await this.store.getDeliveryOptions();\n this.duplicateDelivery = delivery;\n this.duplicate.route = delivery.recommended.route;\n this.duplicate.faxNumber = delivery.contacts.faxNumber || \"\";\n this.duplicate.email = delivery.contacts.claimsEmail || \"\";\n this.duplicate.mailingAddress = delivery.contacts.mailingAddress || \"\";\n } catch (cause) {\n this.duplicateDeliveryError = cause instanceof Error ? cause.message : \"Delivery options could not be loaded.\";\n }\n }\n duplicateRoutes(): BillDeliveryOption[] {\n const seen = new Set<BillSubmissionRoute>();\n return (this.duplicateDelivery?.options ?? []).filter((option) => {\n if (seen.has(option.route)) return false;\n seen.add(option.route);\n return true;\n });\n }\n duplicateReady(): boolean {\n if (!this.duplicateDraftInput) return false;\n if (this.duplicate.route === \"fax\") return this.duplicate.faxNumber.replace(/\\D/g, \"\").length >= 10;\n if (this.duplicate.route === \"email\") return this.duplicate.email.includes(\"@\");\n if (this.duplicate.route === \"mail\") return this.duplicate.mailingAddress.trim().length > 2;\n return true;\n }\n async sendDuplicate(): Promise<void> {\n if (!this.duplicateDelivery || !this.duplicateDraftInput || !this.duplicateReady()) return;\n const route = this.duplicate.route;\n const destination = route === \"fax\" ? { faxNumber: this.duplicate.faxNumber.trim() }\n : route === \"email\" ? { email: this.duplicate.email.trim() }\n : route === \"mail\" ? { mailingAddress: this.duplicate.mailingAddress.trim() }\n : null;\n await this.store.sendDuplicateBill({\n bill: this.duplicateDraftInput.bill,\n ...(this.duplicateDraftInput.documents?.length ? { documents: this.duplicateDraftInput.documents } : {}),\n submission: { route, ...(destination ? { destination } : {}) },\n });\n this.panel = \"\";\n this.notice = \"Duplicate bill sent.\";\n }\n // \"Submit New Bill\" from a CLOSED bill: same prefilled submission form as the\n // correction flow, but the server keeps the closed bill closed and creates a\n // fresh original linked to it (both records chain in the submissions timeline).\n readonly submitNewBillFromForm = async (input: BrowserBillSubmissionInput): Promise<BrowserBillSubmissionResult> => {\n const data = await this.store.submitNewBill({\n bill: input.bill,\n ...(input.documents?.length ? { documents: input.documents } : {}),\n ...(this.correctionReason.trim() ? { reason: this.correctionReason.trim() } : {}),\n });\n return { billId: data.bill.id, bill: { id: data.bill.id, state: data.lifecycle.state } };\n };\n finishNewBill(): void { this.panel = \"\"; this.correctionReason = \"\"; this.notice = \"New bill submitted.\"; }\n closeCorrectionBackdrop(event: MouseEvent): void { if (event.currentTarget === event.target) this.panel = \"\"; }\n private prepareCorrection(data: BillLifecycleData): void {\n this.correctionInitialBill = correctionBill(data);\n this.correctionAttachments = data.bill.attachments.map((attachment) => ({\n filename: attachment.filename,\n documentType: correctionDocumentType(attachment.documentType),\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => this.store.getAttachment(attachment.id),\n ...(attachment.documentType === \"w9\" ? { locked: true, badge: \"Auto-attached\" } : {}),\n }));\n this.correctionAttentionFields = [...new Set(data.rejection?.issues?.flatMap((issue) => issue.fieldPaths || []) ?? [])];\n this.correctionReason = \"\";\n this.panel = \"resubmit\";\n }\n private prepareDuplicate(data: BillLifecycleData): void {\n this.correctionInitialBill = correctionBill(data);\n this.correctionAttachments = data.bill.attachments.map((attachment) => ({\n filename: attachment.filename,\n documentType: correctionDocumentType(attachment.documentType),\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => this.store.getAttachment(attachment.id),\n ...(attachment.documentType === \"w9\" ? { locked: true, badge: \"Auto-attached\" } : {}),\n }));\n this.correctionAttentionFields = [];\n this.duplicateDraftInput = null;\n this.duplicateDelivery = null;\n this.duplicateDeliveryError = \"\";\n this.panel = \"duplicate\";\n }\n private prepareNewBill(data: BillLifecycleData): void {\n this.correctionInitialBill = correctionBill(data);\n this.correctionAttachments = data.bill.attachments.map((attachment) => ({\n filename: attachment.filename,\n documentType: correctionDocumentType(attachment.documentType),\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => this.store.getAttachment(attachment.id),\n ...(attachment.documentType === \"w9\" ? { locked: true, badge: \"Auto-attached\" } : {}),\n }));\n // No rejection context on a closed bill — nothing to highlight.\n this.correctionAttentionFields = [];\n this.correctionReason = \"\";\n this.panel = \"submit_new_bill\";\n }\n private openBlob(blob: Blob, filename: string): void { const url = URL.createObjectURL(blob); const link = document.createElement(\"a\"); link.href = url; link.target = \"_blank\"; link.rel = \"noopener\"; link.download = filename; link.click(); setTimeout(() => URL.revokeObjectURL(url), 60_000); }\n}\n\nconst CORRECTION_DOCUMENT_TYPES = new Set([\"final_report\", \"letter_of_attestation\", \"proof_of_service\", \"form_122\", \"return_to_work_voucher\", \"w9\", \"medical_records\", \"appeal\", \"other\"]);\nfunction correctionDocumentType(value: string): BrowserBillSubmissionDocument[\"documentType\"] { return (CORRECTION_DOCUMENT_TYPES.has(value) ? value : \"other\") as BrowserBillSubmissionDocument[\"documentType\"]; }\nfunction correctionBill(data: BillLifecycleData): BrowserBillCreateInput {\n const billing = data.bill.billingSnapshot?.billingProvider;\n const rendering = data.bill.billingSnapshot?.renderingProvider;\n const location = data.bill.billingSnapshot?.placeOfService;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n return {\n billingMode: data.bill.billingMode,\n patient: {\n firstName: data.patient.firstName || nameParts[0] || \"\",\n ...(data.patient.middleName ? { middleName: data.patient.middleName } : {}),\n lastName: data.patient.lastName || nameParts.slice(1).join(\" \") || \"\",\n dateOfBirth: data.patient.dob || \"\",\n ...(data.patient.phone ? { phone: data.patient.phone } : {}),\n address: { line1: data.patient.address?.line1 || \"\", city: data.patient.address?.city || \"\", state: data.patient.address?.state || \"\", postalCode: data.patient.address?.postalCode || \"\" },\n },\n claim: {\n claimNumber: data.injury.claimNumber || \"\",\n ...(data.injury.adjNumber ? { adjNumber: data.injury.adjNumber } : {}),\n employer: data.injury.employer || \"\",\n dateOfInjury: data.injury.doi || \"\",\n ...(data.injury.injuryDescription ? { description: data.injury.injuryDescription } : {}),\n claimsAdministrator: { id: data.injury.claimsAdminId || \"\", name: data.injury.claimsAdminName || \"\" },\n },\n service: { date: data.bill.dos, ...(data.bill.dosEnd !== undefined ? { endDate: data.bill.dosEnd } : {}), ...(data.bill.authorizationNumber !== undefined ? { authorizationNumber: data.bill.authorizationNumber } : {}) },\n billingProvider: billing?.taxIdType === 'SSN' && billing.taxIdConfigured ? { sourceBillId: data.bill.id } : {\n name: billing?.name || \"\", taxId: billing?.taxId || \"\", npi: billing?.npi || \"\", phone: billing?.phone || \"\",\n ...(billing?.taxIdType ? { taxIdType: billing.taxIdType } : {}),\n address: { line1: billing?.billingStreet || \"\", city: billing?.billingCity || \"\", state: billing?.billingState || \"\", postalCode: billing?.billingZip || \"\" },\n },\n renderingProvider: {\n name: rendering?.name || \"\", npi: rendering?.npi || \"\", taxonomy: rendering?.taxonomy || \"\",\n ...(rendering?.specialty ? { specialty: rendering.specialty } : {}), ...(rendering?.licenseNumber ? { licenseNumber: rendering.licenseNumber } : {}), ...(rendering?.licenseState ? { licenseState: rendering.licenseState } : {}),\n ...(rendering?.isQME !== undefined ? { isQme: rendering.isQME } : {}), ...(rendering?.isAME !== undefined ? { isAme: rendering.isAME } : {}),\n },\n serviceLocation: {\n ...(location?.name ? { name: location.name } : {}),\n address: { line1: location?.street || \"\", city: location?.city || \"\", state: location?.state || \"\", postalCode: location?.zip || \"\" },\n placeOfServiceCode: location?.posCode || \"\",\n },\n diagnoses: [...(data.injury.diagnosisCodes || [])],\n serviceLines: data.bill.lineItems.map((line) => ({ code: line.code, modifiers: [...line.modifiers], units: line.units, charge: line.charge, ...(line.serviceDate ? { serviceDate: line.serviceDate } : {}), ...(line.serviceDateEnd !== undefined ? { serviceDateEnd: line.serviceDateEnd } : {}), ...(line.diagnosisPointers ? { diagnosisPointers: [...line.diagnosisPointers] } : {}) })),\n };\n}\n","export type ProcedureLine = {\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge: number;\n feeSchedule?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n};\n\nconst EMPTY_PROCEDURE_LINE: ProcedureLine = {\n code: \"\",\n modifiers: [],\n units: 1,\n charge: 0,\n};\n\nexport function isEmptyProcedureLine(line: ProcedureLine): boolean {\n return !line.code.trim()\n && line.modifiers.length === 0\n && line.units === 1\n && !line.serviceDate\n && !line.serviceDateEnd\n && !(line.diagnosisPointers?.length)\n && !line.charge;\n}\n\n/** Keeps completed/partial lines plus one keyboard-ready empty row. */\nexport function ensureTrailingProcedureLine(\n lines: readonly ProcedureLine[],\n): ProcedureLine[] {\n const entered = lines\n .filter((line) => !isEmptyProcedureLine(line))\n .map((line) => ({ ...line, modifiers: [...line.modifiers] }));\n\n return entered.length < 50\n ? [...entered, { ...EMPTY_PROCEDURE_LINE, modifiers: [] }]\n : entered;\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, Directive, EventEmitter, Input, Output } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\n\nexport type MindBillDashboardBill = {\n id: string;\n billNumber?: string | number;\n externalId?: string;\n patientName: string;\n claimNumber?: string;\n payerName?: string;\n state: string;\n submittedAt?: string;\n updatedAt?: string;\n agingDays?: number;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n href?: string;\n workItemLabel?: string;\n};\n\nexport type MindBillAgingBucketId = \"current\" | \"31-60\" | \"61-90\" | \"91+\";\nexport type MindBillAgingBucket = { id: MindBillAgingBucketId; label: string; count: number; balance: number };\nexport type MindBillDashboardSummary = {\n totalBilled: number;\n totalPaid: number;\n outstanding: number;\n openCount: number;\n submittedThisMonth: number;\n closedThisMonth: number;\n bills: MindBillDashboardBill[];\n aging: MindBillAgingBucket[];\n};\nexport type MindBillReportDimension = \"status\" | \"payer\" | \"aging\";\nexport type MindBillReportRow = { key: string; label: string; billCount: number; totalBilled: number; totalPaid: number; balanceDue: number };\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", bg: \"#f3f8fa\", s: \"#fff\", t: \"#203743\", m: \"#657982\", b: \"#dbe6ea\", r: \"14px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", bg: \"#f2f8fb\", s: \"#fff\", t: \"#1d3440\", m: \"#617783\", b: \"#d7e5eb\", r: \"12px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", bg: \"#fffaf6\", s: \"#fffefd\", t: \"#090f1f\", m: \"#626a73\", b: \"#e7e1da\", r: \"16px\", cr: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", bg: \"#f5f7fa\", s: \"#fff\", t: \"#1f2d3d\", m: \"#66788a\", b: \"#d9e2ec\", r: \"8px\", cr: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\nexport function mindBillAgingDays(bill: MindBillDashboardBill, now = new Date()): number {\n if (bill.agingDays != null) return Math.max(0, Math.floor(bill.agingDays));\n const source = bill.submittedAt ?? bill.updatedAt;\n if (!source) return 0;\n const time = new Date(source).getTime();\n return Number.isFinite(time) ? Math.max(0, Math.floor((now.getTime() - time) / 86_400_000)) : 0;\n}\n\nexport function mindBillAgingBucket(days: number): MindBillAgingBucketId {\n if (days <= 30) return \"current\";\n if (days <= 60) return \"31-60\";\n if (days <= 90) return \"61-90\";\n return \"91+\";\n}\n\nexport function summarizeMindBillDashboard(bills: MindBillDashboardBill[], now = new Date()): MindBillDashboardSummary {\n const aging: MindBillAgingBucket[] = [\n { id: \"current\", label: \"0–30 days\", count: 0, balance: 0 },\n { id: \"31-60\", label: \"31–60 days\", count: 0, balance: 0 },\n { id: \"61-90\", label: \"61–90 days\", count: 0, balance: 0 },\n { id: \"91+\", label: \"91+ days\", count: 0, balance: 0 },\n ];\n for (const bill of bills) {\n const bucket = aging.find((item) => item.id === mindBillAgingBucket(mindBillAgingDays(bill, now)))!;\n bucket.count += 1;\n bucket.balance += bill.balanceDue;\n }\n return {\n totalBilled: bills.reduce((sum, item) => sum + item.totalCharge, 0),\n totalPaid: bills.reduce((sum, item) => sum + item.totalPaid, 0),\n outstanding: bills.reduce((sum, item) => sum + item.balanceDue, 0),\n openCount: bills.filter((item) => !/closed|paid|written.off/i.test(item.state)).length,\n submittedThisMonth: bills.filter((item) => sameMonth(item.submittedAt, now)).length,\n closedThisMonth: bills.filter((item) => /closed|paid|written.off/i.test(item.state) && sameMonth(item.updatedAt ?? item.submittedAt, now)).length,\n bills,\n aging,\n };\n}\n\nfunction sameMonth(value: string | undefined, now: Date): boolean {\n if (!value) return false;\n const date = new Date(value);\n return Number.isFinite(date.getTime()) && date.getUTCFullYear() === now.getUTCFullYear() && date.getUTCMonth() === now.getUTCMonth();\n}\n\nexport function buildMindBillReportRows(bills: MindBillDashboardBill[], dimension: MindBillReportDimension): MindBillReportRow[] {\n const rows = new Map<string, MindBillReportRow>();\n for (const bill of bills) {\n const key = dimension === \"payer\" ? bill.payerName || \"Unassigned payer\" : dimension === \"aging\" ? mindBillAgingBucket(mindBillAgingDays(bill)) : bill.state;\n const label = key.replace(/_/g, \" \").replace(/\\b\\w/g, (value) => value.toUpperCase());\n const row = rows.get(key) ?? { key, label, billCount: 0, totalBilled: 0, totalPaid: 0, balanceDue: 0 };\n row.billCount += 1; row.totalBilled += bill.totalCharge; row.totalPaid += bill.totalPaid; row.balanceDue += bill.balanceDue;\n rows.set(key, row);\n }\n return [...rows.values()].sort((a, b) => b.balanceDue - a.balanceDue || a.label.localeCompare(b.label));\n}\n\nexport function buildMindBillReportCsv(rows: MindBillReportRow[]): string {\n const quote = (value: string | number) => `\"${String(value).replace(/\"/g, '\"\"')}\"`;\n return [\"Group,Bills,Total billed,Total paid,Balance due\", ...rows.map((row) => [row.label, row.billCount, row.totalBilled, row.totalPaid, row.balanceDue].map(quote).join(\",\"))].join(\"\\n\");\n}\n\n@Directive()\nabstract class DashboardBase {\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!, \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--bg\": this.appearance.backgroundColor ?? base[\"bg\"]!, \"--s\": this.appearance.surfaceColor ?? base[\"s\"]!,\n \"--t\": this.appearance.textColor ?? base[\"t\"]!, \"--m\": this.appearance.mutedColor ?? base[\"m\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!, \"--r\": this.appearance.borderRadius ?? base[\"r\"]!,\n \"--cr\": this.appearance.controlRadius ?? base[\"cr\"]!, \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n}\n\nconst sharedStyles = `\n :host{display:block}.mbd{font-family:var(--font);color:var(--t)}button,input,select{font:inherit}.card{background:var(--s);border:1px solid var(--b);border-radius:var(--r)}\n .money{font-variant-numeric:tabular-nums}.muted{color:var(--m)}.pill{display:inline-flex;border-radius:999px;background:color-mix(in srgb,var(--a) 12%,var(--s));color:var(--a);font-size:12px;font-weight:750;padding:5px 9px}\n`;\n\n@Component({\n selector: \"mindbill-bill-aging-summary\", standalone: true, imports: [CommonModule],\n template: `<section class=\"mbd aging\" [ngStyle]=\"themeStyle\" aria-label=\"Accounts receivable aging\">@for (bucket of buckets; track bucket.id) { <button type=\"button\" class=\"card\" [class.selected]=\"selectedBucket === bucket.id\" (click)=\"bucketSelected.emit(bucket.id)\"><div><strong>{{ bucket.label }}</strong><span>{{ bucket.count }} bill{{ bucket.count === 1 ? '' : 's' }}</span></div><b class=\"money\">{{ bucket.balance | currency }}</b><i><em [style.width.%]=\"width(bucket.balance)\"></em></i></button> }</section>`,\n styles: [sharedStyles, `.aging{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.aging>button{border:1px solid var(--b);padding:16px;text-align:left;color:var(--t);cursor:pointer}.aging>button:hover,.aging>button.selected{border-color:var(--a);background:color-mix(in srgb,var(--a) 6%,var(--s))}.aging button>div{display:flex;justify-content:space-between;gap:8px}.aging span{color:var(--m);font-size:12px}.aging b{display:block;font-size:20px;margin:14px 0 12px}.aging i{display:block;height:5px;border-radius:99px;background:color-mix(in srgb,var(--b) 70%,transparent);overflow:hidden}.aging em{display:block;height:100%;background:var(--a)}@media(max-width:760px){.aging{grid-template-columns:1fr 1fr}}`],\n})\nexport class MindBillBillAgingSummaryComponent extends DashboardBase {\n @Input() buckets: MindBillAgingBucket[] = [];\n @Input() selectedBucket: MindBillAgingBucketId | \"\" = \"\";\n @Output() bucketSelected = new EventEmitter<MindBillAgingBucketId>();\n width(balance: number): number { const max = Math.max(1, ...this.buckets.map((item) => item.balance)); return Math.max(balance ? 8 : 0, balance / max * 100); }\n}\n\n@Component({\n selector: \"mindbill-bill-list\", standalone: true, imports: [CommonModule],\n template: `<section class=\"mbd list card\" [ngStyle]=\"themeStyle\"><div class=\"head\"><strong>Bill</strong><strong>Payer</strong><strong>Status</strong><strong>Age</strong><strong>Balance</strong></div>@for (bill of bills; track bill.id) { <button type=\"button\" (click)=\"billSelected.emit(bill)\"><span><b>{{ bill.patientName }}</b><small>{{ bill.claimNumber || bill.workItemLabel || bill.externalId || bill.id }}</small></span><span>{{ bill.payerName || '—' }}</span><span><i class=\"pill\">{{ label(bill.state) }}</i></span><span>{{ age(bill) }} days</span><span class=\"money\"><b>{{ bill.balanceDue | currency }}</b><small>{{ bill.totalPaid | currency }} paid</small></span></button> } @empty { <p class=\"empty\">No bills match these filters.</p> }</section>`,\n styles: [sharedStyles, `.list{overflow:hidden}.head,.list button{display:grid;grid-template-columns:1.6fr 1.2fr .85fr .55fr .8fr;gap:18px;align-items:center;text-align:left}.head{padding:11px 16px;background:color-mix(in srgb,var(--bg) 78%,var(--s));color:var(--m);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.list button{width:100%;border:0;border-top:1px solid var(--b);background:var(--s);color:var(--t);padding:15px 16px;cursor:pointer}.list button:hover{background:color-mix(in srgb,var(--a) 5%,var(--s))}.list span,.list small{min-width:0}.list small{display:block;color:var(--m);margin-top:4px}.money{text-align:right}.empty{padding:24px;text-align:center;color:var(--m)}@media(max-width:760px){.head{display:none}.list button{grid-template-columns:1fr auto;gap:10px}.list button>span:nth-child(2){grid-column:1}.list button>span:nth-child(3){grid-row:1;grid-column:2}.list button>span:nth-child(4){grid-column:1}.money{grid-column:2;grid-row:2/4}}`],\n})\nexport class MindBillBillListComponent extends DashboardBase {\n @Input() bills: MindBillDashboardBill[] = [];\n @Output() billSelected = new EventEmitter<MindBillDashboardBill>();\n age(bill: MindBillDashboardBill): number { return mindBillAgingDays(bill); }\n label(value: string): string { return value.replace(/_/g, \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase()); }\n}\n\n@Component({\n selector: \"mindbill-billing-dashboard\", standalone: true, imports: [CommonModule, FormsModule, MindBillBillAgingSummaryComponent, MindBillBillListComponent],\n template: `<section class=\"mbd dashboard\" [ngStyle]=\"themeStyle\"><header><div><p>Billing operations</p><h2>{{ heading }}</h2><span class=\"muted\">{{ description }}</span></div><button type=\"button\" (click)=\"createBill.emit()\">+ New bill</button></header><div class=\"metrics\"><article class=\"card\"><span>Total billed</span><b>{{ summary.totalBilled | currency }}</b></article><article class=\"card\"><span>Outstanding</span><b>{{ summary.outstanding | currency }}</b></article><article class=\"card\"><span>Submitted this month</span><b>{{ summary.submittedThisMonth }}</b></article><article class=\"card\"><span>Closed this month</span><b>{{ summary.closedThisMonth }}</b></article></div><mindbill-bill-aging-summary [buckets]=\"summary.aging\" [selectedBucket]=\"agingBucket\" [appearance]=\"appearance\" (bucketSelected)=\"toggleAging($event)\"/><div class=\"filters\"><input [(ngModel)]=\"query\" placeholder=\"Search patient, claim, or payer\" aria-label=\"Search bills\"><select [(ngModel)]=\"state\"><option value=\"\">All statuses</option>@for (option of states; track option) { <option [value]=\"option\">{{ label(option) }}</option> }</select>@if (agingBucket) { <button type=\"button\" class=\"clear\" (click)=\"agingBucket=''\">{{ agingLabel }} ×</button> }</div><mindbill-bill-list [bills]=\"filteredBills\" [appearance]=\"appearance\" (billSelected)=\"billSelected.emit($event)\"/></section>`,\n styles: [sharedStyles, `.dashboard{display:grid;gap:18px}.dashboard header{display:flex;justify-content:space-between;align-items:end;gap:20px}.dashboard h2{font-size:28px;margin:2px 0 5px}.dashboard header p{margin:0;color:var(--a);font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.dashboard header button{border:0;border-radius:var(--cr);background:var(--a);color:var(--ac);padding:11px 16px;font-weight:750;cursor:pointer}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.metrics article{padding:18px}.metrics span{display:block;color:var(--m);font-size:12px}.metrics b{display:block;margin-top:8px;font-size:24px}.filters{display:grid;grid-template-columns:1fr 190px auto;gap:10px}.filters input,.filters select,.filters .clear{border:1px solid var(--b);border-radius:var(--cr);background:var(--s);color:var(--t);padding:11px 13px}.filters .clear{color:var(--a);font-weight:700;cursor:pointer}@media(max-width:760px){.dashboard header{align-items:start}.metrics{grid-template-columns:1fr 1fr}.filters{grid-template-columns:1fr}}`],\n})\nexport class MindBillBillingDashboardComponent extends DashboardBase {\n @Input() bills: MindBillDashboardBill[] = [];\n @Input() heading = \"Billing dashboard\";\n @Input() description = \"Track every submitted bill from payer acceptance through payment.\";\n @Output() billSelected = new EventEmitter<MindBillDashboardBill>();\n @Output() createBill = new EventEmitter<void>();\n query = \"\"; state = \"\"; agingBucket: MindBillAgingBucketId | \"\" = \"\";\n get summary(): MindBillDashboardSummary { return summarizeMindBillDashboard(this.bills); }\n get states(): string[] { return [...new Set(this.bills.map((bill) => bill.state))].sort(); }\n get filteredBills(): MindBillDashboardBill[] { const query = this.query.trim().toLowerCase(); return this.bills.filter((bill) => (!this.state || bill.state === this.state) && (!this.agingBucket || mindBillAgingBucket(mindBillAgingDays(bill)) === this.agingBucket) && (!query || [bill.patientName, bill.claimNumber, bill.payerName, bill.externalId, bill.billNumber].some((value) => String(value ?? \"\").toLowerCase().includes(query)))); }\n get agingLabel(): string { return this.summary.aging.find((item) => item.id === this.agingBucket)?.label ?? \"\"; }\n toggleAging(bucket: MindBillAgingBucketId): void { this.agingBucket = this.agingBucket === bucket ? \"\" : bucket; }\n label(value: string): string { return value.replace(/_/g, \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase()); }\n}\n\n@Component({\n selector: \"mindbill-billing-report\", standalone: true, imports: [CommonModule, FormsModule],\n template: `<section class=\"mbd report card\" [ngStyle]=\"themeStyle\"><header><div><h2>{{ heading }}</h2><p>Operational totals grouped for reconciliation and follow-up.</p></div><div><select [(ngModel)]=\"dimension\"><option value=\"status\">Status</option><option value=\"payer\">Payer</option><option value=\"aging\">Aging</option></select><button type=\"button\" (click)=\"downloadCsv()\">Export CSV</button></div></header><div class=\"thead\"><b>Group</b><b>Bills</b><b>Total billed</b><b>Total paid</b><b>Balance due</b></div>@for (row of rows; track row.key) { <div class=\"row\"><strong>{{ row.label }}</strong><span>{{ row.billCount }}</span><span>{{ row.totalBilled | currency }}</span><span>{{ row.totalPaid | currency }}</span><b>{{ row.balanceDue | currency }}</b></div> }</section>`,\n styles: [sharedStyles, `.report{overflow:hidden}.report header{display:flex;justify-content:space-between;align-items:center;padding:18px}.report h2{margin:0;font-size:22px}.report p{margin:4px 0 0;color:var(--m)}.report header div:last-child{display:flex;gap:8px}.report select,.report button{border:1px solid var(--b);border-radius:var(--cr);background:var(--s);color:var(--t);padding:9px 12px}.report button{background:var(--a);border-color:var(--a);color:var(--ac);font-weight:750;cursor:pointer}.thead,.row{display:grid;grid-template-columns:1.5fr .5fr 1fr 1fr 1fr;gap:14px;padding:12px 18px;border-top:1px solid var(--b);align-items:center}.thead{background:color-mix(in srgb,var(--bg) 78%,var(--s));color:var(--m);font-size:11px;text-transform:uppercase}.row span,.row b:not(:first-child){text-align:right;font-variant-numeric:tabular-nums}@media(max-width:700px){.report header{align-items:flex-start}.thead{display:none}.row{grid-template-columns:1fr 1fr}.row>*:nth-child(n+2){text-align:right}.row strong{grid-column:1}.row span:nth-child(2){grid-column:2}.row span:nth-child(3)::before{content:'Billed ';color:var(--m)}.row span:nth-child(4)::before{content:'Paid ';color:var(--m)}.row b::before{content:'Due ';color:var(--m)}}`],\n})\nexport class MindBillBillingReportComponent extends DashboardBase {\n @Input() bills: MindBillDashboardBill[] = [];\n @Input() heading = \"Billing report\";\n dimension: MindBillReportDimension = \"status\";\n get rows(): MindBillReportRow[] { return buildMindBillReportRows(this.bills, this.dimension); }\n downloadCsv(): void { const blob = new Blob([buildMindBillReportCsv(this.rows)], { type: \"text/csv;charset=utf-8\" }); const url = URL.createObjectURL(blob); const link = document.createElement(\"a\"); link.href = url; link.download = `mindbill-${this.dimension}-report.csv`; link.click(); setTimeout(() => URL.revokeObjectURL(url), 1000); }\n}\n","import type { MindBillAgingBucketId, MindBillDashboardBill } from \"./billing-dashboard.component\";\n\nexport type MindBillStatusAgingCell = {\n state: string;\n bucket: MindBillAgingBucketId | \"total\";\n count: number;\n balance: number;\n bills: MindBillDashboardBill[];\n};\n\nexport type MindBillStatusAgingRow = {\n state: string;\n label: string;\n cells: MindBillStatusAgingCell[];\n total: MindBillStatusAgingCell;\n};\n\nexport type MindBillStatusAgingMatrix = {\n rows: MindBillStatusAgingRow[];\n columnTotals: MindBillStatusAgingCell[];\n grandTotal: MindBillStatusAgingCell;\n};\n\nexport const MINDBILL_STATUS_AGING_BUCKETS: { id: MindBillAgingBucketId; label: string }[] = [\n { id: \"current\", label: \"0–30 days\" },\n { id: \"31-60\", label: \"31–60 days\" },\n { id: \"61-90\", label: \"61–90 days\" },\n { id: \"91+\", label: \"91+ days\" },\n];\n\nconst DEFAULT_STATE_ORDER = [\n \"draft\", \"incomplete\", \"created\", \"sent\", \"submitted\", \"accepted\", \"processed\",\n \"paid\", \"underpaid\", \"denied\", \"rejected\", \"appealing\", \"second_review\", \"ibr\", \"lien\", \"closed\",\n];\n\nconst agingDays = (bill: MindBillDashboardBill, now: Date): number => {\n if (bill.agingDays != null) return Math.max(0, Math.floor(bill.agingDays));\n const source = bill.submittedAt ?? bill.updatedAt;\n if (!source) return 0;\n const time = new Date(source).getTime();\n return Number.isFinite(time) ? Math.max(0, Math.floor((now.getTime() - time) / 86_400_000)) : 0;\n};\n\nconst agingBucketIndex = (days: number): number => (days <= 30 ? 0 : days <= 60 ? 1 : days <= 90 ? 2 : 3);\n\nconst stateLabel = (state: string) => state.replace(/_/g, \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\nconst emptyCell = (state: string, bucket: MindBillAgingBucketId | \"total\"): MindBillStatusAgingCell => ({ state, bucket, count: 0, balance: 0, bills: [] });\n\nexport function buildMindBillStatusAgingMatrix(\n bills: MindBillDashboardBill[],\n stateOrder: string[] = DEFAULT_STATE_ORDER,\n now = new Date(),\n): MindBillStatusAgingMatrix {\n const orderIndex = new Map(stateOrder.map((state, index) => [state.toLowerCase(), index]));\n const states = [...new Set(bills.map((bill) => bill.state))].sort((a, b) => {\n const left = orderIndex.get(a.toLowerCase()) ?? stateOrder.length;\n const right = orderIndex.get(b.toLowerCase()) ?? stateOrder.length;\n return left - right || a.localeCompare(b);\n });\n const columnTotals = MINDBILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(\"all\", bucket.id));\n const grandTotal = emptyCell(\"all\", \"total\");\n const rows = states.map((state) => ({\n state,\n label: stateLabel(state),\n cells: MINDBILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(state, bucket.id)),\n total: emptyCell(state, \"total\"),\n }));\n const rowByState = new Map(rows.map((row) => [row.state, row]));\n for (const bill of bills) {\n const row = rowByState.get(bill.state)!;\n const bucketIndex = agingBucketIndex(agingDays(bill, now));\n for (const cell of [row.cells[bucketIndex]!, row.total, columnTotals[bucketIndex]!, grandTotal]) {\n cell.count += 1;\n cell.balance += bill.balanceDue;\n cell.bills.push(bill);\n }\n }\n return { rows, columnTotals, grandTotal };\n}\n\nexport function buildMindBillStatusAgingCsv(bills: MindBillDashboardBill[], stateOrder?: string[]): string {\n const matrix = buildMindBillStatusAgingMatrix(bills, stateOrder);\n const quote = (value: string | number) => `\"${String(value).replace(/\"/g, '\"\"')}\"`;\n const header = [\"Status\", ...MINDBILL_STATUS_AGING_BUCKETS.map((bucket) => bucket.label), \"Total\"];\n const lines = matrix.rows.map((row) => [row.label, ...row.cells.map((cell) => cell.count), row.total.count]);\n lines.push([\"Total\", ...matrix.columnTotals.map((cell) => cell.count), matrix.grandTotal.count]);\n return [header, ...lines].map((line) => line.map(quote).join(\",\")).join(\"\\n\");\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\nimport type { MindBillDashboardBill } from \"./billing-dashboard.component\";\nimport {\n buildMindBillStatusAgingMatrix,\n MINDBILL_STATUS_AGING_BUCKETS,\n type MindBillStatusAgingCell,\n type MindBillStatusAgingMatrix,\n} from \"./status-aging-matrix\";\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", bg: \"#f3f8fa\", s: \"#fff\", t: \"#203743\", m: \"#657982\", b: \"#dbe6ea\", r: \"14px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", bg: \"#f2f8fb\", s: \"#fff\", t: \"#1d3440\", m: \"#617783\", b: \"#d7e5eb\", r: \"12px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", bg: \"#fffaf6\", s: \"#fffefd\", t: \"#090f1f\", m: \"#626a73\", b: \"#e7e1da\", r: \"16px\", cr: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", bg: \"#f5f7fa\", s: \"#fff\", t: \"#1f2d3d\", m: \"#66788a\", b: \"#d9e2ec\", r: \"8px\", cr: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\n@Component({\n selector: \"mindbill-status-aging-matrix\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <section class=\"mbmx\" [ngStyle]=\"themeStyle\" aria-label=\"Bills by status and age\">\n <header><h2>{{ heading }}</h2><p>{{ description }}</p></header>\n <div class=\"card\">\n <table>\n <thead>\n <tr><th class=\"status\">Status</th>@for (bucket of buckets; track bucket.id) { <th>{{ bucket.label }}</th> }<th>Total</th></tr>\n </thead>\n <tbody>\n @for (row of matrix.rows; track row.state) {\n <tr>\n <td class=\"status\"><i class=\"pill\">{{ row.label }}</i></td>\n @for (cell of row.cells; track cell.bucket) {\n <td><button type=\"button\" [disabled]=\"cell.count === 0\" (click)=\"cellSelected.emit(cell)\"><b [class.zero]=\"cell.count === 0\">{{ cell.count === 0 ? '—' : cell.count }}</b>@if (showBalances && cell.count > 0) { <small>{{ cell.balance | currency }}</small> }</button></td>\n }\n <td class=\"rowtotal\"><button type=\"button\" [disabled]=\"row.total.count === 0\" (click)=\"cellSelected.emit(row.total)\"><b>{{ row.total.count }}</b>@if (showBalances) { <small>{{ row.total.balance | currency }}</small> }</button></td>\n </tr>\n }\n <tr class=\"totals\">\n <td class=\"status\">Total</td>\n @for (cell of matrix.columnTotals; track cell.bucket) {\n <td><button type=\"button\" [disabled]=\"cell.count === 0\" (click)=\"cellSelected.emit(cell)\"><b [class.zero]=\"cell.count === 0\">{{ cell.count === 0 ? '—' : cell.count }}</b>@if (showBalances && cell.count > 0) { <small>{{ cell.balance | currency }}</small> }</button></td>\n }\n <td class=\"rowtotal\"><button type=\"button\" [disabled]=\"matrix.grandTotal.count === 0\" (click)=\"cellSelected.emit(matrix.grandTotal)\"><b>{{ matrix.grandTotal.count }}</b>@if (showBalances) { <small>{{ matrix.grandTotal.balance | currency }}</small> }</button></td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n `,\n styles: [`\n :host{display:block}\n .mbmx{font-family:var(--font);color:var(--t)}\n .mbmx header{margin-bottom:16px}.mbmx h2{margin:0;font-size:24px}.mbmx header p{margin:5px 0 0;color:var(--m)}\n .card{background:var(--s);border:1px solid var(--b);border-radius:var(--r);overflow:auto}\n table{width:100%;border-collapse:collapse;min-width:640px}\n th{padding:13px 16px;border-bottom:1px solid var(--b);color:var(--m);font-size:11px;letter-spacing:.06em;text-transform:uppercase;text-align:right;white-space:nowrap}\n th.status{text-align:left}\n td{padding:0;border-bottom:1px solid var(--b);border-left:1px solid color-mix(in srgb,var(--b) 55%,transparent);text-align:right}\n td.status{border-left:0;padding:14px 16px;text-align:left;white-space:nowrap}\n tr:last-child td{border-bottom:0}\n .pill{display:inline-flex;border-radius:999px;background:color-mix(in srgb,var(--a) 12%,var(--s));color:var(--a);font-size:12px;font-style:normal;font-weight:750;padding:5px 9px}\n td button{display:block;width:100%;min-height:56px;padding:9px 16px;border:0;background:none;color:var(--t);font:inherit;text-align:right;cursor:pointer}\n td button:disabled{cursor:default}\n td button:not(:disabled):hover{background:color-mix(in srgb,var(--a) 8%,var(--s))}\n td button b{display:block;font-size:17px;font-weight:760;font-variant-numeric:tabular-nums}\n td button b.zero{color:var(--m);font-weight:500}\n td button small{display:block;margin-top:2px;color:var(--m);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}\n td.rowtotal,tr.totals td{background:color-mix(in srgb,var(--bg) 78%,var(--s));font-weight:750}\n tr.totals td.status{color:var(--t);font-weight:750}\n `],\n})\nexport class MindBillStatusAgingMatrixComponent {\n @Input() bills: MindBillDashboardBill[] = [];\n @Input() heading = \"Bills by status and age\";\n @Input() description = \"Every bill grouped by lifecycle status, then by days outstanding.\";\n @Input() stateOrder?: string[];\n @Input() showBalances = true;\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Output() cellSelected = new EventEmitter<MindBillStatusAgingCell>();\n\n readonly buckets = MINDBILL_STATUS_AGING_BUCKETS;\n\n get matrix(): MindBillStatusAgingMatrix {\n return buildMindBillStatusAgingMatrix(this.bills, this.stateOrder);\n }\n\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!, \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--bg\": this.appearance.backgroundColor ?? base[\"bg\"]!, \"--s\": this.appearance.surfaceColor ?? base[\"s\"]!,\n \"--t\": this.appearance.textColor ?? base[\"t\"]!, \"--m\": this.appearance.mutedColor ?? base[\"m\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!, \"--r\": this.appearance.borderRadius ?? base[\"r\"]!,\n \"--cr\": this.appearance.controlRadius ?? base[\"cr\"]!, \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n}\n","import type {\n BillTasksAgingBucket,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardTone,\n} from \"@mindbill/browser\";\n\n// Pure helpers behind <mindbill-bill-tasks-dashboard>; the aggregation itself\n// (buildBillTasksDashboard) is shared from @mindbill/browser.\n\nexport type MindBillBillTasksCell = {\n sectionId: string;\n rowId: string;\n /** Null for a row's \"Task Total\" cell (all buckets). */\n bucketId: string | null;\n refs: string[];\n count: number;\n};\n\nexport const MINDBILL_BILL_TASKS_TONES: Record<BillTasksDashboardTone, string> = {\n violet: \"#7c53c3\",\n red: \"#cf4437\",\n blue: \"#2f7fd1\",\n green: \"#2c9a5b\",\n amber: \"#d9931f\",\n neutral: \"#8195a1\",\n};\n\nexport const MINDBILL_BILL_TASKS_PILL_BASES = [\"#2c9a5b\", \"#1f9aa8\", \"#dcbb28\", \"#e08a2e\", \"#d75d8a\"];\n\nexport function mindBillBillTasksTone(tone: BillTasksDashboardTone): string {\n return MINDBILL_BILL_TASKS_TONES[tone] ?? MINDBILL_BILL_TASKS_TONES.neutral;\n}\n\nexport function mindBillBillTasksPillBase(index: number): string {\n return MINDBILL_BILL_TASKS_PILL_BASES[index % MINDBILL_BILL_TASKS_PILL_BASES.length]!;\n}\n\n/** Click-through payload for a bucket cell (bucketIndex) or a row total (null). */\nexport function mindBillBillTasksCell(\n section: BillTasksDashboardSection,\n row: BillTasksDashboardRow,\n bucketIndex: number | null,\n buckets: BillTasksAgingBucket[],\n): MindBillBillTasksCell {\n if (bucketIndex === null) {\n return {\n sectionId: section.id,\n rowId: row.id,\n bucketId: null,\n refs: row.refs.flat(),\n count: row.total,\n };\n }\n return {\n sectionId: section.id,\n rowId: row.id,\n bucketId: buckets[bucketIndex]?.id ?? null,\n refs: row.refs[bucketIndex] ?? [],\n count: row.counts[bucketIndex] ?? 0,\n };\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport {\n BILL_TASKS_AGING_BUCKETS,\n type BillTasksAgingBucket,\n type BillTasksDashboardData,\n type BillTasksDashboardRow,\n type BillTasksDashboardSection,\n} from \"@mindbill/browser\";\nimport { mindBillAngularAppearanceStyle, type MindBillAngularAppearance } from \"./appearance\";\nimport {\n mindBillBillTasksCell,\n mindBillBillTasksPillBase,\n mindBillBillTasksTone,\n type MindBillBillTasksCell,\n} from \"./bill-tasks-dashboard\";\n\n// \"Bill Tasks\" dashboard: one rounded, tone-colored card per\n// task section, rows bucketed by age in days with colored bucket header pills,\n// per-cell click-through counts, and a closing grand-total card. The pure\n// aggregation lives in @mindbill/browser (buildBillTasksDashboard) so React\n// and Angular render the exact same data shape.\n\n@Component({\n selector: \"mindbill-bill-tasks-dashboard\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"mbtk\" [ngStyle]=\"themeStyle\">\n @if (heading) { <header class=\"heading\"><h2>{{ heading }}</h2></header> }\n @for (section of data?.sections ?? []; track section.id) {\n <section class=\"card\" [style.borderColor]=\"tone(section)\" [attr.aria-label]=\"section.label\">\n <div class=\"grid head\" [style.borderBottomColor]=\"tone(section)\">\n <span class=\"title\">\n <i class=\"dot\" [style.background]=\"tone(section)\"></i>\n <span class=\"title-text\"><strong>{{ section.label }}</strong><span class=\"basis\">by {{ section.agingBasisLabel }}</span></span>\n </span>\n @for (bucket of buckets; track bucket.id; let bucketIndex = $index) {\n <span class=\"pill\" [style.background]=\"pillBackground(bucketIndex)\" [style.color]=\"pillColor(bucketIndex)\">{{ bucket.label }}</span>\n }\n <span class=\"colhead\">Task Total</span>\n </div>\n @if (section.empty) {\n <p class=\"empty\">{{ emptyLabel }}</p>\n } @else {\n @for (row of section.rows; track row.id) {\n <div class=\"grid row\">\n <span class=\"rowlabel\">{{ row.label }}</span>\n @for (bucket of buckets; track bucket.id; let bucketIndex = $index) {\n <span class=\"count\">\n @if ((row.counts[bucketIndex] ?? 0) > 0) {\n <button type=\"button\" class=\"link\" (click)=\"select(section, row, bucketIndex)\">{{ row.counts[bucketIndex] }}</button>\n } @else { <span class=\"zero\">0</span> }\n </span>\n }\n <span class=\"total\">\n @if (row.total > 0) {\n <button type=\"button\" class=\"link\" (click)=\"select(section, row, null)\">{{ row.total }}</button>\n } @else { <span class=\"zero\">0</span> }\n </span>\n </div>\n }\n <div class=\"grid row totals\">\n <span class=\"rowlabel\">Total</span>\n @for (bucket of buckets; track bucket.id; let bucketIndex = $index) {\n <span class=\"count\">{{ section.totals[bucketIndex] ?? 0 }}</span>\n }\n <span class=\"total\">{{ section.total }}</span>\n </div>\n }\n </section>\n }\n <section class=\"card grand\" [attr.aria-label]=\"grandTotalLabel\">\n <div class=\"grid row totals\">\n <span class=\"rowlabel grand-label\">{{ grandTotalLabel }}</span>\n @for (bucket of buckets; track bucket.id; let bucketIndex = $index) {\n <span class=\"count\">{{ data?.grandTotals?.[bucketIndex] ?? 0 }}</span>\n }\n <span class=\"total\">{{ data?.grandTotal ?? 0 }}</span>\n </div>\n </section>\n </div>\n `,\n styles: [`\n :host{display:block}\n .mbtk{color:var(--t);font-family:var(--font);font-size:14px}\n .heading{margin-bottom:14px}.heading h2{margin:0;font-size:24px}\n .card{margin-bottom:16px;border:1.5px solid var(--b);border-radius:var(--r);background:var(--s);overflow:hidden}\n .grid{display:grid;grid-template-columns:var(--cols);gap:0 10px;align-items:center;padding:0 16px}\n .head{padding:12px 16px;border-bottom:1px solid var(--b)}\n .title{display:flex;align-items:center;gap:9px;min-width:0}\n .dot{flex:0 0 auto;width:11px;height:11px;border-radius:50%}\n .title-text{min-width:0}\n .title-text strong{display:block;font-size:15.5px;line-height:1.3}\n .basis{display:block;color:var(--m);font-size:12px;line-height:1.35}\n .pill{justify-self:stretch;padding:5px 6px;border-radius:999px;font-size:11px;font-weight:750;line-height:1.25;text-align:center;white-space:nowrap}\n .colhead{justify-self:stretch;color:var(--m);font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;text-align:center;white-space:nowrap}\n .row{border-top:1px solid color-mix(in srgb,var(--b) 60%,transparent);min-height:44px}\n .row:first-of-type{border-top:0}\n .rowlabel{color:var(--m);font-size:13px;line-height:1.35;padding:9px 0;overflow-wrap:anywhere}\n .count,.total{text-align:center;font-variant-numeric:tabular-nums}\n .zero{color:var(--m)}\n .link{border:0;background:none;padding:6px 8px;color:var(--a);font:inherit;font-weight:750;font-variant-numeric:tabular-nums;cursor:pointer;border-radius:6px}\n .link:hover{text-decoration:underline;background:color-mix(in srgb,var(--a) 8%,transparent)}\n .totals{background:color-mix(in srgb,var(--bg) 78%,var(--s));border-top:1px solid var(--b);font-weight:760}\n .totals .rowlabel{color:var(--t);font-weight:760}\n .empty{margin:0;padding:22px 16px;color:var(--m);text-align:center}\n .grand{border-color:var(--b)}\n .grand .row{min-height:52px}\n .grand-label{font-size:14px;font-weight:800}\n @media(max-width:760px){.pill,.colhead,.count{display:none}.grid{grid-template-columns:minmax(0,1fr) auto}}\n `],\n})\nexport class MindBillBillTasksDashboardComponent {\n @Input() data: BillTasksDashboardData | null = null;\n @Input() buckets: BillTasksAgingBucket[] = BILL_TASKS_AGING_BUCKETS;\n @Input() heading = \"\";\n @Input() grandTotalLabel = \"Bill Tasks Total\";\n @Input() emptyLabel = \"No Tasks\";\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Output() cellSelected = new EventEmitter<MindBillBillTasksCell>();\n\n get themeStyle(): Record<string, string> {\n return {\n ...mindBillAngularAppearanceStyle(this.appearance),\n \"--cols\": `minmax(150px,1.6fr) repeat(${this.buckets.length},minmax(84px,1fr)) minmax(84px,1fr)`,\n };\n }\n\n tone(section: BillTasksDashboardSection): string {\n return mindBillBillTasksTone(section.tone);\n }\n\n pillBackground(index: number): string {\n return `color-mix(in srgb,${mindBillBillTasksPillBase(index)} 20%,var(--s))`;\n }\n\n pillColor(index: number): string {\n return `color-mix(in srgb,${mindBillBillTasksPillBase(index)} 62%,var(--t))`;\n }\n\n select(section: BillTasksDashboardSection, row: BillTasksDashboardRow, bucketIndex: number | null): void {\n this.cellSelected.emit(mindBillBillTasksCell(section, row, bucketIndex, this.buckets));\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ChangeDetectorRef, Component, EventEmitter, inject, Input, Output } from \"@angular/core\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\n\nexport type MindBillManagementSession = { url: string };\nexport type MindBillManagementSessionProvider = () => Promise<MindBillManagementSession | string>;\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", b: \"#dbe6ea\", r: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", b: \"#d7e5eb\", r: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", b: \"#e7e1da\", r: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", b: \"#d9e2ec\", r: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\n@Component({\n selector: \"mindbill-billing-management-button\",\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"management\" [ngStyle]=\"themeStyle\">\n <button type=\"button\" [disabled]=\"loading\" (click)=\"openBillingManagement()\">\n <span>{{ loading ? loadingLabel : label }}</span><span aria-hidden=\"true\">↗</span>\n </button>\n @if (errorMessage) { <p role=\"alert\">{{ errorMessage }}</p> }\n </div>\n `,\n styles: [`\n :host{display:inline-block}.management{font-family:var(--font)}button{display:inline-flex;align-items:center;justify-content:center;gap:10px;border:1px solid var(--a);border-radius:var(--r);background:var(--a);color:var(--ac);padding:11px 16px;font:inherit;font-weight:750;cursor:pointer}button:disabled{opacity:.65;cursor:wait}p{max-width:360px;margin:7px 0 0;color:#b42318;font-size:13px}\n `],\n})\nexport class MindBillBillingManagementButtonComponent {\n @Input() sessionEndpoint = \"/api/mindbill/management-session\";\n @Input() sessionProvider?: MindBillManagementSessionProvider;\n @Input() label = \"Billing management\";\n @Input() loadingLabel = \"Opening billing…\";\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Output() opened = new EventEmitter<string>();\n @Output() failed = new EventEmitter<unknown>();\n\n loading = false;\n errorMessage = \"\";\n private readonly changeDetector = inject(ChangeDetectorRef);\n\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!,\n \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!,\n \"--r\": this.appearance.controlRadius ?? base[\"r\"]!,\n \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n\n async openBillingManagement(): Promise<void> {\n if (this.loading || typeof window === \"undefined\") return;\n this.loading = true;\n this.errorMessage = \"\";\n const popup = window.open(\"about:blank\", \"_blank\", \"noopener,noreferrer\");\n try {\n const result = this.sessionProvider\n ? await this.sessionProvider()\n : await this.fetchSession();\n const url = typeof result === \"string\" ? result : result.url;\n if (!url) throw new Error(\"The billing management session did not include a URL.\");\n if (popup) popup.location.replace(url);\n else window.location.assign(url);\n this.opened.emit(url);\n } catch (error) {\n popup?.close();\n this.errorMessage = error instanceof Error ? error.message : \"Billing management could not be opened.\";\n this.changeDetector.markForCheck();\n this.failed.emit(error);\n } finally {\n this.loading = false;\n this.changeDetector.markForCheck();\n }\n }\n\n private async fetchSession(): Promise<MindBillManagementSession> {\n const response = await fetch(this.sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { accept: \"application/json\" },\n });\n const body = await response.json().catch(() => ({})) as { url?: string; data?: { url?: string }; message?: string };\n if (!response.ok) throw new Error(body.message || \"Billing management could not be opened.\");\n const url = body.url ?? body.data?.url;\n if (!url) throw new Error(\"The billing management session did not include a URL.\");\n return { url };\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ChangeDetectorRef, Component, EventEmitter, inject, Input, OnInit, Output } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport {\n createOrganizationClient,\n organizationTaxIdWrite,\n type BillLifecycleSessionProvider,\n type OrganizationBillingProviderInput,\n type OrganizationClient,\n type OrganizationLocationInput,\n type OrganizationProfileData,\n type OrganizationPracticeIdentity,\n} from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\n\n// Embeddable organization onboarding (INC-1470): practice identity, billing\n// provider, locations, and the W-9 captured once and saved straight to\n// MindBill through the partner browser session (organization:manage\n// permission). variant=\"settings\" stacks every section for edit-after-setup.\n\nconst THEME: Record<string, Record<string, string>> = {\n mindbill: { a: \"#238dbd\", ac: \"#fff\", bg: \"#f3f8fa\", s: \"#fff\", t: \"#203743\", m: \"#657982\", b: \"#dbe6ea\", r: \"14px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"qme-companion\": { a: \"#53b5dc\", ac: \"#173542\", bg: \"#f2f8fb\", s: \"#fff\", t: \"#1d3440\", m: \"#617783\", b: \"#d7e5eb\", r: \"12px\", cr: \"8px\", font: \"Inter,system-ui,sans-serif\" },\n \"orange-bright\": { a: \"#f4510b\", ac: \"#fff\", bg: \"#fffaf6\", s: \"#fffefd\", t: \"#090f1f\", m: \"#626a73\", b: \"#e7e1da\", r: \"16px\", cr: \"10px\", font: \"Inter,system-ui,sans-serif\" },\n \"clinical-blue\": { a: \"#1677ff\", ac: \"#fff\", bg: \"#fff\", s: \"#fff\", t: \"#1f2d3d\", m: \"#66788a\", b: \"#d9e2ec\", r: \"8px\", cr: \"6px\", font: \"Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif\" },\n};\n\ntype StepId = \"practice\" | \"locations\" | \"w9\" | \"review\";\n\nasync function fileToBase64(file: File): Promise<string> {\n const buffer = new Uint8Array(await file.arrayBuffer());\n let binary = \"\";\n for (const byte of buffer) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\n@Component({\n selector: \"mindbill-organization-onboarding\",\n standalone: true,\n imports: [CommonModule, FormsModule],\n template: `\n <section class=\"mbob\" [ngStyle]=\"themeStyle\">\n <div class=\"card\">\n <header><h2>{{ heading }}</h2><p>{{ description }}</p></header>\n @if (loadError) { <div class=\"error\" role=\"alert\">{{ loadError }}</div> }\n\n @if (variant === 'onboarding') {\n <div class=\"steps\">\n @for (item of steps; track item.id) {\n <button type=\"button\" [class.active]=\"step === item.id\" [class.done]=\"saved[item.id]\" (click)=\"step = item.id\"><i>{{ saved[item.id] ? '✓' : '' }}</i>{{ item.label }}</button>\n }\n </div>\n }\n\n @if (variant === 'settings' || step === 'practice') {\n <div class=\"grid\">\n <label>Practice name<input [(ngModel)]=\"identity.name\" [disabled]=\"saving\"></label>\n <label>Legal name<input [(ngModel)]=\"identity.legalName\" [disabled]=\"saving\"></label>\n <label>Practice tax ID type<select [ngModel]=\"identity.taxIdType ?? 'EIN'\" (ngModelChange)=\"setTaxIdType(identity, $event)\" [disabled]=\"saving\"><option value=\"EIN\">EIN</option><option value=\"SSN\">SSN</option></select></label>\n <div class=\"tax-id\"><label>{{ identity.taxIdType === 'SSN' ? 'Practice SSN' : 'Practice EIN' }}<input [(ngModel)]=\"identity.taxId\" [type]=\"identity.taxIdType === 'SSN' ? 'password' : 'text'\" autocomplete=\"off\" inputmode=\"numeric\" [disabled]=\"saving\"></label>\n @if (identity.taxIdType === 'SSN' && identity.taxIdConfigured) { <small>SSN ending in {{ identity.taxIdLast4 }} is saved. Leave blank to keep it, or enter a replacement.</small><button type=\"button\" class=\"add\" [disabled]=\"saving\" (click)=\"clearTaxId(identity)\">Clear saved practice SSN</button> }\n </div>\n <label>Group NPI<input [(ngModel)]=\"identity.npi\" [disabled]=\"saving\"></label>\n <label>Phone<input [(ngModel)]=\"identity.phone\" [disabled]=\"saving\"></label>\n <label>Email<input [(ngModel)]=\"identity.email\" [disabled]=\"saving\"></label>\n </div>\n <h3>Billing provider (pay-to)</h3>\n <div class=\"grid\">\n <label>Billing provider name<input [(ngModel)]=\"provider.name\" [disabled]=\"saving\"></label>\n <label>Billing tax ID type<select [ngModel]=\"provider.taxIdType ?? 'EIN'\" (ngModelChange)=\"setTaxIdType(provider, $event)\" [disabled]=\"saving\"><option value=\"EIN\">EIN</option><option value=\"SSN\">SSN</option></select></label>\n <div class=\"tax-id\"><label>{{ provider.taxIdType === 'SSN' ? 'Billing SSN' : 'Billing EIN' }}<input [(ngModel)]=\"provider.taxId\" [type]=\"provider.taxIdType === 'SSN' ? 'password' : 'text'\" autocomplete=\"off\" inputmode=\"numeric\" [disabled]=\"saving\"></label>\n @if (provider.taxIdType === 'SSN' && provider.taxIdConfigured) { <small>SSN ending in {{ provider.taxIdLast4 }} is saved. Leave blank to keep it, or enter a replacement.</small><button type=\"button\" class=\"add\" [disabled]=\"saving\" (click)=\"clearTaxId(provider)\">Clear saved billing SSN</button> }\n </div>\n <label>Billing NPI<input [(ngModel)]=\"provider.npi\" [disabled]=\"saving\"></label>\n <label>Billing phone<input [(ngModel)]=\"provider.phone\" [disabled]=\"saving\"></label>\n <label class=\"span\">Street<input [(ngModel)]=\"provider.billingStreet\" [disabled]=\"saving\"></label>\n <label>City<input [(ngModel)]=\"provider.billingCity\" [disabled]=\"saving\"></label>\n <label>State<input [(ngModel)]=\"provider.billingState\" maxlength=\"2\" [disabled]=\"saving\"></label>\n <label>ZIP<input [(ngModel)]=\"provider.billingZip\" [disabled]=\"saving\"></label>\n </div>\n <div class=\"actions\"><span>{{ saved['practice'] ? 'Saved to MindBill.' : 'Saved once, used on every bill.' }}</span><button type=\"button\" class=\"save\" [disabled]=\"saving\" (click)=\"savePractice()\">{{ saving ? 'Saving…' : 'Save practice' }}</button></div>\n }\n\n @if (variant === 'settings') { <h3>Locations</h3> }\n @if (variant === 'settings' || step === 'locations') {\n @for (location of locations; track $index; let index = $index) {\n <div class=\"loc\">\n <label>Name<input [(ngModel)]=\"location.name\" [disabled]=\"saving\"></label>\n <label>Street<input [(ngModel)]=\"location.street\" [disabled]=\"saving\"></label>\n <label>City<input [(ngModel)]=\"location.city\" [disabled]=\"saving\"></label>\n <label>State<input [(ngModel)]=\"location.state\" maxlength=\"2\" [disabled]=\"saving\"></label>\n <label>ZIP<input [(ngModel)]=\"location.zip\" [disabled]=\"saving\"></label>\n <label class=\"primary\"><input type=\"radio\" name=\"mbob-primary\" [checked]=\"location.isPrimary === true\" (change)=\"setPrimary(index)\"> Primary</label>\n <button type=\"button\" class=\"remove\" aria-label=\"Remove location\" (click)=\"locations.splice(index, 1)\">×</button>\n </div>\n }\n <button type=\"button\" class=\"add\" (click)=\"addLocation()\">+ Add location</button>\n <div class=\"actions\"><span>{{ saved['locations'] ? 'Saved to MindBill.' : 'Where evaluations happen.' }}</span><button type=\"button\" class=\"save\" [disabled]=\"saving\" (click)=\"saveLocations()\">{{ saving ? 'Saving…' : 'Save locations' }}</button></div>\n }\n\n @if (variant === 'settings') { <h3>Practice W-9</h3> }\n @if (variant === 'settings' || step === 'w9') {\n @if (profile?.w9; as w9) {\n <div class=\"w9-current\"><div><strong>{{ w9.filename }}</strong><span> · added {{ w9.addDate }}</span></div><span>Rides on every bill automatically</span></div>\n }\n <label class=\"drop\">\n <input type=\"file\" accept=\"application/pdf,.pdf\" (change)=\"w9Selected($event)\">\n <strong>{{ w9File ? w9File.name : (profile?.w9 ? 'Replace the W-9 PDF' : 'Drop the practice W-9 PDF here, or click to choose') }}</strong>\n <span>The W-9 is auto-attached to every submission.</span>\n </label>\n <div class=\"actions\"><span>{{ saved['w9'] ? 'Saved to MindBill.' : '' }}</span><button type=\"button\" class=\"save\" [disabled]=\"saving || !w9File\" (click)=\"saveW9()\">{{ saving ? 'Uploading…' : 'Save W-9' }}</button></div>\n }\n\n @if (variant === 'settings') { <h3>Checklist</h3> }\n @if (variant === 'settings' || step === 'review') {\n <div class=\"check\">\n @for (item of profile?.onboarding?.checklist ?? []; track item.id) {\n <div class=\"check-item\" [class.complete]=\"item.complete\"><i>{{ item.complete ? '✓' : '•' }}</i><span>{{ item.label }}</span></div>\n }\n @if (profile?.onboarding?.complete) { <p class=\"done-copy\">Billing setup is complete — bills submitted from your product carry this profile automatically.</p> }\n @else { <p class=\"muted\">Items above complete themselves as each section is saved.</p> }\n </div>\n }\n\n @if (errorMessage) { <div class=\"error\" role=\"alert\">{{ errorMessage }}</div> }\n </div>\n </section>\n `,\n styles: [`\n :host{display:block}\n .mbob{font-family:var(--font);color:var(--t);font-size:15px}.mbob *{box-sizing:border-box}\n .card{border:1px solid var(--b);border-radius:var(--r);background:var(--s);padding:24px}\n header{margin-bottom:18px}header h2{margin:0;font-size:22px}header p{margin:5px 0 0;color:var(--m)}\n .steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}\n .steps button{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--b);border-radius:999px;background:var(--s);padding:7px 13px;color:var(--m);font:inherit;font-size:13px;font-weight:700;cursor:pointer}\n .steps button.active{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}\n .steps button.done i{color:#159447;font-style:normal}\n .grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 22px}.span{grid-column:1/-1}\n label{display:grid;gap:7px;font-size:13px;font-weight:720}\n input:not([type=radio]):not([type=file]),select{width:100%;min-height:44px;border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 12px;color:var(--t);font:inherit;font-weight:450}\n input:focus,select:focus{outline:3px solid color-mix(in srgb,var(--a) 22%,transparent);border-color:var(--a)}\n .tax-id{display:grid;gap:7px;align-content:start}.tax-id small{color:var(--m);font-size:12px}.tax-id button{justify-self:start}\n h3{margin:20px 0 12px;padding-top:16px;border-top:1px solid var(--b);font-size:15px}\n .loc{display:grid;grid-template-columns:1.2fr 1.4fr .9fr .4fr .6fr auto auto;gap:10px;align-items:end;border-top:1px solid color-mix(in srgb,var(--b) 60%,transparent);padding:12px 0}\n .loc:first-of-type{border-top:0}\n .primary{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--m);white-space:nowrap;padding-bottom:12px}\n .remove{border:0;background:transparent;color:var(--m);font-size:20px;cursor:pointer;padding-bottom:8px}\n .add{border:1px solid var(--b);border-radius:var(--cr);background:var(--s);padding:10px 14px;color:var(--t);font:inherit;font-weight:700;cursor:pointer}\n .drop{display:grid;place-content:center;gap:6px;min-height:150px;border:2px dashed color-mix(in srgb,var(--m) 55%,transparent);border-radius:var(--cr);text-align:center;cursor:pointer;position:relative}\n .drop input{position:absolute;inset:0;opacity:0;cursor:pointer}\n .drop span{color:var(--m);font-size:13px}\n .w9-current{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid #9fd6b4;border-radius:var(--cr);background:#f3fcf6;padding:12px 14px;margin-bottom:14px}\n .w9-current span{color:var(--m);font-size:13px}\n .check{display:grid;gap:9px}\n .check-item{display:flex;align-items:center;gap:10px;border:1px solid var(--b);border-radius:var(--cr);padding:11px 14px}\n .check-item.complete{border-color:#9fd6b4;background:#f3fcf6}\n .check-item i{font-style:normal}\n .actions{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:20px}\n .actions>span{color:var(--m)}\n .save{min-width:170px;border:0;border-radius:var(--cr);background:var(--a);color:var(--ac);padding:12px 22px;font:inherit;font-weight:780;cursor:pointer}\n .save:disabled{opacity:.6;cursor:wait}\n .error{margin-top:14px;border-left:4px solid #c83c3c;border-radius:var(--cr);background:color-mix(in srgb,#c83c3c 8%,var(--s));padding:12px 14px;color:#c83c3c}\n .done-copy{color:#159447;font-weight:750}\n .muted{color:var(--m)}\n @media(max-width:820px){.grid{grid-template-columns:1fr}.span{grid-column:auto}.loc{grid-template-columns:1fr 1fr;align-items:center}}\n `],\n})\nexport class MindBillOrganizationOnboardingComponent implements OnInit {\n @Input() appearance: MindBillAngularAppearance = { preset: \"mindbill\" };\n @Input() sessionEndpoint = \"/api/mindbill/session\";\n @Input() getSession?: BillLifecycleSessionProvider;\n @Input() apiBaseUrl?: string;\n @Input() heading = \"Billing setup\";\n @Input() description = \"Practice identity, locations, and the W-9 — saved once, used on every bill.\";\n @Input() variant: \"onboarding\" | \"settings\" = \"onboarding\";\n @Output() saved$ = new EventEmitter<OrganizationProfileData>();\n @Output() completed = new EventEmitter<OrganizationProfileData>();\n @Output() organizationError = new EventEmitter<Error>();\n\n readonly steps: Array<{ id: StepId; label: string }> = [\n { id: \"practice\", label: \"Practice & billing\" },\n { id: \"locations\", label: \"Locations\" },\n { id: \"w9\", label: \"W-9\" },\n { id: \"review\", label: \"Review\" },\n ];\n\n profile: OrganizationProfileData | null = null;\n loadError = \"\";\n errorMessage = \"\";\n step: StepId = \"practice\";\n saving = false;\n saved: Record<string, boolean> = {};\n identity: OrganizationPracticeIdentity = { name: \"\", legalName: \"\", taxId: \"\", taxIdType: \"EIN\", npi: \"\", phone: \"\", email: \"\" };\n provider: OrganizationBillingProviderInput = { name: \"\", taxId: \"\", npi: \"\", billType: \"Professional\", phone: \"\", billingStreet: \"\", billingCity: \"\", billingState: \"\", billingZip: \"\" };\n locations: OrganizationLocationInput[] = [{ name: \"\", street: \"\", city: \"\", state: \"\", zip: \"\", isPrimary: false }];\n w9File: File | null = null;\n\n private readonly changeDetector = inject(ChangeDetectorRef);\n private completedFired = false;\n private client!: OrganizationClient;\n\n ngOnInit(): void {\n this.client = createOrganizationClient({\n sessionEndpoint: this.sessionEndpoint,\n ...(this.getSession ? { getSession: this.getSession } : {}),\n ...(this.apiBaseUrl ? { apiBaseUrl: this.apiBaseUrl } : {}),\n });\n this.client.getOrganization()\n .then((profile) => { this.loadError = \"\"; this.adoptProfile(profile); })\n .catch((error: unknown) => {\n const failure = error instanceof Error ? error : new Error(\"The organization could not be loaded.\");\n this.loadError = failure.message;\n this.organizationError.emit(failure);\n })\n .finally(() => this.changeDetector.markForCheck());\n }\n\n get themeStyle(): Record<string, string> {\n const base = THEME[this.appearance.preset ?? \"mindbill\"] ?? THEME[\"mindbill\"]!;\n return {\n \"--a\": this.appearance.accentColor ?? base[\"a\"]!, \"--ac\": this.appearance.accentTextColor ?? base[\"ac\"]!,\n \"--bg\": this.appearance.backgroundColor ?? base[\"bg\"]!, \"--s\": this.appearance.surfaceColor ?? base[\"s\"]!,\n \"--t\": this.appearance.textColor ?? base[\"t\"]!, \"--m\": this.appearance.mutedColor ?? base[\"m\"]!,\n \"--b\": this.appearance.borderColor ?? base[\"b\"]!, \"--r\": this.appearance.borderRadius ?? base[\"r\"]!,\n \"--cr\": this.appearance.controlRadius ?? base[\"cr\"]!, \"--font\": this.appearance.fontFamily ?? base[\"font\"]!,\n };\n }\n\n private adoptProfile(profile: OrganizationProfileData): void {\n this.profile = profile;\n this.identity = {\n name: profile.practiceIdentity.name ?? this.identity.name ?? '',\n legalName: profile.practiceIdentity.legalName ?? this.identity.legalName ?? '',\n taxId: profile.practiceIdentity.taxId ?? '',\n taxIdType: profile.practiceIdentity.taxIdType ?? 'EIN',\n taxIdLast4: profile.practiceIdentity.taxIdLast4 ?? '',\n taxIdConfigured: profile.practiceIdentity.taxIdConfigured ?? false,\n npi: profile.practiceIdentity.npi ?? this.identity.npi ?? '',\n phone: profile.practiceIdentity.phone ?? this.identity.phone ?? '',\n email: profile.practiceIdentity.email ?? this.identity.email ?? '',\n };\n if (profile.billingProviders[0]) this.provider = { billType: \"Professional\", ...profile.billingProviders[0] };\n if (profile.locations.length) this.locations = profile.locations.map((item) => ({ ...item }));\n if (profile.onboarding.complete && !this.completedFired) {\n this.completedFired = true;\n this.completed.emit(profile);\n }\n }\n\n addLocation(): void {\n this.locations.push({ name: \"\", street: \"\", city: \"\", state: \"\", zip: \"\", isPrimary: false });\n }\n\n setPrimary(index: number): void {\n this.locations = this.locations.map((item, itemIndex) => ({ ...item, isPrimary: itemIndex === index }));\n }\n\n w9Selected(event: Event): void {\n this.w9File = (event.target as HTMLInputElement).files?.[0] ?? null;\n }\n\n private async run(work: () => Promise<OrganizationProfileData>, stepId: StepId): Promise<void> {\n this.saving = true;\n this.errorMessage = \"\";\n try {\n const profile = await work();\n this.adoptProfile(profile);\n this.saved[stepId] = true;\n this.saved$.emit(profile);\n if (this.variant === \"onboarding\") {\n const order: StepId[] = [\"practice\", \"locations\", \"w9\", \"review\"];\n const next = order[order.indexOf(stepId) + 1];\n if (next) this.step = next;\n }\n } catch (error) {\n const failure = error instanceof Error ? error : new Error(\"Saving failed.\");\n this.errorMessage = failure.message;\n this.organizationError.emit(failure);\n } finally {\n this.saving = false;\n this.changeDetector.markForCheck();\n }\n }\n\n savePractice(): void {\n void this.run(() => this.client.saveBillingProfile({\n practiceIdentity: organizationTaxIdWrite(this.identity),\n ...(this.provider.id || this.provider.name.trim() || this.provider.taxId?.trim() || this.provider.npi.trim()\n ? { billingProviders: [organizationTaxIdWrite(this.provider)] }\n : {}),\n }), \"practice\");\n }\n\n setTaxIdType(value: OrganizationPracticeIdentity, type: 'EIN' | 'SSN'): void {\n if ((value.taxIdType ?? 'EIN') === type) return;\n value.taxIdType = type;\n this.clearTaxId(value);\n }\n\n clearTaxId(value: OrganizationPracticeIdentity): void {\n value.taxId = '';\n value.taxIdLast4 = '';\n value.taxIdConfigured = false;\n }\n\n saveLocations(): void {\n void this.run(() => this.client.saveLocations(this.locations.filter((item) => item.name.trim() || item.street.trim())), \"locations\");\n }\n\n saveW9(): void {\n void this.run(async () => {\n if (!this.w9File) throw new Error(\"Choose the practice W-9 PDF first.\");\n return this.client.saveW9({ filename: this.w9File.name, contentBase64: await fileToBase64(this.w9File) });\n }, \"w9\");\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["THEME"],"mappings":"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"}