Controlled substances
DEA-compliant dispensing with a mandatory two-person witness requirement.
The Veterinarian and Associate Vet packs include rx.controlled.dispense and rx.controlled.witness by default. The Senior Tech pack includes rx.controlled.witness and rx.controlled.reconcile. All other staff must be granted these permissions explicitly by an Admin. See Team & permissions.
Dispensing a controlled substance
-
Prescribe from the SOAP note
In an active visit, go to the Medications tab in the SOAP. Add the controlled substance. The system marks it as requiring dispensing and witnessing before the visit can be finalized.
-
Dispenser signs off
The staff member with
rx.controlled.dispensepermission opens the medication row, confirms the drug, quantity, lot number, and patient, then clicks Dispense and signs with their credentials. -
Witness countersigns
A second staff member with
rx.controlled.witnesspermission must countersign. The witness must be a different user from the dispenser β the same person cannot dispense and witness the same transaction. The witness confirms the quantity and clicks Witness. -
Log entry created
Once witnessed, a tamper-evident log entry is written to the DEA controlled substance log with both signatures, a timestamp, the patient, the drug, quantity, lot number, and the visit it belongs to.
Chartling enforces this server-side β the same account cannot complete both actions on the same dispense record. If you are the dispenser, you must log in as yourself and have a colleague with witness permission countersign.
Required permissions
| Permission key | What it allows | Who typically holds it |
|---|---|---|
rx.controlled.dispense |
Initiate and sign off a controlled substance dispense | Vet, Associate Vet, Owner / Admin |
rx.controlled.witness |
Countersign a dispense as the second witness | Vet, Associate Vet, Vet Tech, Senior Tech, Owner / Admin |
rx.controlled.reconcile |
Run and sign off on the monthly reconciliation report | Senior Tech, Owner / Admin |
The DEA log
Go to Inventory β Controlled log to view all dispense records. The log is:
- Sorted chronologically with the most recent at the top
- Filterable by drug, date range, dispenser, or patient
- Protected by a cryptographic hash chain β any tampering with an entry invalidates all subsequent hashes, which is visible in the log view
- Exportable as CSV + PDF for DEA inspections
Reconciliation
Staff with rx.controlled.reconcile permission can run a reconciliation from Inventory β Biennial Inventory. The report compares:
- Starting inventory count
- All received stock entries (if tracked)
- All dispense records for the period
- Expected ending inventory vs physical count
Any discrepancies are flagged. Sign off on the reconciliation with your credentials β the signed reconciliation is stored and included in data exports.
FAQ
Chartling's controlled substance log applies to any medication you mark as a controlled substance when adding it to your formulary. There is no separate flow per DEA schedule β you decide which drugs require the two-person workflow by marking them accordingly in Settings β Formulary.
The witness must be a different user account. If only one person is physically present, another staff member with witness permission can countersign remotely while logged into Chartling β their device and credentials are recorded. Contact your state veterinary board for guidance on witnessing requirements in your jurisdiction.
DEA regulations (21 CFR Part 1304) require a biennial inventory, but most state boards require monthly reconciliation for clinic records. Run it monthly and retain the signed reports.
Yes. From Inventory β Controlled log, click Export. You can filter by date range and export as CSV (machine-readable) or PDF (formatted for paper inspection). The PDF includes the hash chain verification status.