canvas 0.59.0__py3-none-any.whl → 0.60.0__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.59.0.dist-info → canvas-0.60.0.dist-info}/METADATA +1 -1
- {canvas-0.59.0.dist-info → canvas-0.60.0.dist-info}/RECORD +21 -15
- canvas_generated/messages/effects_pb2.py +2 -2
- canvas_generated/messages/effects_pb2.pyi +4 -0
- canvas_sdk/effects/patient/__init__.py +13 -1
- canvas_sdk/effects/patient/base.py +159 -26
- canvas_sdk/effects/patient/create_patient_preferred_pharmacies.py +70 -0
- canvas_sdk/test_utils/factories/__init__.py +11 -2
- canvas_sdk/test_utils/factories/facility.py +21 -0
- canvas_sdk/test_utils/factories/patient.py +13 -1
- canvas_sdk/test_utils/factories/protocol_current.py +44 -0
- canvas_sdk/v1/data/__init__.py +8 -1
- canvas_sdk/v1/data/facility.py +27 -0
- canvas_sdk/v1/data/patient.py +39 -7
- canvas_sdk/v1/data/protocol_current.py +23 -0
- canvas_sdk/v1/data/protocol_result.py +46 -0
- canvas_sdk/v1/data/staff.py +36 -1
- plugin_runner/allowed-module-imports.json +27 -2
- protobufs/canvas_generated/messages/effects.proto +3 -1
- {canvas-0.59.0.dist-info → canvas-0.60.0.dist-info}/WHEEL +0 -0
- {canvas-0.59.0.dist-info → canvas-0.60.0.dist-info}/entry_points.txt +0 -0
|
@@ -81,8 +81,8 @@ canvas_cli/utils/urls/urls.py,sha256=KwWTh5ERrEsZEvdBrZpZB71xtyWkDuglpXUbycWmBOo
|
|
|
81
81
|
canvas_cli/utils/validators/__init__.py,sha256=rBvSR2O1hWkNAnUBdcr-zUkmqT796_A61b9pnvEhwrM,113
|
|
82
82
|
canvas_cli/utils/validators/manifest_schema.py,sha256=XNw-sbFgxaXzffWnQd6zLg5V74odv7jGiEFENWKnluA,6057
|
|
83
83
|
canvas_cli/utils/validators/validators.py,sha256=lrUBQ0sF7seTe_pNGsNgASdr2BGp6g-Qui58V4H9qfQ,1598
|
|
84
|
-
canvas_generated/messages/effects_pb2.py,sha256=
|
|
85
|
-
canvas_generated/messages/effects_pb2.pyi,sha256=
|
|
84
|
+
canvas_generated/messages/effects_pb2.py,sha256=S8DwZqNNukADofnE4iUw6J_AE1Gyj5J5DrUiKxF_IqY,14157
|
|
85
|
+
canvas_generated/messages/effects_pb2.pyi,sha256=eYGOGEh7HPW3TvIAFFFHNfbx0Qrgpc0XPJwoVCQmM4k,25351
|
|
86
86
|
canvas_generated/messages/effects_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
87
87
|
canvas_generated/messages/events_pb2.py,sha256=h7Uh37N5qEcocRFjLc3P-8WQXgU419hDbXAMcCqhbfw,55788
|
|
88
88
|
canvas_generated/messages/events_pb2.pyi,sha256=1Q6Htlh7bjD4U67OYrdpQDyc6yLVW74nPeKvbsQdqBI,100563
|
|
@@ -171,9 +171,10 @@ canvas_sdk/effects/note/appointment.py,sha256=ca46df8onI-I6szPJWSz_N745PWchKMBcr
|
|
|
171
171
|
canvas_sdk/effects/note/base.py,sha256=3TeUdVsWWl0iJ8fkbCLJ0SjcZ0fEASy50r-ubSXvCpI,7587
|
|
172
172
|
canvas_sdk/effects/note/message.py,sha256=T6p6h4J_I0k2jQSirFtIusydak4tem9yBPOTexvOQ0s,3740
|
|
173
173
|
canvas_sdk/effects/note/note.py,sha256=_iVVagZUM4fWOMw3Cy4KXl5rd-1_NgF57QSBl5y9d7w,4610
|
|
174
|
-
canvas_sdk/effects/patient/__init__.py,sha256=
|
|
175
|
-
canvas_sdk/effects/patient/base.py,sha256=
|
|
174
|
+
canvas_sdk/effects/patient/__init__.py,sha256=QC5UszNibt-BTC3rfCq9y-j4-APuBMUZfAllB8WnIDY,636
|
|
175
|
+
canvas_sdk/effects/patient/base.py,sha256=E60n-RtD8q5Fo1UxCS1-RmZu14qBV5raiYtm2TcxrWU,8342
|
|
176
176
|
canvas_sdk/effects/patient/create_patient_external_identifier.py,sha256=d03jzJcz2n19_NVo_wAq88iKZRuuM60qsZhGGhL7pGE,1055
|
|
177
|
+
canvas_sdk/effects/patient/create_patient_preferred_pharmacies.py,sha256=Vaby6L5PALtLAiJCNmqKsDec8UZ7DVFyP7kU0fHrpT4,2096
|
|
177
178
|
canvas_sdk/effects/patient_metadata/__init__.py,sha256=vxTpaP9gY1iNf0iVSoh24buFR7XfY2FKVYKn_P7BJkg,342
|
|
178
179
|
canvas_sdk/effects/patient_metadata/base.py,sha256=pq_xtFLyzHfYWTCjWEicOfsLkG3Nu_ECzLB85tYOToM,1286
|
|
179
180
|
canvas_sdk/effects/patient_metadata/patient_metadata_create_form.py,sha256=ePoPcG2vuFrsnhPWU_XavMK5UVAxBvcMzDhpu9HzTu0,1918
|
|
@@ -213,8 +214,10 @@ canvas_sdk/questionnaires/utils.py,sha256=avDMUcQ5XmLfhlBpPJNMtNrVqrPy7g7HtqbSzz
|
|
|
213
214
|
canvas_sdk/templates/__init__.py,sha256=LtUmLDsGSTq249T6sA7PUzkl2OfCAyvtIOGPNHr6wTo,83
|
|
214
215
|
canvas_sdk/templates/utils.py,sha256=J-wDQ9ijOr_jz1SJxjpyZgR7JwXqtGMSS5IperLi2qE,1475
|
|
215
216
|
canvas_sdk/test_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
216
|
-
canvas_sdk/test_utils/factories/__init__.py,sha256=
|
|
217
|
-
canvas_sdk/test_utils/factories/
|
|
217
|
+
canvas_sdk/test_utils/factories/__init__.py,sha256=xzQECzqaDsPAYEBNqfSiz7CEFFI9I7pnYQtHaTuP2r0,398
|
|
218
|
+
canvas_sdk/test_utils/factories/facility.py,sha256=9ZNBHCgPelD4oQynwez32I4Gx0kV1O78kgKvuiByyhg,697
|
|
219
|
+
canvas_sdk/test_utils/factories/patient.py,sha256=zXy47K9C6cmQympOABHGUv-1hOqYIXNb7c4TziFO1RE,1594
|
|
220
|
+
canvas_sdk/test_utils/factories/protocol_current.py,sha256=twq6GdTM29WYZ-AvfE3vkfV3dOMhZDmv_lNZC2eGe8g,1904
|
|
218
221
|
canvas_sdk/test_utils/factories/user.py,sha256=QLxilvK22fHSsGFxe1j354VdMrdquO8nyWApdXXdS8Q,306
|
|
219
222
|
canvas_sdk/utils/__init__.py,sha256=PADveJMf-BtOapK5Cczy-nOuZzVh-HT2H6sfJW_SK9U,198
|
|
220
223
|
canvas_sdk/utils/db.py,sha256=wOZORBfyBVxQkay5vyEtQ4i0KVCfASFGREmecHMR8DE,409
|
|
@@ -224,7 +227,7 @@ canvas_sdk/utils/plugins.py,sha256=OPq9OiE1v1AF24HSdEEOlSJxRVc2NVksK0Gpf6OH1NE,1
|
|
|
224
227
|
canvas_sdk/v1/__init__.py,sha256=YYXr5tEQlnwMgTXJbOG963tKSPiUOM4mUkX8wuiqp7U,17
|
|
225
228
|
canvas_sdk/v1/apps.py,sha256=4MwQfQu78oX5bUVlyxYzbt4rZODi0ZesXe_3QOsEWO8,170
|
|
226
229
|
canvas_sdk/v1/models.py,sha256=LqeHZ-Hz3EWyM9vYr9uZ9rBYdMXNuuvJqbmojV8EcEM,224
|
|
227
|
-
canvas_sdk/v1/data/__init__.py,sha256=
|
|
230
|
+
canvas_sdk/v1/data/__init__.py,sha256=z-mtXiNq6ylRVfICK6xizERIx2F3DHUqLB2Gw3-HM2U,5524
|
|
228
231
|
canvas_sdk/v1/data/allergy_intolerance.py,sha256=KXfU7UqTdRfHUFrP8yncQGMvlRPEt2K6TrC_y7JYgiE,2453
|
|
229
232
|
canvas_sdk/v1/data/appointment.py,sha256=UXvn6wYEgsphhTQaFbFg-UE7Bumy_UR-AQFnsSrL5Dk,2658
|
|
230
233
|
canvas_sdk/v1/data/assessment.py,sha256=vnVoaKWoJGCfaYn6WilxpI5cTgkvM647hFIuTyi_AgY,1663
|
|
@@ -244,6 +247,7 @@ canvas_sdk/v1/data/coverage.py,sha256=i03BeVxNCsxXWnBL8klySFRXXN-T1hF01HyCvcCnlY
|
|
|
244
247
|
canvas_sdk/v1/data/detected_issue.py,sha256=k-tOX6fpzfRf9WmG7neHPEeWrpZUdTiTEqYzKaa2haI,1865
|
|
245
248
|
canvas_sdk/v1/data/device.py,sha256=5YnCApQR3ZprGO9zCsSP-4spwo4HVRDSTY3QCNwqYlo,1932
|
|
246
249
|
canvas_sdk/v1/data/discount.py,sha256=Bqa0PcytSdqZ0MJor9EShtRUmNWGcBKtivGCmjk9Pbw,618
|
|
250
|
+
canvas_sdk/v1/data/facility.py,sha256=_Ux4D34Evcexu95iRMLN0foGcHJI6KweIYkbyYVAe0s,947
|
|
247
251
|
canvas_sdk/v1/data/fields.py,sha256=bI7mPI_3B36ntyoVQ6vuDq8eGLoUIkwZZr14lTC-4To,1104
|
|
248
252
|
canvas_sdk/v1/data/goal.py,sha256=dOI0rakLBnnYSkdMt5W2uh7_W5Pp21G6s1z70PzU3TY,2465
|
|
249
253
|
canvas_sdk/v1/data/imaging.py,sha256=N0OkJjmHI3jtv1w8RBhqGZGDGidNpf1ZwT0ypm1o60M,5246
|
|
@@ -255,18 +259,20 @@ canvas_sdk/v1/data/message.py,sha256=EKc2kkWGuzrgBH3sDUa9jiNpRP7J1ZdWE6BnPhY2gvs
|
|
|
255
259
|
canvas_sdk/v1/data/note.py,sha256=Eq0JgDRzwK84BAT6Y51f47Gke2rseC3vvcjoqhzAsVE,9335
|
|
256
260
|
canvas_sdk/v1/data/observation.py,sha256=l1EXGQ8FBBInxQthsmY1Oms9v73ni_J7SAP5M8Hmkvg,3881
|
|
257
261
|
canvas_sdk/v1/data/organization.py,sha256=gt0KZC1hklwWf57vCxs2K0qPnLpMyyNFWNL7-WZ6AqI,1159
|
|
258
|
-
canvas_sdk/v1/data/patient.py,sha256=
|
|
262
|
+
canvas_sdk/v1/data/patient.py,sha256=VMFlr6P5BxLN6MK0k8hjIccfumdkL8CJrMtDrLms0qY,11748
|
|
259
263
|
canvas_sdk/v1/data/patient_consent.py,sha256=zx1C__E6On-MC7OnTgEeP50tn77R6UXw15wC125jDog,2704
|
|
260
264
|
canvas_sdk/v1/data/payment_collection.py,sha256=h17qmQkCCwSdukIeeYMqBHZnpxpahOa03ckMHmgZV-I,954
|
|
261
265
|
canvas_sdk/v1/data/payor_specific_charge.py,sha256=TtByy7-QF00PfONC-QDo2kkxRAOdLaRjkhssQBPvZjw,770
|
|
262
266
|
canvas_sdk/v1/data/posting.py,sha256=fZhglI5WNGCuZy-kcCurX9hnNUtFUFKjwsqjxyiOC7U,7749
|
|
263
267
|
canvas_sdk/v1/data/practicelocation.py,sha256=O-avErANUE3KwUB_vlRbTe9MywVj2jfBgcZda_q-_Vw,4381
|
|
268
|
+
canvas_sdk/v1/data/protocol_current.py,sha256=TpJR0u6dncWALhGzYgkyJbdSKRtKD-KjWWJplc8pJL0,615
|
|
264
269
|
canvas_sdk/v1/data/protocol_override.py,sha256=zSDHngf9Pqz4irYN_BoX5wy-uJc83NFunPBJnUfS1OI,2259
|
|
270
|
+
canvas_sdk/v1/data/protocol_result.py,sha256=PTzNx57ADsGzG_Zrt3HUa1vi_QyejIYuVMFRZqqJS2A,1604
|
|
265
271
|
canvas_sdk/v1/data/questionnaire.py,sha256=4vQFbBjnvfXwvb73Q0ES64bnWME6P-Oy_9E9ioWAOg8,7209
|
|
266
272
|
canvas_sdk/v1/data/reason_for_visit.py,sha256=diXbeGUUc_XBmIDpzubxesc6Nhj5F87zw2oYurPSE3M,669
|
|
267
273
|
canvas_sdk/v1/data/referral.py,sha256=qVPHWqDlJoBzrYsNhP6z2NQ2Wpus_OxW8LwHYpLlM-M,3589
|
|
268
274
|
canvas_sdk/v1/data/service_provider.py,sha256=LQfQ0esg97NpmSYnftsWqYUJyJIQOZKmpZFNnGsxXoQ,1917
|
|
269
|
-
canvas_sdk/v1/data/staff.py,sha256=
|
|
275
|
+
canvas_sdk/v1/data/staff.py,sha256=osAPzLw2y-SJW5TQt69RnKBmsDx5wKeDNmbBtfxYDWw,9392
|
|
270
276
|
canvas_sdk/v1/data/task.py,sha256=9jSqr7e7ODJTs4hanWsOD-1Rb8gByJOuLta90V9V_hY,3480
|
|
271
277
|
canvas_sdk/v1/data/team.py,sha256=J4s98sS7UuUw9jJCe-_7eikr1dV4SQARDzK5oxmsO_o,2832
|
|
272
278
|
canvas_sdk/v1/data/user.py,sha256=82jnqVrYeWo2eBXY_MH2r75LZo5EKgY9kalahrUl0_s,511
|
|
@@ -296,7 +302,7 @@ canvas_sdk/views/__init__.py,sha256=YYXr5tEQlnwMgTXJbOG963tKSPiUOM4mUkX8wuiqp7U,
|
|
|
296
302
|
logger/__init__.py,sha256=uMIOf1CDdKSmBKxKwO4CmDpvnJITci76IMXENOwSHEo,85
|
|
297
303
|
logger/logger.py,sha256=l5W5jn3vGQt6TM7OxOpoMy-vC7RNNA2pGnQJJgHeXWA,2068
|
|
298
304
|
plugin_runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
299
|
-
plugin_runner/allowed-module-imports.json,sha256=
|
|
305
|
+
plugin_runner/allowed-module-imports.json,sha256=Z0WtFFA52DUF-oCeI50_4iURWRSN2-vdd1T-ewxh4rM,36717
|
|
300
306
|
plugin_runner/authentication.py,sha256=UyyhXajokVFH866dpDhoTlXS9Cg7y0sQltn0_LcwXrY,1131
|
|
301
307
|
plugin_runner/aws_headers.py,sha256=wZ8584E1fTW0CdGxOCnLSF8alH27z-URcUyoc6y6ohg,2782
|
|
302
308
|
plugin_runner/exceptions.py,sha256=ltqn56SMTg-T5miSh5hux4ojwx0hZGSWaB7BxyAmcAo,545
|
|
@@ -305,7 +311,7 @@ plugin_runner/installation.py,sha256=2KTDWWsQ97WIN2k9tC4d50zN77WWK_1D5obXlhLfWw8
|
|
|
305
311
|
plugin_runner/load_all_plugins.py,sha256=4T2gW2YljhIx4xfwf1c0F_8oIbE1ubsLj0ShkHRtlVY,5847
|
|
306
312
|
plugin_runner/plugin_runner.py,sha256=RpcZoXXzGEflJGuHJaAOCP24mWb4fG1bLw3ryA6n88k,26623
|
|
307
313
|
plugin_runner/sandbox.py,sha256=A5iaxQePwA5FERK232MArq2VzZzHKM5ydrfTDFeXcLg,30232
|
|
308
|
-
protobufs/canvas_generated/messages/effects.proto,sha256=
|
|
314
|
+
protobufs/canvas_generated/messages/effects.proto,sha256=ovVNjjWd6LvRnrk0Pu76AeT6wQjA_K-vvxMvgafQYMI,9827
|
|
309
315
|
protobufs/canvas_generated/messages/events.proto,sha256=21qM3Ct9-iIG_T7O-XoFPWpnVafocYJ1KGiZ2nn1CFM,52047
|
|
310
316
|
protobufs/canvas_generated/messages/plugins.proto,sha256=xJyEeTwM6wWja3vGECLsIzfabwf1VahDgacoPL3TuwI,323
|
|
311
317
|
protobufs/canvas_generated/services/plugin_runner.proto,sha256=PZ0Ts11b9tdA5Gkg2M05JVEKAm0R4LFEwrGRS-TQ16E,466
|
|
@@ -325,7 +331,7 @@ canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookie
|
|
|
325
331
|
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/README.md,sha256=3QKoJQq3YmdplGnDOBMsLCJ3Ya1_aKjoz-QiWc4QfjA,291
|
|
326
332
|
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
327
333
|
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/{{ cookiecutter.__package_name }}/protocols/my_protocol.py,sha256=fKLLcOIwvSWenW8-7tr8VqnF4Iox_5wU9V-Qw9UySsA,2381
|
|
328
|
-
canvas-0.
|
|
329
|
-
canvas-0.
|
|
330
|
-
canvas-0.
|
|
331
|
-
canvas-0.
|
|
334
|
+
canvas-0.60.0.dist-info/METADATA,sha256=ubqSX0pfGxciJWZiyzLwb2dijpOB5f8uM3PPV1DHFF8,4758
|
|
335
|
+
canvas-0.60.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
336
|
+
canvas-0.60.0.dist-info/entry_points.txt,sha256=0Vs_9GmTVUNniH6eDBlRPgofmADMV4BES6Ao26M4AbM,47
|
|
337
|
+
canvas-0.60.0.dist-info/RECORD,,
|
|
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'canvas_generated/messages/effects.proto\x12\x06\x63\x61nvas\"y\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\x12\x13\n\x0bplugin_name\x18\x03 \x01(\t\x12\x11\n\tclassname\x18\x04 \x01(\t\x12\x14\n\x0chandler_name\x18\x05 \x01(\t*\xb2\x43\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\x12\x14\n\x10\x41\x44\x44_BANNER_ALERT\x10\x04\x12\x17\n\x13REMOVE_BANNER_ALERT\x10\x05\x12\x1c\n\x18ORIGINATE_ASSESS_COMMAND\x10\x06\x12\x17\n\x13\x45\x44IT_ASSESS_COMMAND\x10\x07\x12\x19\n\x15\x44\x45LETE_ASSESS_COMMAND\x10\x08\x12\x19\n\x15\x43OMMIT_ASSESS_COMMAND\x10\t\x12!\n\x1d\x45NTER_IN_ERROR_ASSESS_COMMAND\x10\n\x12\x1e\n\x1aORIGINATE_DIAGNOSE_COMMAND\x10\x0b\x12\x19\n\x15\x45\x44IT_DIAGNOSE_COMMAND\x10\x0c\x12\x1b\n\x17\x44\x45LETE_DIAGNOSE_COMMAND\x10\r\x12\x1b\n\x17\x43OMMIT_DIAGNOSE_COMMAND\x10\x0e\x12#\n\x1f\x45NTER_IN_ERROR_DIAGNOSE_COMMAND\x10\x0f\x12\x1a\n\x16ORIGINATE_GOAL_COMMAND\x10\x10\x12\x15\n\x11\x45\x44IT_GOAL_COMMAND\x10\x11\x12\x17\n\x13\x44\x45LETE_GOAL_COMMAND\x10\x12\x12\x17\n\x13\x43OMMIT_GOAL_COMMAND\x10\x13\x12\x1f\n\x1b\x45NTER_IN_ERROR_GOAL_COMMAND\x10\x14\x12\x19\n\x15ORIGINATE_HPI_COMMAND\x10\x15\x12\x14\n\x10\x45\x44IT_HPI_COMMAND\x10\x16\x12\x16\n\x12\x44\x45LETE_HPI_COMMAND\x10\x17\x12\x16\n\x12\x43OMMIT_HPI_COMMAND\x10\x18\x12\x1e\n\x1a\x45NTER_IN_ERROR_HPI_COMMAND\x10\x19\x12*\n&ORIGINATE_MEDICATION_STATEMENT_COMMAND\x10\x1a\x12%\n!EDIT_MEDICATION_STATEMENT_COMMAND\x10\x1b\x12\'\n#DELETE_MEDICATION_STATEMENT_COMMAND\x10\x1c\x12\'\n#COMMIT_MEDICATION_STATEMENT_COMMAND\x10\x1d\x12/\n+ENTER_IN_ERROR_MEDICATION_STATEMENT_COMMAND\x10\x1e\x12\x1a\n\x16ORIGINATE_PLAN_COMMAND\x10\x1f\x12\x15\n\x11\x45\x44IT_PLAN_COMMAND\x10 \x12\x17\n\x13\x44\x45LETE_PLAN_COMMAND\x10!\x12\x17\n\x13\x43OMMIT_PLAN_COMMAND\x10\"\x12\x1f\n\x1b\x45NTER_IN_ERROR_PLAN_COMMAND\x10#\x12\x1f\n\x1bORIGINATE_PRESCRIBE_COMMAND\x10$\x12\x1a\n\x16\x45\x44IT_PRESCRIBE_COMMAND\x10%\x12\x1c\n\x18\x44\x45LETE_PRESCRIBE_COMMAND\x10&\x12\x1c\n\x18\x43OMMIT_PRESCRIBE_COMMAND\x10\'\x12$\n ENTER_IN_ERROR_PRESCRIBE_COMMAND\x10(\x12\x1b\n\x16SEND_PRESCRIBE_COMMAND\x10\x99\n\x12#\n\x1fORIGINATE_QUESTIONNAIRE_COMMAND\x10)\x12\x1e\n\x1a\x45\x44IT_QUESTIONNAIRE_COMMAND\x10*\x12 \n\x1c\x44\x45LETE_QUESTIONNAIRE_COMMAND\x10+\x12 \n\x1c\x43OMMIT_QUESTIONNAIRE_COMMAND\x10,\x12(\n$ENTER_IN_ERROR_QUESTIONNAIRE_COMMAND\x10-\x12&\n\"ORIGINATE_REASON_FOR_VISIT_COMMAND\x10.\x12!\n\x1d\x45\x44IT_REASON_FOR_VISIT_COMMAND\x10/\x12#\n\x1f\x44\x45LETE_REASON_FOR_VISIT_COMMAND\x10\x30\x12#\n\x1f\x43OMMIT_REASON_FOR_VISIT_COMMAND\x10\x31\x12+\n\'ENTER_IN_ERROR_REASON_FOR_VISIT_COMMAND\x10\x32\x12%\n!ORIGINATE_STOP_MEDICATION_COMMAND\x10\x33\x12 \n\x1c\x45\x44IT_STOP_MEDICATION_COMMAND\x10\x34\x12\"\n\x1e\x44\x45LETE_STOP_MEDICATION_COMMAND\x10\x35\x12\"\n\x1e\x43OMMIT_STOP_MEDICATION_COMMAND\x10\x36\x12*\n&ENTER_IN_ERROR_STOP_MEDICATION_COMMAND\x10\x37\x12!\n\x1dORIGINATE_UPDATE_GOAL_COMMAND\x10\x38\x12\x1c\n\x18\x45\x44IT_UPDATE_GOAL_COMMAND\x10\x39\x12\x1e\n\x1a\x44\x45LETE_UPDATE_GOAL_COMMAND\x10:\x12\x1e\n\x1a\x43OMMIT_UPDATE_GOAL_COMMAND\x10;\x12&\n\"ENTER_IN_ERROR_UPDATE_GOAL_COMMAND\x10<\x12\x1d\n\x19ORIGINATE_PERFORM_COMMAND\x10=\x12\x18\n\x14\x45\x44IT_PERFORM_COMMAND\x10>\x12\x1a\n\x16\x44\x45LETE_PERFORM_COMMAND\x10?\x12\x1a\n\x16\x43OMMIT_PERFORM_COMMAND\x10@\x12\"\n\x1e\x45NTER_IN_ERROR_PERFORM_COMMAND\x10\x41\x12\x1e\n\x1aORIGINATE_INSTRUCT_COMMAND\x10\x42\x12\x19\n\x15\x45\x44IT_INSTRUCT_COMMAND\x10\x43\x12\x1b\n\x17\x44\x45LETE_INSTRUCT_COMMAND\x10\x44\x12\x1b\n\x17\x43OMMIT_INSTRUCT_COMMAND\x10\x45\x12#\n\x1f\x45NTER_IN_ERROR_INSTRUCT_COMMAND\x10\x46\x12\x1f\n\x1bORIGINATE_LAB_ORDER_COMMAND\x10G\x12\x1a\n\x16\x45\x44IT_LAB_ORDER_COMMAND\x10H\x12\x1c\n\x18\x44\x45LETE_LAB_ORDER_COMMAND\x10I\x12\x1c\n\x18\x43OMMIT_LAB_ORDER_COMMAND\x10J\x12$\n ENTER_IN_ERROR_LAB_ORDER_COMMAND\x10K\x12\x1b\n\x16SEND_LAB_ORDER_COMMAND\x10\x9a\n\x12$\n ORIGINATE_FAMILY_HISTORY_COMMAND\x10L\x12\x1f\n\x1b\x45\x44IT_FAMILY_HISTORY_COMMAND\x10M\x12!\n\x1d\x44\x45LETE_FAMILY_HISTORY_COMMAND\x10N\x12!\n\x1d\x43OMMIT_FAMILY_HISTORY_COMMAND\x10O\x12)\n%ENTER_IN_ERROR_FAMILY_HISTORY_COMMAND\x10P\x12\x1d\n\x19ORIGINATE_ALLERGY_COMMAND\x10Q\x12\x18\n\x14\x45\x44IT_ALLERGY_COMMAND\x10R\x12\x1a\n\x16\x44\x45LETE_ALLERGY_COMMAND\x10S\x12\x1a\n\x16\x43OMMIT_ALLERGY_COMMAND\x10T\x12\"\n\x1e\x45NTER_IN_ERROR_ALLERGY_COMMAND\x10U\x12$\n ORIGINATE_REMOVE_ALLERGY_COMMAND\x10V\x12\x1f\n\x1b\x45\x44IT_REMOVE_ALLERGY_COMMAND\x10W\x12!\n\x1d\x44\x45LETE_REMOVE_ALLERGY_COMMAND\x10X\x12!\n\x1d\x43OMMIT_REMOVE_ALLERGY_COMMAND\x10Y\x12)\n%ENTER_IN_ERROR_REMOVE_ALLERGY_COMMAND\x10Z\x12&\n\"ORIGINATE_SURGICAL_HISTORY_COMMAND\x10[\x12!\n\x1d\x45\x44IT_SURGICAL_HISTORY_COMMAND\x10\\\x12#\n\x1f\x44\x45LETE_SURGICAL_HISTORY_COMMAND\x10]\x12#\n\x1f\x43OMMIT_SURGICAL_HISTORY_COMMAND\x10^\x12+\n\'ENTER_IN_ERROR_SURGICAL_HISTORY_COMMAND\x10_\x12\x0f\n\x0b\x43REATE_TASK\x10\x64\x12\x0f\n\x0bUPDATE_TASK\x10\x65\x12\x17\n\x13\x43REATE_TASK_COMMENT\x10\x66\x12%\n!ORIGINATE_MEDICAL_HISTORY_COMMAND\x10g\x12 \n\x1c\x45\x44IT_MEDICAL_HISTORY_COMMAND\x10h\x12\"\n\x1e\x44\x45LETE_MEDICAL_HISTORY_COMMAND\x10i\x12\"\n\x1e\x43OMMIT_MEDICAL_HISTORY_COMMAND\x10j\x12*\n&ENTER_IN_ERROR_MEDICAL_HISTORY_COMMAND\x10k\x12\x1f\n\x1b\x41\x44\x44_OR_UPDATE_PROTOCOL_CARD\x10n\x12\x1b\n\x16ORIGINATE_TASK_COMMAND\x10\x85\x01\x12\x16\n\x11\x45\x44IT_TASK_COMMAND\x10\x86\x01\x12\x18\n\x13\x44\x45LETE_TASK_COMMAND\x10\x87\x01\x12\x18\n\x13\x43OMMIT_TASK_COMMAND\x10\x88\x01\x12 \n\x1b\x45NTER_IN_ERROR_TASK_COMMAND\x10\x89\x01\x12\x1c\n\x18ORIGINATE_REFILL_COMMAND\x10q\x12\x17\n\x13\x45\x44IT_REFILL_COMMAND\x10r\x12\x19\n\x15\x44\x45LETE_REFILL_COMMAND\x10s\x12\x19\n\x15\x43OMMIT_REFILL_COMMAND\x10t\x12!\n\x1d\x45NTER_IN_ERROR_REFILL_COMMAND\x10u\x12\x18\n\x13SEND_REFILL_COMMAND\x10\x9c\n\x12\x1c\n\x18ORIGINATE_VITALS_COMMAND\x10v\x12\x17\n\x13\x45\x44IT_VITALS_COMMAND\x10w\x12\x19\n\x15\x44\x45LETE_VITALS_COMMAND\x10x\x12\x19\n\x15\x43OMMIT_VITALS_COMMAND\x10y\x12!\n\x1d\x45NTER_IN_ERROR_VITALS_COMMAND\x10z\x12&\n\"ORIGINATE_UPDATE_DIAGNOSIS_COMMAND\x10{\x12!\n\x1d\x45\x44IT_UPDATE_DIAGNOSIS_COMMAND\x10|\x12#\n\x1f\x44\x45LETE_UPDATE_DIAGNOSIS_COMMAND\x10}\x12#\n\x1f\x43OMMIT_UPDATE_DIAGNOSIS_COMMAND\x10~\x12+\n\'ENTER_IN_ERROR_UPDATE_DIAGNOSIS_COMMAND\x10\x7f\x12!\n\x1cORIGINATE_CLOSE_GOAL_COMMAND\x10\x80\x01\x12\x1c\n\x17\x45\x44IT_CLOSE_GOAL_COMMAND\x10\x81\x01\x12\x1e\n\x19\x44\x45LETE_CLOSE_GOAL_COMMAND\x10\x82\x01\x12\x1e\n\x19\x43OMMIT_CLOSE_GOAL_COMMAND\x10\x83\x01\x12&\n!ENTER_IN_ERROR_CLOSE_GOAL_COMMAND\x10\x84\x01\x12\x1c\n\x17ORIGINATE_REFER_COMMAND\x10\x8b\x01\x12\x17\n\x12\x45\x44IT_REFER_COMMAND\x10\x8c\x01\x12\x19\n\x14\x44\x45LETE_REFER_COMMAND\x10\x8d\x01\x12\x19\n\x14\x43OMMIT_REFER_COMMAND\x10\x8e\x01\x12!\n\x1c\x45NTER_IN_ERROR_REFER_COMMAND\x10\x8f\x01\x12(\n#ORIGINATE_CHANGE_MEDICATION_COMMAND\x10\x96\x01\x12#\n\x1e\x45\x44IT_CHANGE_MEDICATION_COMMAND\x10\x97\x01\x12%\n DELETE_CHANGE_MEDICATION_COMMAND\x10\x98\x01\x12%\n COMMIT_CHANGE_MEDICATION_COMMAND\x10\x99\x01\x12-\n(ENTER_IN_ERROR_CHANGE_MEDICATION_COMMAND\x10\x9a\x01\x12 \n\x1b\x43REATE_QUESTIONNAIRE_RESULT\x10\x8a\x01\x12-\n(ANNOTATE_PATIENT_CHART_CONDITION_RESULTS\x10\xc8\x01\x12%\n ANNOTATE_CLAIM_CONDITION_RESULTS\x10\xac\x02\x12(\n#SHOW_PATIENT_CHART_SUMMARY_SECTIONS\x10\x90\x03\x12\"\n\x1dSHOW_PATIENT_PROFILE_SECTIONS\x10\xf4\x03\x12\x37\n2PATIENT_PROFILE__ADD_PHARMACY__POST_SEARCH_RESULTS\x10\xf5\x03\x12)\n$SEND_SURESCRIPTS_ELIGIBILITY_REQUEST\x10\xd8\x04\x12\x30\n+SEND_SURESCRIPTS_MEDICATION_HISTORY_REQUEST\x10\xd9\x04\x12&\n!SEND_SURESCRIPTS_BENEFITS_REQUEST\x10\xda\x04\x12\x1b\n\x16ORIGINATE_EXAM_COMMAND\x10\xbc\x05\x12\x16\n\x11\x45\x44IT_EXAM_COMMAND\x10\xbd\x05\x12\x18\n\x13\x44\x45LETE_EXAM_COMMAND\x10\xbe\x05\x12\x18\n\x13\x43OMMIT_EXAM_COMMAND\x10\xbf\x05\x12 \n\x1b\x45NTER_IN_ERROR_EXAM_COMMAND\x10\xc0\x05\x12\x1a\n\x15ORIGINATE_ROS_COMMAND\x10\xa0\x06\x12\x15\n\x10\x45\x44IT_ROS_COMMAND\x10\xa1\x06\x12\x17\n\x12\x44\x45LETE_ROS_COMMAND\x10\xa2\x06\x12\x17\n\x12\x43OMMIT_ROS_COMMAND\x10\xa3\x06\x12\x1f\n\x1a\x45NTER_IN_ERROR_ROS_COMMAND\x10\xa4\x06\x12,\n\'ORIGINATE_STRUCTURED_ASSESSMENT_COMMAND\x10\x84\x07\x12\'\n\"EDIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x85\x07\x12)\n$DELETE_STRUCTURED_ASSESSMENT_COMMAND\x10\x86\x07\x12)\n$COMMIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x87\x07\x12\x31\n,ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND\x10\x88\x07\x12 \n\x1bORIGINATE_FOLLOW_UP_COMMAND\x10\x89\x07\x12\x1b\n\x16\x45\x44IT_FOLLOW_UP_COMMAND\x10\x8a\x07\x12\x1d\n\x18\x44\x45LETE_FOLLOW_UP_COMMAND\x10\x8b\x07\x12\x1d\n\x18\x43OMMIT_FOLLOW_UP_COMMAND\x10\x8c\x07\x12%\n ENTER_IN_ERROR_FOLLOW_UP_COMMAND\x10\x8d\x07\x12$\n\x1fORIGINATE_IMAGING_ORDER_COMMAND\x10\xcc\x08\x12\x1f\n\x1a\x45\x44IT_IMAGING_ORDER_COMMAND\x10\xcd\x08\x12!\n\x1c\x44\x45LETE_IMAGING_ORDER_COMMAND\x10\xce\x08\x12!\n\x1c\x43OMMIT_IMAGING_ORDER_COMMAND\x10\xcf\x08\x12)\n$ENTER_IN_ERROR_IMAGING_ORDER_COMMAND\x10\xd0\x08\x12(\n#ORIGINATE_RESOLVE_CONDITION_COMMAND\x10\xb0\t\x12#\n\x1e\x45\x44IT_RESOLVE_CONDITION_COMMAND\x10\xb1\t\x12%\n DELETE_RESOLVE_CONDITION_COMMAND\x10\xb2\t\x12%\n COMMIT_RESOLVE_CONDITION_COMMAND\x10\xb3\t\x12-\n(ENTER_IN_ERROR_RESOLVE_CONDITION_COMMAND\x10\xb4\t\x12*\n%ORIGINATE_ADJUST_PRESCRIPTION_COMMAND\x10\x94\n\x12%\n EDIT_ADJUST_PRESCRIPTION_COMMAND\x10\x95\n\x12\'\n\"DELETE_ADJUST_PRESCRIPTION_COMMAND\x10\x96\n\x12\'\n\"COMMIT_ADJUST_PRESCRIPTION_COMMAND\x10\x97\n\x12/\n*ENTER_IN_ERROR_ADJUST_PRESCRIPTION_COMMAND\x10\x98\n\x12%\n SEND_ADJUST_PRESCRIPTION_COMMAND\x10\x9b\n\x12+\n&ORIGINATE_CHART_SECTION_REVIEW_COMMAND\x10\xf8\n\x12-\n(ORIGINATE_IMMUNIZATION_STATEMENT_COMMAND\x10\xdc\x0b\x12(\n#EDIT_IMMUNIZATION_STATEMENT_COMMAND\x10\xdd\x0b\x12*\n%DELETE_IMMUNIZATION_STATEMENT_COMMAND\x10\xde\x0b\x12*\n%COMMIT_IMMUNIZATION_STATEMENT_COMMAND\x10\xdf\x0b\x12\x32\n-ENTER_IN_ERROR_IMMUNIZATION_STATEMENT_COMMAND\x10\xe0\x0b\x12&\n!COMMAND_AVAILABLE_ACTIONS_RESULTS\x10\xc0\x0c\x12\x17\n\x12SHOW_ACTION_BUTTON\x10\xe8\x07\x12 \n\x1bPATIENT_PORTAL__FORM_RESULT\x10\xd0\x0f\x12.\n)PATIENT_PORTAL__APPOINTMENT_IS_CANCELABLE\x10\xd1\x0f\x12\x31\n,PATIENT_PORTAL__APPOINTMENT_IS_RESCHEDULABLE\x10\xd2\x0f\x12\x32\n-PATIENT_PORTAL__APPOINTMENT_SHOW_MEETING_LINK\x10\xd3\x0f\x12 \n\x1bPATIENT_PORTAL__SEND_INVITE\x10\xd4\x0f\x12=\n8PATIENT_PORTAL__APPOINTMENTS__SLOTS__POST_SEARCH_RESULTS\x10\xd5\x0f\x12M\nHPATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__PRE_SEARCH_RESULTS\x10\xd6\x0f\x12N\nIPATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__POST_SEARCH_RESULTS\x10\xd7\x0f\x12\x45\n@PATIENT_PORTAL__APPOINTMENTS__FORM_LOCATIONS__PRE_SEARCH_RESULTS\x10\xd8\x0f\x12\x46\nAPATIENT_PORTAL__APPOINTMENTS__FORM_LOCATIONS__POST_SEARCH_RESULTS\x10\xd9\x0f\x12\x45\n@PATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__PRE_SEARCH_RESULTS\x10\xda\x0f\x12\x46\nAPATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__POST_SEARCH_RESULTS\x10\xdb\x0f\x12.\n)PATIENT_PORTAL__APPLICATION_CONFIGURATION\x10\xdc\x0f\x12\x1a\n\x15\x41\x44\x44_BILLING_LINE_ITEM\x10\xee\x0f\x12\x1d\n\x18UPDATE_BILLING_LINE_ITEM\x10\xef\x0f\x12\x1d\n\x18REMOVE_BILLING_LINE_ITEM\x10\xf0\x0f\x12#\n\x1eSHOW_PATIENT_PORTAL_MENU_ITEMS\x10\xb4\x10\x12\x12\n\rPORTAL_WIDGET\x10\xb5\x10\x12\x11\n\x0cLAUNCH_MODAL\x10\xb8\x17\x12\x18\n\x13SIMPLE_API_RESPONSE\x10\xa0\x1f\x12 \n\x1bSIMPLE_API_WEBSOCKET_ACCEPT\x10\xa1\x1f\x12\x1e\n\x19SIMPLE_API_WEBSOCKET_DENY\x10\xa2\x1f\x12#\n\x1eSIMPLE_API_WEBSOCKET_BROADCAST\x10\xa3\x1f\x12\x10\n\x0bUPDATE_USER\x10\x88\'\x12\x10\n\x0b\x43REATE_NOTE\x10\xf0.\x12\x10\n\x0bUPDATE_NOTE\x10\xfd.\x12\x17\n\x12\x43REATE_APPOINTMENT\x10\xf1.\x12\x17\n\x12UPDATE_APPOINTMENT\x10\xfe.\x12\x17\n\x12\x43\x41NCEL_APPOINTMENT\x10\xff.\x12\x1a\n\x15\x43REATE_SCHEDULE_EVENT\x10\xf2.\x12\x1a\n\x15UPDATE_SCHEDULE_EVENT\x10\x80/\x12\x1a\n\x15\x44\x45LETE_SCHEDULE_EVENT\x10\x81/\x12\x13\n\x0e\x43REATE_PATIENT\x10\xf3.\x12\x13\n\x0e\x43REATE_MESSAGE\x10\xf4.\x12\x11\n\x0cSEND_MESSAGE\x10\xf5.\x12\x1c\n\x17\x43REATE_AND_SEND_MESSAGE\x10\xf6.\x12\x11\n\x0c\x45\x44IT_MESSAGE\x10\xf7.\x12/\n*PATIENT_METADATA__CREATE_ADDITIONAL_FIELDS\x10\xfa.\x12\x1c\n\x17UPSERT_PATIENT_METADATA\x10\xfb.\x12\'\n\"CREATE_PATIENT_EXTERNAL_IDENTIFIER\x10\xfc.\x12\x1f\n\x1a\x43REATE_COMPOUND_MEDICATION\x10\x84/\x12\x1f\n\x1aUPDATE_COMPOUND_MEDICATION\x10\x85/\x12\x1f\n\x1aPATIENT_CHART__GROUP_ITEMS\x10\x8e/\x12\x18\n\x13SHOW_PANEL_SECTIONS\x10\xd4/\x12\x15\n\x10REDIRECT_CONTEXT\x10\xb8\x30\x12)\n$REVENUE__PAYMENT_PROCESSOR__METADATA\x10\xd9\x36\x12%\n REVENUE__PAYMENT_PROCESSOR__FORM\x10\xda\x36\x12\x38\n3REVENUE__PAYMENT_PROCESSOR__CREDIT_CARD_TRANSACTION\x10\xdb\x36\x12/\n*REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD\x10\xdc\x36\x12=\n8REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__ADD_RESPONSE\x10\xdd\x36\x12@\n;REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__REMOVE_RESPONSE\x10\xde\x36\x62\x06proto3')
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'canvas_generated/messages/effects.proto\x12\x06\x63\x61nvas\"y\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\x12\x13\n\x0bplugin_name\x18\x03 \x01(\t\x12\x11\n\tclassname\x18\x04 \x01(\t\x12\x14\n\x0chandler_name\x18\x05 \x01(\t*\xf1\x43\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\x12\x14\n\x10\x41\x44\x44_BANNER_ALERT\x10\x04\x12\x17\n\x13REMOVE_BANNER_ALERT\x10\x05\x12\x1c\n\x18ORIGINATE_ASSESS_COMMAND\x10\x06\x12\x17\n\x13\x45\x44IT_ASSESS_COMMAND\x10\x07\x12\x19\n\x15\x44\x45LETE_ASSESS_COMMAND\x10\x08\x12\x19\n\x15\x43OMMIT_ASSESS_COMMAND\x10\t\x12!\n\x1d\x45NTER_IN_ERROR_ASSESS_COMMAND\x10\n\x12\x1e\n\x1aORIGINATE_DIAGNOSE_COMMAND\x10\x0b\x12\x19\n\x15\x45\x44IT_DIAGNOSE_COMMAND\x10\x0c\x12\x1b\n\x17\x44\x45LETE_DIAGNOSE_COMMAND\x10\r\x12\x1b\n\x17\x43OMMIT_DIAGNOSE_COMMAND\x10\x0e\x12#\n\x1f\x45NTER_IN_ERROR_DIAGNOSE_COMMAND\x10\x0f\x12\x1a\n\x16ORIGINATE_GOAL_COMMAND\x10\x10\x12\x15\n\x11\x45\x44IT_GOAL_COMMAND\x10\x11\x12\x17\n\x13\x44\x45LETE_GOAL_COMMAND\x10\x12\x12\x17\n\x13\x43OMMIT_GOAL_COMMAND\x10\x13\x12\x1f\n\x1b\x45NTER_IN_ERROR_GOAL_COMMAND\x10\x14\x12\x19\n\x15ORIGINATE_HPI_COMMAND\x10\x15\x12\x14\n\x10\x45\x44IT_HPI_COMMAND\x10\x16\x12\x16\n\x12\x44\x45LETE_HPI_COMMAND\x10\x17\x12\x16\n\x12\x43OMMIT_HPI_COMMAND\x10\x18\x12\x1e\n\x1a\x45NTER_IN_ERROR_HPI_COMMAND\x10\x19\x12*\n&ORIGINATE_MEDICATION_STATEMENT_COMMAND\x10\x1a\x12%\n!EDIT_MEDICATION_STATEMENT_COMMAND\x10\x1b\x12\'\n#DELETE_MEDICATION_STATEMENT_COMMAND\x10\x1c\x12\'\n#COMMIT_MEDICATION_STATEMENT_COMMAND\x10\x1d\x12/\n+ENTER_IN_ERROR_MEDICATION_STATEMENT_COMMAND\x10\x1e\x12\x1a\n\x16ORIGINATE_PLAN_COMMAND\x10\x1f\x12\x15\n\x11\x45\x44IT_PLAN_COMMAND\x10 \x12\x17\n\x13\x44\x45LETE_PLAN_COMMAND\x10!\x12\x17\n\x13\x43OMMIT_PLAN_COMMAND\x10\"\x12\x1f\n\x1b\x45NTER_IN_ERROR_PLAN_COMMAND\x10#\x12\x1f\n\x1bORIGINATE_PRESCRIBE_COMMAND\x10$\x12\x1a\n\x16\x45\x44IT_PRESCRIBE_COMMAND\x10%\x12\x1c\n\x18\x44\x45LETE_PRESCRIBE_COMMAND\x10&\x12\x1c\n\x18\x43OMMIT_PRESCRIBE_COMMAND\x10\'\x12$\n ENTER_IN_ERROR_PRESCRIBE_COMMAND\x10(\x12\x1b\n\x16SEND_PRESCRIBE_COMMAND\x10\x99\n\x12#\n\x1fORIGINATE_QUESTIONNAIRE_COMMAND\x10)\x12\x1e\n\x1a\x45\x44IT_QUESTIONNAIRE_COMMAND\x10*\x12 \n\x1c\x44\x45LETE_QUESTIONNAIRE_COMMAND\x10+\x12 \n\x1c\x43OMMIT_QUESTIONNAIRE_COMMAND\x10,\x12(\n$ENTER_IN_ERROR_QUESTIONNAIRE_COMMAND\x10-\x12&\n\"ORIGINATE_REASON_FOR_VISIT_COMMAND\x10.\x12!\n\x1d\x45\x44IT_REASON_FOR_VISIT_COMMAND\x10/\x12#\n\x1f\x44\x45LETE_REASON_FOR_VISIT_COMMAND\x10\x30\x12#\n\x1f\x43OMMIT_REASON_FOR_VISIT_COMMAND\x10\x31\x12+\n\'ENTER_IN_ERROR_REASON_FOR_VISIT_COMMAND\x10\x32\x12%\n!ORIGINATE_STOP_MEDICATION_COMMAND\x10\x33\x12 \n\x1c\x45\x44IT_STOP_MEDICATION_COMMAND\x10\x34\x12\"\n\x1e\x44\x45LETE_STOP_MEDICATION_COMMAND\x10\x35\x12\"\n\x1e\x43OMMIT_STOP_MEDICATION_COMMAND\x10\x36\x12*\n&ENTER_IN_ERROR_STOP_MEDICATION_COMMAND\x10\x37\x12!\n\x1dORIGINATE_UPDATE_GOAL_COMMAND\x10\x38\x12\x1c\n\x18\x45\x44IT_UPDATE_GOAL_COMMAND\x10\x39\x12\x1e\n\x1a\x44\x45LETE_UPDATE_GOAL_COMMAND\x10:\x12\x1e\n\x1a\x43OMMIT_UPDATE_GOAL_COMMAND\x10;\x12&\n\"ENTER_IN_ERROR_UPDATE_GOAL_COMMAND\x10<\x12\x1d\n\x19ORIGINATE_PERFORM_COMMAND\x10=\x12\x18\n\x14\x45\x44IT_PERFORM_COMMAND\x10>\x12\x1a\n\x16\x44\x45LETE_PERFORM_COMMAND\x10?\x12\x1a\n\x16\x43OMMIT_PERFORM_COMMAND\x10@\x12\"\n\x1e\x45NTER_IN_ERROR_PERFORM_COMMAND\x10\x41\x12\x1e\n\x1aORIGINATE_INSTRUCT_COMMAND\x10\x42\x12\x19\n\x15\x45\x44IT_INSTRUCT_COMMAND\x10\x43\x12\x1b\n\x17\x44\x45LETE_INSTRUCT_COMMAND\x10\x44\x12\x1b\n\x17\x43OMMIT_INSTRUCT_COMMAND\x10\x45\x12#\n\x1f\x45NTER_IN_ERROR_INSTRUCT_COMMAND\x10\x46\x12\x1f\n\x1bORIGINATE_LAB_ORDER_COMMAND\x10G\x12\x1a\n\x16\x45\x44IT_LAB_ORDER_COMMAND\x10H\x12\x1c\n\x18\x44\x45LETE_LAB_ORDER_COMMAND\x10I\x12\x1c\n\x18\x43OMMIT_LAB_ORDER_COMMAND\x10J\x12$\n ENTER_IN_ERROR_LAB_ORDER_COMMAND\x10K\x12\x1b\n\x16SEND_LAB_ORDER_COMMAND\x10\x9a\n\x12$\n ORIGINATE_FAMILY_HISTORY_COMMAND\x10L\x12\x1f\n\x1b\x45\x44IT_FAMILY_HISTORY_COMMAND\x10M\x12!\n\x1d\x44\x45LETE_FAMILY_HISTORY_COMMAND\x10N\x12!\n\x1d\x43OMMIT_FAMILY_HISTORY_COMMAND\x10O\x12)\n%ENTER_IN_ERROR_FAMILY_HISTORY_COMMAND\x10P\x12\x1d\n\x19ORIGINATE_ALLERGY_COMMAND\x10Q\x12\x18\n\x14\x45\x44IT_ALLERGY_COMMAND\x10R\x12\x1a\n\x16\x44\x45LETE_ALLERGY_COMMAND\x10S\x12\x1a\n\x16\x43OMMIT_ALLERGY_COMMAND\x10T\x12\"\n\x1e\x45NTER_IN_ERROR_ALLERGY_COMMAND\x10U\x12$\n ORIGINATE_REMOVE_ALLERGY_COMMAND\x10V\x12\x1f\n\x1b\x45\x44IT_REMOVE_ALLERGY_COMMAND\x10W\x12!\n\x1d\x44\x45LETE_REMOVE_ALLERGY_COMMAND\x10X\x12!\n\x1d\x43OMMIT_REMOVE_ALLERGY_COMMAND\x10Y\x12)\n%ENTER_IN_ERROR_REMOVE_ALLERGY_COMMAND\x10Z\x12&\n\"ORIGINATE_SURGICAL_HISTORY_COMMAND\x10[\x12!\n\x1d\x45\x44IT_SURGICAL_HISTORY_COMMAND\x10\\\x12#\n\x1f\x44\x45LETE_SURGICAL_HISTORY_COMMAND\x10]\x12#\n\x1f\x43OMMIT_SURGICAL_HISTORY_COMMAND\x10^\x12+\n\'ENTER_IN_ERROR_SURGICAL_HISTORY_COMMAND\x10_\x12\x0f\n\x0b\x43REATE_TASK\x10\x64\x12\x0f\n\x0bUPDATE_TASK\x10\x65\x12\x17\n\x13\x43REATE_TASK_COMMENT\x10\x66\x12%\n!ORIGINATE_MEDICAL_HISTORY_COMMAND\x10g\x12 \n\x1c\x45\x44IT_MEDICAL_HISTORY_COMMAND\x10h\x12\"\n\x1e\x44\x45LETE_MEDICAL_HISTORY_COMMAND\x10i\x12\"\n\x1e\x43OMMIT_MEDICAL_HISTORY_COMMAND\x10j\x12*\n&ENTER_IN_ERROR_MEDICAL_HISTORY_COMMAND\x10k\x12\x1f\n\x1b\x41\x44\x44_OR_UPDATE_PROTOCOL_CARD\x10n\x12\x1b\n\x16ORIGINATE_TASK_COMMAND\x10\x85\x01\x12\x16\n\x11\x45\x44IT_TASK_COMMAND\x10\x86\x01\x12\x18\n\x13\x44\x45LETE_TASK_COMMAND\x10\x87\x01\x12\x18\n\x13\x43OMMIT_TASK_COMMAND\x10\x88\x01\x12 \n\x1b\x45NTER_IN_ERROR_TASK_COMMAND\x10\x89\x01\x12\x1c\n\x18ORIGINATE_REFILL_COMMAND\x10q\x12\x17\n\x13\x45\x44IT_REFILL_COMMAND\x10r\x12\x19\n\x15\x44\x45LETE_REFILL_COMMAND\x10s\x12\x19\n\x15\x43OMMIT_REFILL_COMMAND\x10t\x12!\n\x1d\x45NTER_IN_ERROR_REFILL_COMMAND\x10u\x12\x18\n\x13SEND_REFILL_COMMAND\x10\x9c\n\x12\x1c\n\x18ORIGINATE_VITALS_COMMAND\x10v\x12\x17\n\x13\x45\x44IT_VITALS_COMMAND\x10w\x12\x19\n\x15\x44\x45LETE_VITALS_COMMAND\x10x\x12\x19\n\x15\x43OMMIT_VITALS_COMMAND\x10y\x12!\n\x1d\x45NTER_IN_ERROR_VITALS_COMMAND\x10z\x12&\n\"ORIGINATE_UPDATE_DIAGNOSIS_COMMAND\x10{\x12!\n\x1d\x45\x44IT_UPDATE_DIAGNOSIS_COMMAND\x10|\x12#\n\x1f\x44\x45LETE_UPDATE_DIAGNOSIS_COMMAND\x10}\x12#\n\x1f\x43OMMIT_UPDATE_DIAGNOSIS_COMMAND\x10~\x12+\n\'ENTER_IN_ERROR_UPDATE_DIAGNOSIS_COMMAND\x10\x7f\x12!\n\x1cORIGINATE_CLOSE_GOAL_COMMAND\x10\x80\x01\x12\x1c\n\x17\x45\x44IT_CLOSE_GOAL_COMMAND\x10\x81\x01\x12\x1e\n\x19\x44\x45LETE_CLOSE_GOAL_COMMAND\x10\x82\x01\x12\x1e\n\x19\x43OMMIT_CLOSE_GOAL_COMMAND\x10\x83\x01\x12&\n!ENTER_IN_ERROR_CLOSE_GOAL_COMMAND\x10\x84\x01\x12\x1c\n\x17ORIGINATE_REFER_COMMAND\x10\x8b\x01\x12\x17\n\x12\x45\x44IT_REFER_COMMAND\x10\x8c\x01\x12\x19\n\x14\x44\x45LETE_REFER_COMMAND\x10\x8d\x01\x12\x19\n\x14\x43OMMIT_REFER_COMMAND\x10\x8e\x01\x12!\n\x1c\x45NTER_IN_ERROR_REFER_COMMAND\x10\x8f\x01\x12(\n#ORIGINATE_CHANGE_MEDICATION_COMMAND\x10\x96\x01\x12#\n\x1e\x45\x44IT_CHANGE_MEDICATION_COMMAND\x10\x97\x01\x12%\n DELETE_CHANGE_MEDICATION_COMMAND\x10\x98\x01\x12%\n COMMIT_CHANGE_MEDICATION_COMMAND\x10\x99\x01\x12-\n(ENTER_IN_ERROR_CHANGE_MEDICATION_COMMAND\x10\x9a\x01\x12 \n\x1b\x43REATE_QUESTIONNAIRE_RESULT\x10\x8a\x01\x12-\n(ANNOTATE_PATIENT_CHART_CONDITION_RESULTS\x10\xc8\x01\x12%\n ANNOTATE_CLAIM_CONDITION_RESULTS\x10\xac\x02\x12(\n#SHOW_PATIENT_CHART_SUMMARY_SECTIONS\x10\x90\x03\x12\"\n\x1dSHOW_PATIENT_PROFILE_SECTIONS\x10\xf4\x03\x12\x37\n2PATIENT_PROFILE__ADD_PHARMACY__POST_SEARCH_RESULTS\x10\xf5\x03\x12)\n$SEND_SURESCRIPTS_ELIGIBILITY_REQUEST\x10\xd8\x04\x12\x30\n+SEND_SURESCRIPTS_MEDICATION_HISTORY_REQUEST\x10\xd9\x04\x12&\n!SEND_SURESCRIPTS_BENEFITS_REQUEST\x10\xda\x04\x12\x1b\n\x16ORIGINATE_EXAM_COMMAND\x10\xbc\x05\x12\x16\n\x11\x45\x44IT_EXAM_COMMAND\x10\xbd\x05\x12\x18\n\x13\x44\x45LETE_EXAM_COMMAND\x10\xbe\x05\x12\x18\n\x13\x43OMMIT_EXAM_COMMAND\x10\xbf\x05\x12 \n\x1b\x45NTER_IN_ERROR_EXAM_COMMAND\x10\xc0\x05\x12\x1a\n\x15ORIGINATE_ROS_COMMAND\x10\xa0\x06\x12\x15\n\x10\x45\x44IT_ROS_COMMAND\x10\xa1\x06\x12\x17\n\x12\x44\x45LETE_ROS_COMMAND\x10\xa2\x06\x12\x17\n\x12\x43OMMIT_ROS_COMMAND\x10\xa3\x06\x12\x1f\n\x1a\x45NTER_IN_ERROR_ROS_COMMAND\x10\xa4\x06\x12,\n\'ORIGINATE_STRUCTURED_ASSESSMENT_COMMAND\x10\x84\x07\x12\'\n\"EDIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x85\x07\x12)\n$DELETE_STRUCTURED_ASSESSMENT_COMMAND\x10\x86\x07\x12)\n$COMMIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x87\x07\x12\x31\n,ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND\x10\x88\x07\x12 \n\x1bORIGINATE_FOLLOW_UP_COMMAND\x10\x89\x07\x12\x1b\n\x16\x45\x44IT_FOLLOW_UP_COMMAND\x10\x8a\x07\x12\x1d\n\x18\x44\x45LETE_FOLLOW_UP_COMMAND\x10\x8b\x07\x12\x1d\n\x18\x43OMMIT_FOLLOW_UP_COMMAND\x10\x8c\x07\x12%\n ENTER_IN_ERROR_FOLLOW_UP_COMMAND\x10\x8d\x07\x12$\n\x1fORIGINATE_IMAGING_ORDER_COMMAND\x10\xcc\x08\x12\x1f\n\x1a\x45\x44IT_IMAGING_ORDER_COMMAND\x10\xcd\x08\x12!\n\x1c\x44\x45LETE_IMAGING_ORDER_COMMAND\x10\xce\x08\x12!\n\x1c\x43OMMIT_IMAGING_ORDER_COMMAND\x10\xcf\x08\x12)\n$ENTER_IN_ERROR_IMAGING_ORDER_COMMAND\x10\xd0\x08\x12(\n#ORIGINATE_RESOLVE_CONDITION_COMMAND\x10\xb0\t\x12#\n\x1e\x45\x44IT_RESOLVE_CONDITION_COMMAND\x10\xb1\t\x12%\n DELETE_RESOLVE_CONDITION_COMMAND\x10\xb2\t\x12%\n COMMIT_RESOLVE_CONDITION_COMMAND\x10\xb3\t\x12-\n(ENTER_IN_ERROR_RESOLVE_CONDITION_COMMAND\x10\xb4\t\x12*\n%ORIGINATE_ADJUST_PRESCRIPTION_COMMAND\x10\x94\n\x12%\n EDIT_ADJUST_PRESCRIPTION_COMMAND\x10\x95\n\x12\'\n\"DELETE_ADJUST_PRESCRIPTION_COMMAND\x10\x96\n\x12\'\n\"COMMIT_ADJUST_PRESCRIPTION_COMMAND\x10\x97\n\x12/\n*ENTER_IN_ERROR_ADJUST_PRESCRIPTION_COMMAND\x10\x98\n\x12%\n SEND_ADJUST_PRESCRIPTION_COMMAND\x10\x9b\n\x12+\n&ORIGINATE_CHART_SECTION_REVIEW_COMMAND\x10\xf8\n\x12-\n(ORIGINATE_IMMUNIZATION_STATEMENT_COMMAND\x10\xdc\x0b\x12(\n#EDIT_IMMUNIZATION_STATEMENT_COMMAND\x10\xdd\x0b\x12*\n%DELETE_IMMUNIZATION_STATEMENT_COMMAND\x10\xde\x0b\x12*\n%COMMIT_IMMUNIZATION_STATEMENT_COMMAND\x10\xdf\x0b\x12\x32\n-ENTER_IN_ERROR_IMMUNIZATION_STATEMENT_COMMAND\x10\xe0\x0b\x12&\n!COMMAND_AVAILABLE_ACTIONS_RESULTS\x10\xc0\x0c\x12\x17\n\x12SHOW_ACTION_BUTTON\x10\xe8\x07\x12 \n\x1bPATIENT_PORTAL__FORM_RESULT\x10\xd0\x0f\x12.\n)PATIENT_PORTAL__APPOINTMENT_IS_CANCELABLE\x10\xd1\x0f\x12\x31\n,PATIENT_PORTAL__APPOINTMENT_IS_RESCHEDULABLE\x10\xd2\x0f\x12\x32\n-PATIENT_PORTAL__APPOINTMENT_SHOW_MEETING_LINK\x10\xd3\x0f\x12 \n\x1bPATIENT_PORTAL__SEND_INVITE\x10\xd4\x0f\x12=\n8PATIENT_PORTAL__APPOINTMENTS__SLOTS__POST_SEARCH_RESULTS\x10\xd5\x0f\x12M\nHPATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__PRE_SEARCH_RESULTS\x10\xd6\x0f\x12N\nIPATIENT_PORTAL__APPOINTMENTS__FORM_APPOINTMENT_TYPES__POST_SEARCH_RESULTS\x10\xd7\x0f\x12\x45\n@PATIENT_PORTAL__APPOINTMENTS__FORM_LOCATIONS__PRE_SEARCH_RESULTS\x10\xd8\x0f\x12\x46\nAPATIENT_PORTAL__APPOINTMENTS__FORM_LOCATIONS__POST_SEARCH_RESULTS\x10\xd9\x0f\x12\x45\n@PATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__PRE_SEARCH_RESULTS\x10\xda\x0f\x12\x46\nAPATIENT_PORTAL__APPOINTMENTS__FORM_PROVIDERS__POST_SEARCH_RESULTS\x10\xdb\x0f\x12.\n)PATIENT_PORTAL__APPLICATION_CONFIGURATION\x10\xdc\x0f\x12\x1a\n\x15\x41\x44\x44_BILLING_LINE_ITEM\x10\xee\x0f\x12\x1d\n\x18UPDATE_BILLING_LINE_ITEM\x10\xef\x0f\x12\x1d\n\x18REMOVE_BILLING_LINE_ITEM\x10\xf0\x0f\x12#\n\x1eSHOW_PATIENT_PORTAL_MENU_ITEMS\x10\xb4\x10\x12\x12\n\rPORTAL_WIDGET\x10\xb5\x10\x12\x11\n\x0cLAUNCH_MODAL\x10\xb8\x17\x12\x18\n\x13SIMPLE_API_RESPONSE\x10\xa0\x1f\x12 \n\x1bSIMPLE_API_WEBSOCKET_ACCEPT\x10\xa1\x1f\x12\x1e\n\x19SIMPLE_API_WEBSOCKET_DENY\x10\xa2\x1f\x12#\n\x1eSIMPLE_API_WEBSOCKET_BROADCAST\x10\xa3\x1f\x12\x10\n\x0bUPDATE_USER\x10\x88\'\x12\x10\n\x0b\x43REATE_NOTE\x10\xf0.\x12\x10\n\x0bUPDATE_NOTE\x10\xfd.\x12\x17\n\x12\x43REATE_APPOINTMENT\x10\xf1.\x12\x17\n\x12UPDATE_APPOINTMENT\x10\xfe.\x12\x17\n\x12\x43\x41NCEL_APPOINTMENT\x10\xff.\x12\x1a\n\x15\x43REATE_SCHEDULE_EVENT\x10\xf2.\x12\x1a\n\x15UPDATE_SCHEDULE_EVENT\x10\x80/\x12\x1a\n\x15\x44\x45LETE_SCHEDULE_EVENT\x10\x81/\x12\x13\n\x0e\x43REATE_PATIENT\x10\xf3.\x12\x13\n\x0eUPDATE_PATIENT\x10\xf8.\x12\x13\n\x0e\x43REATE_MESSAGE\x10\xf4.\x12\x11\n\x0cSEND_MESSAGE\x10\xf5.\x12\x1c\n\x17\x43REATE_AND_SEND_MESSAGE\x10\xf6.\x12\x11\n\x0c\x45\x44IT_MESSAGE\x10\xf7.\x12/\n*PATIENT_METADATA__CREATE_ADDITIONAL_FIELDS\x10\xfa.\x12\x1c\n\x17UPSERT_PATIENT_METADATA\x10\xfb.\x12\'\n\"CREATE_PATIENT_EXTERNAL_IDENTIFIER\x10\xfc.\x12(\n#CREATE_PATIENT_PREFERRED_PHARMACIES\x10\x82/\x12\x1f\n\x1a\x43REATE_COMPOUND_MEDICATION\x10\x84/\x12\x1f\n\x1aUPDATE_COMPOUND_MEDICATION\x10\x85/\x12\x1f\n\x1aPATIENT_CHART__GROUP_ITEMS\x10\x8e/\x12\x18\n\x13SHOW_PANEL_SECTIONS\x10\xd4/\x12\x15\n\x10REDIRECT_CONTEXT\x10\xb8\x30\x12)\n$REVENUE__PAYMENT_PROCESSOR__METADATA\x10\xd9\x36\x12%\n REVENUE__PAYMENT_PROCESSOR__FORM\x10\xda\x36\x12\x38\n3REVENUE__PAYMENT_PROCESSOR__CREDIT_CARD_TRANSACTION\x10\xdb\x36\x12/\n*REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD\x10\xdc\x36\x12=\n8REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__ADD_RESPONSE\x10\xdd\x36\x12@\n;REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__REMOVE_RESPONSE\x10\xde\x36\x62\x06proto3')
|
|
18
18
|
|
|
19
19
|
_globals = globals()
|
|
20
20
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -22,7 +22,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'canvas_generated.messages.e
|
|
|
22
22
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
23
23
|
DESCRIPTOR._options = None
|
|
24
24
|
_globals['_EFFECTTYPE']._serialized_start=175
|
|
25
|
-
_globals['_EFFECTTYPE']._serialized_end=
|
|
25
|
+
_globals['_EFFECTTYPE']._serialized_end=8864
|
|
26
26
|
_globals['_EFFECT']._serialized_start=51
|
|
27
27
|
_globals['_EFFECT']._serialized_end=172
|
|
28
28
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -236,6 +236,7 @@ class EffectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
|
236
236
|
UPDATE_SCHEDULE_EVENT: _ClassVar[EffectType]
|
|
237
237
|
DELETE_SCHEDULE_EVENT: _ClassVar[EffectType]
|
|
238
238
|
CREATE_PATIENT: _ClassVar[EffectType]
|
|
239
|
+
UPDATE_PATIENT: _ClassVar[EffectType]
|
|
239
240
|
CREATE_MESSAGE: _ClassVar[EffectType]
|
|
240
241
|
SEND_MESSAGE: _ClassVar[EffectType]
|
|
241
242
|
CREATE_AND_SEND_MESSAGE: _ClassVar[EffectType]
|
|
@@ -243,6 +244,7 @@ class EffectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
|
243
244
|
PATIENT_METADATA__CREATE_ADDITIONAL_FIELDS: _ClassVar[EffectType]
|
|
244
245
|
UPSERT_PATIENT_METADATA: _ClassVar[EffectType]
|
|
245
246
|
CREATE_PATIENT_EXTERNAL_IDENTIFIER: _ClassVar[EffectType]
|
|
247
|
+
CREATE_PATIENT_PREFERRED_PHARMACIES: _ClassVar[EffectType]
|
|
246
248
|
CREATE_COMPOUND_MEDICATION: _ClassVar[EffectType]
|
|
247
249
|
UPDATE_COMPOUND_MEDICATION: _ClassVar[EffectType]
|
|
248
250
|
PATIENT_CHART__GROUP_ITEMS: _ClassVar[EffectType]
|
|
@@ -483,6 +485,7 @@ CREATE_SCHEDULE_EVENT: EffectType
|
|
|
483
485
|
UPDATE_SCHEDULE_EVENT: EffectType
|
|
484
486
|
DELETE_SCHEDULE_EVENT: EffectType
|
|
485
487
|
CREATE_PATIENT: EffectType
|
|
488
|
+
UPDATE_PATIENT: EffectType
|
|
486
489
|
CREATE_MESSAGE: EffectType
|
|
487
490
|
SEND_MESSAGE: EffectType
|
|
488
491
|
CREATE_AND_SEND_MESSAGE: EffectType
|
|
@@ -490,6 +493,7 @@ EDIT_MESSAGE: EffectType
|
|
|
490
493
|
PATIENT_METADATA__CREATE_ADDITIONAL_FIELDS: EffectType
|
|
491
494
|
UPSERT_PATIENT_METADATA: EffectType
|
|
492
495
|
CREATE_PATIENT_EXTERNAL_IDENTIFIER: EffectType
|
|
496
|
+
CREATE_PATIENT_PREFERRED_PHARMACIES: EffectType
|
|
493
497
|
CREATE_COMPOUND_MEDICATION: EffectType
|
|
494
498
|
UPDATE_COMPOUND_MEDICATION: EffectType
|
|
495
499
|
PATIENT_CHART__GROUP_ITEMS: EffectType
|
|
@@ -1,11 +1,23 @@
|
|
|
1
|
-
from canvas_sdk.effects.patient.base import
|
|
1
|
+
from canvas_sdk.effects.patient.base import (
|
|
2
|
+
Patient,
|
|
3
|
+
PatientAddress,
|
|
4
|
+
PatientContactPoint,
|
|
5
|
+
PatientExternalIdentifier,
|
|
6
|
+
PatientPreferredPharmacy,
|
|
7
|
+
)
|
|
2
8
|
from canvas_sdk.effects.patient.create_patient_external_identifier import (
|
|
3
9
|
CreatePatientExternalIdentifier,
|
|
4
10
|
)
|
|
11
|
+
from canvas_sdk.effects.patient.create_patient_preferred_pharmacies import (
|
|
12
|
+
CreatePatientPreferredPharmacies,
|
|
13
|
+
)
|
|
5
14
|
|
|
6
15
|
__all__ = __exports__ = (
|
|
7
16
|
"Patient",
|
|
17
|
+
"PatientAddress",
|
|
8
18
|
"PatientContactPoint",
|
|
9
19
|
"PatientExternalIdentifier",
|
|
20
|
+
"PatientPreferredPharmacy",
|
|
10
21
|
"CreatePatientExternalIdentifier",
|
|
22
|
+
"CreatePatientPreferredPharmacies",
|
|
11
23
|
)
|
|
@@ -7,8 +7,15 @@ from pydantic_core import InitErrorDetails
|
|
|
7
7
|
|
|
8
8
|
from canvas_generated.messages.effects_pb2 import Effect
|
|
9
9
|
from canvas_sdk.base import TrackableFieldsModel
|
|
10
|
+
from canvas_sdk.v1.data import Patient as PatientModel
|
|
10
11
|
from canvas_sdk.v1.data import PracticeLocation, Staff
|
|
11
|
-
from canvas_sdk.v1.data.common import
|
|
12
|
+
from canvas_sdk.v1.data.common import (
|
|
13
|
+
AddressType,
|
|
14
|
+
AddressUse,
|
|
15
|
+
ContactPointSystem,
|
|
16
|
+
ContactPointUse,
|
|
17
|
+
PersonSex,
|
|
18
|
+
)
|
|
12
19
|
|
|
13
20
|
|
|
14
21
|
@dataclass
|
|
@@ -47,14 +54,63 @@ class PatientExternalIdentifier:
|
|
|
47
54
|
}
|
|
48
55
|
|
|
49
56
|
|
|
57
|
+
@dataclass
|
|
58
|
+
class PatientPreferredPharmacy:
|
|
59
|
+
"""A class representing a preferred pharmacy."""
|
|
60
|
+
|
|
61
|
+
ncpdp_id: str
|
|
62
|
+
default: bool = False
|
|
63
|
+
|
|
64
|
+
def to_dict(self) -> dict[str, Any]:
|
|
65
|
+
"""Convert the preferred pharmacy to a dictionary."""
|
|
66
|
+
return {
|
|
67
|
+
"ncpdp_id": self.ncpdp_id,
|
|
68
|
+
"default": self.default,
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@dataclass
|
|
73
|
+
class PatientAddress:
|
|
74
|
+
"""A class representing a patient address."""
|
|
75
|
+
|
|
76
|
+
line1: str
|
|
77
|
+
country: str
|
|
78
|
+
line2: str | None = None
|
|
79
|
+
use: AddressUse = AddressUse.HOME
|
|
80
|
+
type: AddressType = AddressType.BOTH
|
|
81
|
+
city: str | None = None
|
|
82
|
+
district: str | None = None
|
|
83
|
+
state_code: str | None = None
|
|
84
|
+
postal_code: str | None = None
|
|
85
|
+
longitude: float | None = None
|
|
86
|
+
latitude: float | None = None
|
|
87
|
+
|
|
88
|
+
def to_dict(self) -> dict[str, Any]:
|
|
89
|
+
"""Convert the address to a dictionary."""
|
|
90
|
+
return {
|
|
91
|
+
"line1": self.line1,
|
|
92
|
+
"line2": self.line2,
|
|
93
|
+
"country": self.country,
|
|
94
|
+
"use": self.use.value,
|
|
95
|
+
"type": self.type.value,
|
|
96
|
+
"city": self.city,
|
|
97
|
+
"district": self.district,
|
|
98
|
+
"state_code": self.state_code,
|
|
99
|
+
"postal_code": self.postal_code,
|
|
100
|
+
"longitude": self.longitude,
|
|
101
|
+
"latitude": self.latitude,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
50
105
|
class Patient(TrackableFieldsModel):
|
|
51
106
|
"""Effect to create a Patient record."""
|
|
52
107
|
|
|
53
108
|
class Meta:
|
|
54
109
|
effect_type = "PATIENT"
|
|
55
110
|
|
|
56
|
-
|
|
57
|
-
|
|
111
|
+
patient_id: str | None = None
|
|
112
|
+
first_name: str | None = None
|
|
113
|
+
last_name: str | None = None
|
|
58
114
|
middle_name: str | None = None
|
|
59
115
|
birthdate: datetime.date | None = None
|
|
60
116
|
prefix: str | None = None
|
|
@@ -69,36 +125,94 @@ class Patient(TrackableFieldsModel):
|
|
|
69
125
|
previous_names: list[str] | None = None
|
|
70
126
|
contact_points: list[PatientContactPoint] | None = None
|
|
71
127
|
external_identifiers: list[PatientExternalIdentifier] | None = None
|
|
128
|
+
preferred_pharmacies: list[PatientPreferredPharmacy] | None = None
|
|
129
|
+
addresses: list[PatientAddress] | None = None
|
|
72
130
|
|
|
73
131
|
@property
|
|
74
132
|
def values(self) -> dict[str, Any]:
|
|
75
133
|
"""Return the values of the patient as a dictionary."""
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
134
|
+
values = super().values
|
|
135
|
+
|
|
136
|
+
if self.is_dirty("contact_points"):
|
|
137
|
+
values["contact_points"] = (
|
|
138
|
+
[cp.to_dict() for cp in self.contact_points]
|
|
139
|
+
if self.contact_points is not None
|
|
140
|
+
else None
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
if self.is_dirty("external_identifiers"):
|
|
144
|
+
values["external_identifiers"] = (
|
|
145
|
+
[ids.to_dict() for ids in self.external_identifiers]
|
|
146
|
+
if self.external_identifiers is not None
|
|
147
|
+
else None
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
if self.is_dirty("addresses"):
|
|
151
|
+
values["addresses"] = (
|
|
152
|
+
[addr.to_dict() for addr in self.addresses] if self.addresses is not None else None
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
if self.is_dirty("preferred_pharmacies"):
|
|
156
|
+
values["preferred_pharmacies"] = (
|
|
157
|
+
[pharmacy.to_dict() for pharmacy in self.preferred_pharmacies]
|
|
158
|
+
if self.preferred_pharmacies
|
|
159
|
+
else None
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
return values
|
|
98
163
|
|
|
99
164
|
def _get_error_details(self, method: Any) -> list[InitErrorDetails]:
|
|
100
165
|
errors = super()._get_error_details(method)
|
|
101
166
|
|
|
167
|
+
# Validate create-specific requirements
|
|
168
|
+
if method == "create":
|
|
169
|
+
if self.patient_id:
|
|
170
|
+
errors.append(
|
|
171
|
+
self._create_error_detail(
|
|
172
|
+
"value",
|
|
173
|
+
"Patient ID should not be set when creating a new patient.",
|
|
174
|
+
self.patient_id,
|
|
175
|
+
)
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
# first_name and last_name are required for create
|
|
179
|
+
if not self.first_name:
|
|
180
|
+
errors.append(
|
|
181
|
+
self._create_error_detail(
|
|
182
|
+
"value",
|
|
183
|
+
"First name is required when creating a new patient.",
|
|
184
|
+
self.first_name,
|
|
185
|
+
)
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
if not self.last_name:
|
|
189
|
+
errors.append(
|
|
190
|
+
self._create_error_detail(
|
|
191
|
+
"value",
|
|
192
|
+
"Last name is required when creating a new patient.",
|
|
193
|
+
self.last_name,
|
|
194
|
+
)
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
# Validate update-specific requirements
|
|
198
|
+
if method == "update":
|
|
199
|
+
if not self.patient_id:
|
|
200
|
+
errors.append(
|
|
201
|
+
self._create_error_detail(
|
|
202
|
+
"value",
|
|
203
|
+
"Patient ID must be set when updating an existing patient.",
|
|
204
|
+
self.patient_id,
|
|
205
|
+
)
|
|
206
|
+
)
|
|
207
|
+
elif not PatientModel.objects.filter(id=self.patient_id).exists():
|
|
208
|
+
errors.append(
|
|
209
|
+
self._create_error_detail(
|
|
210
|
+
"value",
|
|
211
|
+
f"Patient with ID {self.patient_id} does not exist.",
|
|
212
|
+
self.patient_id,
|
|
213
|
+
)
|
|
214
|
+
)
|
|
215
|
+
|
|
102
216
|
if (
|
|
103
217
|
self.default_location_id
|
|
104
218
|
and not PracticeLocation.objects.filter(id=self.default_location_id).exists()
|
|
@@ -138,5 +252,24 @@ class Patient(TrackableFieldsModel):
|
|
|
138
252
|
),
|
|
139
253
|
)
|
|
140
254
|
|
|
255
|
+
def update(self) -> Effect:
|
|
256
|
+
"""Update an existing Patient."""
|
|
257
|
+
self._validate_before_effect("update")
|
|
258
|
+
|
|
259
|
+
return Effect(
|
|
260
|
+
type=f"UPDATE_{self.Meta.effect_type}",
|
|
261
|
+
payload=json.dumps(
|
|
262
|
+
{
|
|
263
|
+
"data": self.values,
|
|
264
|
+
}
|
|
265
|
+
),
|
|
266
|
+
)
|
|
267
|
+
|
|
141
268
|
|
|
142
|
-
__exports__ = (
|
|
269
|
+
__exports__ = (
|
|
270
|
+
"Patient",
|
|
271
|
+
"PatientAddress",
|
|
272
|
+
"PatientContactPoint",
|
|
273
|
+
"PatientExternalIdentifier",
|
|
274
|
+
"PatientPreferredPharmacy",
|
|
275
|
+
)
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import Any
|
|
3
|
+
from uuid import UUID
|
|
4
|
+
|
|
5
|
+
from pydantic_core import InitErrorDetails
|
|
6
|
+
|
|
7
|
+
from canvas_generated.messages.effects_pb2 import Effect
|
|
8
|
+
from canvas_sdk.effects import _BaseEffect
|
|
9
|
+
from canvas_sdk.effects.patient import PatientPreferredPharmacy
|
|
10
|
+
from canvas_sdk.v1.data import Patient
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CreatePatientPreferredPharmacies(_BaseEffect):
|
|
14
|
+
"""Effect to create a Patient External Identifier record."""
|
|
15
|
+
|
|
16
|
+
class Meta:
|
|
17
|
+
effect_type = "CREATE_PATIENT_PREFERRED_PHARMACIES"
|
|
18
|
+
|
|
19
|
+
pharmacies: list[PatientPreferredPharmacy]
|
|
20
|
+
patient_id: str | UUID
|
|
21
|
+
|
|
22
|
+
def _get_error_details(self, method: Any) -> list[InitErrorDetails]:
|
|
23
|
+
errors = super()._get_error_details(method)
|
|
24
|
+
|
|
25
|
+
if not Patient.objects.filter(id=self.patient_id).exists():
|
|
26
|
+
errors.append(
|
|
27
|
+
self._create_error_detail(
|
|
28
|
+
"value",
|
|
29
|
+
f"Patient with ID {self.patient_id} does not exist.",
|
|
30
|
+
self.patient_id,
|
|
31
|
+
)
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
default_count = sum(1 for pharmacy in self.pharmacies if pharmacy.default)
|
|
35
|
+
if default_count > 1:
|
|
36
|
+
errors.append(
|
|
37
|
+
self._create_error_detail(
|
|
38
|
+
"value",
|
|
39
|
+
"Only one preferred pharmacy can be set as default.",
|
|
40
|
+
None,
|
|
41
|
+
)
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
return errors
|
|
45
|
+
|
|
46
|
+
@property
|
|
47
|
+
def values(self) -> dict[str, Any]:
|
|
48
|
+
"""Return the values of the preferred pharmacies."""
|
|
49
|
+
return {
|
|
50
|
+
"preferred_pharmacies": [
|
|
51
|
+
preferred_pharmacy.to_dict() for preferred_pharmacy in self.pharmacies
|
|
52
|
+
],
|
|
53
|
+
"patient_id": str(self.patient_id),
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
def create(self) -> Effect:
|
|
57
|
+
"""Create Patient Preferred Pharmacies."""
|
|
58
|
+
self._validate_before_effect("create")
|
|
59
|
+
|
|
60
|
+
return Effect(
|
|
61
|
+
type=self.Meta.effect_type,
|
|
62
|
+
payload=json.dumps(
|
|
63
|
+
{
|
|
64
|
+
"data": self.values,
|
|
65
|
+
}
|
|
66
|
+
),
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
__exports__ = ("CreatePatientPreferredPharmacies",)
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
from .
|
|
1
|
+
from .facility import FacilityFactory
|
|
2
|
+
from .patient import PatientAddressFactory, PatientFacilityAddressFactory, PatientFactory
|
|
3
|
+
from .protocol_current import ProtocolCurrentFactory
|
|
2
4
|
from .user import CanvasUserFactory
|
|
3
5
|
|
|
4
|
-
__all__ = (
|
|
6
|
+
__all__ = (
|
|
7
|
+
"CanvasUserFactory",
|
|
8
|
+
"FacilityFactory",
|
|
9
|
+
"PatientAddressFactory",
|
|
10
|
+
"PatientFacilityAddressFactory",
|
|
11
|
+
"PatientFactory",
|
|
12
|
+
"ProtocolCurrentFactory",
|
|
13
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import factory
|
|
2
|
+
|
|
3
|
+
from canvas_sdk.v1.data import Facility
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class FacilityFactory(factory.django.DjangoModelFactory[Facility]):
|
|
7
|
+
"""Factory for creating a Facility."""
|
|
8
|
+
|
|
9
|
+
class Meta:
|
|
10
|
+
model = Facility
|
|
11
|
+
|
|
12
|
+
name = factory.Faker("company")
|
|
13
|
+
npi_number = factory.Faker("numerify", text="##########") # 10 digit NPI number
|
|
14
|
+
phone_number = factory.Faker("numerify", text="##########") # 10 digit phone number
|
|
15
|
+
active = True
|
|
16
|
+
line1 = factory.Faker("street_address")
|
|
17
|
+
line2 = factory.Faker("secondary_address")
|
|
18
|
+
city = factory.Faker("city")
|
|
19
|
+
district = factory.Faker("city_suffix")
|
|
20
|
+
state_code = factory.Faker("state_abbr")
|
|
21
|
+
postal_code = factory.Faker("postcode")
|
|
@@ -3,8 +3,9 @@ import datetime
|
|
|
3
3
|
import factory
|
|
4
4
|
from factory.fuzzy import FuzzyDate
|
|
5
5
|
|
|
6
|
+
from canvas_sdk.test_utils.factories.facility import FacilityFactory
|
|
6
7
|
from canvas_sdk.test_utils.factories.user import CanvasUserFactory
|
|
7
|
-
from canvas_sdk.v1.data import Patient, PatientAddress
|
|
8
|
+
from canvas_sdk.v1.data import Patient, PatientAddress, PatientFacilityAddress
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class PatientAddressFactory(factory.django.DjangoModelFactory[PatientAddress]):
|
|
@@ -37,3 +38,14 @@ class PatientFactory(factory.django.DjangoModelFactory[Patient]):
|
|
|
37
38
|
last_name = factory.Faker("last_name")
|
|
38
39
|
addresses = factory.RelatedFactory(PatientAddressFactory, "patient")
|
|
39
40
|
user = factory.SubFactory(CanvasUserFactory)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class PatientFacilityAddressFactory(factory.django.DjangoModelFactory[PatientFacilityAddress]):
|
|
44
|
+
"""Factory for creating a PatientFacilityAddress."""
|
|
45
|
+
|
|
46
|
+
class Meta:
|
|
47
|
+
model = PatientFacilityAddress
|
|
48
|
+
|
|
49
|
+
facility = factory.SubFactory(FacilityFactory)
|
|
50
|
+
patient = factory.SubFactory(PatientFactory)
|
|
51
|
+
room_number = factory.Faker("building_number")
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
|
|
3
|
+
import factory
|
|
4
|
+
from factory.fuzzy import FuzzyChoice, FuzzyDate, FuzzyInteger
|
|
5
|
+
|
|
6
|
+
from canvas_sdk.test_utils.factories.patient import PatientFactory
|
|
7
|
+
from canvas_sdk.v1.data import ProtocolCurrent
|
|
8
|
+
from canvas_sdk.v1.data.protocol_result import ProtocolResultStatus
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ProtocolCurrentFactory(factory.django.DjangoModelFactory[ProtocolCurrent]):
|
|
12
|
+
"""Factory for creating a ProtocolCurrent."""
|
|
13
|
+
|
|
14
|
+
class Meta:
|
|
15
|
+
model = ProtocolCurrent
|
|
16
|
+
|
|
17
|
+
# Fields from ProtocolResult (abstract base class)
|
|
18
|
+
title = factory.Faker("sentence", nb_words=4)
|
|
19
|
+
narrative = factory.Faker("text", max_nb_chars=200)
|
|
20
|
+
types = factory.LazyFunction(lambda: ["screening", "preventive"])
|
|
21
|
+
protocol_key = factory.Faker("slug")
|
|
22
|
+
plugin_name = factory.Faker("slug")
|
|
23
|
+
status = FuzzyChoice(ProtocolResultStatus.choices, getter=lambda c: c[0])
|
|
24
|
+
due_in = FuzzyInteger(-30, 365) # Days until due (can be negative for overdue)
|
|
25
|
+
days_of_notice = FuzzyInteger(7, 60)
|
|
26
|
+
snoozed = factory.Faker("boolean", chance_of_getting_true=20)
|
|
27
|
+
sources = factory.LazyFunction(lambda: {"conditions": [], "medications": [], "labs": []})
|
|
28
|
+
recommendations = factory.LazyFunction(lambda: {"primary": "Schedule annual checkup"})
|
|
29
|
+
top_recommendation_key = factory.Faker("slug")
|
|
30
|
+
next_review = factory.Faker("date_time_between", start_date="+1d", end_date="+1y")
|
|
31
|
+
feedback_enabled = factory.Faker("boolean", chance_of_getting_true=30)
|
|
32
|
+
plugin_can_be_snoozed = factory.Faker("boolean", chance_of_getting_true=70)
|
|
33
|
+
|
|
34
|
+
# Fields specific to ProtocolCurrent
|
|
35
|
+
patient = factory.SubFactory(PatientFactory)
|
|
36
|
+
result_hash = factory.Faker("md5")
|
|
37
|
+
snooze_date = factory.Maybe(
|
|
38
|
+
"snoozed",
|
|
39
|
+
yes_declaration=FuzzyDate(
|
|
40
|
+
start_date=datetime.date.today(),
|
|
41
|
+
end_date=datetime.date.today() + datetime.timedelta(days=90),
|
|
42
|
+
),
|
|
43
|
+
no_declaration=None,
|
|
44
|
+
)
|
canvas_sdk/v1/data/__init__.py
CHANGED
|
@@ -15,6 +15,7 @@ from .coverage import Coverage, Transactor, TransactorAddress, TransactorPhone
|
|
|
15
15
|
from .detected_issue import DetectedIssue, DetectedIssueEvidence
|
|
16
16
|
from .device import Device
|
|
17
17
|
from .discount import Discount
|
|
18
|
+
from .facility import Facility
|
|
18
19
|
from .goal import Goal
|
|
19
20
|
from .imaging import ImagingOrder, ImagingReport, ImagingReview
|
|
20
21
|
from .invoice import Invoice
|
|
@@ -51,6 +52,7 @@ from .patient import (
|
|
|
51
52
|
PatientAddress,
|
|
52
53
|
PatientContactPoint,
|
|
53
54
|
PatientExternalIdentifier,
|
|
55
|
+
PatientFacilityAddress,
|
|
54
56
|
PatientMetadata,
|
|
55
57
|
PatientSetting,
|
|
56
58
|
)
|
|
@@ -69,6 +71,7 @@ from .posting import (
|
|
|
69
71
|
PatientPosting,
|
|
70
72
|
)
|
|
71
73
|
from .practicelocation import PracticeLocation, PracticeLocationSetting
|
|
74
|
+
from .protocol_current import ProtocolCurrent
|
|
72
75
|
from .protocol_override import ProtocolOverride
|
|
73
76
|
from .questionnaire import (
|
|
74
77
|
Interview,
|
|
@@ -83,7 +86,7 @@ from .questionnaire import (
|
|
|
83
86
|
from .reason_for_visit import ReasonForVisitSettingCoding
|
|
84
87
|
from .referral import Referral, ReferralReport
|
|
85
88
|
from .service_provider import ServiceProvider
|
|
86
|
-
from .staff import Staff, StaffAddress, StaffContactPoint, StaffPhoto, StaffRole
|
|
89
|
+
from .staff import Staff, StaffAddress, StaffContactPoint, StaffLicense, StaffPhoto, StaffRole
|
|
87
90
|
from .task import Task, TaskComment, TaskLabel, TaskTaskLabel
|
|
88
91
|
from .team import Team, TeamContactPoint
|
|
89
92
|
from .user import CanvasUser
|
|
@@ -121,6 +124,7 @@ __all__ = __exports__ = (
|
|
|
121
124
|
"DetectedIssueEvidence",
|
|
122
125
|
"Device",
|
|
123
126
|
"Discount",
|
|
127
|
+
"Facility",
|
|
124
128
|
"Goal",
|
|
125
129
|
"ImagingOrder",
|
|
126
130
|
"ImagingReport",
|
|
@@ -161,6 +165,7 @@ __all__ = __exports__ = (
|
|
|
161
165
|
"PatientAddress",
|
|
162
166
|
"PatientContactPoint",
|
|
163
167
|
"PatientExternalIdentifier",
|
|
168
|
+
"PatientFacilityAddress",
|
|
164
169
|
"PatientPosting",
|
|
165
170
|
"PatientSetting",
|
|
166
171
|
"PatientMetadata",
|
|
@@ -171,6 +176,7 @@ __all__ = __exports__ = (
|
|
|
171
176
|
"PaymentCollection",
|
|
172
177
|
"PracticeLocation",
|
|
173
178
|
"PracticeLocationSetting",
|
|
179
|
+
"ProtocolCurrent",
|
|
174
180
|
"ProtocolOverride",
|
|
175
181
|
"Question",
|
|
176
182
|
"Questionnaire",
|
|
@@ -183,6 +189,7 @@ __all__ = __exports__ = (
|
|
|
183
189
|
"ServiceProvider",
|
|
184
190
|
"Staff",
|
|
185
191
|
"StaffAddress",
|
|
192
|
+
"StaffLicense",
|
|
186
193
|
"StaffPhoto",
|
|
187
194
|
"StaffRole",
|
|
188
195
|
"StaffContactPoint",
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Facility(IdentifiableModel):
|
|
7
|
+
"""Facility model representing a healthcare facility."""
|
|
8
|
+
|
|
9
|
+
class Meta:
|
|
10
|
+
db_table = "canvas_sdk_data_api_facility_001"
|
|
11
|
+
|
|
12
|
+
name = models.CharField(max_length=255)
|
|
13
|
+
npi_number = models.CharField(verbose_name="NPI number", max_length=10, blank=True)
|
|
14
|
+
phone_number = models.CharField(max_length=10, blank=True, default="")
|
|
15
|
+
active = models.BooleanField(default=True)
|
|
16
|
+
line1 = models.CharField(max_length=255, default="", blank=True)
|
|
17
|
+
line2 = models.CharField(max_length=255, default="", blank=True)
|
|
18
|
+
city = models.CharField(max_length=255)
|
|
19
|
+
district = models.CharField(max_length=255, blank=True, default="")
|
|
20
|
+
state_code = models.CharField(max_length=2)
|
|
21
|
+
postal_code = models.CharField(max_length=255)
|
|
22
|
+
|
|
23
|
+
def __str__(self) -> str:
|
|
24
|
+
return self.name
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
__exports__ = ("Facility",)
|
canvas_sdk/v1/data/patient.py
CHANGED
|
@@ -116,13 +116,6 @@ class Patient(Model):
|
|
|
116
116
|
def __str__(self) -> str:
|
|
117
117
|
return f"{self.first_name} {self.last_name}"
|
|
118
118
|
|
|
119
|
-
@property
|
|
120
|
-
def full_name(self) -> str:
|
|
121
|
-
"""Returns the patient's full name."""
|
|
122
|
-
return " ".join(
|
|
123
|
-
n for n in (self.first_name, self.middle_name, self.last_name, self.suffix) if n
|
|
124
|
-
)
|
|
125
|
-
|
|
126
119
|
def age_at(self, time: arrow.Arrow) -> float:
|
|
127
120
|
"""Given a datetime, returns what the patient's age would be at that datetime."""
|
|
128
121
|
age = float(0)
|
|
@@ -147,6 +140,13 @@ class Patient(Model):
|
|
|
147
140
|
except PatientSetting.DoesNotExist:
|
|
148
141
|
return None
|
|
149
142
|
|
|
143
|
+
@property
|
|
144
|
+
def full_name(self) -> str:
|
|
145
|
+
"""Returns the patient's full name."""
|
|
146
|
+
return " ".join(
|
|
147
|
+
n for n in (self.first_name, self.middle_name, self.last_name, self.suffix) if n
|
|
148
|
+
)
|
|
149
|
+
|
|
150
150
|
@property
|
|
151
151
|
def preferred_pharmacy(self) -> dict[str, str] | None:
|
|
152
152
|
"""Returns the patient's preferred pharmacy."""
|
|
@@ -158,6 +158,20 @@ class Patient(Model):
|
|
|
158
158
|
return None
|
|
159
159
|
return pharmacy_setting
|
|
160
160
|
|
|
161
|
+
@property
|
|
162
|
+
def preferred_pharmacies(self) -> list[dict[str, Any]] | None:
|
|
163
|
+
"""
|
|
164
|
+
Returns the pharmacy patient setting, a list of dicts of the patient's preferred pharmacies.
|
|
165
|
+
If the pharmacy setting is currently a dict, make it the default and a list.
|
|
166
|
+
"""
|
|
167
|
+
pharmacy_setting = self.get_setting(PatientSettingConstants.PHARMACY) or []
|
|
168
|
+
if isinstance(pharmacy_setting, dict):
|
|
169
|
+
return [{**pharmacy_setting, "default": True}]
|
|
170
|
+
elif isinstance(pharmacy_setting, list):
|
|
171
|
+
return pharmacy_setting
|
|
172
|
+
|
|
173
|
+
return None
|
|
174
|
+
|
|
161
175
|
@property
|
|
162
176
|
def preferred_full_name(self) -> str:
|
|
163
177
|
"""Returns the patient's preferred full name, taking nickname into consideration."""
|
|
@@ -168,6 +182,11 @@ class Patient(Model):
|
|
|
168
182
|
"""Returns the patient's preferred first name, taking nickname into consideration."""
|
|
169
183
|
return self.nickname or self.first_name
|
|
170
184
|
|
|
185
|
+
@property
|
|
186
|
+
def primary_phone_number(self) -> PatientContactPoint | None:
|
|
187
|
+
"""Returns the patient's primary phone number, if available."""
|
|
188
|
+
return (self.telecom.filter(system=ContactPointSystem.PHONE).order_by("rank")).first()
|
|
189
|
+
|
|
171
190
|
|
|
172
191
|
class PatientContactPoint(IdentifiableModel):
|
|
173
192
|
"""A class representing a patient contact point."""
|
|
@@ -274,12 +293,25 @@ class PatientMetadata(IdentifiableModel):
|
|
|
274
293
|
value = models.CharField(max_length=255)
|
|
275
294
|
|
|
276
295
|
|
|
296
|
+
class PatientFacilityAddress(PatientAddress):
|
|
297
|
+
"""PatientFacilityAddress."""
|
|
298
|
+
|
|
299
|
+
class Meta:
|
|
300
|
+
db_table = "canvas_sdk_data_api_patientfacilityaddress_001"
|
|
301
|
+
|
|
302
|
+
room_number = models.CharField(max_length=100, null=True)
|
|
303
|
+
facility = models.ForeignKey(
|
|
304
|
+
"v1.Facility", on_delete=models.DO_NOTHING, related_name="patient_facilities", null=True
|
|
305
|
+
)
|
|
306
|
+
|
|
307
|
+
|
|
277
308
|
__exports__ = (
|
|
278
309
|
"SexAtBirth",
|
|
279
310
|
"PatientSettingConstants",
|
|
280
311
|
"Patient",
|
|
281
312
|
"PatientContactPoint",
|
|
282
313
|
"PatientAddress",
|
|
314
|
+
"PatientFacilityAddress",
|
|
283
315
|
"PatientExternalIdentifier",
|
|
284
316
|
"PatientSetting",
|
|
285
317
|
"PatientMetadata",
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from django.db import models
|
|
2
|
+
|
|
3
|
+
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
4
|
+
from canvas_sdk.v1.data.protocol_result import ProtocolResult
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ProtocolCurrent(ProtocolResult, IdentifiableModel):
|
|
8
|
+
"""ProtocolCurrent."""
|
|
9
|
+
|
|
10
|
+
class Meta:
|
|
11
|
+
db_table = "canvas_sdk_data_api_protocolcurrent_001"
|
|
12
|
+
|
|
13
|
+
patient = models.ForeignKey(
|
|
14
|
+
"v1.Patient", on_delete=models.DO_NOTHING, related_name="protocol_currents"
|
|
15
|
+
)
|
|
16
|
+
result_hash = models.CharField(max_length=32, default="")
|
|
17
|
+
snooze_date = models.DateField(null=True)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
__exports__ = (
|
|
21
|
+
"ProtocolCurrent",
|
|
22
|
+
"ProtocolCurrentStatus",
|
|
23
|
+
)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
from django.contrib.postgres.fields import ArrayField
|
|
2
|
+
from django.db import models
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ProtocolResultStatus(models.TextChoices):
|
|
6
|
+
"""Constants for ProtocolResultStatus."""
|
|
7
|
+
|
|
8
|
+
STATUS_DUE = "due"
|
|
9
|
+
STATUS_SATISFIED = "satisfied"
|
|
10
|
+
STATUS_NOT_APPLICABLE = "not_applicable"
|
|
11
|
+
STATUS_PENDING = "pending"
|
|
12
|
+
STATUS_NOT_RELEVANT = "not_relevant"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ProtocolResult(models.Model):
|
|
16
|
+
"""ProtocolResult."""
|
|
17
|
+
|
|
18
|
+
class Meta:
|
|
19
|
+
abstract = True
|
|
20
|
+
|
|
21
|
+
title = models.TextField(blank=True, default="")
|
|
22
|
+
narrative = models.TextField(blank=True, default="")
|
|
23
|
+
result_identifiers = ArrayField(base_field=models.TextField())
|
|
24
|
+
types = ArrayField(base_field=models.TextField())
|
|
25
|
+
protocol_key = models.TextField(default="")
|
|
26
|
+
plugin_name = models.TextField(null=True, blank=True)
|
|
27
|
+
status = models.TextField(
|
|
28
|
+
choices=ProtocolResultStatus.choices, default=ProtocolResultStatus.STATUS_NOT_APPLICABLE
|
|
29
|
+
)
|
|
30
|
+
due_in = models.IntegerField(null=True, default=-1)
|
|
31
|
+
days_of_notice = models.IntegerField(default=30)
|
|
32
|
+
snoozed = models.BooleanField(default=False)
|
|
33
|
+
sources = models.JSONField(default=dict)
|
|
34
|
+
recommendations = models.JSONField(default=dict)
|
|
35
|
+
top_recommendation_key = models.TextField(blank=True, default="")
|
|
36
|
+
next_review = models.DateTimeField(null=True)
|
|
37
|
+
feedback_enabled = models.BooleanField(default=False)
|
|
38
|
+
plugin_can_be_snoozed = models.BooleanField(default=False)
|
|
39
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
40
|
+
modified = models.DateTimeField(auto_now=True)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
__exports__ = (
|
|
44
|
+
"ProtocolResult",
|
|
45
|
+
"ProtocolResultStatus",
|
|
46
|
+
)
|
canvas_sdk/v1/data/staff.py
CHANGED
|
@@ -211,4 +211,39 @@ class StaffRole(Model):
|
|
|
211
211
|
role_type = models.CharField(max_length=50, choices=RoleType.choices, blank=True)
|
|
212
212
|
|
|
213
213
|
|
|
214
|
-
|
|
214
|
+
class StaffLicense(IdentifiableModel):
|
|
215
|
+
"""StaffLicense."""
|
|
216
|
+
|
|
217
|
+
class Meta:
|
|
218
|
+
db_table = "canvas_sdk_data_api_stafflicense_001"
|
|
219
|
+
|
|
220
|
+
class LicenseType(TextChoices):
|
|
221
|
+
CLIA = "CLIA", "CLIA"
|
|
222
|
+
DEA = "DEA", "DEA"
|
|
223
|
+
PTAN = "PTAN", "PTAN"
|
|
224
|
+
STATE_LICENSE = "STATE", "State license"
|
|
225
|
+
TAXONOMY = "TAXONOMY", "Taxonomy"
|
|
226
|
+
SPI = "SPI", "SPI"
|
|
227
|
+
OTHER = "OTHER", "Other"
|
|
228
|
+
|
|
229
|
+
staff = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name="licenses")
|
|
230
|
+
issuing_authority_long_name = models.CharField(max_length=200, null=True, blank=True)
|
|
231
|
+
issuing_authority_url = models.URLField(blank=True, null=True)
|
|
232
|
+
license_or_certification_identifier = models.CharField(max_length=50)
|
|
233
|
+
issuance_date = models.DateField()
|
|
234
|
+
expiration_date = models.DateField()
|
|
235
|
+
license_type = models.CharField(
|
|
236
|
+
max_length=50, choices=LicenseType.choices, null=True, blank=True
|
|
237
|
+
)
|
|
238
|
+
primary = models.BooleanField(default=False)
|
|
239
|
+
state = models.CharField(max_length=2, blank=True, null=True)
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
__exports__ = (
|
|
243
|
+
"Staff",
|
|
244
|
+
"StaffAddress",
|
|
245
|
+
"StaffContactPoint",
|
|
246
|
+
"StaffLicense",
|
|
247
|
+
"StaffPhoto",
|
|
248
|
+
"StaffRole",
|
|
249
|
+
)
|
|
@@ -244,18 +244,26 @@
|
|
|
244
244
|
],
|
|
245
245
|
"canvas_sdk.effects.patient": [
|
|
246
246
|
"CreatePatientExternalIdentifier",
|
|
247
|
+
"CreatePatientPreferredPharmacies",
|
|
247
248
|
"Patient",
|
|
249
|
+
"PatientAddress",
|
|
248
250
|
"PatientContactPoint",
|
|
249
|
-
"PatientExternalIdentifier"
|
|
251
|
+
"PatientExternalIdentifier",
|
|
252
|
+
"PatientPreferredPharmacy"
|
|
250
253
|
],
|
|
251
254
|
"canvas_sdk.effects.patient.base": [
|
|
252
255
|
"Patient",
|
|
256
|
+
"PatientAddress",
|
|
253
257
|
"PatientContactPoint",
|
|
254
|
-
"PatientExternalIdentifier"
|
|
258
|
+
"PatientExternalIdentifier",
|
|
259
|
+
"PatientPreferredPharmacy"
|
|
255
260
|
],
|
|
256
261
|
"canvas_sdk.effects.patient.create_patient_external_identifier": [
|
|
257
262
|
"CreatePatientExternalIdentifier"
|
|
258
263
|
],
|
|
264
|
+
"canvas_sdk.effects.patient.create_patient_preferred_pharmacies": [
|
|
265
|
+
"CreatePatientPreferredPharmacies"
|
|
266
|
+
],
|
|
259
267
|
"canvas_sdk.effects.patient_chart_group": [
|
|
260
268
|
"PatientChartGroup"
|
|
261
269
|
],
|
|
@@ -532,6 +540,7 @@
|
|
|
532
540
|
"DetectedIssueEvidence",
|
|
533
541
|
"Device",
|
|
534
542
|
"Discount",
|
|
543
|
+
"Facility",
|
|
535
544
|
"Goal",
|
|
536
545
|
"ImagingOrder",
|
|
537
546
|
"ImagingReport",
|
|
@@ -575,6 +584,7 @@
|
|
|
575
584
|
"PatientConsentRejectionCoding",
|
|
576
585
|
"PatientContactPoint",
|
|
577
586
|
"PatientExternalIdentifier",
|
|
587
|
+
"PatientFacilityAddress",
|
|
578
588
|
"PatientMetadata",
|
|
579
589
|
"PatientPosting",
|
|
580
590
|
"PatientSetting",
|
|
@@ -582,6 +592,7 @@
|
|
|
582
592
|
"PayorSpecificCharge",
|
|
583
593
|
"PracticeLocation",
|
|
584
594
|
"PracticeLocationSetting",
|
|
595
|
+
"ProtocolCurrent",
|
|
585
596
|
"ProtocolOverride",
|
|
586
597
|
"Question",
|
|
587
598
|
"Questionnaire",
|
|
@@ -595,6 +606,7 @@
|
|
|
595
606
|
"Staff",
|
|
596
607
|
"StaffAddress",
|
|
597
608
|
"StaffContactPoint",
|
|
609
|
+
"StaffLicense",
|
|
598
610
|
"StaffPhoto",
|
|
599
611
|
"StaffRole",
|
|
600
612
|
"Task",
|
|
@@ -707,6 +719,9 @@
|
|
|
707
719
|
"canvas_sdk.v1.data.discount": [
|
|
708
720
|
"Discount"
|
|
709
721
|
],
|
|
722
|
+
"canvas_sdk.v1.data.facility": [
|
|
723
|
+
"Facility"
|
|
724
|
+
],
|
|
710
725
|
"canvas_sdk.v1.data.goal": [
|
|
711
726
|
"Goal",
|
|
712
727
|
"GoalAchievementStatus",
|
|
@@ -782,6 +797,7 @@
|
|
|
782
797
|
"PatientAddress",
|
|
783
798
|
"PatientContactPoint",
|
|
784
799
|
"PatientExternalIdentifier",
|
|
800
|
+
"PatientFacilityAddress",
|
|
785
801
|
"PatientMetadata",
|
|
786
802
|
"PatientSetting",
|
|
787
803
|
"PatientSettingConstants",
|
|
@@ -811,11 +827,19 @@
|
|
|
811
827
|
"PracticeLocationPOS",
|
|
812
828
|
"PracticeLocationSetting"
|
|
813
829
|
],
|
|
830
|
+
"canvas_sdk.v1.data.protocol_current": [
|
|
831
|
+
"ProtocolCurrent",
|
|
832
|
+
"ProtocolCurrentStatus"
|
|
833
|
+
],
|
|
814
834
|
"canvas_sdk.v1.data.protocol_override": [
|
|
815
835
|
"IntervalUnit",
|
|
816
836
|
"ProtocolOverride",
|
|
817
837
|
"Status"
|
|
818
838
|
],
|
|
839
|
+
"canvas_sdk.v1.data.protocol_result": [
|
|
840
|
+
"ProtocolResult",
|
|
841
|
+
"ProtocolResultStatus"
|
|
842
|
+
],
|
|
819
843
|
"canvas_sdk.v1.data.questionnaire": [
|
|
820
844
|
"Interview",
|
|
821
845
|
"InterviewQuerySet",
|
|
@@ -841,6 +865,7 @@
|
|
|
841
865
|
"Staff",
|
|
842
866
|
"StaffAddress",
|
|
843
867
|
"StaffContactPoint",
|
|
868
|
+
"StaffLicense",
|
|
844
869
|
"StaffPhoto",
|
|
845
870
|
"StaffRole"
|
|
846
871
|
],
|
|
@@ -291,6 +291,7 @@ enum EffectType {
|
|
|
291
291
|
DELETE_SCHEDULE_EVENT = 6017;
|
|
292
292
|
|
|
293
293
|
CREATE_PATIENT = 6003;
|
|
294
|
+
UPDATE_PATIENT = 6008;
|
|
294
295
|
|
|
295
296
|
CREATE_MESSAGE = 6004;
|
|
296
297
|
SEND_MESSAGE = 6005;
|
|
@@ -300,7 +301,7 @@ enum EffectType {
|
|
|
300
301
|
PATIENT_METADATA__CREATE_ADDITIONAL_FIELDS = 6010;
|
|
301
302
|
UPSERT_PATIENT_METADATA = 6011;
|
|
302
303
|
CREATE_PATIENT_EXTERNAL_IDENTIFIER = 6012;
|
|
303
|
-
|
|
304
|
+
CREATE_PATIENT_PREFERRED_PHARMACIES = 6018;
|
|
304
305
|
CREATE_COMPOUND_MEDICATION = 6020;
|
|
305
306
|
UPDATE_COMPOUND_MEDICATION = 6021;
|
|
306
307
|
|
|
@@ -316,6 +317,7 @@ enum EffectType {
|
|
|
316
317
|
REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD = 7004;
|
|
317
318
|
REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__ADD_RESPONSE = 7005;
|
|
318
319
|
REVENUE__PAYMENT_PROCESSOR__PAYMENT_METHOD__REMOVE_RESPONSE = 7006;
|
|
320
|
+
|
|
319
321
|
}
|
|
320
322
|
|
|
321
323
|
message Effect {
|
|
File without changes
|
|
File without changes
|