@mindbill/angular 0.6.0 → 0.6.1
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.
|
@@ -859,7 +859,7 @@ class MindBillBillSubmissionComponent {
|
|
|
859
859
|
@if (errorMessage) { <div class="error" role="alert">{{ errorMessage }}</div> }
|
|
860
860
|
<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>
|
|
861
861
|
</form>
|
|
862
|
-
`, isInline: true, styles: [":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{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}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;cursor:pointer}.quick .on{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.line-head,.service-line{display:grid;grid-template-columns:1.7fr 1.5fr .55fr .75fr 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{gap:4px}.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}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.dropzone span{color:var(--m);font-weight:450}.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}@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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.CurrencyPipe, name: "currency" }] });
|
|
862
|
+
`, isInline: true, styles: [":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{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>datalist{flex:0 0 100%}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;cursor:pointer}.quick .on{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.line-head,.service-line{display:grid;grid-template-columns:1.7fr 1.5fr .55fr .75fr 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{gap:4px}.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}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.dropzone span{color:var(--m);font-weight:450}.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}@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"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.CurrencyPipe, name: "currency" }] });
|
|
863
863
|
}
|
|
864
864
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImport: i0, type: MindBillBillSubmissionComponent, decorators: [{
|
|
865
865
|
type: Component,
|
|
@@ -941,7 +941,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.22", ngImpo
|
|
|
941
941
|
@if (errorMessage) { <div class="error" role="alert">{{ errorMessage }}</div> }
|
|
942
942
|
<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>
|
|
943
943
|
</form>
|
|
944
|
-
`, styles: [":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{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}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;cursor:pointer}.quick .on{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.line-head,.service-line{display:grid;grid-template-columns:1.7fr 1.5fr .55fr .75fr 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{gap:4px}.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}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.dropzone span{color:var(--m);font-weight:450}.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}@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"] }]
|
|
944
|
+
`, styles: [":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{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>datalist{flex:0 0 100%}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;cursor:pointer}.quick .on{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.line-head,.service-line{display:grid;grid-template-columns:1.7fr 1.5fr .55fr .75fr 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{gap:4px}.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}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.dropzone span{color:var(--m);font-weight:450}.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}@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"] }]
|
|
945
945
|
}], propDecorators: { initialBill: [{
|
|
946
946
|
type: Input
|
|
947
947
|
}], attachments: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mindbill-angular.mjs","sources":["../../src/lib/lifecycle-store.ts","../../src/lib/bill-lifecycle.component.ts","../../src/lib/procedure-lines.ts","../../src/lib/billing-dashboard.component.ts","../../src/lib/bill-submission.component.ts","../../src/lib/billing-management-button.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 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 submitSecondReview(input: SubmitSecondReviewInput) { return this.mutate(() => this.requireClient().submitSecondReview(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","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, effect } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport type { BillLifecycleData, BillLifecycleSessionProvider } from \"@mindbill/browser\";\nimport { MindBillLifecycleStore } from \"./lifecycle-store\";\n\nexport type MindBillAngularThemePreset = \"mindbill\" | \"qme-companion\" | \"orange-bright\" | \"clinical-blue\";\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};\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\" },\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\" },\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\" },\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\" },\n};\n\n@Component({\n selector: \"mindbill-bill-lifecycle\",\n standalone: true,\n imports: [CommonModule, FormsModule],\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 <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 <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 & 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>Submission, payer responses, follow-up, and payments.</p></div><span>{{ data.activity.length }}</span></div><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></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 }\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{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 `],\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\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 const base = THEMES[this.appearance.preset ?? \"mindbill\"];\n return { \"--a\": this.appearance.accentColor ?? base.accentColor, \"--ac\": this.appearance.accentTextColor ?? base.accentTextColor, \"--bg\": this.appearance.backgroundColor ?? base.backgroundColor, \"--s\": this.appearance.surfaceColor ?? base.surfaceColor, \"--t\": this.appearance.textColor ?? base.textColor, \"--m\": this.appearance.mutedColor ?? base.mutedColor, \"--b\": this.appearance.borderColor ?? base.borderColor, \"--r\": this.appearance.borderRadius ?? base.borderRadius, \"--cr\": this.appearance.controlRadius ?? base.controlRadius, \"--font\": this.appearance.fontFamily ?? base.fontFamily };\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 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 { if (action === \"post_payment\") this.panel = \"payment\"; else if (action === \"second_review\" || action === \"independent_bill_review\") this.panel = \"review\"; else if (action === \"close\") this.panel = \"close\"; else if (action === \"view_eor\" && data.eors[0]) void this.openEor(data.eors[0].id, data.eors[0].filename); }\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, disputedAmount: this.review.disputedAmount > 0 ? this.review.disputedAmount : undefined, 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 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","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 { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport {\n createBillReferenceClient,\n createBillSubmissionClient,\n type BillDiagnosisCode,\n type BillLifecycleSessionProvider,\n type BillReviewPayer,\n type BrowserBillCreateInput,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionInput,\n type BrowserBillSubmissionResult,\n} from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\n\nexport type MindBillSubmissionAttachment = Omit<BrowserBillSubmissionDocument, \"contentBase64\"> & {\n contentBase64?: string;\n contentUrl?: string;\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 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],\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><input name=\"dob\" [(ngModel)]=\"bill.patient.dateOfBirth\" placeholder=\"MM/DD/YYYY\" inputmode=\"numeric\"></label>\n <label>Phone (optional)<input name=\"phone\" [(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\"></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 & claim</legend><div class=\"grid\">\n <label [class.invalid]=\"bad('service.date')\">Date of service <b>*</b><input name=\"dos\" [(ngModel)]=\"bill.service.date\" placeholder=\"MM/DD/YYYY\" inputmode=\"numeric\"></label>\n <label [class.invalid]=\"bad('claim.dateOfInjury')\">Date of injury <b>*</b><input name=\"doi\" [(ngModel)]=\"bill.claim.dateOfInjury\" placeholder=\"MM/DD/YYYY\" inputmode=\"numeric\"></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 <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 (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 & 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\"></label>\n <label [class.invalid]=\"bad('billingProvider.phone')\">Billing phone <b>*</b><input name=\"billingPhone\" [(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\"></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\"></label>\n <label class=\"wide\" [class.invalid]=\"bad('renderingProvider.taxonomy')\">Rendering taxonomy <b>*</b><input name=\"taxonomy\" [(ngModel)]=\"bill.renderingProvider.taxonomy\" list=\"mb-taxonomies\" placeholder=\"Search by code or specialty\"><datalist id=\"mb-taxonomies\">@for (item of taxonomyOptions; track item.code) { <option [value]=\"item.code\">{{ item.description }}</option> }</datalist></label>\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\"></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\"></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>Units *</span><span>Allowed</span><span></span></div>\n @for (line of bill.serviceLines; track $index; let index = $index) { <div class=\"service-line\">\n <label><span class=\"mobile-label\">Procedure</span><input [name]=\"'code'+index\" [(ngModel)]=\"line.code\" (ngModelChange)=\"ensureTrailingLine()\" list=\"mb-procedures\" placeholder=\"Code…\"><small>{{ procedureDescription(line.code) }}</small></label>\n <label><span class=\"mobile-label\">Modifiers</span><select [name]=\"'modifier'+index\" [ngModel]=\"line.modifiers?.[0] || ''\" (ngModelChange)=\"setModifier(index,$event)\"><option value=\"\">Add modifier…</option>@for (item of modifierOptions; track item.code) { <option [value]=\"item.code\">–{{ item.code }} · {{ item.description }}</option> }</select></label>\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 <datalist id=\"mb-procedures\">@for (item of procedureOptions; track item.code) { <option [value]=\"item.code\">{{ item.description }}</option> }</datalist>\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\"><input type=\"file\" accept=\"application/pdf,.pdf\" multiple (change)=\"filesSelected($event)\"><strong>Drop additional PDF files here, or click to choose</strong><span>PDF supporting documents are sent with this immutable submission.</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 </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{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}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;cursor:pointer}.quick .on{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.line-head,.service-line{display:grid;grid-template-columns:1.7fr 1.5fr .55fr .75fr 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{gap:4px}.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}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.dropzone span{color:var(--m);font-weight:450}.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() 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 diagnosisQuery = \"\";\n diagnosisResults: BillDiagnosisCode[] = [];\n diagnosisOffset = 0;\n diagnosisBusy = false;\n submitting = false;\n errorMessage = \"\";\n invalidFields = new Set<string>();\n readonly quickDiagnoses = QUICK_DIAGNOSES;\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 }\n if (changes[\"attachments\"]) this.workingAttachments = this.attachments.map((item) => ({ ...item }));\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 referenceClient() {\n return createBillReferenceClient({ sessionEndpoint: this.sessionEndpoint, ...(this.getSession ? { getSession: this.getSession } : {}), ...(this.apiBaseUrl ? { apiBaseUrl: this.apiBaseUrl } : {}) });\n }\n\n postalChanged(value: string): void {\n clearTimeout(this.postalTimer);\n if (!/^\\d{5}(?:-\\d{4})?$/.test(value.trim())) return;\n this.postalTimer = setTimeout(async () => {\n try {\n const place = await this.referenceClient().lookupPostalCode(value);\n if (place) { this.bill.patient.address.city = place.city; this.bill.patient.address.state = place.state; this.billChange.emit(this.bill); }\n } catch { /* City/state remain editable when reference lookup is unavailable. */ }\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; }\n }, 180);\n }\n\n selectPayer(payer: BillReviewPayer): void {\n this.bill.claim.claimsAdministrator = { id: payer.id, name: payer.name };\n this.payerQuery = payer.name;\n this.payerResults = [];\n this.invalidFields.delete(\"claim.claimsAdministrator\");\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; }\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 setModifier(index: number, value: string): void { this.bill.serviceLines[index]!.modifiers = value ? [value] : []; this.billChange.emit(this.bill); }\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 async filesSelected(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []).filter((file) => file.type === \"application/pdf\" || file.name.toLowerCase().endsWith(\".pdf\"));\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 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 previewAttachment(attachment: MindBillSubmissionAttachment): void { if (attachment.contentUrl) window.open(attachment.contentUrl, \"_blank\", \"noopener,noreferrer\"); else if (attachment.contentBase64) window.open(`data:application/pdf;base64,${attachment.contentBase64}`, \"_blank\", \"noopener,noreferrer\"); }\n\n bad(path: string): boolean { return this.invalidFields.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\", 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\", this.bill.service.date], [\"claim.dateOfInjury\", this.bill.claim.dateOfInjury], [\"claim.claimNumber\", this.bill.claim.claimNumber], [\"claim.employer\", this.bill.claim.employer],\n [\"claim.claimsAdministrator\", this.bill.claim.claimsAdministrator.id], [\"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.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.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; }\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, 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\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.failed.emit(error);\n } finally {\n this.loading = false;\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","/**\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/bill-lifecycle.component.ts","../../src/lib/procedure-lines.ts","../../src/lib/billing-dashboard.component.ts","../../src/lib/bill-submission.component.ts","../../src/lib/billing-management-button.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 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 submitSecondReview(input: SubmitSecondReviewInput) { return this.mutate(() => this.requireClient().submitSecondReview(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","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, effect } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport type { BillLifecycleData, BillLifecycleSessionProvider } from \"@mindbill/browser\";\nimport { MindBillLifecycleStore } from \"./lifecycle-store\";\n\nexport type MindBillAngularThemePreset = \"mindbill\" | \"qme-companion\" | \"orange-bright\" | \"clinical-blue\";\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};\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\" },\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\" },\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\" },\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\" },\n};\n\n@Component({\n selector: \"mindbill-bill-lifecycle\",\n standalone: true,\n imports: [CommonModule, FormsModule],\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 <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 <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 & 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>Submission, payer responses, follow-up, and payments.</p></div><span>{{ data.activity.length }}</span></div><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></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 }\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{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 `],\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\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 const base = THEMES[this.appearance.preset ?? \"mindbill\"];\n return { \"--a\": this.appearance.accentColor ?? base.accentColor, \"--ac\": this.appearance.accentTextColor ?? base.accentTextColor, \"--bg\": this.appearance.backgroundColor ?? base.backgroundColor, \"--s\": this.appearance.surfaceColor ?? base.surfaceColor, \"--t\": this.appearance.textColor ?? base.textColor, \"--m\": this.appearance.mutedColor ?? base.mutedColor, \"--b\": this.appearance.borderColor ?? base.borderColor, \"--r\": this.appearance.borderRadius ?? base.borderRadius, \"--cr\": this.appearance.controlRadius ?? base.controlRadius, \"--font\": this.appearance.fontFamily ?? base.fontFamily };\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 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 { if (action === \"post_payment\") this.panel = \"payment\"; else if (action === \"second_review\" || action === \"independent_bill_review\") this.panel = \"review\"; else if (action === \"close\") this.panel = \"close\"; else if (action === \"view_eor\" && data.eors[0]) void this.openEor(data.eors[0].id, data.eors[0].filename); }\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, disputedAmount: this.review.disputedAmount > 0 ? this.review.disputedAmount : undefined, 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 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","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 { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport {\n createBillReferenceClient,\n createBillSubmissionClient,\n type BillDiagnosisCode,\n type BillLifecycleSessionProvider,\n type BillReviewPayer,\n type BrowserBillCreateInput,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionInput,\n type BrowserBillSubmissionResult,\n} from \"@mindbill/browser\";\nimport type { MindBillAngularAppearance } from \"./bill-lifecycle.component\";\n\nexport type MindBillSubmissionAttachment = Omit<BrowserBillSubmissionDocument, \"contentBase64\"> & {\n contentBase64?: string;\n contentUrl?: string;\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 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],\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><input name=\"dob\" [(ngModel)]=\"bill.patient.dateOfBirth\" placeholder=\"MM/DD/YYYY\" inputmode=\"numeric\"></label>\n <label>Phone (optional)<input name=\"phone\" [(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\"></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 & claim</legend><div class=\"grid\">\n <label [class.invalid]=\"bad('service.date')\">Date of service <b>*</b><input name=\"dos\" [(ngModel)]=\"bill.service.date\" placeholder=\"MM/DD/YYYY\" inputmode=\"numeric\"></label>\n <label [class.invalid]=\"bad('claim.dateOfInjury')\">Date of injury <b>*</b><input name=\"doi\" [(ngModel)]=\"bill.claim.dateOfInjury\" placeholder=\"MM/DD/YYYY\" inputmode=\"numeric\"></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 <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 (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 & 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\"></label>\n <label [class.invalid]=\"bad('billingProvider.phone')\">Billing phone <b>*</b><input name=\"billingPhone\" [(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\"></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\"></label>\n <label class=\"wide\" [class.invalid]=\"bad('renderingProvider.taxonomy')\">Rendering taxonomy <b>*</b><input name=\"taxonomy\" [(ngModel)]=\"bill.renderingProvider.taxonomy\" list=\"mb-taxonomies\" placeholder=\"Search by code or specialty\"><datalist id=\"mb-taxonomies\">@for (item of taxonomyOptions; track item.code) { <option [value]=\"item.code\">{{ item.description }}</option> }</datalist></label>\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\"></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\"></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>Units *</span><span>Allowed</span><span></span></div>\n @for (line of bill.serviceLines; track $index; let index = $index) { <div class=\"service-line\">\n <label><span class=\"mobile-label\">Procedure</span><input [name]=\"'code'+index\" [(ngModel)]=\"line.code\" (ngModelChange)=\"ensureTrailingLine()\" list=\"mb-procedures\" placeholder=\"Code…\"><small>{{ procedureDescription(line.code) }}</small></label>\n <label><span class=\"mobile-label\">Modifiers</span><select [name]=\"'modifier'+index\" [ngModel]=\"line.modifiers?.[0] || ''\" (ngModelChange)=\"setModifier(index,$event)\"><option value=\"\">Add modifier…</option>@for (item of modifierOptions; track item.code) { <option [value]=\"item.code\">–{{ item.code }} · {{ item.description }}</option> }</select></label>\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 <datalist id=\"mb-procedures\">@for (item of procedureOptions; track item.code) { <option [value]=\"item.code\">{{ item.description }}</option> }</datalist>\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\"><input type=\"file\" accept=\"application/pdf,.pdf\" multiple (change)=\"filesSelected($event)\"><strong>Drop additional PDF files here, or click to choose</strong><span>PDF supporting documents are sent with this immutable submission.</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 </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{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>datalist{flex:0 0 100%}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;cursor:pointer}.quick .on{border-color:var(--a);color:var(--a);background:color-mix(in srgb,var(--a) 8%,var(--s))}.line-head,.service-line{display:grid;grid-template-columns:1.7fr 1.5fr .55fr .75fr 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{gap:4px}.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}.dropzone input{position:absolute;inset:0;opacity:0;cursor:pointer}.dropzone span{color:var(--m);font-weight:450}.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() 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 diagnosisQuery = \"\";\n diagnosisResults: BillDiagnosisCode[] = [];\n diagnosisOffset = 0;\n diagnosisBusy = false;\n submitting = false;\n errorMessage = \"\";\n invalidFields = new Set<string>();\n readonly quickDiagnoses = QUICK_DIAGNOSES;\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 }\n if (changes[\"attachments\"]) this.workingAttachments = this.attachments.map((item) => ({ ...item }));\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 referenceClient() {\n return createBillReferenceClient({ sessionEndpoint: this.sessionEndpoint, ...(this.getSession ? { getSession: this.getSession } : {}), ...(this.apiBaseUrl ? { apiBaseUrl: this.apiBaseUrl } : {}) });\n }\n\n postalChanged(value: string): void {\n clearTimeout(this.postalTimer);\n if (!/^\\d{5}(?:-\\d{4})?$/.test(value.trim())) return;\n this.postalTimer = setTimeout(async () => {\n try {\n const place = await this.referenceClient().lookupPostalCode(value);\n if (place) { this.bill.patient.address.city = place.city; this.bill.patient.address.state = place.state; this.billChange.emit(this.bill); }\n } catch { /* City/state remain editable when reference lookup is unavailable. */ }\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; }\n }, 180);\n }\n\n selectPayer(payer: BillReviewPayer): void {\n this.bill.claim.claimsAdministrator = { id: payer.id, name: payer.name };\n this.payerQuery = payer.name;\n this.payerResults = [];\n this.invalidFields.delete(\"claim.claimsAdministrator\");\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; }\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 setModifier(index: number, value: string): void { this.bill.serviceLines[index]!.modifiers = value ? [value] : []; this.billChange.emit(this.bill); }\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 async filesSelected(event: Event): Promise<void> {\n const input = event.target as HTMLInputElement;\n const files = Array.from(input.files ?? []).filter((file) => file.type === \"application/pdf\" || file.name.toLowerCase().endsWith(\".pdf\"));\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 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 previewAttachment(attachment: MindBillSubmissionAttachment): void { if (attachment.contentUrl) window.open(attachment.contentUrl, \"_blank\", \"noopener,noreferrer\"); else if (attachment.contentBase64) window.open(`data:application/pdf;base64,${attachment.contentBase64}`, \"_blank\", \"noopener,noreferrer\"); }\n\n bad(path: string): boolean { return this.invalidFields.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\", 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\", this.bill.service.date], [\"claim.dateOfInjury\", this.bill.claim.dateOfInjury], [\"claim.claimNumber\", this.bill.claim.claimNumber], [\"claim.employer\", this.bill.claim.employer],\n [\"claim.claimsAdministrator\", this.bill.claim.claimsAdministrator.id], [\"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.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.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; }\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { Component, EventEmitter, 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\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.failed.emit(error);\n } finally {\n this.loading = false;\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["THEME"],"mappings":"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"}
|