08.24.2026

Today’s release includes the following updates:

bugfix

  • Fixed an issue where committing a Point of Care Lab Test did not add the CPT charge configured on the test’s template to the billing footer of the note, so the visit could be under-billed. The charge is now added when the command is committed, whether that happens in the chart or from a plugin.

sdk

  • The SDK data module now reaches a patient’s signed consent documents, where previously only the blank template was available. PatientConsent gains:
  • The SDK data module now reaches a goal’s update history alongside the goal itself. UpdateGoal is the record behind the Update Goal and Close Goal commands, and three accessors list them:
    • goal.updates — the updates and closures recorded against a goal.
    • patient.updategoals — those recorded for a Patient.
    • note.updategoals — those recorded on a Note.
  • canvas validate and canvas install now catch two more constructs the sandbox rejects. Both used to pass validation on your machine and then fail once the plugin reached the instance; the error now names the alternative that works. (requires Canvas CLI 0.198.1 or newer)
    • Any call to type(), not just the three-argument form used for dynamic class creation — use isinstance(x, SomeClass) to test a type, or x.__class__.__name__ to read its name.
    • Augmented assignment to an attribute (obj.attr += v), which is rejected even on classes your plugin defines itself — write obj.attr = obj.attr + v instead.
  • The Change Medication command now validates medication_id when you edit an existing command, not only when you originate a new one. An id that isn’t a valid UUID, or that matches no active medication on the patient’s chart, fails validation.
  • Some commands now validate their string fields against the maximum length the chart accepts, and raise a validation error when a value exceeds it. The error names the field, so an over-long value is caught in your plugin instead of being accepted and then rejected later, away from the plugin that sent it.