canvas 0.1.12b0__py3-none-any.whl → 0.1.15__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of canvas might be problematic. Click here for more details.
- {canvas-0.1.12b0.dist-info → canvas-0.1.15.dist-info}/METADATA +43 -2
- canvas-0.1.15.dist-info/RECORD +95 -0
- {canvas-0.1.12b0.dist-info → canvas-0.1.15.dist-info}/WHEEL +1 -1
- canvas_cli/apps/plugin/__init__.py +3 -1
- canvas_cli/apps/plugin/plugin.py +74 -0
- canvas_cli/main.py +5 -3
- canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +3 -0
- canvas_generated/data_access_layer/data_access_layer_pb2.py +30 -0
- canvas_generated/data_access_layer/data_access_layer_pb2.pyi +23 -0
- canvas_generated/data_access_layer/data_access_layer_pb2_grpc.py +66 -0
- canvas_generated/messages/effects_pb2.py +28 -0
- canvas_generated/messages/effects_pb2.pyi +147 -0
- canvas_generated/messages/events_pb2.py +31 -0
- {generated → canvas_generated}/messages/events_pb2.pyi +3 -1
- {generated → canvas_generated}/messages/plugins_pb2.py +7 -7
- canvas_generated/services/plugin_runner_pb2.py +28 -0
- {generated → canvas_generated}/services/plugin_runner_pb2.pyi +2 -2
- {generated → canvas_generated}/services/plugin_runner_pb2_grpc.py +14 -14
- canvas_sdk/base.py +45 -0
- canvas_sdk/commands/base.py +61 -41
- canvas_sdk/commands/commands/assess.py +6 -2
- canvas_sdk/commands/commands/diagnose.py +4 -14
- canvas_sdk/commands/commands/goal.py +3 -2
- canvas_sdk/commands/commands/history_present_illness.py +2 -1
- canvas_sdk/commands/commands/medication_statement.py +6 -2
- canvas_sdk/commands/commands/plan.py +2 -1
- canvas_sdk/commands/commands/prescribe.py +24 -11
- canvas_sdk/commands/commands/questionnaire.py +6 -2
- canvas_sdk/commands/commands/reason_for_visit.py +13 -6
- canvas_sdk/commands/commands/stop_medication.py +6 -2
- canvas_sdk/commands/commands/update_goal.py +4 -1
- canvas_sdk/commands/tests/test_utils.py +31 -64
- canvas_sdk/commands/tests/tests.py +116 -65
- canvas_sdk/data/__init__.py +1 -0
- canvas_sdk/data/base.py +22 -0
- canvas_sdk/data/data_access_layer_client.py +95 -0
- canvas_sdk/data/exceptions.py +16 -0
- canvas_sdk/data/patient.py +26 -0
- canvas_sdk/data/staff.py +6 -0
- canvas_sdk/data/task.py +60 -0
- canvas_sdk/effects/__init__.py +1 -1
- canvas_sdk/effects/banner_alert/__init__.py +2 -0
- canvas_sdk/effects/banner_alert/add_banner_alert.py +49 -0
- canvas_sdk/effects/banner_alert/remove_banner_alert.py +20 -0
- canvas_sdk/effects/base.py +4 -6
- canvas_sdk/events/__init__.py +1 -1
- canvas_sdk/handlers/__init__.py +1 -0
- canvas_sdk/handlers/base.py +16 -0
- canvas_sdk/handlers/cron_task.py +35 -0
- canvas_sdk/protocols/base.py +2 -11
- canvas_sdk/utils/stats.py +27 -0
- logger/__init__.py +2 -0
- logger/logger.py +48 -0
- canvas-0.1.12b0.dist-info/RECORD +0 -78
- canvas_sdk/effects/banner_alert/banner_alert.py +0 -37
- canvas_sdk/effects/banner_alert/constants.py +0 -19
- generated/messages/effects_pb2.py +0 -28
- generated/messages/effects_pb2.pyi +0 -25
- generated/messages/events_pb2.py +0 -31
- generated/services/plugin_runner_pb2.py +0 -28
- {canvas-0.1.12b0.dist-info → canvas-0.1.15.dist-info}/entry_points.txt +0 -0
- {generated → canvas_generated}/messages/effects_pb2_grpc.py +0 -0
- {generated → canvas_generated}/messages/events_pb2_grpc.py +0 -0
- {generated → canvas_generated}/messages/plugins_pb2.pyi +0 -0
- {generated → canvas_generated}/messages/plugins_pb2_grpc.py +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"""Data Access Layer exceptions."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class DataModuleError(RuntimeError):
|
|
5
|
+
"""
|
|
6
|
+
General Data Access Layer error; base class and also used to represent errors of indeterminate
|
|
7
|
+
cause.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
pass
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class DataModuleNotFoundError(DataModuleError):
|
|
14
|
+
"""Object not found error."""
|
|
15
|
+
|
|
16
|
+
pass
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from datetime import date
|
|
2
|
+
from typing import Self
|
|
3
|
+
|
|
4
|
+
from canvas_sdk.data import DataModel
|
|
5
|
+
|
|
6
|
+
from .data_access_layer_client import DAL_CLIENT
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Patient(DataModel):
|
|
10
|
+
"""Patient model."""
|
|
11
|
+
|
|
12
|
+
id: str | None = None
|
|
13
|
+
first_name: str | None = None
|
|
14
|
+
last_name: str | None = None
|
|
15
|
+
birth_date: date | None = None
|
|
16
|
+
|
|
17
|
+
@classmethod
|
|
18
|
+
def get(cls, id: str) -> Self:
|
|
19
|
+
"""Given an ID, get the Patient from the Data Access Layer."""
|
|
20
|
+
patient = DAL_CLIENT.get_patient(id)
|
|
21
|
+
return cls(
|
|
22
|
+
id=patient.id,
|
|
23
|
+
first_name=patient.first_name or None,
|
|
24
|
+
last_name=patient.last_name or None,
|
|
25
|
+
birth_date=date.fromisoformat(patient.birth_date) if patient.birth_date else None,
|
|
26
|
+
)
|
canvas_sdk/data/staff.py
ADDED
canvas_sdk/data/task.py
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
from enum import Enum
|
|
3
|
+
|
|
4
|
+
from canvas_sdk.data import DataModel
|
|
5
|
+
from canvas_sdk.data.patient import Patient
|
|
6
|
+
from canvas_sdk.data.staff import Staff
|
|
7
|
+
from canvas_sdk.effects import Effect, EffectType
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Task(DataModel):
|
|
11
|
+
class Meta(DataModel.Meta):
|
|
12
|
+
create_required_fields = ("title",)
|
|
13
|
+
|
|
14
|
+
class Status(Enum):
|
|
15
|
+
COMPLETED = "Completed"
|
|
16
|
+
CLOSED = "Closed"
|
|
17
|
+
OPEN = "Open"
|
|
18
|
+
|
|
19
|
+
id: str | None = None
|
|
20
|
+
assignee: Staff | None = None
|
|
21
|
+
patient: Patient | None = None
|
|
22
|
+
title: str | None = None
|
|
23
|
+
due: datetime | None = None
|
|
24
|
+
status: Status | None = None
|
|
25
|
+
comments: "list[TaskComment] | None" = None
|
|
26
|
+
labels: list[str] | None = None
|
|
27
|
+
|
|
28
|
+
def create(self) -> Effect:
|
|
29
|
+
self._validate_before_effect("create")
|
|
30
|
+
return Effect(type=EffectType.CREATE_TASK, payload=self.model_dump_json_nested())
|
|
31
|
+
|
|
32
|
+
def update(self) -> Effect:
|
|
33
|
+
self._validate_before_effect("update")
|
|
34
|
+
payload = self.model_dump_json_nested(exclude_unset=True)
|
|
35
|
+
return Effect(type=EffectType.UPDATE_TASK, payload=payload)
|
|
36
|
+
|
|
37
|
+
def add_comment(self, comment: str) -> Effect:
|
|
38
|
+
if not self.id:
|
|
39
|
+
raise ValueError("Cannot add a comment to a Task without an id")
|
|
40
|
+
task_comment = TaskComment(task=self, body=comment)
|
|
41
|
+
task_comment._validate_before_effect("create")
|
|
42
|
+
return Effect(
|
|
43
|
+
type=EffectType.CREATE_TASK_COMMENT,
|
|
44
|
+
payload=task_comment.model_dump_json_nested(exclude_unset=True),
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class TaskComment(DataModel):
|
|
49
|
+
class Meta:
|
|
50
|
+
create_required_fields = (
|
|
51
|
+
"body",
|
|
52
|
+
"task",
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
id: str | None = None
|
|
56
|
+
task: Task | None = None
|
|
57
|
+
body: str | None = None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
Task.model_rebuild()
|
canvas_sdk/effects/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
from
|
|
1
|
+
from canvas_generated.messages.effects_pb2 import Effect, EffectType
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from enum import Enum
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from pydantic import Field
|
|
5
|
+
|
|
6
|
+
from canvas_sdk.effects.base import EffectType, _BaseEffect
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AddBannerAlert(_BaseEffect):
|
|
10
|
+
"""
|
|
11
|
+
An Effect that will result in a banner alert in Canvas.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
class Meta:
|
|
15
|
+
effect_type = EffectType.ADD_BANNER_ALERT
|
|
16
|
+
|
|
17
|
+
class Placement(Enum):
|
|
18
|
+
CHART = "chart"
|
|
19
|
+
TIMELINE = "timeline"
|
|
20
|
+
APPOINTMENT_CARD = "appointment_card"
|
|
21
|
+
SCHEDULING_CARD = "scheduling_card"
|
|
22
|
+
PROFILE = "profile"
|
|
23
|
+
|
|
24
|
+
class Intent(Enum):
|
|
25
|
+
INFO = "info"
|
|
26
|
+
WARNING = "warning"
|
|
27
|
+
ALERT = "alert"
|
|
28
|
+
|
|
29
|
+
patient_id: str
|
|
30
|
+
key: str
|
|
31
|
+
narrative: str = Field(max_length=90)
|
|
32
|
+
placement: list[Placement] = Field(min_length=1)
|
|
33
|
+
intent: Intent
|
|
34
|
+
href: str | None = None
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
def values(self) -> dict[str, Any]:
|
|
38
|
+
"""The BannerAlert's values."""
|
|
39
|
+
return {
|
|
40
|
+
"narrative": self.narrative,
|
|
41
|
+
"placement": [p.value for p in self.placement],
|
|
42
|
+
"intent": self.intent.value,
|
|
43
|
+
"href": self.href,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@property
|
|
47
|
+
def effect_payload(self) -> dict[str, Any]:
|
|
48
|
+
"""The payload of the effect."""
|
|
49
|
+
return {"patient": self.patient_id, "key": self.key, "data": self.values}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from canvas_sdk.effects.base import EffectType, _BaseEffect
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class RemoveBannerAlert(_BaseEffect):
|
|
7
|
+
"""
|
|
8
|
+
An Effect that will remove/inactivate a banner alert in Canvas.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
class Meta:
|
|
12
|
+
effect_type = EffectType.REMOVE_BANNER_ALERT
|
|
13
|
+
|
|
14
|
+
patient_id: str
|
|
15
|
+
key: str
|
|
16
|
+
|
|
17
|
+
@property
|
|
18
|
+
def effect_payload(self) -> dict[str, Any]:
|
|
19
|
+
"""The payload of the effect."""
|
|
20
|
+
return {"patient": self.patient_id, "key": self.key}
|
canvas_sdk/effects/base.py
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import json
|
|
1
2
|
from typing import Any
|
|
2
3
|
|
|
3
4
|
from pydantic import BaseModel, ConfigDict
|
|
4
5
|
|
|
5
|
-
from canvas_sdk.effects import Effect
|
|
6
|
+
from canvas_sdk.effects import Effect, EffectType
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
class _BaseEffect(BaseModel):
|
|
@@ -11,7 +12,7 @@ class _BaseEffect(BaseModel):
|
|
|
11
12
|
"""
|
|
12
13
|
|
|
13
14
|
class Meta:
|
|
14
|
-
effect_type =
|
|
15
|
+
effect_type = EffectType.UNKNOWN_EFFECT
|
|
15
16
|
|
|
16
17
|
model_config = ConfigDict(strict=True, validate_assignment=True)
|
|
17
18
|
|
|
@@ -24,7 +25,4 @@ class _BaseEffect(BaseModel):
|
|
|
24
25
|
return {"data": self.values}
|
|
25
26
|
|
|
26
27
|
def apply(self) -> Effect:
|
|
27
|
-
return
|
|
28
|
-
"type": self.Meta.effect_type,
|
|
29
|
-
"payload": self.effect_payload,
|
|
30
|
-
}
|
|
28
|
+
return Effect(type=self.Meta.effect_type, payload=json.dumps(self.effect_payload))
|
canvas_sdk/events/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
from
|
|
1
|
+
from canvas_generated.messages.events_pb2 import Event, EventResponse, EventType
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from canvas_sdk.handlers.base import BaseHandler
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class BaseHandler:
|
|
5
|
+
"""
|
|
6
|
+
The class that all handlers inherit from.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
def __init__(self, event, secrets=None) -> None:
|
|
10
|
+
self.event = event
|
|
11
|
+
try:
|
|
12
|
+
self.context = json.loads(event.context)
|
|
13
|
+
except ValueError:
|
|
14
|
+
self.context = {}
|
|
15
|
+
self.target = event.target
|
|
16
|
+
self.secrets = secrets or {}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
|
|
3
|
+
import arrow
|
|
4
|
+
from cron_converter import Cron
|
|
5
|
+
|
|
6
|
+
from canvas_sdk.effects import Effect
|
|
7
|
+
from canvas_sdk.events import EventType
|
|
8
|
+
from canvas_sdk.handlers.base import BaseHandler
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class CronTask(BaseHandler):
|
|
12
|
+
"""
|
|
13
|
+
A type of handler that executes periodically according to a provided schedule.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
RESPONDS_TO = EventType.Name(EventType.CRON)
|
|
17
|
+
|
|
18
|
+
SCHEDULE: str = "" # e.g. "* * * * *" for every minute.
|
|
19
|
+
|
|
20
|
+
@abstractmethod
|
|
21
|
+
def execute(self) -> list[Effect]:
|
|
22
|
+
"""
|
|
23
|
+
Perform some work and return a list of effects.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def compute(self) -> list[Effect]:
|
|
27
|
+
"""
|
|
28
|
+
See if the task should execute given the timestamp.
|
|
29
|
+
"""
|
|
30
|
+
if not self.SCHEDULE:
|
|
31
|
+
raise ValueError("You must set a SCHEDULE.")
|
|
32
|
+
datetime = arrow.get(self.target).datetime
|
|
33
|
+
if datetime in Cron(self.SCHEDULE):
|
|
34
|
+
return self.execute()
|
|
35
|
+
return []
|
canvas_sdk/protocols/base.py
CHANGED
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
from canvas_sdk.handlers.base import BaseHandler
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
class BaseProtocol:
|
|
4
|
+
class BaseProtocol(BaseHandler):
|
|
5
5
|
"""
|
|
6
6
|
The class that protocols inherit from.
|
|
7
7
|
"""
|
|
8
|
-
|
|
9
|
-
def __init__(self, event, secrets=None) -> None:
|
|
10
|
-
self.event = event
|
|
11
|
-
try:
|
|
12
|
-
self.context = json.loads(event.context)
|
|
13
|
-
except ValueError:
|
|
14
|
-
self.context = {}
|
|
15
|
-
self.target = event.target
|
|
16
|
-
self.secrets = secrets or {}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from time import time
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def get_duration_ms(start_time: time) -> int:
|
|
6
|
+
return int((time() - start_time) * 1000)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
LINE_PROTOCOL_TRANSLATION = str.maketrans(
|
|
10
|
+
{
|
|
11
|
+
",": r"\,",
|
|
12
|
+
"=": r"\=",
|
|
13
|
+
" ": r"\ ",
|
|
14
|
+
":": r"__",
|
|
15
|
+
}
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def tags_to_line_protocol(tags: dict[str, Any]) -> str:
|
|
20
|
+
"""Generate a tags string compatible with the InfluxDB line protocol.
|
|
21
|
+
|
|
22
|
+
See: https://docs.influxdata.com/influxdb/v1.1/write_protocols/line_protocol_tutorial/
|
|
23
|
+
"""
|
|
24
|
+
return ",".join(
|
|
25
|
+
f"{tag_name}={str(tag_value).translate(LINE_PROTOCOL_TRANSLATION)}"
|
|
26
|
+
for tag_name, tag_value in tags.items()
|
|
27
|
+
)
|
logger/__init__.py
ADDED
logger/logger.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
from pubsub.pubsub import Publisher
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class PubSubLogHandler(logging.Handler):
|
|
8
|
+
def __init__(self) -> None:
|
|
9
|
+
self.publisher = Publisher()
|
|
10
|
+
logging.Handler.__init__(self=self)
|
|
11
|
+
|
|
12
|
+
def emit(self, record) -> None:
|
|
13
|
+
message = self.format(record)
|
|
14
|
+
self.publisher.publish(message)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class PluginLogger:
|
|
18
|
+
def __init__(self) -> None:
|
|
19
|
+
self.logger = logging.getLogger("plugin_runner_logger")
|
|
20
|
+
self.logger.setLevel(logging.INFO)
|
|
21
|
+
log_prefix = os.getenv("HOSTNAME", "")
|
|
22
|
+
if log_prefix != "":
|
|
23
|
+
log_prefix = f"[{log_prefix}] "
|
|
24
|
+
formatter = logging.Formatter(f"{log_prefix}%(levelname)s %(asctime)s %(message)s")
|
|
25
|
+
|
|
26
|
+
streaming_handler = logging.StreamHandler()
|
|
27
|
+
streaming_handler.setFormatter(formatter)
|
|
28
|
+
self.logger.addHandler(streaming_handler)
|
|
29
|
+
|
|
30
|
+
if os.getenv("REDIS_ENDPOINT"):
|
|
31
|
+
pubsub_handler = PubSubLogHandler()
|
|
32
|
+
pubsub_handler.setFormatter(formatter)
|
|
33
|
+
self.logger.addHandler(pubsub_handler)
|
|
34
|
+
|
|
35
|
+
def debug(self, message) -> None:
|
|
36
|
+
self.logger.debug(message)
|
|
37
|
+
|
|
38
|
+
def info(self, message) -> None:
|
|
39
|
+
self.logger.info(message)
|
|
40
|
+
|
|
41
|
+
def warning(self, message) -> None:
|
|
42
|
+
self.logger.warning(message)
|
|
43
|
+
|
|
44
|
+
def error(self, message) -> None:
|
|
45
|
+
self.logger.error(message)
|
|
46
|
+
|
|
47
|
+
def critical(self, message) -> None:
|
|
48
|
+
self.logger.critical(message)
|
canvas-0.1.12b0.dist-info/RECORD
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
canvas_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
canvas_cli/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
canvas_cli/apps/auth/__init__.py,sha256=gIwJ2qWvRlLqbiRkudrGqTKV-orlb8OTkG487qoRda4,105
|
|
4
|
-
canvas_cli/apps/auth/tests.py,sha256=WK7hSLTK95gEweMRaj3RdPC-qSwjnuulxMUg6D0bY_k,4528
|
|
5
|
-
canvas_cli/apps/auth/utils.py,sha256=IH5oZB3pdlb4_FRfCZKkNTncx_kdKagpiBqlhtM8h2U,5434
|
|
6
|
-
canvas_cli/apps/logs/__init__.py,sha256=ehY9SRb6nBw81xZF50yyBlUZJtNR2VeVSNI5sFuWJ7o,64
|
|
7
|
-
canvas_cli/apps/logs/logs.py,sha256=Ixue8Z1wgxABunVIx6TzmsH6oZ0FPf2H51Sd3nFUnAI,1969
|
|
8
|
-
canvas_cli/apps/plugin/__init__.py,sha256=72Gcu2T9GsRLPbBApS9V0ZKSzehEE3hqgU_pie2T50Y,190
|
|
9
|
-
canvas_cli/apps/plugin/plugin.py,sha256=03Xq7Xhvu6GszGPtIDWB3iMr1i_AZ9UPc6est2qoUK4,9362
|
|
10
|
-
canvas_cli/apps/plugin/tests.py,sha256=_8fHTGlQermt4AVs20nsTYcs2bDRNEqr9CGE29pD6YQ,1035
|
|
11
|
-
canvas_cli/conftest.py,sha256=pGvVS6VT0Zll_Lp3ezLh2jykOk-2HTBVH8RP5FwLUVw,930
|
|
12
|
-
canvas_cli/main.py,sha256=RbGZtIBmm81GUkN_80u_VB-CL7kxwID_GoDbkSgo7LQ,3607
|
|
13
|
-
canvas_cli/templates/plugins/default/cookiecutter.json,sha256=dWEB3wJ8U4bko8jX26PgLLg_jgWlafLTNqsGnY1PUcg,124
|
|
14
|
-
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json,sha256=9N0u5hN0GqjPvUh_B3YHtvyntEvxUGbInbQeprU0TS0,787
|
|
15
|
-
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md,sha256=7QdF2JWlWwq6Us9LzkO9XWJU4IU7Q6RD_w8ImcS-hrI,347
|
|
16
|
-
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py,sha256=rWil6oyKCULwCwKJDC_7j9gyOrShU8BxMV1RvlVsh0o,2189
|
|
18
|
-
canvas_cli/tests.py,sha256=LgiHeVHF5lxlH_pNT962uk-5D-JqNhhuu1LhSz90nK8,285
|
|
19
|
-
canvas_cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
canvas_cli/utils/context/__init__.py,sha256=HhYvI-hydP0mV18nJiU7uo5gk0yN7EYNgouxieoGDOE,102
|
|
21
|
-
canvas_cli/utils/context/context.py,sha256=Q-MniBuvzDKhLODOOrOVdaRTLz9Lp0m7cAz-i6YRRpA,5138
|
|
22
|
-
canvas_cli/utils/context/tests.py,sha256=aNmAggwvjKV-1WrgIvp66M46EX2QCbbHmity3bSCBTg,4211
|
|
23
|
-
canvas_cli/utils/print/__init__.py,sha256=zkRiQCUhPIB3wNGeJ1Hwfd12zJyvbRRiWqequJORvdE,88
|
|
24
|
-
canvas_cli/utils/print/print.py,sha256=GejLUtC5hfWuKHUBapyEwVHNIaIILxW60_xBQchiGpI,1420
|
|
25
|
-
canvas_cli/utils/print/tests.py,sha256=4kqp_uMpUUjSXokD_Hxs2aMyx50_JzGABAQoNC4XTrM,2376
|
|
26
|
-
canvas_cli/utils/urls/__init__.py,sha256=08hlrQhQ1pKBjlIRaC0j53IkgK723jfK8-j3djvR0ko,81
|
|
27
|
-
canvas_cli/utils/urls/tests.py,sha256=opXDF2i3lXTdsKJ7ywIRzWDDzZ5KAO0JbGIR3hbJdoE,407
|
|
28
|
-
canvas_cli/utils/urls/urls.py,sha256=KwWTh5ERrEsZEvdBrZpZB71xtyWkDuglpXUbycWmBOo,798
|
|
29
|
-
canvas_cli/utils/validators/__init__.py,sha256=rBvSR2O1hWkNAnUBdcr-zUkmqT796_A61b9pnvEhwrM,113
|
|
30
|
-
canvas_cli/utils/validators/manifest_schema.py,sha256=SIMpr_vTV8dtkO9cjsRnZZtRm5tgGkPR6QewTG8CztI,3117
|
|
31
|
-
canvas_cli/utils/validators/tests.py,sha256=cZHLSx7oteOfLOoU1tXGvw88n6itcvUT2B3ZBg-bmEY,1206
|
|
32
|
-
canvas_cli/utils/validators/validators.py,sha256=RKDKxIvZ1IuCPVuhQ1KHdpwu7aewAqT9ZX-nA-LZDdg,1614
|
|
33
|
-
canvas_sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
-
canvas_sdk/commands/__init__.py,sha256=4JTiljkBJ2Da2mU3_VAJ5dcpxg0X3QAocYJBBMJRpGc,1116
|
|
35
|
-
canvas_sdk/commands/base.py,sha256=qVgZMBFwdHw6Y66TN68QNlrewr2RqYSpiD1RIPUqUyk,4141
|
|
36
|
-
canvas_sdk/commands/commands/assess.py,sha256=uQgLwDp_9I8fjy3reA4g2RSvGY0Ee8UijfwpsvrMRS4,1636
|
|
37
|
-
canvas_sdk/commands/commands/diagnose.py,sha256=3bg4ScNzTKJa7sXv3xH9VKQSF_srX_G3m-Xpe-VKzzQ,1382
|
|
38
|
-
canvas_sdk/commands/commands/goal.py,sha256=WE5q8oFRtQmclqdCydG4WYW4hoodOvd9dEiSGkJfGqs,1527
|
|
39
|
-
canvas_sdk/commands/commands/history_present_illness.py,sha256=TQ-upptwYy-EKAegqT5jyU7csQpOZeqzp8VfBZTO0mw,366
|
|
40
|
-
canvas_sdk/commands/commands/medication_statement.py,sha256=Ww-WuMbvosfY7Uv8sTFUjPaBGxUoA-ptdcw6Q569DeY,937
|
|
41
|
-
canvas_sdk/commands/commands/plan.py,sha256=Q-e4wqTL6zafG7tOk_9R0mi5pDGqVXKxgbFjsB8CS4Q,350
|
|
42
|
-
canvas_sdk/commands/commands/prescribe.py,sha256=4EQHRhTtW_FHJDOaUgMu8lSgK8JKtUcNrOUs8hbTSdw,1574
|
|
43
|
-
canvas_sdk/commands/commands/questionnaire.py,sha256=XmwpANCHRV_kV2B_X7xqAJ39yX7bn9iT8XHuVoFfLFk,553
|
|
44
|
-
canvas_sdk/commands/commands/reason_for_visit.py,sha256=Zs2WKybbMWvimoZc4ehGxqXNWvX7c0snAe34adP2A4E,1252
|
|
45
|
-
canvas_sdk/commands/commands/stop_medication.py,sha256=5AIPEBBqT1mhpQOcCPh3FJfVq487Qtq3fNrWXqNxqhM,627
|
|
46
|
-
canvas_sdk/commands/commands/update_goal.py,sha256=yiOiHiSwfOzFUAz61C7i6WIJ2o-OUmjmXzm33GcIC3E,1499
|
|
47
|
-
canvas_sdk/commands/constants.py,sha256=LVAuWvxDuDzsW74JUWIzy_lMLvte0_Grlldr-YCjgBw,176
|
|
48
|
-
canvas_sdk/commands/tests/test_utils.py,sha256=gdW9e82-Z9Xm3LyYVa7Pd7sGreL-gtP854iC1UIhOEc,6287
|
|
49
|
-
canvas_sdk/commands/tests/tests.py,sha256=3ZIsIi0GmXV3jm8QmEhLn_FwL8qpW6yt5jjq9FQwHPA,13863
|
|
50
|
-
canvas_sdk/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
-
canvas_sdk/effects/__init__.py,sha256=w3-PimW34Li9b8l_aWCyM7X8-jxMIM3e0ttXg44CV2k,62
|
|
52
|
-
canvas_sdk/effects/banner_alert/banner_alert.py,sha256=Vb23JpwAvfH5GoZpGcHzuWyNQ68cfLXOJjRgbPBaB_M,1013
|
|
53
|
-
canvas_sdk/effects/banner_alert/constants.py,sha256=kfd113dGYDm-g_B5iZb47VNpJjioGqQZSNRoR_rsktw,436
|
|
54
|
-
canvas_sdk/effects/base.py,sha256=h67VmsgMq_Dvr01w8UEf204UqiGjomYrMf_InHzibm4,688
|
|
55
|
-
canvas_sdk/events/__init__.py,sha256=oh1hgaoXbWmPBUUvMb_F0n0Chf5L42ZkKIvvLf-Olzk,74
|
|
56
|
-
canvas_sdk/protocols/__init__.py,sha256=GKtNMsJ5XaNOJUz9adE2_pONLeZqkZIrd9hXAU-jzvU,51
|
|
57
|
-
canvas_sdk/protocols/base.py,sha256=Xh5ZcyCJ3MQJKjWHs2ZdSnAjhO_ak8aUXIxfBLvunmc,369
|
|
58
|
-
canvas_sdk/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
-
canvas_sdk/utils/__init__.py,sha256=sFuhqcWvXb2-33FOuXZgWuUeC5jZL2MDoqjGoQZGwd8,60
|
|
60
|
-
canvas_sdk/utils/http.py,sha256=YOgUFp7FOFhbDwkGhCiD3JLZ342oNZR-qncMxv2qSjw,2159
|
|
61
|
-
canvas_sdk/utils/tests.py,sha256=t3MScbIfzXkQttMIvj0dRzJlFVS8LFU8WgWRrChM-H0,1931
|
|
62
|
-
canvas_sdk/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
|
-
generated/messages/effects_pb2.py,sha256=eeBvmKpQYRFfDJTLtn_fw63wmvGGB8DY61MPZmn_Yag,1422
|
|
64
|
-
generated/messages/effects_pb2.pyi,sha256=frLk1uvbMZ8C5VmzWVddZ5aqM0lfCEZ-6yOk2bE8-4w,974
|
|
65
|
-
generated/messages/effects_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
66
|
-
generated/messages/events_pb2.py,sha256=K_AogDGOKpj1jJVefvkN3T3k3Ul8jldBZ9rPGiCepZs,13059
|
|
67
|
-
generated/messages/events_pb2.pyi,sha256=p2Oh75Es1OdTXLQ0Zui37vxukfaGNsx1sjcgp5iS3gM,22103
|
|
68
|
-
generated/messages/events_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
69
|
-
generated/messages/plugins_pb2.py,sha256=5q04dON7n-_NHKBTdIOwGEm7kBYMRnQJMLXoDfc0OmQ,1249
|
|
70
|
-
generated/messages/plugins_pb2.pyi,sha256=G1seqytP8GlJJh-AL2CJ0VyUNlReEvK61C-Oh8QuGiE,501
|
|
71
|
-
generated/messages/plugins_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
72
|
-
generated/services/plugin_runner_pb2.py,sha256=eURe0VvEEbGf5H4wThTMT1iNYOuMZUssxCzJ_IbgzAA,1494
|
|
73
|
-
generated/services/plugin_runner_pb2.pyi,sha256=2DSpspm8gL2B58Wy6nDUAGUAqTRfRjTvOW-vJ-hKO6M,251
|
|
74
|
-
generated/services/plugin_runner_pb2_grpc.py,sha256=7JGPNuRBTDQK-QqbDA4kPR1MUsXrxDum_x8N_O5Ki0Y,4423
|
|
75
|
-
canvas-0.1.12b0.dist-info/METADATA,sha256=CDPe-AO9JxvU_9S1Vw_3moQKoBxkBrMen920ZwYcr-w,3518
|
|
76
|
-
canvas-0.1.12b0.dist-info/WHEEL,sha256=d2fvjOD7sXsVzChCqf0Ty0JbHKBaLYwDbGQDwQTnJ50,88
|
|
77
|
-
canvas-0.1.12b0.dist-info/entry_points.txt,sha256=VSmSo1IZ3aEfL7enmLmlWSraS_IIkoXNVeyXzgRxFiY,46
|
|
78
|
-
canvas-0.1.12b0.dist-info/RECORD,,
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
from pydantic import Field
|
|
4
|
-
|
|
5
|
-
from canvas_sdk.effects.banner_alert.constants import (
|
|
6
|
-
BannerAlertIntent,
|
|
7
|
-
BannerAlertPlacement,
|
|
8
|
-
)
|
|
9
|
-
from canvas_sdk.effects.base import _BaseEffect
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class BannerAlert(_BaseEffect):
|
|
13
|
-
"""
|
|
14
|
-
An Effect that will result in a banner alert in Canvas.
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
class Meta:
|
|
18
|
-
effect_type = "SHOW_BANNER_ALERT"
|
|
19
|
-
|
|
20
|
-
patient_key: str
|
|
21
|
-
narrative: str = Field(max_length=90)
|
|
22
|
-
placements: list[BannerAlertPlacement] = Field(min_length=1)
|
|
23
|
-
intents: list[BannerAlertIntent] = Field(min_length=1)
|
|
24
|
-
|
|
25
|
-
@property
|
|
26
|
-
def values(self) -> dict[str, Any]:
|
|
27
|
-
"""The BannerAlert's values."""
|
|
28
|
-
return {
|
|
29
|
-
"narrative": self.narrative,
|
|
30
|
-
"placement": [p.value for p in self.placements],
|
|
31
|
-
"intent": [i.value for i in self.intents],
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
@property
|
|
35
|
-
def effect_payload(self) -> dict[str, Any]:
|
|
36
|
-
"""The payload of the effect."""
|
|
37
|
-
return {"patient": self.patient_key, "data": self.values}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class BannerAlertPlacement(Enum):
|
|
5
|
-
"""Where the BannerAlert should appear in the Canvas UI."""
|
|
6
|
-
|
|
7
|
-
CHART = "chart"
|
|
8
|
-
TIMELINE = "timeline"
|
|
9
|
-
APPOINTMENT_CARD = "appointment_card"
|
|
10
|
-
SCHEDULING_CARD = "scheduling_card"
|
|
11
|
-
PROFILE = "profile"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class BannerAlertIntent(Enum):
|
|
15
|
-
"""The intent that should be conveyed in the BannerAlert."""
|
|
16
|
-
|
|
17
|
-
INFO = "info"
|
|
18
|
-
WARNING = "warning"
|
|
19
|
-
ALERT = "alert"
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
-
# source: generated/messages/effects.proto
|
|
4
|
-
# Protobuf Python Version: 4.25.0
|
|
5
|
-
"""Generated protocol buffer code."""
|
|
6
|
-
from google.protobuf import descriptor as _descriptor
|
|
7
|
-
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
-
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
-
from google.protobuf.internal import builder as _builder
|
|
10
|
-
# @@protoc_insertion_point(imports)
|
|
11
|
-
|
|
12
|
-
_sym_db = _symbol_database.Default()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n generated/messages/effects.proto\x12\x06\x63\x61nvas\";\n\x06\x45\x66\x66\x65\x63t\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.canvas.EffectType\x12\x0f\n\x07payload\x18\x02 \x01(\t*`\n\nEffectType\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x00\x12\x07\n\x03LOG\x10\x01\x12\x14\n\x10\x41\x44\x44_PLAN_COMMAND\x10\x02\x12\x1f\n\x1b\x41UTOCOMPLETE_SEARCH_RESULTS\x10\x03\x62\x06proto3')
|
|
18
|
-
|
|
19
|
-
_globals = globals()
|
|
20
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
21
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'generated.messages.effects_pb2', _globals)
|
|
22
|
-
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
23
|
-
DESCRIPTOR._options = None
|
|
24
|
-
_globals['_EFFECTTYPE']._serialized_start=105
|
|
25
|
-
_globals['_EFFECTTYPE']._serialized_end=201
|
|
26
|
-
_globals['_EFFECT']._serialized_start=44
|
|
27
|
-
_globals['_EFFECT']._serialized_end=103
|
|
28
|
-
# @@protoc_insertion_point(module_scope)
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
|
|
2
|
-
from google.protobuf import descriptor as _descriptor
|
|
3
|
-
from google.protobuf import message as _message
|
|
4
|
-
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
|
|
5
|
-
|
|
6
|
-
DESCRIPTOR: _descriptor.FileDescriptor
|
|
7
|
-
|
|
8
|
-
class EffectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
9
|
-
__slots__ = ()
|
|
10
|
-
UNKNOWN_EFFECT: _ClassVar[EffectType]
|
|
11
|
-
LOG: _ClassVar[EffectType]
|
|
12
|
-
ADD_PLAN_COMMAND: _ClassVar[EffectType]
|
|
13
|
-
AUTOCOMPLETE_SEARCH_RESULTS: _ClassVar[EffectType]
|
|
14
|
-
UNKNOWN_EFFECT: EffectType
|
|
15
|
-
LOG: EffectType
|
|
16
|
-
ADD_PLAN_COMMAND: EffectType
|
|
17
|
-
AUTOCOMPLETE_SEARCH_RESULTS: EffectType
|
|
18
|
-
|
|
19
|
-
class Effect(_message.Message):
|
|
20
|
-
__slots__ = ("type", "payload")
|
|
21
|
-
TYPE_FIELD_NUMBER: _ClassVar[int]
|
|
22
|
-
PAYLOAD_FIELD_NUMBER: _ClassVar[int]
|
|
23
|
-
type: EffectType
|
|
24
|
-
payload: str
|
|
25
|
-
def __init__(self, type: _Optional[_Union[EffectType, str]] = ..., payload: _Optional[str] = ...) -> None: ...
|
generated/messages/events_pb2.py
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
-
# source: generated/messages/events.proto
|
|
4
|
-
# Protobuf Python Version: 4.25.0
|
|
5
|
-
"""Generated protocol buffer code."""
|
|
6
|
-
from google.protobuf import descriptor as _descriptor
|
|
7
|
-
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
-
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
-
from google.protobuf.internal import builder as _builder
|
|
10
|
-
# @@protoc_insertion_point(imports)
|
|
11
|
-
|
|
12
|
-
_sym_db = _symbol_database.Default()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
from generated.messages import effects_pb2 as generated_dot_messages_dot_effects__pb2
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fgenerated/messages/events.proto\x12\x06\x63\x61nvas\x1a generated/messages/effects.proto\"I\n\x05\x45vent\x12\x1f\n\x04type\x18\x01 \x01(\x0e\x32\x11.canvas.EventType\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontext\x18\x03 \x01(\t\"A\n\rEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1f\n\x07\x65\x66\x66\x65\x63ts\x18\x02 \x03(\x0b\x32\x0e.canvas.Effect*\xbb=\n\tEventType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x1f\n\x1b\x41LLERGY_INTOLERANCE_CREATED\x10\x01\x12\x1f\n\x1b\x41LLERGY_INTOLERANCE_UPDATED\x10\x02\x12\x18\n\x14\x41PPOINTMENT_CANCELED\x10\x04\x12\x1a\n\x16\x41PPOINTMENT_CHECKED_IN\x10\x05\x12\x17\n\x13\x41PPOINTMENT_CREATED\x10\x06\x12\x19\n\x15\x41PPOINTMENT_NO_SHOWED\x10\x07\x12\x1b\n\x17\x41PPOINTMENT_RESCHEDULED\x10\x08\x12\x18\n\x14\x41PPOINTMENT_RESTORED\x10\t\x12\x17\n\x13\x41PPOINTMENT_UPDATED\x10\n\x12\x1d\n\x19\x42ILLING_LINE_ITEM_CREATED\x10\x0b\x12\x1d\n\x19\x42ILLING_LINE_ITEM_UPDATED\x10\x0c\x12\x16\n\x12\x43ONDITION_ASSESSED\x10\r\x12\x15\n\x11\x43ONDITION_CREATED\x10\x0e\x12\x16\n\x12\x43ONDITION_RESOLVED\x10\x0f\x12\x15\n\x11\x43ONDITION_UPDATED\x10\x10\x12\x13\n\x0f\x43ONSENT_CREATED\x10\x11\x12\x13\n\x0f\x43ONSENT_DELETED\x10\x12\x12\x13\n\x0f\x43ONSENT_UPDATED\x10\x13\x12\x14\n\x10\x43OVERAGE_CREATED\x10\x14\x12\x14\n\x10\x43OVERAGE_UPDATED\x10\x15\x12\x15\n\x11\x45NCOUNTER_CREATED\x10\x16\x12\x15\n\x11\x45NCOUNTER_UPDATED\x10\x17\x12\x1a\n\x16IMAGING_REPORT_CREATED\x10\x1a\x12\x1a\n\x16IMAGING_REPORT_UPDATED\x10\x1b\x12\x18\n\x14IMMUNIZATION_CREATED\x10\x1c\x12\"\n\x1eIMMUNIZATION_STATEMENT_CREATED\x10\x1d\x12\"\n\x1eIMMUNIZATION_STATEMENT_UPDATED\x10\x1e\x12\x18\n\x14IMMUNIZATION_UPDATED\x10\x1f\x12\x17\n\x13INSTRUCTION_CREATED\x10 \x12\x17\n\x13INSTRUCTION_UPDATED\x10!\x12\x15\n\x11INTERVIEW_CREATED\x10\"\x12\x15\n\x11INTERVIEW_UPDATED\x10#\x12\x15\n\x11LAB_ORDER_CREATED\x10$\x12\x15\n\x11LAB_ORDER_UPDATED\x10%\x12\x16\n\x12LAB_REPORT_CREATED\x10&\x12\x16\n\x12LAB_REPORT_UPDATED\x10\'\x12 \n\x1cMEDICATION_LIST_ITEM_CREATED\x10(\x12 \n\x1cMEDICATION_LIST_ITEM_UPDATED\x10)\x12\x13\n\x0fMESSAGE_CREATED\x10*\x12\x13\n\x0fPATIENT_CREATED\x10+\x12\x13\n\x0fPATIENT_UPDATED\x10,\x12\x18\n\x14PRESCRIPTION_CREATED\x10-\x12\x18\n\x14PRESCRIPTION_UPDATED\x10.\x12\x1b\n\x17REFERRAL_REPORT_CREATED\x10/\x12\x1b\n\x17REFERRAL_REPORT_UPDATED\x10\x30\x12\x18\n\x14TASK_COMMENT_CREATED\x10\x33\x12\x10\n\x0cTASK_CREATED\x10\x36\x12\x18\n\x14TASK_LABELS_ADJUSTED\x10\x37\x12\x10\n\x0cTASK_UPDATED\x10\x39\x12\x16\n\x12VITAL_SIGN_CREATED\x10:\x12\x16\n\x12VITAL_SIGN_UPDATED\x10;\x12\x19\n\x15PRE_COMMAND_ORIGINATE\x10\x64\x12\x1a\n\x16POST_COMMAND_ORIGINATE\x10\x65\x12\x16\n\x12PRE_COMMAND_UPDATE\x10\x66\x12\x17\n\x13POST_COMMAND_UPDATE\x10g\x12\x16\n\x12PRE_COMMAND_COMMIT\x10h\x12\x17\n\x13POST_COMMAND_COMMIT\x10i\x12\x16\n\x12PRE_COMMAND_DELETE\x10j\x12\x17\n\x13POST_COMMAND_DELETE\x10k\x12\x1e\n\x1aPRE_COMMAND_ENTER_IN_ERROR\x10l\x12\x1f\n\x1bPOST_COMMAND_ENTER_IN_ERROR\x10m\x12\x1e\n\x1aPRE_COMMAND_EXECUTE_ACTION\x10n\x12\x1f\n\x1bPOST_COMMAND_EXECUTE_ACTION\x10o\x12\'\n\"ASSESS_COMMAND__CONDITION_SELECTED\x10\xc8\x01\x12\x31\n,MEDICATION_STATEMENT__MEDICATION__PRE_SEARCH\x10\xc9\x01\x12\x32\n-MEDICATION_STATEMENT__MEDICATION__POST_SEARCH\x10\xca\x01\x12/\n*MEDICATION_STATEMENT__MEDICATION__SELECTED\x10\xcb\x01\x12\"\n\x1d\x41SSESS_COMMAND__PRE_ORIGINATE\x10\xd8\x36\x12#\n\x1e\x41SSESS_COMMAND__POST_ORIGINATE\x10\xd9\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_UPDATE\x10\xda\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_UPDATE\x10\xdb\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_COMMIT\x10\xdc\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_COMMIT\x10\xdd\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_DELETE\x10\xde\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_DELETE\x10\xdf\x36\x12\'\n\"ASSESS_COMMAND__PRE_ENTER_IN_ERROR\x10\xe0\x36\x12(\n#ASSESS_COMMAND__POST_ENTER_IN_ERROR\x10\xe1\x36\x12\'\n\"ASSESS_COMMAND__PRE_EXECUTE_ACTION\x10\xe2\x36\x12(\n#ASSESS_COMMAND__POST_EXECUTE_ACTION\x10\xe3\x36\x12#\n\x1e\x41SSESS__CONDITION__POST_SEARCH\x10\xe4\x36\x12$\n\x1f\x44IAGNOSE__DIAGNOSE__POST_SEARCH\x10\xbcm\x12!\n\x1bGOAL_COMMAND__PRE_ORIGINATE\x10\xd0\x8c\x01\x12\"\n\x1cGOAL_COMMAND__POST_ORIGINATE\x10\xd1\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_UPDATE\x10\xd2\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_UPDATE\x10\xd3\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_COMMIT\x10\xd4\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_COMMIT\x10\xd5\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_DELETE\x10\xd6\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_DELETE\x10\xd7\x8c\x01\x12&\n GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x8c\x01\x12\'\n!GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x8c\x01\x12&\n GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x8c\x01\x12\'\n!GOAL_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x8c\x01\x12\x37\n1HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_ORIGINATE\x10\xb8\x94\x01\x12\x38\n2HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_ORIGINATE\x10\xb9\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_UPDATE\x10\xba\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_UPDATE\x10\xbb\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_COMMIT\x10\xbc\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_COMMIT\x10\xbd\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_DELETE\x10\xbe\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_DELETE\x10\xbf\x94\x01\x12<\n6HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_ENTER_IN_ERROR\x10\xc0\x94\x01\x12=\n7HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_ENTER_IN_ERROR\x10\xc1\x94\x01\x12<\n6HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_EXECUTE_ACTION\x10\xc2\x94\x01\x12=\n7HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_EXECUTE_ACTION\x10\xc3\x94\x01\x12\x31\n+MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE\x10\xe0\xda\x01\x12\x32\n,MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE\x10\xe1\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_UPDATE\x10\xe2\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_UPDATE\x10\xe3\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_COMMIT\x10\xe4\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_COMMIT\x10\xe5\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_DELETE\x10\xe6\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_DELETE\x10\xe7\xda\x01\x12\x36\n0MEDICATION_STATEMENT_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xda\x01\x12\x37\n1MEDICATION_STATEMENT_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xda\x01\x12\x36\n0MEDICATION_STATEMENT_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xda\x01\x12\x37\n1MEDICATION_STATEMENT_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xda\x01\x12!\n\x1bPLAN_COMMAND__PRE_ORIGINATE\x10\x98\xf2\x01\x12\"\n\x1cPLAN_COMMAND__POST_ORIGINATE\x10\x99\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_UPDATE\x10\x9a\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_UPDATE\x10\x9b\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_COMMIT\x10\x9c\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_COMMIT\x10\x9d\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_DELETE\x10\x9e\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_DELETE\x10\x9f\xf2\x01\x12&\n PLAN_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0\xf2\x01\x12\'\n!PLAN_COMMAND__POST_ENTER_IN_ERROR\x10\xa1\xf2\x01\x12&\n PLAN_COMMAND__PRE_EXECUTE_ACTION\x10\xa2\xf2\x01\x12\'\n!PLAN_COMMAND__POST_EXECUTE_ACTION\x10\xa3\xf2\x01\x12&\n PRESCRIBE_COMMAND__PRE_ORIGINATE\x10\xe8\x81\x02\x12\'\n!PRESCRIBE_COMMAND__POST_ORIGINATE\x10\xe9\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_UPDATE\x10\xea\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_UPDATE\x10\xeb\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_COMMIT\x10\xec\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_COMMIT\x10\xed\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_DELETE\x10\xee\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_DELETE\x10\xef\x81\x02\x12+\n%PRESCRIBE_COMMAND__PRE_ENTER_IN_ERROR\x10\xf0\x81\x02\x12,\n&PRESCRIBE_COMMAND__POST_ENTER_IN_ERROR\x10\xf1\x81\x02\x12+\n%PRESCRIBE_COMMAND__PRE_EXECUTE_ACTION\x10\xf2\x81\x02\x12,\n&PRESCRIBE_COMMAND__POST_EXECUTE_ACTION\x10\xf3\x81\x02\x12\'\n!PRESCRIBE__PRESCRIBE__POST_SEARCH\x10\xf4\x81\x02\x12*\n$QUESTIONNAIRE_COMMAND__PRE_ORIGINATE\x10\xd0\x89\x02\x12+\n%QUESTIONNAIRE_COMMAND__POST_ORIGINATE\x10\xd1\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_UPDATE\x10\xd2\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_UPDATE\x10\xd3\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_COMMIT\x10\xd4\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_COMMIT\x10\xd5\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_DELETE\x10\xd6\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_DELETE\x10\xd7\x89\x02\x12/\n)QUESTIONNAIRE_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x89\x02\x12\x30\n*QUESTIONNAIRE_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x89\x02\x12/\n)QUESTIONNAIRE_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x89\x02\x12\x30\n*QUESTIONNAIRE_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x89\x02\x12/\n)QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH\x10\xdc\x89\x02\x12-\n\'REASON_FOR_VISIT_COMMAND__PRE_ORIGINATE\x10\xb8\x91\x02\x12.\n(REASON_FOR_VISIT_COMMAND__POST_ORIGINATE\x10\xb9\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_UPDATE\x10\xba\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_UPDATE\x10\xbb\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_COMMIT\x10\xbc\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_COMMIT\x10\xbd\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_DELETE\x10\xbe\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_DELETE\x10\xbf\x91\x02\x12\x32\n,REASON_FOR_VISIT_COMMAND__PRE_ENTER_IN_ERROR\x10\xc0\x91\x02\x12\x33\n-REASON_FOR_VISIT_COMMAND__POST_ENTER_IN_ERROR\x10\xc1\x91\x02\x12\x32\n,REASON_FOR_VISIT_COMMAND__PRE_EXECUTE_ACTION\x10\xc2\x91\x02\x12\x33\n-REASON_FOR_VISIT_COMMAND__POST_EXECUTE_ACTION\x10\xc3\x91\x02\x12+\n%REASON_FOR_VISIT__CODING__POST_SEARCH\x10\xc4\x91\x02\x12,\n&STOP_MEDICATION_COMMAND__PRE_ORIGINATE\x10\xe0\xd7\x02\x12-\n\'STOP_MEDICATION_COMMAND__POST_ORIGINATE\x10\xe1\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_UPDATE\x10\xe2\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_UPDATE\x10\xe3\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_COMMIT\x10\xe4\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_COMMIT\x10\xe5\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_DELETE\x10\xe6\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_DELETE\x10\xe7\xd7\x02\x12\x31\n+STOP_MEDICATION_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xd7\x02\x12\x32\n,STOP_MEDICATION_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xd7\x02\x12\x31\n+STOP_MEDICATION_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xd7\x02\x12\x32\n,STOP_MEDICATION_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xd7\x02\x12.\n(STOP_MEDICATION__MEDICATION__POST_SEARCH\x10\xec\xd7\x02\x12!\n\x1bTASK_COMMAND__PRE_ORIGINATE\x10\x98\xef\x02\x12\"\n\x1cTASK_COMMAND__POST_ORIGINATE\x10\x99\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_UPDATE\x10\x9a\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_UPDATE\x10\x9b\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_COMMIT\x10\x9c\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_COMMIT\x10\x9d\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_DELETE\x10\x9e\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_DELETE\x10\x9f\xef\x02\x12&\n TASK_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0\xef\x02\x12\'\n!TASK_COMMAND__POST_ENTER_IN_ERROR\x10\xa1\xef\x02\x12&\n TASK_COMMAND__PRE_EXECUTE_ACTION\x10\xa2\xef\x02\x12\'\n!TASK_COMMAND__POST_EXECUTE_ACTION\x10\xa3\xef\x02\x12(\n\"UPDATE_GOAL_COMMAND__PRE_ORIGINATE\x10\xd0\x86\x03\x12)\n#UPDATE_GOAL_COMMAND__POST_ORIGINATE\x10\xd1\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_UPDATE\x10\xd2\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_UPDATE\x10\xd3\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_COMMIT\x10\xd4\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_COMMIT\x10\xd5\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_DELETE\x10\xd6\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_DELETE\x10\xd7\x86\x03\x12-\n\'UPDATE_GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x86\x03\x12.\n(UPDATE_GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x86\x03\x12-\n\'UPDATE_GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x86\x03\x12.\n(UPDATE_GOAL_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x86\x03\x12.\n(UPDATE_GOAL__GOAL_STATEMENT__POST_SEARCH\x10\xdc\x86\x03\x62\x06proto3')
|
|
19
|
-
|
|
20
|
-
_globals = globals()
|
|
21
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
22
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'generated.messages.events_pb2', _globals)
|
|
23
|
-
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
24
|
-
DESCRIPTOR._options = None
|
|
25
|
-
_globals['_EVENTTYPE']._serialized_start=220
|
|
26
|
-
_globals['_EVENTTYPE']._serialized_end=8087
|
|
27
|
-
_globals['_EVENT']._serialized_start=77
|
|
28
|
-
_globals['_EVENT']._serialized_end=150
|
|
29
|
-
_globals['_EVENTRESPONSE']._serialized_start=152
|
|
30
|
-
_globals['_EVENTRESPONSE']._serialized_end=217
|
|
31
|
-
# @@protoc_insertion_point(module_scope)
|