Reporting → Recordkeeping Reports
Purpose
Recordkeeping Reports organize information from your CS Logbook records for review, inspections, audits, inventories, and other recordkeeping needs, including information related to a DEA Form 106 (theft/loss) or Form 41 (disposal). Which records or documents are required depends on the circumstances and applicable requirements.
Regulatory basis: DEA biennial inventory, records of disposal, Form 41 disposal, and Form 106 theft/loss. License Summary lists the registrations and licenses you have recorded.
When to use them
- DEA inspection: have a printed Substance Summary + most-recent Biennial Inventory PDF + active License Summary on hand.
- Theft or loss event: DEA rules require reporting within 1 business day. Generate DEA Form 106 the same day; submit via the DEA Diversion Control Division's online system.
- Disposal event: every reverse-distributor pickup, on-site destruction, or DEA witness-destruction needs a Form 41 record. Generate DEA Form 41 monthly or quarterly and retain.
- Audit close-out: when you complete a biennial inventory, generate the Biennial Inventory PDF as the canonical archive copy.
- License renewal cycle: run License Summary annually to surface licenses approaching expiration.
- Internal review of corrections: run Correction Audit Trail monthly to catch any unusual correction patterns.
Walkthrough: common pattern
- Open
/home/<your-clinic>/reports - Click the Recordkeeping Reports tab
- Click Generate Report on the report's card
- Pick a format (PDF or CSV, see per-report notes for the canonical format)
- Fill any required filters (date range, biennial inventory selector, etc.)
- Click Generate Report
- The browser downloads the file

Inspection packet
Bundles the reports an investigator asks for, over a date range you choose, into a single archive. Use it instead of generating a dozen reports one at a time and retyping the dates for each.
Where: Reports → Recordkeeping Reports tab → Inspection packet. You need the Export records permission; owners, admins and managers have it by default. If you do not have it, the card does not appear.
What you get
| In the archive | What it is |
|---|---|
reports/ |
One file per report the system can produce for that period |
schedule-ii/ |
A separate Schedule II copy of the transaction log and the biennial inventory, kept apart from the other schedules |
attachments-index.csv |
A list of your uploaded documents with a link to each. Links, not copies |
manifest.json |
Every file with a SHA-256 of its contents, so any file can be checked against it |
README.md |
A plain-language summary of what is inside |
The manifest also lists what the system could not produce, each with a reason. Some items an inspector asks for are not recorded in CS Logbook at all (a facility floor plan, an alarm contract, order forms). Those are named rather than left out, so nothing appears to be missing by accident.
Limits worth knowing before you rely on it
- The period is capped at 731 days (two years). Request a shorter range if you need more than one archive's worth.
- Very large periods are refused, with a message naming what is largest, so you know what to narrow.
- Attachment links require a sign-in. They re-check permission when opened, so an inspector holding the ZIP cannot follow them without an account here. Only invoices and licenses can be downloaded through those links today; the index marks which.
- If a report fails to generate, the manifest says so explicitly rather than showing it as empty. An empty file and a failed one mean different things.
⚠️ The packet gathers records you already keep. It does not decide what you are required to retain, and downloading it is not a filing.
Substance Summary
A point-in-time aggregate of every controlled substance in your inventory, with container count and total on-hand quantity.
Use when: orienting an inspector; sanity-checking inventory for the next biennial; producing a "what do we have right now" summary for a clinic owner.
Columns:
- Substance name + schedule
- Active container count
- Total on-hand quantity (sum across containers)
- Average consumption (last 90 days)
- Days of inventory remaining (estimate)
Filters: optional substance filter (limits the report to a single substance).
Format: PDF (canonical) or CSV.
License Summary
Every facility and individual license registered with the clinic, with status, expiration date, and days-to-expiration.
Use when: an inspector asks for current registration documentation; preparing for the next license renewal cycle; confirming all prescribers have active DEA registrations.
Columns:
- Scope (facility or individual)
- License type (DEA registration, DEA practitioner, state pharmacy permit, state veterinary, etc.)
- License number
- Issuing authority + state (where applicable)
- Issue date / expiration date / days remaining
- Status (active / pending_renewal / expired / suspended / revoked)
- Holder display name (for individual licenses)
Filters: none, the report is always complete.
Format: PDF (canonical) or CSV.
Biennial Inventory PDF
A PDF of the completed biennial inventory, containing the inventory information recorded in CS Logbook.
Use when: a biennial inventory has been completed and you need an archive copy. CS Logbook recommends generating + filing this PDF at the close of every biennial cycle.
Required filter: pick a completed biennial inventory from the dropdown. Inventories that are still in progress are not selectable.
Columns:
- Header: clinic name, address, DEA registration, inventory date, performed-by, witness, status
- Per-substance: name, schedule, container count, quantity on hand, location notes
- Footer: signed-by + signature timestamp + audit checksum
Format: PDF only. The Biennial Inventory PDF is intentionally a single-format report, the data is also exportable via the Audit-Period Reconciliation report (CSV available).
Correction Audit Trail
Every transaction correction recorded in the period, with the original values, the corrected values, the correcting user, and the correction reason.
Use when: monthly internal review; resolving a discrepancy traced to a correction; preparing for a DEA audit-trail review.
Filter: date range, optional. Leave it blank for every correction on record. See Choosing a date range.
Columns:
- Original transaction date / type / quantity / container / performer
- Correction date / corrected-by user
- Field-level diff (original → corrected)
- Correction reason (free text from the user)
- Audit-trail checksum
Format: CSV (canonical for spreadsheet review) or PDF.
Where it lives: this report draws from the correction ledger, the append-only strikethrough/reversal record produced whenever a transaction is corrected (see Transactions § correcting a transaction). The live ledger surface is the Correction Audit Trail page at /home/<clinic>/compliance/correction-audit (per ADR-018), which lists each correction and its downstream balance impact; this report is the exportable, date-ranged view of the same data.
DEA Form 106: Theft / Loss
The DEA's official form for reporting theft or significant loss of controlled substances. CS Logbook generates the report from the records in the audits/theft-loss feature.
Use when: theft or significant loss is discovered. DEA rules require notification within 1 business day; submit via the DEA Diversion Control Division's online system. The CS Logbook PDF is the archive copy + the data source for the online submission.
Filter: date range, optional, matched against each incident's incident date. Leave it blank for every incident on record. See Choosing a date range.
Where to generate it: the Recordkeeping Reports tab of the Reports page, or Reports → Theft/Loss.
Columns:
- Incident header: discovery date, type (theft / loss / significant loss), reporter, law enforcement contact (if reported)
- Per-item: substance name + schedule, container number, lot number, quantity stolen/lost, units, last-known-balance date
Format: CSV (machine-readable submission substrate) or PDF (archive copy).
Important: CS Logbook does NOT auto-submit to the DEA. The generated report is the artifact you transcribe to (or upload alongside) the DEA's online form.
DEA Form 41: Disposals
The DEA's official form for documenting controlled substance disposal. Captures every disposal record (mail-back program, authorized reverse distributor, on-site destruction, DEA witness destruction).
Use when: monthly retention copy; in advance of a reverse-distributor pickup; closing out a disposal event.
Filter: date range, optional, matched against the disposal date. See Choosing a date range.
Columns:
- Disposal header: method (
mail_back_program/authorized_reverse_distributor/on_site_destruction/dea_witness_destruction), reason, witness, status, completion date - Per-substance: container number, lot, schedule, quantity disposed, signature
- Footer: form-41-submitted flag + submission date (if applicable)
Format: CSV or PDF.
Theft/Loss Incidents
Every theft or loss incident as the clinic recorded it, one section per incident. Generate it from Reports → Theft/Loss.
Use when: reviewing open incidents; checking which incidents have their DEA notification, Form 106, police report and documents recorded; tying lost items to ledger entries.
Filter: date range, optional, matched against the incident date. See Choosing a date range.
Each incident shows: incident and discovery dates, type, location, the significance determination as recorded by the clinic, the DEA notification time, the Form 106 filing date, the police report, the investigation status as recorded, whether the Form 106 and police report documents are on file, and who reported and witnessed it. Each lost item shows the quantity lost and recovered and its ledger entry, or "Not linked to a ledger entry".
These are the clinic's own records. CS Logbook does not decide whether a loss is significant or whether a notification deadline was met; that judgment is the registrant's.
Format: PDF or CSV (one row per item).
Audit reports
Three reports on Reports → Audits. Generating any of them requires the records export permission.
Variance Analysis
Every spot-check and biennial inventory count: the expected quantity, the counted quantity, the signed difference, that difference as a percent of the same count's expected quantity (blank when nothing was expected), whether it was resolved and how, the container's balance when the report is generated, and the transactions and corrections linked to the count. Voided spot checks and canceled inventories are left out and counted in the summary. Each percent describes one count; the report never averages or combines them.
Filter: date range, optional, matched against the count date.
User Activity
Recorded actions over a period, in one list: record changes (the field that changed, not its old and new values, which are in Audit Reconstruction), corrections, and activity-log events such as approvals and witness additions. Each row shows when, who, what, which record, and the reason where one was given.
Filters: date range (a start date is required; the end date defaults to today) and, optionally, one person. Staff without a login appear only through corrections. A correction can appear both as a correction and as the record changes it made; the Source column says which.
Recordkeeping Issues
Current conditions worth following up, each in its own section with its own count:
- Witness not recorded: waste and disposal entries recorded without a witness.
- Open variances: unresolved major or critical spot-check differences, unresolved biennial count differences, and open reconciliation conditions.
- Theft/loss follow-up: incidents with no DEA notification recorded (including closed incidents) unless the clinic recorded them as not significant, and lost items not yet linked to a ledger entry.
The sections are never added together into one number. The report shows the current state, so it takes no date range.
Edge cases
Empty data
All Recordkeeping Reports return a valid file even when there are no rows in the period (the headers are present, the data section is empty). For the Biennial Inventory PDF specifically, the dropdown only lists completed inventories, if none exists, the dialog cannot proceed.
Date range that crosses a clinic timezone change
CS Logbook stores all dates in UTC and renders in the clinic's configured timezone. Reports include a footer note when the requested date range crosses a DST or timezone boundary; verify your interpretation matches the report's footer.
Soft-deleted records
Recordkeeping Reports include an explicit notice when soft-deleted records exist within the date range. They are EXCLUDED from the report by default. The Correction Audit Trail report has a separate column tracking deletion-style corrections; deletions of records older than the report period do not appear in the audit trail.
Form 106 / Form 41 numbering
CS Logbook does NOT assign DEA Form numbers. The DEA assigns Form 106 case numbers when you submit the online form; CS Logbook's report is keyed by the internal incident UUID. Cross-reference manually.
Common mistakes
- Treating the CS Logbook PDF as the official DEA submission. It is not. The DEA expects a submission via their online portal. The PDF is the substrate.
- Generating Form 41 disposals for an event that hasn't actually occurred. A disposal record in CS Logbook represents an actual disposal event. Don't pre-generate Form 41 for a planned but not-yet-witnessed destruction.
- Filtering the License Summary by date. Licenses are point-in-time records, the report does not take a date range. If you need a historical view, look at
license_renewal_history(separate feature). - Running the Biennial Inventory PDF for an in-progress inventory. The dialog will not let you select an in-progress one; complete the inventory first.
Related
- Audits → Biennial inventory, the data source for Biennial Inventory PDF + the inventory side of Audit-Period Reconciliation
- Audits → Theft/Loss, the data source for DEA Form 106
- Compliance → Disposals, the read-only rollup tied to the DEA Form 41 generator
- Compliance → Licenses, the data source for License Summary
- Glossary § DEA CFR citations