Billing Line Items

The Canvas SDK allows you to create, update, and remove Billing Line Items from the footer of a note.

Adding a Billing Line Item #

To add a billing line item to a note, import the AddBillingLineItem class, create an instance of it, and return the .apply() method from compute.

Attribute TypeDescription
note_idrequiredStringThe id of the Note where the line item should be associated.
cptrequiredStringThe billing code to use for the line item.
unitsoptionalIntegerThe number of units to bill for the code. Defaults to 1 if not provided.
assessment_idsoptionallist[String]List of Assessment ids from the note that are relevant to the code, also referred to as “diagnosis pointers”.
modifiersoptionallist[Coding]The modifiers to create with the billing code.

Example:

from canvas_sdk.effects import Effect
from canvas_sdk.events import EventType
from canvas_sdk.protocols import BaseProtocol
from canvas_sdk.v1.data import Command, Assessment
from canvas_sdk.effects.billing_line_item import AddBillingLineItem


class Protocol(BaseProtocol):
    RESPONDS_TO = [
        EventType.Name(EventType.PERFORM_COMMAND__POST_ORIGINATE)
    ]

    def compute(self) -> list[Effect]:
        command_id = self.target
        command = Command.objects.get(id=command_id)
        note = command.note

        assessments = [
            str(i)
            for i in Assessment.objects.filter(note_id=note.dbid).values_list(
                "id", flat=True
            )
        ]

        b = AddBillingLineItem(
            note_id=str(note.id),
            cpt="99213",
            units=1,
            assessment_ids=assessments,
            modifiers=[
                {"code": "25", "system": "http://www.ama-assn.org/go/cpt"},
                {"code": "59", "system": "http://www.ama-assn.org/go/cpt"},
            ],
        )
        return [b.apply()]

Updating a Billing Line Item #

To update a billing line item to a note, import the UpdateBillingLineItem class, create an instance of it, and return the .apply() method from compute.

Attribute TypeDescription
billing_line_item_idrequiredStringThe id of the BillingLineItem to update.
cptoptionalStringThe billing code to use for the line item.
unitsoptionalIntegerThe number of units to bill for the code.
assessment_idsoptionallist[String]List of Assessment ids from the note that are relevant to the code, also referred to as “diagnosis pointers”.
modifiersoptionallist[Coding]The modifiers to create with the billing code.

Example:

from canvas_sdk.effects import Effect
from canvas_sdk.events import EventType
from canvas_sdk.protocols import BaseProtocol
from canvas_sdk.v1.data import Command, BillingLineItem
from canvas_sdk.effects.billing_line_item import UpdateBillingLineItem


class Protocol(BaseProtocol):
    RESPONDS_TO = [
        EventType.Name(EventType.PERFORM_COMMAND__POST_COMMIT)
    ]

    def compute(self) -> list[Effect]:
        command_id = self.target
        command = Command.objects.get(id=command_id)
        note = command.note

        cpt = command.data["perform"]["value"]

        b_ids = BillingLineItem.objects.filter(cpt="99213", note=note).values_list(
            "id", flat=True
        )
        assessment = Assessment.objects.filter(note_id=note.dbid).first()
        updates = [
            UpdateBillingLineItem(
                billing_line_item_id=str(b_id),
                cpt=cpt,
                units=1,
                assessment_ids=[str(assessment.id)],
                modifiers=[{"code": "47", "system": "http://www.ama-assn.org/go/cpt"}],
            )
            for b_id in b_ids
        ]
        return [update.apply() for update in updates]

Removing a Billing Line Item #

To remove a billing line item to a note, import the RemoveBillingLineItem class, create an instance of it, and return the .apply() method from compute.

Attribute TypeDescription
billing_line_item_idrequiredStringThe id of the BillingLineItem to update.
    

Example:

from canvas_sdk.effects import Effect
from canvas_sdk.events import EventType
from canvas_sdk.protocols import BaseProtocol
from canvas_sdk.v1.data import Command, BillingLineItem
from canvas_sdk.effects.billing_line_item import RemoveBillingLineItem


class Protocol(BaseProtocol):
    RESPONDS_TO = [
        EventType.Name(EventType.PERFORM_COMMAND__POST_ENTER_IN_ERROR)
    ]

    def compute(self) -> list[Effect]:
        command_id = self.target
        command = Command.objects.get(id=command_id)

        cpt = command.data["perform"]["value"]
        note_id = command.note.dbid
        b_ids = BillingLineItem.objects.filter(cpt=cpt, note_id=note_id).values_list(
            "id", flat=True
        )
        return [
            RemoveBillingLineItem(billing_line_item_id=str(b_id)).apply()
            for b_id in b_ids
        ]

For more information about the BillingLineItem data class, check out this page.