← Back to help hub
somaNotes guide

Epic Bridge

Patient data in, progress notes out

The temporary, clinician-controlled bridge while official Epic integration is pending: a copy-ready .SOMASNAPSHOT phrase sends chart data into somaNotes' existing Add Data intake, while .SOMAPROGRESS35, .SOMAPROBLEM35, and .DISPO5 carry the canonical progress note back to Epic.

Inbound path uses the live Add Data pipeline Not a SMART/FHIR integration Outbound pinned to progressNoteSpec.md v3.5 Strict baseline hardwires only signed-note-proven @CODESTATUS@ Stage 1–3 roadmap: discrete pulls → SDE write-back → CER-rule logic Legacy input recognition retained only for safe migration Copy full preserves the complete canonical document

How doctors open this guide

Normal route from any main somaNotes workspace: click Help in the top navigation, find Epic & EHR at the top of the Help page, then click Open Epic Bridge guide.

Faster routes from Census

  1. Select and verify the correct patient, then click Epic Intake beside Add Data. This opens the Epic → somaNotes snapshot instructions directly.
  2. If Add Data is already open, click Set up the interim Epic snapshot phrase near the top of the window.
  3. For a bookmark or typed address, use /help/epic-smartphrase. No patient information is stored on this help page.
Bring Epic data into somaNotes Set up progress-note phrases Use the phrases today Split and paste a finished note Return to Census

Epic → somaNotes — interim chart intake

What is live: select a patient in somaNotes, open Add Data, paste one rendered Epic snapshot, and choose the clinical service date represented by the snapshot. Labs, vitals, meds, and problems enter the existing chart pipeline immediately; the same paste also becomes reviewable per-problem evidence in Shift Workspace.

The draft proposal's generic .VITALS[24H], .RECENTRESULTS[24H], and .ENCOUNTERNOTES names are not verified in the Avera build. This baseline uses only names found in Avera's in-Epic index and leaves site-dependent labs and notes as explicit stops. That is deliberate: a compact partial snapshot is safer than a phrase that silently omits data or dumps every note in the encounter.

.SOMASNAPSHOT
*** SOMANOTES ENCOUNTER SNAPSHOT *** Generated: @NOW@ Patient: @ID@ Length of stay: @LOS@ Hospital day: @DOL@ --- VITALS (LAST 24 H) --- @VSRANGES@ --- ACTIVE MEDICATIONS --- @MEDS@ --- ACTIVE HOSPITAL PROBLEMS --- @HPROBL@ --- CBC (LAST 3 RESULTS) --- @LLCBC3@ --- OTHER DECISION-RELEVANT LABS --- *** --- RELEVANT SIGNED ENCOUNTER NOTES / EVENTS --- ***

Verified name set: .now, .id, .los, .dol, .vsranges, .meds, .hprobl, and .llcbc3. Test the assembled phrase once on a training patient; if a token renders literally, remove it and reinsert the matching SmartLink from Epic's Insert SmartLink search.

One-time setup in Epic

  1. Open SmartPhrase Manager, create a personal phrase named SOMASNAPSHOT (no leading dot), and paste the template above.
  2. For the lab stop, insert only the trends you actually act on using Avera's verified .ll<lab>3 family. Keep the stop if the needed aliases are not yet verified.
  3. Keep the encounter-notes stop manual until an Avera analyst verifies a compact, signed-note, encounter-scoped SmartLink or report. Do not substitute a guessed all-notes command.
  4. On a training patient, confirm every cyan token resolves and that the output is compact enough to review before copying.

Daily use

  1. In somaNotes, select the destination patient first and verify the displayed name and MRN.
  2. In that same patient's Epic chart, insert .somasnapshot in an organization-approved scratch or documentation workspace. Add only the relevant signed consult/nursing narrative and any decision-relevant lab trends at the two stops.
  3. Review the rendered snapshot, copy it, then return to somaNotes → Add Data.
  4. Set Service Date to the clinical day represented by the data, paste once, and choose Process & Save.
  5. Before moving on, verify the selected patient did not change and scan Parsed Results for obvious omissions or misclassified values.
PHI and audit boundary: use this only when Avera policy and the somaNotes deployment's authorization/BAA permit the transfer. An unsigned or discarded Epic draft is not proof that no audit or recovery artifact exists. Treat the system clipboard as PHI-bearing, and clear it according to local policy after the paste.

Department SmartText upgrade ticket

Once the personal phrase works, send this narrower request to the Avera build team instead of asking them to implement unverified names.

Avera analyst request
Please promote the validated personal .SOMASNAPSHOT phrase to a shared department SmartText/SmartPhrase. Preserve the verified Avera links for patient context, 24-hour vital ranges, active meds/problems, and CBC trend. Please identify and test, in our Avera build: 1. A compact results link/report with a selectable 12/24/48/72-hour lookback. 2. An encounter-scoped, signed-note report limited by date and note type/author role. Acceptance: output is plain text, bounded, visibly dated/authored, does not include unsigned/sensitive notes unexpectedly, and is tested on a training patient before department release. Please return the actual Avera mnemonics; do not assume .RECENTRESULTS[#H] or .ENCOUNTERNOTES exists.

How to read this

*** Wildcard. A typing/paste stop. This is where somaNotes' generated text lands — Epic jumps you here, never auto-fills it.
@NAME@ SmartLink. Pulls live straight from this patient's Epic chart the instant the phrase fires. The command/mnemonic is Epic Foundation (universal); any ID it takes (flowsheet row, lab base name) is site-specific.
SmartList Picklist. Inserted via Epic's toolbar wizard at build time (search by name) — Epic resolves the real ID, you never type one. Becomes discrete, reportable data when its options are mapped to a SmartData Element — see Stage 2.
.NAME Nested phrase. Expands a whole separate SmartPhrase inline — also fires standalone in any other note type.
CER rule Rule-driven branch. True/false conditional logic can populate content inside existing sections, but may not remove required fields or invent new top-level sections. It requires a physician-builder or informatics team; Epic has no inline if/else token.

The three-stage roadmap

Stage 1 is entirely in your hands today. Stages 2 and 3 need a builder ticket — this page gives you copy-ready request text for both.

STAGE 1 — YOU, TODAY

Discrete-data SmartLinks

Replace a visible wildcard only after the candidate SmartLink is tested in the Avera progress-note context for semantics, time window, compactness, and label behavior.

STAGE 2 — BUILDER TICKET

Make dispo discrete

Rebuild DVT ppx and Code status as SDE-linked SmartLists so selections become auditable, reportable data — not just text in a note.

STAGE 3 — CER RULE

Conditional logic

Use CER rules only to populate content inside Objective or the relevant A&P problem. Required fields remain present, including DVT ppx under therapeutic anticoagulation.

Quick start — for physician partners

Status: contract-validated in somaNotes; Epic training-patient validation required. The new versioned package mirrors the live v3.5 document contract. The existing @CODESTATUS@ display has signed-note evidence; the new master itself must be tested in the target Epic note context before sharing department-wide.

The strict structured phrase preserves every required v3.5 section and uses eleven visible F2 stops. Date of Service and Objective stay clinician-controlled until Avera validates compact, context-correct SmartLinks. The exact-note fast path pastes the complete canonical note as one normalized document without relocating sections.

One-time setup in Epic (~10 minutes)

  1. In Epic: Epic button → Tools → SmartPhrase Manager (or type "SmartPhrase Manager" in the toolbar search).
  2. Click New. Name it DISPO5 — exactly that, no leading dot (Epic adds the dot). Build this one first: the master phrase references it by name, so it has to exist before the master phrase can nest it.
  3. On this page, scroll to Nested phrase, hit Copy, paste the block into Epic's compose box, save. Leave every *** exactly as triple-asterisk — Epic natively treats it as a fillable stop.
  4. Create SOMAPROBLEM35 from the repeatable problem block. Keep it standalone; invoke it as many times as the patient needs.
  5. Create SOMAPROGRESS35 from the structured master.
  6. Optional: create HOSPPROGRESSPASTE35 from the exact-note fast path. It contains one wildcard and never relocates Date, Vitals, Chronic Stable, or Code status.
  7. Open a note on a test/training patient and type .somaprogress35. Confirm every canonical header appears in order and .DISPO5 unfolds at the bottom.
  8. Confirm @CODESTATUS@ resolves in this note type. If it renders literally or as bare @@, delete it and reinsert the matching SmartLink through Insert SmartLink.
  9. Practice the keys: F2 jumps to the next *** stop, Shift+F2 goes back.
  10. Resolve or delete every wildcard, verify the five disposition lines, and confirm no content follows Follow-ups before signing.

Daily use

  1. Generate the note in somaNotes; copy it; paste it into the paste chain on this page.
  2. Fast path: click Copy full canonical note, then paste into a blank Epic progress note or the single stop in .hospprogresspaste35. Copy full is enabled only when the canonical v3.5 structure is present.

For section-level control with visible Epic sign-blocking stops:

  1. In Epic, type .somaprogress35.
  2. F2 to the first stop → click Copy next here → Ctrl+V in Epic → F2 → repeat. The button names each chunk as you go and stops at "All chunks copied".
  3. A missing Chronic Stable value is not optional: enter None. Generated Disposition may contain only the supported fields, so an omitted Disposition value is not a rail placeholder; the static .DISPO5 phrase still leaves its physician-fillable *** stops for you to complete or clear before signing.
  4. Cross-check the note's Code status reference against the value rendered by @CODESTATUS@.
  5. Sign.

Upgrade a wildcard only after the candidate output passes the Avera training-patient checks below. Index presence alone is not enough.

Paste chain — split a generated note now

Paste the full somaNotes progress note here. Canonical v3.5 notes split into the exact eleven wildcard stops used by .SOMAPROGRESS35. Legacy headings are recognized only to help migrate old text; Copy full stays disabled until the canonical structure is present.

The deterministic copy gate checks exact headers and spacing, CC shape, one-paragraph Course Summary, three-paragraph Subjective, ordered Objective subsections, numbered A&P problem blocks with 1–4 supported actions (up to 6 for Worsening), one-line Chronic Stable, ASCII-safe text, and a final Disposition containing any supported subset of its five fields in canonical order. The bare final DISPOSITION heading may be empty; present fields may not be empty, duplicated, invented, or reordered. It is a paste-safety check, not a substitute for clinical review.

Runs entirely in this tab — nothing you paste is uploaded, stored, or logged. Reload the page and it's gone.

Structured master — canonical v3.5

.SOMAPROGRESS35
Hospitalist Progress Note Date of Service: *** CC: *** BRIEF HOSPITAL COURSE SUMMARY: *** SUBJECTIVE/PLAN FOR TODAY: *** OBJECTIVE: *** ASSESSMENT & PLAN: *** CHRONIC STABLE CONDITIONS: *** .DISPO5

The Subjective stop receives all three required paragraphs. The Objective stop carries Vitals, timestamped Labs, optional Imaging/Microbiology/Pathology, and Exam in v3.5 order. The A&P stop preserves the opening synthesis plus any number of #n Problem [Status] blocks. Chronic Stable stays separate and must contain a pipe-delimited line or None. Date and Objective remain visible stops until Avera proves replacement SmartLinks in this note context.

Repeatable problem helper

.SOMAPROBLEM35
#*** *** [***] *** - *** - ***

First stop: number. Second: concise problem name. Third: exactly Worsening, Active, Improving, Stable, or Resolved. Fourth: a 2–4 sentence assessment. The static helper seeds two physician-fillable action rows for convenience, but generated problems need only one supported action; delete an unsupported extra row rather than padding it. Keep this helper standalone and invoke it repeatedly when authoring the A&P manually.

Nested phrase

.DISPO5

Built standalone so the canonical master can nest it. This static physician-fillable phrase intentionally keeps all five lines and every *** hard stop; generated rail output separately emits only supported Disposition fields. Under therapeutic anticoagulation, document that supported state as the DVT value rather than suppressing it.

DISPOSITION DVT ppx: *** (Stage 1: swap for SmartList "VTE PROPHYLAXIS" · Stage 2: make it SDE-linked, see below) Code status: @CODESTATUS@ ← verified in practice: resolved correctly in a signed production note (2026-07-01) despite not appearing in the SmartLink index Diet: *** ← paste the note's one-liner. Demoted from @ACTIVEDIET@: the SmartLink expansion dumped a full ~20-line order table into the dispo section of the first signed note (2026-07-01) — entropy, not a field Dispo: *** Follow-ups: ***

Exact-note fast path — .HOSPPROGRESSPASTE35

Paste the complete canonical v3.5 note into one wildcard. This phrase intentionally adds no wrapper: moving Date, Vitals, Chronic Stable, or Code status outside the generated document would violate the immutable section order.

.HOSPPROGRESSPASTE35
***

Copy full canonical note returns the normalized complete note. It never reconstructs the document from chunks and remains disabled for noncanonical legacy input.

Captured in our build — existence is not output proof

The captured Avera index proves that a name exists, not that it renders the right semantics, time window, shape, or label in this progress-note context. The strict master therefore hardwires only @CODESTATUS@, which also has signed-note round-trip evidence.

This is a small fraction of what the build actually has. Treat it as a discovery list. Every candidate still needs a training-patient expansion test before it replaces a visible wildcard.

Baseline and candidates

TokenEvidencev3.5 use
@CODESTATUS@Resolved in a signed noteBaseline display inside .DISPO5; still review before signing
.td / @TD@Exists; means today's dateCandidate only — not proven as represented Date of Service for late entries
.averavs / @AVERAVS@Exists; last vital set; multiline expansion observedExcluded — wrong time scope and duplicated-label risk
.vsranges / @VSRANGES@Exists; indexed as 24-hour rangesCandidate only — prove compact output and oxygen device first
.activediet / @ACTIVEDIET@Exists; full order-table expansion observedExcluded — keep the one-line Diet wildcard

Labs — the .LL family (this build's version of the Foundation lab links)

PatternPulls
.llcbc1 / .llcbc3Last 1 / last 3 CBC results
.ll<lab>1 / .ll<lab>3Last 1 / last 3 results for any lab — swap in the lab name
.ll<lab>all (e.g. .llhgball)Every result this admission — the trend view; right shape for Cr, Hgb, ANC across a stay

The .LL family is an optional discovery aid, not part of the canonical baseline. Use a specific lab link only after its Avera expansion stays compact and preserves the Objective ordering; prune anything over the <5-lines rule below.

Also captured in the index — validate output before use

Dot-phrasePullsNote
.intakeoutputIntake/output, last 3 shiftsShift-windowed — sidesteps the Foundation IOBRIEF lookback gotcha
.ventsettingsVent settingsThe FLOW use case, pre-built
.lastwt3encLast weightDosing checks
.bsaBody surface area
.medsCurrent medsThis build's CMED
.avsmedlistplaintextcompactMeds by frequency, compact plain textDischarge-facing
.allergy · .prob · .hproblAllergies · problem list · hospital problem listMatch the Foundation names
.id · .name · .age · .dob · .sex · .los · .dol · .me · .nowPatient info / identity tokens.id = name/age/sex one-liner
Code status: verified in practice, not in the index. @CODESTATUS@ doesn't appear in the SmartLink index, but it resolved correctly in a real signed note (2026-07-01) — the index isn't exhaustive, so a missing entry means "test it," not "it doesn't exist." Stage 2's SDE-linked confirmation SmartList remains the upgrade if we want the pick to file discrete data. The index also lists an Active Lines report (the LDA data) and a Sepsis Checklist — worth knowing they exist even though this template doesn't pull them.

Stage 1 — candidate discrete-data SmartLinks

The baseline wildcards are deliberate. Of the outbound fields, only @CODESTATUS@ has signed-note output proof. Treat every other captured name and catalog entry as a discovery lead until it expands correctly on a training patient in this exact progress-note context.

Promote a candidate into a *** stop only after checking its meaning, time window, timestamp, compactness, oxygen-device handling where relevant, and whether it prints its own label. Mnemonics, parameter order, identifiers, and context availability can vary by Epic build; use the in-note help text and insert/search tools rather than typing an identifier from this page into production.

Labs — trended & most-recent values

Lab result familyLASTLABV · LASTLAB · LASTLABX · BRIEFLAB · LABRCNT · RESULTRCNT · LAB24

Candidate family for the timestamped Labs subsection. A useful expansion is compact, visibly dated, and limited to decision-relevant trends. LABRCNT may produce a columns-by-date panel, but the exact rendered shape and parameters still require an Avera training-patient test.

.LASTLABV[Duration,Format] Duration: #D / #W / #M / #Y (e.g. 6M = 6-month lookback; falls back to the last known result if nothing in-window) Format: blank = name+value+range+status+comment 1 = same, no comments 2 = abbreviated name+value only Documented example: .LASTLABV[,1 → last value, no comments

Site-specific: the other mnemonics in this family don't have a publicly documented bracket order — type the dot-command in Epic and read the help text for your build. Which labs you're pulling is selected by base name, and base names are curated per-org; ask your informatics team whether a base-name reference already exists internally before guessing.

Flowsheet rows — the workhorse for Objective data

FLOW

Virtually everything nursing charts — individual vital-sign components, neuro checks, drain/wound output, vent settings, glucose/insulin, telemetry, I/O — lives in flowsheet rows. This is the correct tool for anything more granular than the single @AVERAVS@ block.

.FLOW[FlowsheetRowIDs:Time:HideLabel:MyData:Disciplines:FiledOnly] 1. FlowsheetRowIDs — comma-separated FLO IDs, or a group ID 2. Time — LAST | FIRST | a specific 24h time (e.g. 0700) 3. HideLabel — 1 suppresses the label/linebreak 4. MyData — 1 = same discipline as you, 2 = current user only 5. Disciplines — e.g. 1 = NURSING 6. FiledOnly — 1 hides pended data Documented examples: .FLOW[5:LAST (latest for row 5) .FLOW[5,6:0800 (rows 5 & 6 at 8 AM) .FLOW[5:LAST::1 (latest, from your discipline) @FLOW(301050:LAST:1)@ (SmartPhrase token form) @FLOW(12345,12346,12347)@ (comma-delimited row set)

Site-specific: row IDs above (5, 6, 301050, 12345...) are illustrative — not yours. Find your FLO IDs via the .FLOW+Tab lookup (newer Epic versions), the Report & Print Group Assistant's "Debug Print Group" (Epic button → Help → Help Desk Reports), or right-click a flowsheet cell → Properties.

Lookback gotcha: time-window links like IOBRIEF/IODETAILS default to a window ending "now" — a note written at 10 AM gives a 10 AM–10 AM window unless your build team hardcodes a start time (e.g. 0700). This is the usual cause of "why is my I/O only 3 hours" complaints, and it's a build fix, not a workflow fix.

Lines / drains / airways (LDA)

There is no dedicated @LDA@ token. LDAs (vascular lines, drains including chest tubes/stents, airways, wounds/burns) are flowsheet groups — placement date, removal date, gauge, and location live once on the flowsheet data record for the LDA's first day; day-to-day assessments behave like normal flowsheet rows. Surface them via FLOW against the LDA group/row IDs, or via PRINTGROUP (HHS 35008).

Anti-bloat note: line-day/device-day counts for CLABSI/CAUTI compliance are normally computed in Reporting Workbench/Clarity, not a note SmartLink — printing a raw line-day count in every progress note adds volume without discrete value. Pull line + placement date only where it's actually decision-relevant, e.g. "day 6 central line, no CLABSI signs — plan to remove."

Imaging — impressions only

ImagingRISIMP24H · RISIMP72H · RISRSLTIMP

Pulls the radiology impression only, not the full report — exactly the right granularity for a progress note. Typed literally, e.g. @RISIMP72H@.

Micro / culture & sensitivity

MicroMICRORESULTSLAST24HOURS · MICRORESULTSLAST72HOURSRF · MICRORESULTSLAST7DAYSRF · MICRORESULTSLAST14DAYSRF

Surfaces discrete organism/susceptibility data your LLM would otherwise have to summarize from free text — high-value for ID-heavy and neutropenic-fever patients.

Meds, allergies, problems, diagnoses

MedsCMED

Current med list. Home/admission/discharge/changed-since variants are commonly built but are site-named — confirm your build's exact mnemonics rather than assuming @HMEDS@/@DCMEDS@ exist under those names.

AllergiesALG (summary) · ALGENC (as-of encounter, last-reviewed date) · ALGP (prose) · ALLERGY (table)
ProblemsPROB (list) · HPROBL (hospital problem list) · DIAGPOC (hospital problems formatted to document A&P against each)
DiagnosesDX (table) · DIAG (table + orders) · DIAGP (prose) · DIAGPRIM (primary + ICD) · ASSESSPLAN (dx in prose + associated orders/details)

Stage 2 — make the dispo schema discrete (builder ticket)

A plain SmartList only inserts text. It becomes a discrete-data capture tool when its record has "use discrete data" enabled and its options are mapped to a SmartData Element (SDE — HLX master file; values stored in HLV). This is the mechanism that turns a VTE-ppx or code-status pick into reportable, auditable data instead of dead text in a note — and it's the clearest safety/quality payoff of anything on this page, since code-status confirmation and VTE prophylaxis are Joint Commission core-measure territory.

Mechanical constraint: an SDE cannot link directly to a SmartPhrase — the phrase must contain an SDE-linked SmartList (or a SmartForm/NoteWriter block) to actually file discrete data.

For a value already captured elsewhere in the chart that you just want to display inline (not re-capture), the retrieval tools are CUIPAT (patient-level), CUIENC (encounter-level), and CUIEPI (episode-level), with option flags N (label only if a value exists), L (always show label), M (message if no value), and B (break to a new line only if data exists — lets you stack several SDE links without blank-line gaps). DBLINK retrieves arbitrary master-file items. These are builder-level tools, illustrated (not literal for your build) below:

@CUIPAT(2,not indicated,;,Comment: ,EPIC*94483)@ @DBLINK(EPT,131,,1,3,not indicated)@

Copy-ready request for your informatics/Bridges team:

Request: SDE-linked SmartLists for .DISPO5 Fields: DVT ppx (VTE prophylaxis), Code status (confirmation) Ask: Enable "use discrete data" on the VTE-prophylaxis and Code-Status SmartLists used in my .DISPO5 SmartPhrase, and map each option to a SmartData Element (HLX). Goal: selections become reportable/auditable data, not just note text. Note: an SDE cannot link directly to a SmartPhrase -- it must be reached through an SDE-linked SmartList embedded in the phrase. Preserve all five required DISPOSITION lines. Do not use empty-value suppression on DVT ppx, Code status, Diet, Dispo, or Follow-ups.

Stage 3 — conditional logic: the reality

Epic has no inline .if/.el/.end or @if@...@else@...@endif@ token inside SmartPhrases or SmartText. Branching output is delivered only through CER-rule-driven SmartLinks:

A CER rule is a configurable rule-logic record evaluated as TRUE/FALSE. Building rules (CER) and new SmartLinks (HHS) is typically restricted to project-team members — you'll need physician-builder access or your informatics/Bridges team, and every rule should be validated with the Rule Tester before it goes live.

Lower-effort partial conditionality that doesn't need a CER rule: SDE display flags can self-suppress optional content inside an existing section. They must never suppress one of the five required Disposition lines.

Copy-ready request for your informatics/Bridges team:

Request: v3.5-preserving CER/SmartText behavior All rule-driven output must remain inside the existing Hospitalist Progress Note v3.5 sections. Do not add, remove, rename, or reorder top-level sections. 1. Keep the required DVT ppx line present. When therapeutic anticoagulation is active, return the locally approved value for that state rather than suppressing the line. 2. Conditionally include Imaging, Microbiology, and Pathology content only inside OBJECTIVE 4C, preserving Imaging -> Microbiology -> Pathology order. 3. Any ICU- or oncology-specific content must render inside OBJECTIVE or the relevant numbered A&P problem, never as a new section. Validate every CER branch with the Rule Tester on training patients.

If you want to own this logic directly instead of ticketing it every time, Epic Physician Builder certification (e.g. CLN150-level coursework) is the fastest route — it's the credential that grants CER-rule and HHS SmartLink build access.

What NOT to add

The same anti-boilerplate discipline that governs somaNotes' own generated text (nothing ungrounded, nothing the doctor didn't ask for) applies to the Epic side of this template too:

Field crosswalk

somaNotes section Epic element Type Stage
Hospitalist titlestatic textStatic0 — exact canonical title
Date of Service***Clinician-controlled stop0 — @TD@ remains a late-entry candidate, not baseline
CC***AI paste zone0 — one canonical line
Brief Hospital Course Summary***AI paste zone0 — stateful narrative through yesterday
Three-paragraph Subjective***Multiline paste zone0 — keep all three paragraphs together
Objective 4A–4D***Multiline paste zone0 — Vitals, Labs, optional 4C, Exam stay ordered
A&P opening + #n problems*** / .SOMAPROBLEM35Multiline paste zone0 — arbitrary problem count
Chronic Stable Conditions***Separate required stop0 — pipe-delimited line or None
DVT ppx*** → SmartList → SDE-linked SmartListSmartList2 — Joint Commission core measure
Code status (display)@CODESTATUS@SmartLink0 — verified in a signed note (not in the index)
Code status (confirmation)SDE-linked SmartListSmartList2 — auditable attestation
Diet***AI paste zone0 — @ACTIVEDIET@ demoted: dumps a full order table (seen in signed note)
Dispo, Follow-ups***AI paste zone0 — clinical judgment, can't be discrete
Therapeutic anticoagulationDVT value / SDE-linked SmartListRequired field value2 — never suppress the DVT line
ICU/onco conditional contentRULESMARTLINK + CER ruleIn-section only3 — Objective or relevant A&P problem

Discovery & verification workflow (do this before building anything)

  1. In-note help text: type the dot-command (e.g. .LASTLAB, .FLOW) and read the *** HELP TEXT *** it returns — it lists your build's exact parameters.
  2. SmartLink/SmartList search: in SmartPhrase Manager or the SmartTool editor, type . plus a few letters to search available SmartLinks. Check the link's available contexts — a link that renders as bare @@ isn't evaluating in that context; make it available to all contexts if you need it everywhere.
  3. FLO IDs: the .FLOW+Tab picker (newer Epic versions), the Report & Print Group Assistant's "Debug Print Group," or right-click a flowsheet cell → Properties.
  4. SDEs: SmartData Manager (searchable; supports category: / sws: search syntax).
  5. CER rules & new HHS SmartLinks: require physician-builder privileges or your informatics/Bridges team — validate with the Rule Tester before deploying.
  6. Cross-org portability: SmartPhrase Manager can upload/download personal SmartPhrases and SmartLists between organizations, but IDs won't translate across sites — re-verify everything if you move builds.

Stage 1 upgrade path (after the baseline works)

  1. Swap any wildcard for a SmartLink from the catalog above once you've verified its mnemonic/ID for our build via the discovery workflow.
  2. In .DISPO5, click into the DVT ppx wildcard, use the toolbar's Insert SmartList, search "VTE prophylaxis" or "DVT," pick our build's list. Epic resolves the real ID — you never type one.
  3. Stage 2/3 aren't self-service — file the copy-ready request text above with the informatics/Bridges team and reference this page.

Evidence for the discrete-data-first approach

Levy et al., JMIR Formative Research 2023;7:e41223 (NYU Langone Health). Inpatient-medicine progress-note redesign, usability-tested with 22 providers, mean System Usability Scale 90.6/100. Reported 46% / 47% / 32% reductions in note length for general-medicine progress notes, consults, and H&Ps respectively. Core principle: replace auto-imported data dumps with link-outs to data visualizations rather than pasting everything into the note.
Carro et al., Wisconsin Medical Journal 2025;124(3):236 (Medical College of Wisconsin, pediatric hospital medicine). "The Empty SmartLink Solution" — a CER rule plus a wildcard hard-stop so an unpopulated H&P section prompts the provider to complete it, targeting a drop in "no PMH/PSH/FH/AHP on file" rates from a 7.9–18.7% baseline to under 5%. A published, concrete example of CER-rule-driven conditional documentation behavior.
Chong et al., Applied Clinical Informatics 2022;13(5):1033–1039 (UC San Diego / Rady Children's). "Disappearing Help Text" — inline {F2/Delete: ...} instructions that must be removed before signing. Reduced notes using any lab SmartLink from 90.2% to 15.3% (admission notes) and 92.6% to 17.8% (progress notes), with an 18.7% character-count reduction in progress notes (p<0.001).
Counter-example — 2021 E/M template study, Applied Clinical Informatics (accepted 2024, doi:10.1055/a-2367-8564). Satisfaction rose (81% favorable), but with no significant change in note length. A reality check: template redesign alone doesn't shorten notes without discipline about what's auto-imported — the discrete-pull-and-prune discipline above is the part that actually does the work.
Beyond copy-paste — the real API path: true write-back (somaNotes pushing text into Epic with zero paste) exists, but it isn't a browser-side feature. Epic exposes a FHIR R4 DocumentReference create endpoint to backend apps registered through Epic App Orchard / Epic on FHIR, with OAuth2 credentials issued by your hospital's Epic interface (Bridges) team after a security review — a backend + hospital-IT governance project measured in weeks to months. This SmartPhrase pair, plus the Stage 1–3 roadmap above, is the legitimate bridge in the meantime.
Site-specificity is non-negotiable: every FLO ID, lab base name, SmartList ID, SDE ID, and CER rule ID on this page is illustrative — the command grammar is Epic Foundation and portable, the identifiers are yours to resolve in your own build tools. Do not paste an ID from this page into production without verifying it first.