Surgery Partners patient access demo¶
Status: Preview verified | Last reviewed: 2026-10-07
The shared-API regression passed on 2026-10-07: native outbound call and accepted handoff, human catalogue sends, patient callback selection, response-driven Copilot guidance, immutable Conversation snapshots/reload, Salesforce Event and Task creation, idempotent booking retry, calendar download and wrap-up. The run used synthetic patient audio/data and the native opt-in authentication simulation. It exercised the live Preview transport and Salesforce sandbox, not a PSTN call.
The current build covers the initial outbound Voice Agent call, accepted transfer, and live human call with Copilot. It follows the reviewed recording script. The later financial counselor call, surgery booking, clinical preparation, signatures, payment plans and payment collection are outside this build.
Studio assets¶
| Asset | Local tenant resource |
|---|---|
| Voice Agent | 4701 — Surgery Partners · Patient Access |
| Copilot | 4702 — Surgery Partners · Patient Access Copilot |
| Preview patient voice | 4718 — Surgery Partners · Daniel rehearsal caller |
| Scene Agent | 4762 — Surgery Partners · Outbound call scene |
| Patient catalog | surgery-partners-patient |
| Representative catalog | surgery-partners-assist |
| Scene catalog | surgery-partners-scene |
| Branding | Surgery Partners · Patient coordination |
| Voice tools | surgery_partners_voice |
| Copilot tools | surgery_partners_assist |
The IDs above belong to the local Vanguard trueserve tenant. The installer
uses the tenant and integration constants in model.ts and definition.ts;
configure these before using another environment. Within this tenant it
resolves named assets and writes IDs to private installation receipts.
It preserves unrelated agents, catalogs and integrations.
The outbound agent uses GPT Live with a GPT-5.6 Terra client backend. The voice owns
the greeting and privacy question. The backend returns the configured silent
token VOICE_HANDLED for name confirmation, then owns messaging permission,
the authenticated workflow and subsequent task questions. A silent
completion is not another patient answer. This explicit division prevents the
backend from repeating the voice's privacy question after a premature link
announcement. The original recording exposed that overlap despite instructions
asking the voice to remain silent. Later screen actions wait for spoken
instructions to finish. The card-review tool updates the existing screen;
the backend gives the patient a spoken confirmation instruction without
creating another surface. Render payloads remain display-tool arguments.
Editable Scene copy¶
Surgery Partners · Outbound call scene (4762) opens at
/agents/4762/director. Its source is Voice Agent 4701:v20; the Scene owns
its script, branding snapshot and generated audio. It covers opening and
permission, verification and connection, insurance-card review, and the
out-of-network handoff. The representative conversation remains in the live
Copilot demo.
scripts/surgery-partners/scene-definition.ts creates the initial script.
Details tokens share patient and provider values between speech and screens.
Verification follows the identity instruction, and the planning component
appears at the spoken word “upload.” Ordinary lines and taps use ripple timing.
The default voices are ElevenLabs Sarah for Morgan and Brian for Daniel; all
selected takes are saved and editable in Director.
The surgery-partners-scene catalog exposes SurgeryScenePlan, with upload,
photo, review, confirmed and coverage states. Its buttons change local
presentation, allowing Director to capture and replay taps. It has no
conversation lookup, fetch, upload or Salesforce write path. The installer
copies the existing Surgery Partners stylesheet into its isolated workspace,
then adds Scene-specific theme bindings. Director supplies the branded header;
the component does not duplicate it. The live patient catalog and its verified
server-state contract remain separate.
With FEATURE_SCENE_AGENTS=true in the local ai-manager environment:
bash .devcontainer/scripts/with-env.sh -- bash -c \
'cd apps/ai-manager && npx tsx scripts/surgery-partners/create-scene.ts --apply'
bash .devcontainer/scripts/with-env.sh -- bash -c \
'cd apps/ai-manager && npx tsx scripts/surgery-partners/verify-scene.ts'
The first command creates the Scene through /api/director/scenes, saves the
script with revision checks, and generates each missing take through the normal
audio API. Its private scene/scene.json receipt lets retries resume the same
project without replacing saved edits or regenerating matching audio. Add
--publish-catalog only when changing Scene component source; an existing
Scene keeps its pinned version until updated in Director.
The browser check edits and restores a spoken line and its pause, captures a
phone tap and undoes it, seeks through verification and card confirmation in
both directions, checks saved playback after reload, and exports through the
Director UI. It verifies that playback generates no new audio and invokes no
live patient endpoints. Evidence, screenshots, the saved document and the MP4
live under .local-data/surgery-partners/scene/.
prepare-scene-delivery.ts verifies the actual export's codecs, duration,
spoken order and both speakers, then creates a standalone player with
Open Scene in Director and Download MP4 links. Decoded browser audio
is checked during both voices and the closing.
Validation on 2026-10-07 passed with 14 saved voice takes and a 94.823-second H.264/AAC export. Script and pause editing, captured taps and undo, backward seeking, reload and export passed in the browser. The exported audio matches the selected takes for both roles and plays audibly in the standalone player.
Data and repeatability¶
All people, facilities, insurers, clinical details, prices and appointments are fictional. The live connection is the existing DevSDO Salesforce sandbox. There is no live payer eligibility, authorization, payment or calendar-capacity integration.
| Salesforce record | Use |
|---|---|
| Person Account and its Contact | Daniel Reed's identity and patient relationship |
| MemberPlan and payer Account | Recorded synthetic Harbor Health PPO eligibility and identifiers |
| Facility Account; surgeon and counselor Contacts | Riverside Spine Hospital, Dr. Maya Chen and Jordan Lee |
| Source Case | Typed scenario document in Description: surgical plan, network evidence, estimate and counselor windows |
| Child Case per voice conversation | This rehearsal's insurance work, handoff and outcome |
| Task | Consult/insurance history; authorization and agreement review assignments; counselor callback |
| Event | Confirmed financial counseling window |
| VoiceCall, when using live contact-center ingress | Relationship between the human conversation and its interaction Case |
The source Case is keyed by sp:episode:daniel:spine. Each new voice session
gets sp:run:<conversation UUID>. Event and Task external keys include that
UUID; retries reconcile existing relationships and times instead of creating
another booking. New rehearsals preserve old records and need no reset.
Seeding uses additive lookup/create operations and does not overwrite a
presenter's edits.
The fixed scenario occurs on October 14, 2026, with callback choices on October 15, and planned surgery on October 28. All displayed windows are Eastern. Recorded creation/audit times remain actual times.
Callback capacity is synthetic and partitioned by rehearsal. Jordan Lee is a fictional counselor Contact; Event/Task ownership is the configured integration user, recorded in the source scenario. This demonstrates a persisted assignment, not access to Jordan's production scheduling calendar.
The Daniel voice is a rehearsal aid for Studio's Copilot tester. It has no Salesforce tools and is not published to a contact-center integration.
The $8,500 estimate assumes $5,000 remaining deductible and $3,500 coinsurance. It remains conditional on the hospital arrangement and benefit treatment. Internal review Tasks are neither payer submissions nor authorization approvals.
Human-controlled patient components¶
SurgeryWorkspace and SurgerySupportCue offer Send estimate to patient
and Send callback choices. These are authenticated actions, not model
instructions to pretend a component was delivered.
They now use the shared customer-components API.
The Surgery Partners handler supplies verified screen data and enforces its
callback rules; shared code owns delivery, responses, receipts and Conversation
history. The catalog uses dispatchAction for both directions. Its older
interaction route rejects send and select_slot with 410.
- The Surface BFF selects the signed embed cookie matching the conversation.
- Studio verifies tenant, agent, role, patient verification, and the reciprocal link between original voice and current human conversations.
- The action locks the original interaction and checks its revision and idempotency receipt.
- The server persists the new patient view and native A2UI events on the original patient conversation.
- Events are published to both UUID and transport session stream aliases. Authenticated polling and stored event replay recover a disconnected screen.
The Connected indicator uses the authenticated patient screen's 15-second heartbeat, independently of the ended voice transport. It shows a recently open screen, not proof that the patient read or approved the displayed content.
Ending the AI leg does not terminate this administrative patient plan while its linked representative call remains active. Patient selection flows through the same API and appears in the representative's workspace. Book callback creates an all-or-none Salesforce Event/Task pair, reads it back, and then displays confirmation. A Preview call also receives a durable demo phone notification. A live call receives the patient-plan confirmation; this build does not claim carrier SMS delivery for that confirmation.
Shared patient links cannot invoke representative actions. Patient actions cannot supply a different Salesforce record, mark a booking complete, or choose a screen. Stale requests fail with a refresh message. Retrying the identical action returns the existing result; reusing its ID for another action fails.
The catalog uses direct patient headings and one instruction per action. After
card extraction, Replace card photos folds away the upload controls.
Estimate details, Call notes, and Medications expand on demand.
The estimate's uncertainty and required patient confirmations stay visible.
Copilot shows a suggested reply and its send action; the model's explanatory
reason remains in the audit payload. Guidance prompts limit headings to six
words and replies to two sentences and 45 words. Product screens omit demo
narration, slogans and Salesforce implementation details.
Verification and handoff¶
Patient access requires successful native authentication audit evidence bound
to Daniel's Salesforce identity. A spoken name, session variable, or model claim
is insufficient. Native Simulate in Preview is enabled for repeat rehearsal;
its result is honored only when the conversation's persisted is_test is true.
It never counts as real assurance for a live call.
Card upload uses the existing conversation attachment API. Only two different images belonging to this conversation can be read. Vision extraction compares the payer, member ID and group with MemberPlan. A matching extraction still requires the patient's These details are correct action.
The native Studio phone renders the same catalog without a Surface iframe.
Its /api/surgery-partners/interactions/{conversationId} BFF requires a
registered phone owner matching the Studio user and tenant, the Surgery
Partners Voice Agent, a persisted test conversation, and native patient
verification. It always assigns the patient role, even when the Studio user
is an administrator. /api/phone/conversations/{conversationId}/images
forwards bounded image uploads with the registered conversation's signed
scope. /api/conversations/{conversationId}/images is the catalog-compatible
alias and enforces the same ownership. Neither route accepts an unregistered
conversation ID.
The transfer tool evaluates the actual latest caller response against the preceding question. Frustration alone is not acceptance. Explicit early requests for a representative are honored with an accurate partial handoff.
Preview Copilot sessions supply related_conversation_id as a session variable.
The Copilot tool binds it to original_conversation_id; the runtime does not
persist arbitrary template variables in conversation metadata. Both sessions
must be persisted test conversations, with a verified patient and accepted
handoff. Once attached, the reciprocal relationship is persisted and locked
to that representative session. Live sessions resolve a
Salesforce VoiceCall whose VendorCallKey identifies the human session and whose
RelatedRecordId points to the original interaction Case. A guessed variable
cannot attach a Preview session to a live patient call.
An interrupted test representative session can be reopened against the same accepted test handoff. The prior human session must have ended, the interaction must remain incomplete, and all three conversations must be test records. Prior representative IDs remain in the audit metadata; reciprocal authorization prevents the old session from continuing to control the plan. Active or live human calls cannot be taken over this way.
After booking, the callback suggestion offers Send confirmation. The API rejects stale requests to reopen callback choices for an already booked interaction.
Genesys is the preferred contact-center integration. Publishing an agent against that integration is distinct from configuring an outbound campaign, queue, Architect transfer flow and Salesforce VoiceCall mapping. Preserve existing Takeda and other telephone routes.
Install and validate¶
From the repository root:
python apps/ai-manager/scripts/surgery-partners/make-card-fixtures.py
bash .devcontainer/scripts/with-env.sh -- bash -c \
'cd apps/ai-manager && npx tsx scripts/surgery-partners/seed.ts --apply'
bash .devcontainer/scripts/with-env.sh -- bash -c \
'cd apps/ai-manager && npx tsx scripts/surgery-partners/install.ts --apply'
bash .devcontainer/scripts/with-env.sh -- bash -c \
'cd apps/ai-manager && npx tsx scripts/surgery-partners/preflight.ts'
bash .devcontainer/scripts/with-env.sh -- bash -c \
'cd apps/ai-manager && npx tsx scripts/surgery-partners/rehearsal.ts --simulate-auth'
The card generator uses Pillow and the bundled brand fonts. Isolated behavioral
checks run with npx tsx scripts/surgery-partners/model-evals.ts under the same
environment wrapper. These separately exercise transfer consent, secondary
insurance reconciliation, and Copilot guidance.
Use model-evals.ts --copilot-only after guidance-copy changes to check the
four Copilot scenarios three times, including headline and reply length.
Results go to copy-model-evals.json without replacing the full suite's evidence.
install.ts --apply --publish additionally uses Studio's normal publish API.
For a voice-only revision, publish-voice.ts --apply validates the editor
configuration, updates that draft, and publishes through the same API. It
preserves the Copilot and rehearsal-caller versions.
Catalog publishing first runs a TypeScript check against the installed React and
icon declarations. A successful bundle alone does not establish that every
screen can render.
The rehearsal uses native Preview gRPC, real STT/voice/model calls, a browser
and real Salesforce writes. Synthetic caller audio and demo notification
delivery do not exercise PSTN or a live Genesys representative.
Private receipts, screenshots, transcripts and browser video are written under
.local-data/surgery-partners/. Never check in embed tokens, authentication
links, browser sessions or integration credentials.
inspect-studio.ts checks the real Studio Suggestions / Workspace switch
and selection of the Daniel stand-in. privacy-rehearsal.ts runs short native
audio regressions without completing identity verification.
standin-rehearsal.ts checks that Daniel voices the cost concern and prefers a
later counselor conversation while staying in the patient role.
After a successful fresh rehearsal, run
python apps/ai-manager/scripts/surgery-partners/render-rehearsal.py from the
repository root to compose the actual browser videos and captured Preview PCM
into an MP4. Opening and closing silence are trimmed. Branded opening panels
cover the initial blank patient page and representative browser setup; the
representative view appears when the human portion begins. The recording
contains synthetic patient and representative voices and does not demonstrate
PSTN transport.
For a recording of Studio's actual phone and AI Activity, use its native tab recorder:
xvfb-run -a -s '-screen 0 1920x1200x24' \
bash .devcontainer/scripts/with-env.sh -- bash -c \
'cd apps/ai-manager && npx tsx scripts/surgery-partners/browser-recording.ts'
This opens headful Chromium, enables Show AI Activity, Recording,
and Mock Caller, then clicks Test & Record. SMS stays off so
messages use Preview's phone tray rather than carrier delivery. Daniel's speech
comes from Studio's configured Mock Caller; the browser operator opens the
native verification screen, uploads the two card fixtures, and confirms the
readback. It uses Studio's canonical persisted utterances to identify each
instruction and observes PCM durations through DevTools to wait for speech
to finish before submitting the next screen action. Silent packets do not
extend that wait; repeated transport caption fragments are not treated as
new words. The script downloads Studio's MP4 after the accepted handoff.
It does not replace capture APIs, intercept application responses, or
compose a phone UI over separate footage. --inspect checks the setup without
starting a call. Output is private under browser-preview-ordered/;
SP_RECORDING_DIRECTORY selects another private take directory.
Shorten long silences in downloads is enabled: gaps over 1.8 seconds retain
0.9 seconds, and quiet edges are trimmed. Studio applies the same edit intervals
to audio and video in their original sequence. The evidence records the
converter's removed-seconds response header. Live Preview retains its real timing.
The recorder requires the native Call ended status and End Session
activity after the accepted handoff. A provider failure does not pass simply
because a partial video is available. Run verify-browser-video.ts under the
same environment wrapper to inspect the exported streams and transcribe the
actual MP4 audio with the configured Deepgram integration. It checks both
speakers, the recorded insurance and transfer discussion, and the audible order
of the privacy question, patient answer and secure-link instructions. Review
the remaining exported utterances for repeats or cut-off instructions as well.
The verifier also rejects spoken internal completion messages and requires one
additional-insurance question.
prepare-browser-delivery.ts packages that verified export with normalized
AAC audio, copying the video stream, and creates a standalone player with a
Play with sound button. It checks decoded browser audio during both
speakers and the closing. The original timing is retained separately in
native-untrimmed.mp4, downloaded through Download original MP4; the native converter supplies all silence edits.
Run phone-route-checks.ts <conversation-id> under the same environment
wrapper to check anonymous, other-user, unregistered-session, invalid-image,
and patient-role denials against the real Studio BFF. Use
--before-verification on an unverified phone session to check its identity
gate. These checks do not change patient records.
Verified behavior¶
The October 7 validation used actual native Preview audio, live models, browser uploads and buttons, and Salesforce DevSDO writes:
- Two consecutive fresh outbound calls completed verification, two-sided card extraction, explicit card confirmation, additional-insurance reconciliation, review Task creation, accepted handoff, and voice-leg termination.
- The human Copilot attached through its runtime-bound startup tool. Its affordability and callback suggestions drove the actual patient-screen buttons.
- Patient selection, Event/Task creation, read-back, Preview notification, calendar download, page recovery, and Case wrap-up passed.
- Duplicate actions returned their existing receipts. Changed payloads under an existing action ID and new actions with stale revisions were rejected. A patient capability could not invoke representative booking.
- Fifty-one isolated live-model checks passed, as did three native privacy rehearsals, the Daniel stand-in rehearsal, six domain/Preview URL tests, and three share-branding authorization tests.
- The additive seed returned the same supporting record IDs. The real Studio view switch and stand-in selector passed browser checks. Both app type checks and the isolated catalog type check passed.
- After the copy review, another full Preview rehearsal passed with the revised screens, including replacement-photo expansion and the human send/booking controls. Twelve focused Copilot checks passed for next action, reply length and filler phrases. The updated recording uses those revised screens.
- A native Studio phone recording against Voice Agent
4701:v13completed verification, both card uploads, on-screen confirmation, coverage review, accepted handoff and normal termination. The 2:21 H.264/AAC export includes AI Activity and the complete closing announcement. Transcription of the exported audio identified both speakers. Seventeen targeted unit checks and eighteen real BFF checks passed for the new phone routes and Mock Caller message delivery, published-version resolution and silent waiting. - The replacement recording against
4701:v20completed the same workflow with the opening, card review, additional-insurance question and handoff in order. Studio shortened 78.6 seconds of silence to produce a 92-second export. Transcription of that MP4 confirmed both speakers and the complete closing, with no repeated insurance question or spoken internal completion message. The standalone player's decoded audio passed checks during Morgan, Daniel, and the closing. The local GPT Live suite passed all 244 tests after the application-reply ordering and empty-completion fixes; the ten recording unit checks and user-guide build also passed.
Private evidence is in fresh-rehearsal-passed.json, rehearsal-latest.json,
human-continuation-passed.json, model-evals.json, privacy-rehearsal.json,
standin-rehearsal.json, studio-preview-check.json, copy-review.json, and
copy-model-evals.json under the local artifact
directory. Native phone evidence, the MP4, access checks, and exported-audio
verification are under browser-preview/; the replacement recording, original
timing, audio transcript and player checks are under browser-preview-ordered/.
The user guide builds and API/SDK references regenerate. The wider
route-auth audit reports four unrelated handlers in Allianz reviews and Takeda
interactions; none are Surgery Partners routes.
The wire contract lives in apps/ai-manager/lib/surgery-partners/model.ts.
Installation copies it into the isolated catalog workspace as domain.ts;
Next's application build must not import runtime code from a sibling catalog
directory. UI code lives in apps/catalog-builder/catalogs/tenant/surgery-partners.
See the presenter guide and brand asset provenance.