Patient Group

The Canvas SDK provides effects for managing patient membership in groups. These effects are idempotent — adding a patient who is already a member or deactivating a patient who is not an active member will have no effect.

PatientGroupEffect #

An effect class for performing actions on a patient group. Instantiate it with a group_id, then call methods to add or deactivate members.

Attributes #

AttributeTypeDescriptionRequired
group_idUUIDThe id of the patient groupYes

Methods #

add_member(patient_ids: list[str]) -> Effect #

Ensures one or more patients are members of the group.

ParameterTypeDescription
patient_idslist[str]List of patient ids to add to the group

deactivate_member(patient_ids: list[str]) -> Effect #

Ensures one or more patients are not active members of the group. If a patient is currently locked in the group, this effect will be ignored for that patient.

ParameterTypeDescription
patient_idslist[str]List of patient ids to deactivate from the group

Example Usage #

from canvas_sdk.effects import Effect
from canvas_sdk.effects.patient_group import PatientGroupEffect
from canvas_sdk.events import EventType
from canvas_sdk.handlers import BaseHandler
from canvas_sdk.v1.data import Patient, PatientGroup


class AddMemberHandler(BaseHandler):
    RESPONDS_TO = EventType.Name(EventType.PATIENT_UPDATED)

    def compute(self) -> list[Effect]:
        """Add patients to a group."""
        patient = Patient.objects.get(id=self.target)
        group = PatientGroup.objects.first()

        effect = PatientGroupEffect(group_id=str(group.id))
        return [effect.add_member(patient_ids=[str(patient.id)])]


class DeactivateMemberHandler(BaseHandler):
    RESPONDS_TO = EventType.Name(EventType.PATIENT_UPDATED)

    def compute(self) -> list[Effect]:
        """Deactivate a patient from a group."""
        patient = Patient.objects.get(id=self.target)
        group = PatientGroup.objects.first()

        effect = PatientGroupEffect(group_id=str(group.id))
        return [effect.deactivate_member(patient_ids=[str(patient.id)])]