Outreach: per-patient channel preference, agent assignment, and the contact transcript in the chart — #568 covers a third of the ask

Open
#584 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Active
Tech stack
typescript
Domain
backend

Research direction

Start with case/outreach-channel.ts and review #568 to understand the existing channel adapters and attempt ladder. Then read the sequencing and dependencies on #565/#564, resolve where per-patient preference should live, and define completion around recording and honoring that preference without enabling real outreach on the demo stack.

Written by the indexing model from the issue text.

Description

backend enhancement

On the 2026-08-27 session the framing was: a gap can be assigned to a person or to an agent, the agent reaches the patient through the channel that patient prefers, and the transcript of that contact is written to the chart.

Three distinct things, and only the channels exist.

What exists. case/outreach-channel.ts has EMAIL, SMS and PHONE adapters, simulated by default and required to stay simulated on the demo stack (CLAUDE.md hard rule). Campaigns exist (#75). #568 covers the attempt ladder — text, then email, then phone — which is a policy layer over those channels.

What does not.

  1. Per-patient channel preference. Nothing on a subject records how they want to be reached, and nothing reads it. The ladder in #568 is a fixed order for everybody, which is not what was asked for and is a worse product: a patient who has said "don't text me" gets texted first, every cycle.
  2. Agent assignment. assignee is an account from the hardcoded demo directory. There is no notion of a non-human assignee, no queue an agent works, and no record distinguishing "a person called them" from "the system called them" — which matters the moment anyone asks how a patient was actually contacted.
  3. The transcript in the chart. This half lives inside #565 (the WebChart write path) and is blocked there.

Sequencing. (1) is buildable today and is the prerequisite for the other two — a preference nobody records cannot be honoured by a person or an agent. It needs a decision on where preference lives: a WorkWell-side field (ours, immediately available, another place the chart and WorkWell can disagree) or a WebChart field read at ingest (right, blocked on #565/#564's access). (2) needs (1) plus a decision about whether WorkWell hosts the agent at all, given the calling product is a separate product. (3) is blocked.

Filing this because #568 reads, at a glance, as though it covers the outreach ask. It covers a third of it.

Found while re-auditing the four pilot source documents on 2026-09-18. Related: #568, #565, #75.

Dominant language
TypeScript
Stars
0
Forks
0
Avg merge
6h 6m
Merged PRs (30d)
69

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from Taleef7/workwell

All issues in Taleef7/workwell

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.