Prescribe, dispense, and track medications with a full audit trail.

app.chartling.io C Chartling GETTING STARTED Quick start PATIENTS & CLIENTS Patients Clients CLINICAL Visits & SOAP AI scribe Medications & Rx Controlled subs. Lab orders Discharge & comms AI FEATURES Clinic Copilot Clinical support SCHEDULING Appointments BILLING Invoicing & pmts SERVICE MODULES Boarding Daycare Grooming Training TEAM & SETTINGS Team & permissions Clinic settings SMS & reminders Audit log Docs › Chartling › Medications & Rx Medications & Rx Tramadol 50 mg Controlled, Sch IV 2× per day · 5 days · Oral Dispensed + Add medication Drug name Search formulary… Dose mg/kg Route Oral Frequency BID Duration 5 days Add to plan
  1. Prescribe from the SOAP

    In the Plan section of a SOAP note, click Add medication. Search for the drug by name or NDC. Enter the dose (mg/kg is calculated automatically from the patient's weight), route, frequency, and duration. Save the prescription. It appears as a line item on the pending invoice.

  2. Review the proposed prescription

    Medications you add show up alongside the SOAP as a proposed item you confirm, the same review-before-commit pattern as the rest of the visit. There's no separate pharmacy tab or per-item "Dispense" click mid-visit: nothing is written to the medication record or inventory until you sign and finalize.

  3. Sign & finalize the visit

    Finalizing dispenses every confirmed medication in one step. It decrements inventory, creates the dispense record, and adds the charge to the invoice (on plans where invoicing is enabled) automatically. See Visits & SOAP and Invoicing & payments.

  4. Dispensing outside a visit

    For a refill or an over-the-counter sale with no SOAP attached, dispense directly from the patient's Meds tab or from an invoice. This records the lot number and expiry and decrements inventory the same way. Refill requests approved from the Task queue can print (or reprint) a prescription label.

Controlled substances

Controlled substance workflows require two separate users and are logged to a DEA-compliant audit trail (21 CFR Part 1304). Finalizing a visit with a controlled substance on the plan writes the dispense as pending witness. The actual second-person confirmation happens afterward on the Controlled log.

Two-person rule

The dispenser and the witness must be different staff members. Chartling enforces this server-side. You cannot witness your own dispense, and the witness records a name, credentials, and signature before the entry counts as witnessed.

Action Permission required Who can hold it
Dispense a controlled substance rx.controlled.dispense Vet, Associate Vet, Locum, Owner / Admin (included in those packs by default)
Witness a dispense rx.controlled.witness Vet, Associate Vet, Locum, Vet Tech, Senior Tech, Owner / Admin. Must be a different person from the dispenser
Run the reconciliation report rx.controlled.reconcile Senior Tech, Owner / Admin (included in those packs by default)

These permissions are included in the relevant default packs (see above). Other staff must be granted access by an Admin. Assign them a pack that includes the permission, or create a custom pack for them under Settings → Team & permissions → Permissions.

DEA audit log

Every controlled substance dispense creates a tamper-evident log entry: drug, quantity, lot, patient, prescriber, dispenser, witness, and timestamp. Confirming a pending dispense checks rx.controlled.witness, but today Inventory → Controlled log is the only screen that exposes that confirm step, and opening that screen at all requires rx.controlled.reconcile. See the note below.

The full ledger (Inventory → Controlled log) and the Inventory → Biennial Inventory physical-count wizard both require rx.controlled.reconcile, which by default only Senior Tech and Owner/Admin packs hold.

A plain Vet Tech can't currently reach the witness step

The Vet Tech pack holds rx.controlled.witness by default, but the only place in the app to act on it (the Controlled log page) is itself gated on rx.controlled.reconcile, which the Vet Tech pack does not include. In practice, only Senior Tech, Owner/Admin, or a custom pack holding both permissions can complete a witness today. If you need a Vet Tech to witness independently, grant them rx.controlled.reconcile as well (or build a custom pack) until this gap is closed.

Medication history

All medications dispensed to a patient are visible on the patient record under Medications. The history shows the drug, dose, prescribing vet, dispense date, and visit. Owners can see a summary of current medications in the owner portal.

FAQ

Who can prescribe medications?

Only licensed veterinarians. The prescription is linked to the prescribing vet's license. Vet techs can add medications to the plan as suggestions, but a vet must confirm and sign before dispensing.

Can I issue a refill without a new visit?

For non-controlled medications, yes. Go to the patient record → Medications → find the prescription → Refill. The refill creates a new dispense record and invoice line item. A SOAP note is not required for a refill, but the prescribing vet must authorize it. Controlled substances can't be refilled this way. They must go through the two-person dispense/witness flow every time, with the rx.controlled.dispense permission.

What if the patient's weight has changed since the prescription was written?

The dose is calculated from the weight recorded at the visit. If the patient's weight has changed significantly, the vet should update the prescription dose before dispensing. Chartling shows the weight used in the dose calculation on the prescription record.

Is the controlled substance log exportable?

Yes, for anyone holding rx.controlled.reconcile. Under Inventory → Controlled log, filter by date range and/or schedule, then export to CSV or use the print view for a paper/PDF copy for an inspector.

Something missing? We're always improving these docs.

Contact support Open app