Treatment billing
California fee calculator
Calculate an encounter using its service dates, location, provider, codes, modifiers, and applicable fee rules.
Access
The organization must have treatmentBilling enabled. Quote requests accept a server API key with bills:read, or an origin-bound browser session with bills:read. Credentials select the sandbox or live environment; the request body cannot override it.
Use a quote before creating a bill. It does not submit anything to a payer. Follow the authentication guide to keep your API key on your server.
Embed the calculator
npm install @mindbill/react@0.69.7 @mindbill/browser@0.43.5"use client";
import { useMemo } from "react";
import { createBillReferenceClient } from "@mindbill/browser";
import { FeeScheduleCalculator } from "@mindbill/react";
export default function CaliforniaFees() {
const client = useMemo(() => createBillReferenceClient({
getSession: async () => {
// Your backend authenticates the signed-in user and creates an
// origin-bound browser session with bills:read permission.
const response = await fetch("/api/mindbill/session", {
method: "POST",
});
if (!response.ok) throw new Error("Could not start a billing session");
return response.json(); // { token, expiresAt, ... }
},
}), []);
return <FeeScheduleCalculator client={client} />;
}FeeScheduleCalculator accepts multiple service lines, units, modifiers, service dates, and location/provider information. It displays the calculation details, regulatory links, coding findings, and review reasons returned by the same claim quote API.
Optional props are initialLines (typed as CaClaimFeeQuoteInput["lines"]), onQuote, appearance, className, and style. The form provides professional-service and physical-therapy context fields. Supply other specialty context through initialLines when your workflow already collects it; the form does not provide every specialty input. Use onQuote to receive the complete CaClaimFeeQuoteResult; inspect its status before using any amount.
Group imaging by the actual session
The calculator includes interpretation location and imaging session reference fields in FeeScheduleCalculator. Enter one encounter with all relevant imaging for the patient, physician or same provider group, and service dates, including services billed separately. Use the same opaque session reference only for services actually performed in the same session. A shared service date does not establish a shared session. Do not enter patient identifiers in the reference.
The calculator treats this full encounter as complete imaging context. If a host supplies completeSameDayImagingServices: false through initialLines, that explicit incomplete context remains under review. Editing a code, date, session, location, or another line removes the entire previous quote; calculate again after completing the encounter.
For direct API requests, provide actual professionalComponentContext.interpretationLocation, imagingSessionReference, and completeSameDayImagingServices on each relevant line, alongside claim-level completeDateOfServiceContext. Completeness must come from your encounter records. Session references contain 1–64 letters, digits, periods, underscores, colons, or hyphens, starting with a letter or digit. The SDK transports these facts without inferring a session or completeness.
The currently supported multiple-procedure calculation covers eligible 2026 professional-component imaging with modifier 26, one unit per distinct code, a physician, and the same physical interpretation location. The server checks the adopted procedure indicators, ranks each actual session, pays the highest eligible professional component at 100%, and applies 95% to subsequent eligible components, subject to the submitted charge. See §9789.17.1, multiple-procedure payment reductions.
For professional-component calculations, repeated codes, mixed global or technical components, different interpretation locations, hospital outpatient caps, and unsupported clinical facts remain review cases. Use the claim-level assessment and server-returned adjustment details. BillSubmissionForm continues to review potentially overlapping professional-service lines; its independent line estimates are not a completed multi-line imaging allowance.
Document technical MRI services
React 0.69.6 adds technical service fields when a line has modifier TC. Record whether your billing provider or group furnished the service, whether the patient was a hospital inpatient or outpatient, the actual supervision level, and the actual imaging session reference. Empty selections stay unknown; partially entered details must be completed before requesting a quote. These facts are not inferred from the service date or place of service.
Current automatic technical-component pricing is limited to distinct 70551, 72141, and 72148 services with modifier TC and one unit each, furnished by the billing physician or group in an office to a nonhospital patient, with a verified service ZIP and the reviewed July 2026 source edition. The server ranks each actual session at 100% for the highest eligible technical component and 50% for later components, subject to the submitted charge. A hospital outpatient cap must be nonbinding for this supported path. Purchased or outsourced services, hospital patients, repeated codes, mixed components, and unsupported facts remain review cases.
Direct API callers supply all five fields in technicalComponentContext: performedByBillingProviderGroup, patientHospitalStatus, supervisionLevel, imagingSessionReference, and completeSameDayImagingServices. Use the claim quote endpoint even for a single TC line. The calculator includes the entered full encounter; explicit host-supplied incomplete context stays incomplete. Editing any service fact clears the entire previous quote. Read the server's ranking, reductions, source references, and final claim assessment before using an estimate.
Document therapy in the bill form
React 0.69.4 adds service details for 97110 to BillSubmissionForm when treatmentBilling is enabled. Enter the provider type, actual direct one-on-one minutes, total visit minutes, pricing basis, care delivery, billing arrangement, hospital status, payment adjustments, and visits that day. Empty selections remain unknown; entering minutes does not imply that no assistant or fee agreement applies.
The form waits for these details before requesting an estimate. Clearing a detail removes the previous estimate. Existing serviceLines[].feeContext.therapyContext and hasFeeAgreement values are preserved when loading a bill. A negotiated agreement stays explicit in the request; the server determines whether a supported practice contract applies.
Include all services for the patient and date by the provider or group. Additional overlapping or unknown-date rows and date ranges require review; the bill form does not independently price several therapy rows as if each were the only service.
The verified calculation currently covers one office 97110 line personally performed by a physical therapist, with no modifier or GP, one visit, and one through four units with matching documented 15-minute intervals and total visit minutes. It requires no assistant, incident-to billing, hospital patient status, global-period adjustment, HPSA bonus, or negotiated fee agreement. Enter other circumstances truthfully and retain the resulting review outcome. Do not round actual minutes to obtain a price.
Initial physical therapy evaluations
React 0.69.7 adds 97161, 97162, and 97163 to the therapy details in both BillSubmissionForm and FeeScheduleCalculator. Choose the code supported by the documented evaluation complexity. These are untimed services: do not enter treatment minutes or choose a code based on visit duration.
Record whether an initial evaluation has already been billed in this treatment episode, including on earlier dates. The request uses therapyContext.priorInitialEvaluationInEpisode: false means no prior initial evaluation, true means one has already been billed, and an omitted value remains unknown. Unknown history and a prior initial evaluation require review. Clearing this fact removes the earlier estimate.
The verified initial-evaluation calculation covers July 1 through September 30, 2026: one unit, the sole service that day, one office visit personally performed by a physical therapist, with no modifier or GP and no prior initial evaluation in the episode. The same provider, care delivery, billing arrangement, hospital status, payment-adjustment, and fee-agreement facts described above are required. Timed treatment or another same-day service remains outside this sole-service calculation.
These details support the server's application of California therapy multiple-procedure and visit rules (§9789.15.4) and physical-therapist and hospital-patient rules (§9789.12.9). The selected dated sources determine whether a service date is supported. Codes beyond the supported 97110 and initial-evaluation paths, assistant reductions, partial timed-unit allocation, and joint multi-line therapy calculations still require review.
Document anesthesia in the bill form
React 0.69.2 adds structured anesthesia fields to BillSubmissionForm for organizations with treatment access. Pass treatmentBilling from your authenticated organization capability. These editors belong to the bill form; the calculator above still accepts specialty context supplied through initialLines.
Keep service quantity at 1. For documented personal performance, select AA, enter actual elapsed minutes, and record the qualifying circumstances. For physician medical direction, select QK and enter the complete overlapping case roster across all payers, the billed case, qualified anesthetists, directing physicians, direction activities, monitoring, availability intervals, and other patient services. Use opaque case references without patient names. Times are local to the service location; the billed interval determines elapsed minutes.
For monitored anesthesia care (MAC), add QS alongside AA or QK. Record medical necessity, physiological monitoring, preparedness to respond or convert, perioperative care, underlying procedure category, and provider relationship from the clinical record. Do not default confirmations to true. Incomplete edits invalidate the previous estimate.
The supported physician-direction calculation requires two through four concurrent cases and an eligible billed anesthetist. One-case direction, teaching, more than four cases, cataract or iridectomy, overnight billed cases, and overlapping other-patient-service exceptions may require review. Completing the form does not establish eligibility or override source and coding checks.
The form displays server-returned base and time units, actual minutes, locality, conversion factor, concurrency, base reduction, physician share, notes, and authority links. Forward the same anesthesiaContext in quotes and serviceLines[].feeContext.anesthesiaContext on the bill. The server recalculates the fee on submission. A quote amount is the total line amount; do not multiply it by minutes. Claim generation uses verified actual minutes, rather than converted time units.
Quote the complete encounter
POST /partner/v2/fee-quotes/ca/claim accepts up to 100 lines for one patient and one provider or group. Each line has a unique ID and its own date of service. Include all related services for the submitted dates so the engine can assess procedure-to-procedure edits, unit limits, and implemented multiple-procedure rules.
const response = await fetch(
"https://app.mindbill.org/partner/v2/fee-quotes/ca/claim",
{
method: "POST",
headers: {
Authorization: "Bearer " + process.env.MINDBILL_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
// True only when lines include all services for this patient,
// provider/group, and each submitted date. Derive from your records.
completeDateOfServiceContext: true,
lines: [{
id: "office-visit",
code: "99213",
dateOfService: "2026-08-25",
units: 1,
chargeCents: 15000,
modifiers: [],
serviceZip: "90012",
physicianContext: {
providerKind: "physician",
placeOfService: "11",
standaloneService: true,
globalPeriodApplies: false,
hpsaBonusEligible: false,
},
}],
}),
},
);
if (!response.ok) throw new Error("Fee quote request failed");
const { data: quote } = await response.json();
// A successful HTTP request can still need coding/source review.
if (quote.status === "requires_review") {
showReview(quote.lines, quote.claimEdits, quote.limitations);
} else {
showEstimate(quote.totals.estimatedPayableCents);
}The example describes one physician office visit with no related same-day services or global surgical package. Supply actual encounter facts. Multiple lines, telehealth, therapy, supplies, and drugs can require different context. Consult the OpenAPI input schemas for those fields.
The API's completeDateOfServiceContext describes the completeness of your data. Derive it from the encounter workflow; it does not require an extra user checkbox. Do not set clinical or coding facts to true merely to obtain a price.
Read the result before using an amount
The submitted context and implemented checks produced an estimate. Use the claim-level totals.estimatedPayableCents, and retain its supporting line assessments and citations.
A source, rule, or encounter detail could not be resolved. The complete payable total is null. Show the affected line findings and claim-edit reasons. pricedSubtotalCents covers resolved lines only and is not the allowance for the entire claim.
The result identifies an applicable rule under which the service has no separate payment. This is distinct from missing data or an unsupported calculation.
A line's base quote.status can be priced while its final assessment requires review after same-day edits. Read the final assessment and any paymentAdjustment. National Correct Coding Initiative (NCCI) procedure edits and Medically Unlikely Edits (MUE) operate on the encounter; adding modifier 59 or 25 does not automatically establish an exception.
claimEdits groups the screening by service date. source_unavailable means a required edition could not be verified. not_applicable means the lines are outside that implemented screening scope; it is not a statement that no coding edits apply.
Effective dates and source evidence
The server selects adopted source editions using the actual service date, including effective dates within a calendar quarter. For a priced physician calculation, calculation can expose the relative value units, geographic factors, California conversion factor, setting, provider percentage, CMS indicators, and rounding. Other supported categories can return their own feeBreakdown.
Display provenance alongside the result. Downloaded source records include their effective interval and may include a SHA-256 content hash; regulatory citations can be undated. Claim-edit provenance records the selected adoptions and source editions separately. Do not substitute today's rates for an unavailable historical edition.
Source monitoring detects government changes. A detected update must pass the relevant parsing, adoption-date, and validation checks before it can price services. Newly published regulations or files do not imply immediate coverage of every rule.
Carry the context into the bill
The claim calculator estimates statutory fees and does not accept practice or payer identity overrides. For a single-line practice-aware quote, use POST /partner/v2/fee-quotes with authorized provider/payer IDs.
When creating a professional bill, include the applicable serviceLines[].feeContext. The server takes code, units, modifiers, dates, charge, provider/payer identity, and service location from the bill and verifies the fee again. Unresolved verification returns 422 bill_fee_requires_review. A calculator result is not an authorization token or a caller-controlled allowance.
Explicit manual charges remain supported for some professional services without feeContext. Those charges are not verified statutory allowances. See the treatment bill example for the context fields and dollar-based bill charges.