Completes a CDS Hooks flow — sends the response back to the EHR using the
msg.ch.cds.responder callback attached by an upstream CDS Hooks In node.
Response modes
- Design the card here
- Build one or more cards in the editor — summary, detail, indicator, source, topic code, and links —
with a live preview. Add card adds another; click a card's header to open or close it, drag ☰ to set
the order the EHR receives them in, ⧉ duplicates and ✕ removes. The CDS Hooks response carries an array of
cards; how several are laid out on screen is up to the EHR. Done stays disabled while a card has a
field error (shown in red under the field). Text fields
accept
{{payload.path}} placeholders filled from the message at runtime. A card whose Summary
renders empty is left out; if all are, an empty response is sent.
- Cards from msg.payload
- The flow builds the response:
{ cards, systemActions? }, an array of cards, or a single
card. Required for suggestions (Condition.Create for problems or encounter diagnoses,
MedicationRequest/ServiceRequest create or delete for unsigned orders) and systemActions
(ServiceRequest.Update annotations). Cards are normalized: uuid generated if missing,
indicator defaults to info, source.label defaults to
"ConnectHealth CDS", every suggestion gets a uuid and selectionBehavior
defaults to "any".
- No card
- Sends
{ "cards": [] } — a valid "no decision support needed" reply.
Card fields (Design mode, per card)
- Summary string
- Headline, required, up to 140 characters. If placeholders make it longer at runtime, it is truncated.
- Detail string
- Body text. Markdown by default (the CDS Hooks standard). Plain text or HTML are passed to the EHR through
its own mechanism where it has one (see EHR notes); otherwise the EHR treats the text as markdown.
Placeholder values are HTML-escaped in HTML mode.
- Indicator info | warning | critical
- Severity. The EHR maps these to its own alert styles.
- Source label / URL / icon
- Attribution shown on the card. URL and icon must be full
http:// or https://
URLs; the URL may include placeholders.
- Topic code string
source.topic.code — a fixed id per kind of card. EHRs key a clinician's override to it, so keep
it the same while the card means the same thing. Letters and digits only, up to 100 characters, which every
supported EHR accepts (see EHR notes).
- Links
absolute (web page) or smart (SMART app launch — the health system usually has
to allow-list the app), optional appContext and autolaunchable.
Outputs
Re-emits the message with the response this node built at msg.ch.cds.response (and
msg.payload), for downstream debug or logging nodes. Before it is sent, the connection's EHR may
adapt it (see EHR notes). Each card's uuid is what the EHR sends back as card on
the CDS Hooks In node's Feedback output.
Best Practices
- Keep patient detail on the card to what the clinician needs — the card is shown in the EHR, and the
output message can reach debug and logging nodes.
- Answer fast. If nothing responds within 8 seconds, the EHR gets an empty response and anything sent
later is dropped.
- Send cards only when there's something to act on. Route the "nothing to show" branch to a
No card response node to avoid alert fatigue.
EHR notes
- Epic
- Plain text and HTML details are sent with Epic's content-type extension. A topic code must be letters and
digits, up to 100 characters — others are left off the card. SMART app links must be allow-listed by the
health system, and auto-launch needs Epic Aug '23 or later.