Skip to content

Clinician credentialing ​

Credentialing a clinician before their first shift: one flow collects the licence, its status and expiry and the malpractice history, a screening step checks an exclusion list, and files with findings go to a credentialing committee. Pack: examples/policies/clinician-credentialing/.

A pattern for expressing a healthcare credentialing policy, not compliance guidance: the thresholds, lists and fields are placeholders chosen to make the example run; a real policy comes from the business's own rules. The screen step needs mock-sanctions installed (Connect › Apps; no configuration or secrets).

The decision it automates ​

Whether to credential the clinician, refer the file to the committee, or decline it, when the file is submitted.

Data expected ​

  • The clinician as a subject (kind user); nothing is read from its data.
  • The flow's answers under submission: fullName, licenceNumber, licenceStatus, licenceExpiry (YYYY-MM-DD), malpracticeClaims and an optional licence copy.
  • The screen step's answer under exclusions (hit, matches).

Steps and rules ​

StepTypeWhy
collectwait_for_collectionThe credentialing flow.
screencall_appmock-sanctions screen on submission.fullName, standing in for an exclusion-list app you build against your sources.
rulesevaluate_rulesThe credentialing rule set under max_severity.
routebranchrules.outcome == manual_review opens a case.
reviewcreate_casecredentialing_committee, 7-day SLA.
decideemit_decisionFrom the rules, or the reviewer's decision.

The rule set credentialing (useCase: onboarding) uses max_severity: a failed block rule rejects, a failed warn rule sends the run to review, and the weights add up to the score.

RuleTypeSeverity, weightFails when
cred_not_excludedcomparisonblock, 100the screen found a match
cred_licence_activecomparisonblock, 100licenceStatus is expired
cred_licence_restrictedcomparisonwarn, 30licenceStatus is restricted
cred_expiry_soonexpressionwarn, 20licenceExpiry is less than 90 days away
cred_malpracticescore thresholdwarn, 30malpracticeClaims is above 1

What a reviewer sees ​

A credentialing_committee case with the file, the licence copy and each rule's result; the committee's notes and attachments become part of the record.

How to adapt it ​

Replace the screening step with your exclusion-list app and add a licence lookup app (both built with the SDK) so status and expiry come from the source rather than the form. Your scheduler starts the same workflow again before each credential expires.

Run it ​

bash
pnpm policy:import examples/policies/clinician-credentialing --publish

The fixture submits an active licence with a restriction that expires in 2030 and no malpractice claims: the screen finds no match, the restriction rule fails, a credentialing_committee case opens, the check approves it and the run completes with a manual approve.

Released under the Apache-2.0 License.