Back to the build library
Healthcare & clinics
Advanced

Specialist Referral Tracking

A closed-loop referral pipeline that tracks every outbound referral until the consult report is back in the chart and reviewed.

Industry
Healthcare & clinics
Build effort
Advanced
Typical time to launch
3–5 weeks
On this page
The problemWhat gets builtHow it runsAutomations in detailWhat changesBefore you start
Want this built for you?

Bring your stack to a call and we will scope it against how your business actually runs.

Book a call
01

The problem

A referral leaves the practice and stops being tracked. Someone sends a packet to a cardiologist, a dermatologist or a surgeon, the handoff is logged somewhere in the chart, and then the referral enters a gap that nobody owns. Did the specialist receive it? Did they accept it? Did the patient ever call to book? Did they attend? Did a consult note ever come back? In most practices the honest answer to all five questions is that nobody knows unless the patient happens to mention it at their next visit, or unless something goes wrong and the chart is reconstructed backwards.

The leak is operational and financial at the same time. Referrals that never get booked become repeat visits for the same unresolved complaint, which the practice absorbs as unreimbursed follow-up time. Referrals where the report never returns leave the referring provider carrying clinical responsibility for a question they cannot answer, which drives duplicate ordering: a second referral, a second set of imaging, a second workup. Prior authorizations expire quietly while the referral sits unbooked, so the patient arrives for a consult that is no longer covered and the balance becomes a collections problem. And for any practice in a value-based arrangement, closed-loop referral evidence is exactly what gets audited, so a referral that cannot be shown to have closed is scored as if it never happened.

The reason it stays broken is that the work is not hard, it is just invisible. Chasing a specialist for a report is a two-minute phone call that nobody makes because nothing surfaces it. There is no queue, no clock and no owner. This build creates all three: every referral becomes a tracked record with a named owner, a running age, an escalation ladder on both the specialist side and the patient side, and an attestation step that closes the loop only when a human confirms the report has been read.

02

What gets built

Pipeline and stages

One pipeline, Referral Loop, with each referral as its own opportunity record so a patient with three open referrals has three independently tracked cards.

  • Referral Ordered: the provider has placed the order; the packet does not exist yet.
  • Packet Assembled: chart notes, relevant results and the referral form are collected and the destination is confirmed.
  • Authorization Pending: a conditional stage entered only when auth_required is yes.
  • Sent to Specialist: packet transmitted by the agreed secure channel; the clock starts.
  • Receipt Confirmed: the receiving practice has acknowledged they have it and accepted it.
  • Consult Scheduled: a date exists on the specialist calendar.
  • Consult Attended: the appointment happened.
  • Report Received: a consult note or report has landed in the inbound queue.
  • Report Reviewed: the referring provider has attested they read it.
  • Loop Closed: terminal success state.

Three exit stages sit alongside: Stalled (aged past threshold with no movement), Patient Declined and Referral Withdrawn. Nothing is deleted; every referral lands in a terminal stage so the denominator for closure rate is honest.

Calendars

  • Referral Navigation Call: 15 minutes, round robin across referral coordinators, used when a patient needs help booking with the specialist or does not understand what the referral is for.
  • Pre-Consult Prep: 10 minutes, optional, for referrals where records need to be hand-walked or an interpreter arranged.
  • Report Review Block: a recurring internal block per provider, 20 minutes daily, that the review queue feeds into so attestation has a home in the day rather than competing with patient time.

Custom fields

Field names are deliberately neutral. None of them carry a diagnosis, a reason for referral or a specialty in a form that would render in a push notification or SMS preview.

  • referral_id: internal sequential identifier, used in every message instead of clinical detail.
  • referral_specialty_code: a short internal code, not a readable specialty name.
  • referring_provider
  • specialist_practice_name and specialist_contact_name
  • specialist_secure_channel: the agreed transmission route for this destination.
  • referral_priority: Routine, Expedited or Urgent.
  • referral_sent_date, receipt_confirmed_date, consult_scheduled_date, consult_attended_date, report_received_date, report_reviewed_date, loop_closed_date
  • referral_age_days: written back nightly so smart lists can sort by age.
  • auth_required, auth_reference_on_file, auth_expiry_date
  • patient_consent_sms, patient_consent_email, consent_captured_at, consent_language_version, consent_source
  • preferred_language, preferred_channel
  • portal_activated: whether the patient can actually open a secure link.
  • stall_reason: picklist: no receipt, no booking, patient unreachable, no report, authorization lapsed, destination not accepting.

Tags

  • referral-open, referral-closed
  • referral-priority-urgent, referral-priority-expedited
  • awaiting-receipt, awaiting-booking, awaiting-report, awaiting-review
  • stalled-7, stalled-14, stalled-30
  • patient-unreachable, portal-invite-sent, portal-active
  • consent-sms-yes, consent-sms-revoked, consent-email-yes, consent-email-revoked
  • auth-expiring-14, auth-lapsed

No tag names a specialty, a body system, a medication or a condition. Tags appear in exports, notification previews and staff screens visible from waiting areas, so they are treated as public surface.

Forms

  • Referral Order Intake: internal only, completed by clinical staff. Captures destination, priority, authorization need and whether the patient has consented to electronic contact. Creates the opportunity.
  • Patient Communication Consent: patient-facing, presented in the portal or on a tablet at the desk. Captures separate yes or no for SMS and for email, stores the exact consent wording shown, the version number, the timestamp and the capture source.
  • Specialist Receipt Confirmation: a tokenized single-purpose form sent to the receiving practice. It asks only: packet received yes or no, accepted yes or no, and expected booking window. It displays the referral_id and nothing clinical.
  • Patient Booking Status Check: two neutral questions: have you booked your appointment yet, and do you need help booking. No reason for referral shown.
  • Report Review Attestation: internal; the provider confirms the report was read, records whether further action is needed, and closes the loop.

BO's role and guardrails

BO handles the logistics layer of referral conversations and nothing else.

  • BO may: confirm that a referral exists and is open, tell a patient whether a booking date has been recorded, offer a Referral Navigation Call, send a secure portal link, update preferred_channel, capture a stated booking date for staff verification, and process opt-out language.
  • BO may not: name the specialty, name the specialist's clinical focus, state or restate a reason for referral, discuss anything in the packet or the returned report, interpret results, give clinical advice, confirm or deny coverage, or quote any cost.
  • Guardrails: every outbound BO message is limited to the minimum necessary to move the logistics forward. Any inbound message containing clinical questions, symptom escalation, or words in the urgent-language list is handed to a human immediately and BO stops replying in that thread. BO never includes clinical content in an SMS body or an email subject line; it links to the portal instead. BO logs every handoff with a reason code.

Numbers and channels

  • A dedicated clinical operations number for referral coordination, separate from any marketing or campaign number, so opt-outs on marketing never silently suppress care coordination and vice versa.
  • A secure transmission channel per destination recorded in specialist_secure_channel: the receiving practice's portal, a direct secure message route, or encrypted transfer. The channel is a per-destination fact, not a default.
  • Patient portal as the only place clinical detail is ever shown. SMS and email act purely as a doorbell.
  • Inbound report queue: a monitored destination for returning consult notes that creates or matches a record rather than landing in a shared mailbox.
03

How it runs, step by step

  1. A provider decides a patient needs a specialist. Clinical staff complete Referral Order Intake, which creates a card in Referral Ordered with a fresh referral_id, the destination, the priority and whether authorization is required.
  2. If the patient has no recorded consent, the Consent Capture workflow fires first. The patient completes Patient Communication Consent on a tablet before leaving, or by portal link. Until consent exists for a channel, that channel is not used: coordination falls back to a phone call from staff.
  3. The packet is assembled: the referral form, relevant notes and results. The card moves to Packet Assembled and the coordinator confirms the destination's current secure channel.
  4. If auth_required is yes, the card routes to Authorization Pending and the authorization watch workflow starts tracking auth_expiry_date. Nothing is transmitted until a reference is on file.
  5. The packet is transmitted on the recorded secure channel. Staff set referral_sent_date and the card moves to Sent to Specialist. The receipt clock starts and the card is tagged awaiting-receipt.
  6. A tokenized Specialist Receipt Confirmation link goes to the receiving practice contact. If no confirmation comes back, the receipt chase ladder runs on days 2, 4 and 6 and then escalates to a named human.
  7. The specialist confirms receipt and acceptance. The card moves to Receipt Confirmed, receipt_confirmed_date is set, awaiting-receipt is removed and awaiting-booking is applied.
  8. The patient gets a neutral prompt on their consented channel: a message saying there is a step waiting on their account with a portal link. The detail (who to call, what the appointment is for, what to bring) lives behind the portal login.
  9. Days 3, 7 and 12 after receipt confirmation, if no consult_scheduled_date exists, the booking nudge ladder runs. On the third touch the patient is offered a Referral Navigation Call and a coordinator task is created. BO answers booking logistics in the inbox between touches.
  10. The patient books. Either the specialist reports the date on the receipt form, the patient tells BO, or a coordinator records it. consult_scheduled_date is set and the card moves to Consult Scheduled. A prep reminder goes out 48 hours and 2 hours ahead, again as a neutral doorbell.
  11. The day after the scheduled date, the Consult Attendance Verification workflow asks the patient a single neutral question through the portal and queues a coordinator check if there is no answer. Attended moves the card to Consult Attended; a missed consult sends the card back to Consult Scheduled with stall_reason set and the booking ladder restarted once.
  12. The report chase begins. From 7 days after the attended date, the specialist-side ladder runs on days 7, 14, 21 and 30 with escalating named contacts, and at day 30 the referring provider is notified directly.
  13. A report lands in the inbound queue, is matched to the referral_id, report_received_date is set and the card moves to Report Received. It enters the provider's Report Review Block queue.
  14. The provider completes Report Review Attestation. If further action is needed, a new referral or follow-up task is created and linked. Either way report_reviewed_date and loop_closed_date are set, referral-open is swapped for referral-closed, and the card lands in Loop Closed.
04

Automations in detail

1. Referral Ordered: Packet Dispatch and Clock Start

Trigger: Referral Order Intake form submitted.

Actions in order:

  1. Create opportunity in Referral Loop at Referral Ordered. Generate and write referral_id.
  2. Copy destination, referral_priority, referring_provider and auth_required onto the card. Apply referral-open.
  3. Branch on priority. If referral_priority is Urgent: assign the card to the on-duty coordinator immediately, apply referral-priority-urgent, and send an internal notification now. If Expedited: apply referral-priority-expedited and assign within the shift. If Routine: round-robin assign.
  4. Branch on consent. If neither patient_consent_sms nor patient_consent_email is yes, call workflow 8 and set preferred_channel to phone in the meantime.
  5. Create coordinator task Assemble packet for {{referral_id}}, due in 1 business day for Routine, 4 hours for Expedited, 1 hour for Urgent.
  6. Wait until stage changes to Packet Assembled, with a 2 business day timeout. On timeout, notify the coordinator's supervisor.
  7. Branch on authorization. If auth_required is yes, move to Authorization Pending and call workflow 7. Otherwise continue.
  8. On transmission, staff set referral_sent_date. Move to Sent to Specialist, apply awaiting-receipt, call workflow 2.

Exit: stage reaches Sent to Specialist, or Referral Withdrawn or Patient Declined is set.

2. Specialist Receipt Confirmation Chase

Trigger: stage becomes Sent to Specialist.

Actions in order:

  1. Send the tokenized Specialist Receipt Confirmation link to specialist_contact_name on the agreed channel. Body: “Referral {{referral_id}} was sent to your practice on {{referral_sent_date}} from {{practice_name}}. Please confirm receipt and acceptance using this secure link: {{token_link}}. No clinical detail is included in this message.”
  2. Wait 2 business days. If receipt_confirmed_date is still empty, resend with the subject line “Referral {{referral_id}}, receipt confirmation outstanding”.
  3. Wait 2 business days. If still empty, create a coordinator task Call {{specialist_practice_name}} re {{referral_id}} and attach a call script that says to reference only the referral identifier until the receiving practice confirms identity.
  4. Wait 2 business days. If still empty, apply stalled-7, set stall_reason to no receipt, and notify the referral supervisor with the destination name and count of other open referrals to the same destination.
  5. On confirmation: set receipt_confirmed_date, move to Receipt Confirmed, remove awaiting-receipt, apply awaiting-booking, call workflow 3.

Branch: if the form comes back as not accepted, move to Packet Assembled, set stall_reason to destination not accepting, and create a task to select an alternate destination. Do not message the patient yet.

Exit: receipt confirmed, destination changed, or referral withdrawn.

3. Patient Booking Nudge Ladder

Trigger: stage becomes Receipt Confirmed.

Conditions: runs only on a channel where consent is recorded as yes. All sends are held to quiet hours and local time.

Actions in order:

  1. Wait 1 hour (so it never lands the moment a patient leaves the desk). Send on preferred_channel. SMS copy: “Hi {{contact.first_name}}, it's the care team at {{practice_name}}. There's a next step waiting on your account. Open your secure portal to see it: {{portal_link}}. Reply STOP to stop texts.” Email subject line: “A next step is waiting in your {{practice_name}} portal”. Nothing in either names a specialty or a reason.
  2. Wait 3 days. If consult_scheduled_date is still empty, send touch two: “Hi {{contact.first_name}}, your next step at {{practice_name}} is still open. Details and the number to call are in your secure portal: {{portal_link}}. Reply HELP to talk to a coordinator.”
  3. Wait 4 days. If still empty, send touch three with a booking-help offer: “Hi {{contact.first_name}}, would you like our coordinator to help you get this scheduled? Pick a 15-minute time here: {{navigation_call_link}}.” Create a coordinator task in parallel.
  4. Wait 5 days. If still empty, apply stalled-14, set stall_reason to no booking, and escalate to a live outbound call task rather than another message.
  5. If three consecutive touches go undelivered or unanswered and no portal activity is recorded, apply patient-unreachable, stop messaging entirely and notify the referring provider that the patient could not be reached.

Exit: consult_scheduled_date populated, patient-unreachable applied, opt-out received, or Patient Declined set. Any inbound reply other than an opt-out keyword pauses the ladder for 48 hours so a live conversation is never talked over.

4. Consult Attendance Verification

Trigger: 1 day after consult_scheduled_date.

Actions in order:

  1. Send a portal-gated Patient Booking Status Check with one question: did your appointment go ahead. SMS doorbell: “Hi {{contact.first_name}}, quick one-question check-in from {{practice_name}} is waiting in your portal: {{portal_link}}.”
  2. Wait 2 days. If no response, create a coordinator task to confirm attendance with the receiving practice using referral_id only.
  3. Branch: attended. Set consult_attended_date, move to Consult Attended, remove awaiting-booking, apply awaiting-report, call workflow 5.
  4. Branch: did not attend, first occurrence. Move back to Consult Scheduled, clear consult_scheduled_date, set stall_reason to no booking, restart workflow 3 from touch two. Only one restart is permitted per referral.
  5. Branch: did not attend, second occurrence. Notify the referring provider and create a clinical decision task: continue, change destination, or close as Patient Declined. The system does not decide this.

Exit: attendance recorded either way, or terminal stage reached.

5. Report Return Chase and Escalation Ladder

Trigger: stage becomes Consult Attended.

Actions in order:

  1. Wait 7 days. If report_received_date is empty, send the receiving practice: “Referral {{referral_id}}, consult date {{consult_attended_date}}. {{practice_name}} has not yet received the consult report. Please return it on the agreed secure channel.” No patient name in the message body where the channel does not warrant it; the identifier carries the match.
  2. Wait 7 days. If still empty, apply stalled-14, set stall_reason to no report, and create a coordinator call task to the practice manager rather than the front desk.
  3. Wait 7 days. If still empty, apply stalled-30 and escalate to the referral supervisor with a destination-level view: all open referrals to this practice and their ages.
  4. Wait 9 days. If still empty, notify the referring provider directly with a decision prompt: request records formally, re-refer elsewhere, or document the gap. Add the destination to a monthly review list.
  5. On arrival in the inbound report queue, match on referral_id, set report_received_date, move to Report Received, remove awaiting-report, apply awaiting-review, call workflow 6.

Exit: report received, or the provider records a documented-gap decision which moves the card to Loop Closed with stall_reason retained for reporting.

6. Report Review and Loop Closure Attestation

Trigger: stage becomes Report Received.

Actions in order:

  1. Create a review task on the referring_provider, routed into their Report Review Block, due in 2 business days for Routine, same day for Expedited and Urgent.
  2. Wait 2 business days. If the attestation form is not complete, re-notify the provider. Wait 2 more business days. If still incomplete, notify the clinical lead. Reports do not age out silently.
  3. On Report Review Attestation submission, set report_reviewed_date and report_reviewed_by.
  4. Branch: further action needed. Create the linked follow-up: a new referral card, a results discussion appointment, or a medication review task, inheriting the patient but with a fresh referral_id.
  5. Branch: patient needs to be told something. Queue a clinical contact task for a human. Never auto-send a message that conveys findings.
  6. Set loop_closed_date, swap referral-open for referral-closed, remove awaiting-review, move to Loop Closed.

Exit: attestation complete.

7. Prior Authorization Watch

Trigger: stage becomes Authorization Pending, or auth_expiry_date is set on an open referral.

Actions in order:

  1. Create an authorization task with the destination and referral_id; due in 1 business day for Urgent, 3 for everything else.
  2. Wait for auth_reference_on_file to populate, timeout 5 business days. On timeout, notify the supervisor and hold the card: do not transmit.
  3. On reference received, release the card to Packet Assembled so transmission can proceed, and start the expiry monitor.
  4. Expiry monitor: daily check against auth_expiry_date. At 14 days out, apply auth-expiring-14 and create a task to confirm the consult is booked inside the window. At 3 days out, escalate to the supervisor. On the expiry date with no attended consult, apply auth-lapsed, set stall_reason to authorization lapsed, and notify both the coordinator and the referring provider.
  5. No cost, coverage or benefit statement is ever sent to the patient by automation. Authorization messaging is internal only; the patient-facing version is a neutral doorbell asking them to call the practice.

Exit: consult attended inside the window, authorization renewed, or referral moved to a terminal stage.

8. Consent Capture, Channel Honouring and Revocation

Trigger: a referral is created with no consent on file, or any inbound opt-out keyword is received, or Patient Communication Consent is submitted.

Actions in order:

  1. No consent path. Create a desk task to present the consent form at the next in-person touch, and send one plain non-clinical invitation only if a prior lawful basis for that channel exists under the practice's own documented policy. If there is none, the only route is a phone call. The system defaults to not messaging.
  2. On consent submission. Write patient_consent_sms and patient_consent_email separately, plus consent_captured_at, consent_language_version and consent_source. Apply consent-sms-yes or consent-email-yes. Store the exact wording shown, not a summary of it.
  3. On opt-out. Any recognized stop keyword immediately sets that channel's consent flag to no, applies consent-sms-revoked or consent-email-revoked, removes the patient from every active message ladder on that channel, and creates a task so care coordination continues by phone. Send one confirmation and nothing further: “You're unsubscribed from texts from {{practice_name}}. We'll call you instead about anything that needs your attention.”
  4. Quiet hours and frequency. All automated sends are held outside the practice's configured local-time window and capped per patient per rolling 24 hours across all referral workflows, so a patient with three open referrals does not receive three doorbells in an afternoon. When the cap is hit, the extra sends queue to the next window rather than being dropped.
  5. Content guardrail check. Before any send, the workflow verifies the message body and subject line contain no merge field drawn from a clinical source: no specialty name, no reason for referral, no result, no medication, no destination practice name where that name itself reveals a specialty. A send that fails the check is blocked and raised as an internal alert rather than silently altered.

Exit: runs permanently as a guard layer across all other workflows.

9. Stalled Referral Escalation and Daily Coordinator Digest

Trigger: scheduled, every weekday morning before the first clinic block.

Actions in order:

  1. Recalculate referral_age_days on every open card.
  2. Build the digest and send it internally only: urgent referrals open more than 2 days, expedited open more than 7, routine open more than 21, all cards tagged stalled-14 or stalled-30, all auth-expiring-14, all awaiting-review older than 2 business days, and all patient-unreachable.
  3. Group the stalled list by specialist_practice_name so a destination that is systematically slow shows up as a pattern rather than nine separate annoyances.
  4. Create one task per stalled card with a named owner. Reassign any card whose owner is out of office.
  5. Weekly, add a closure-rate roll-up by destination and by referring provider for the previous rolling 90 days.

Exit: never; this is the heartbeat that makes the rest visible.

05

What changes

Before the build, a referral is a hope. After it, a referral is a tracked object with an owner, an age and a terminal state. Nothing can sit in the gap between two practices unnoticed, because the gap itself is now a stage with a clock on it, and the two chases that nobody used to make (the receipt confirmation and the report return) happen on a ladder without anyone remembering to start them.

The practical differences show up quickly. Patients stop arriving at follow-up visits having never booked the specialist. Coordinators work a queue instead of a memory. Providers get reports in a daily review block rather than discovering them months later. Authorizations stop lapsing silently. And when a payer, a partner or an accreditation reviewer asks for closed-loop evidence, the answer is a report rather than a chart dig.

Metrics to watch

  • Loop closure rate: share of referrals reaching Loop Closed, measured on a 90-day cohort so the denominator is stable.
  • Median days from referral_sent_date to report_received_date, and the 90th percentile, which is where the real problems hide.
  • Receipt confirmation within 3 business days, as a percentage and broken out by destination.
  • Booking conversion: share of receipt-confirmed referrals that reach consult_scheduled_date, and how many touches it took.
  • Consult attendance rate and restart rate.
  • Report review latency: report_received_date to report_reviewed_date.
  • Stalled inventory: open cards by age bucket and by stall_reason, trended weekly.
  • Destination scorecard: closure rate, median report turnaround and non-acceptance rate per specialist practice. This is the number that changes who you refer to.
  • Authorization lapse count and near-miss count caught at the 14-day flag.
  • Communication health: opt-out rate per channel, portal activation rate, patient-unreachable rate, and the count of blocked sends caught by the content guardrail. A rising blocked-send count means a template needs fixing, and that is worth knowing before it becomes an incident.
06

Before you start

Prerequisites

  • An agreed secure transmission channel for every destination you refer to, recorded per destination rather than assumed. A default channel is how packets go to the wrong place.
  • A named contact at each receiving practice for receipt and report chasing, with a fallback to the practice manager.
  • A patient portal that patients can actually activate, and a plan for the patients who cannot. If the portal is not usable, the doorbell pattern collapses and coordination falls back to phone.
  • A monitored inbound destination for returning reports that can be matched to a referral identifier.
  • Agreed priority definitions and turnaround expectations for Routine, Expedited and Urgent, signed off clinically. The ladders are only as good as these definitions.
  • Role-based access configured so staff see the referral records their role requires and no more, with access reviewed on a schedule.

Integrations

  • Calendar sync (Google Calendar or Outlook) for coordinator availability and the provider review blocks.
  • Your practice management or records system for the chart-side record. This build tracks the referral lifecycle; it is not the chart, and the attestation step should be reflected in the chart by your normal process.
  • Secure messaging or transfer route for packets and returning reports.
  • Reporting export, to a warehouse or spreadsheet, for the destination scorecard. Exports carry patient data and need the same handling as the system itself.

Numbers and messaging registration

  • Provision a dedicated number for care coordination and register it for application-to-person messaging. In the United States that means A2P 10DLC brand and campaign registration, with the campaign described accurately as transactional care coordination rather than marketing. Mis-registered traffic gets filtered, and filtered care coordination messages are worse than no messages because staff assume they landed.
  • Keep care coordination traffic on a different number and campaign from any marketing traffic, so a marketing opt-out does not suppress clinical logistics and a clinical opt-out does not get overridden by a campaign.
  • Opt-out handling must be automatic and immediate on recognized keywords, and the reply must be plain. Opt-in language, opt-out instructions and help instructions all need to be present where the carrier requirements say they do.
  • Configure quiet hours in the patient's local time, not the practice's, and set a per-patient daily cap across all referral workflows.
  • Expect carrier filtering on links. Use a consistent sender and a stable portal domain; rotating link domains look like spam.

Protected health information and consent

This is the part worth slowing down for. Referral coordination touches protected health information constantly, and the design choices that keep it safe are mostly about what you leave out.

  • Keep PHI out of SMS bodies and email subject lines. Treat both as visible on a lock screen, in a notification preview, on a shared family phone and in a carrier log. No diagnosis, no reason for referral, no specialty, no result, no medication, no provider name that itself reveals a condition, and no destination practice name where that name is effectively a diagnosis. The message is a doorbell: it says something is waiting and gives a link.
  • Apply minimum necessary to every automated message. Ask of each template: what is the least a patient needs in order to take the next step. Usually it is the practice name, their first name and a link. The specialty, the reason and the instructions belong behind authentication.
  • Capture consent to electronic communication explicitly, per channel. Record the exact wording shown, its version number, the timestamp, the capture method and the device or source. Keep consent for care coordination separate from consent for marketing, and honor revocation of one without destroying the other. Store revocation events as immutable history rather than overwriting the field.
  • Put a signed business associate agreement in place before any PHI flows. The platform acts as a business associate when it handles patient data on the practice's behalf, and so do the downstream vendors in the chain. The messaging carrier or aggregator, the email sending infrastructure, any transcription or AI processing service, any analytics or warehouse destination you export to. Each needs to be identified and covered. An agreement with the platform does not automatically cover a tool you connected yourself.
  • Treat the whole data trail as PHI. Call recordings, voicemail transcriptions, chat transcripts, BO's conversation logs, workflow execution logs, CSV exports and the destination scorecard all contain patient data. Set retention periods, restrict access by role, and make sure deletion actually propagates to exports and backups.
  • Audit trail. Every stage change, message send, consent event and attestation should be attributable to a person or a named workflow with a timestamp. This is what makes closed-loop evidence defensible.
  • Train the content guardrail as a real control, not a comment. Workflow 8's pre-send check is the thing that stops a well-meaning template edit from putting a specialty into a text message six months from now. Review blocked-send alerts rather than muting them.

Everything above describes operational practice, not legal advice. Which rules apply to your practice, how consent must be worded, what your retention periods must be, which vendors need agreements and in what form, and how state law interacts with federal requirements are all questions for the practice's own compliance counsel and privacy officer. Have them review the message templates, the consent wording, the vendor chain and the retention settings before the first referral goes out, and again whenever a template or an integration changes.

Scope, configuration and what this costs to build are set per practice. Book a call at bookings.appbo.io to work through yours.

Field notes

Build it with us.

Every build on this page is something we configure, test and hand over with the SOPs your team needs to run it.

Book a call