NxVET Clinic Activity Report
Generate a plain-English weekly CLINIC ACTIVITY REPORT for a veterinary clinic owner from NxVET data — total recordings, per-device and per-day/hour breakdow...
Tal Nir
@talnirnx
What This Skill Does
Generates a plain-English weekly clinic activity report for veterinary clinic owners from NxVET API data, including total recordings, per-device and per-day/hour breakdowns, week-over-week trends, and health flags for silent devices, outdated firmware, and failing webhooks. Outputs a local markdown file with optional HTML dashboard.
Replaces manually pulling NxVET data and compiling spreadsheets or notes each week by producing a structured, read-only report with trend analysis and health flags.
When to Use It
- Review last week's recording volume and compare it to the prior week
- Check which exam room devices were silent or have outdated firmware
- See which days and times had the highest consult activity
- Identify failing webhooks that need reconfiguration
- Get a Monday-morning snapshot of overall clinic performance without logging into the NxVET dashboard
Install
$ openclaw skills install @talnirnx/clinic-activity-reportClinic Activity Report (local, read-only)
A NxVET recipe for AI coding agents. Point Claude Code, Codex, Cursor, or any LLM-based agent at this file and say "Read SKILL.md and implement it — start with Phase 0." The recipe is agent-neutral: plain Markdown plus two dependency-free Python scripts. See
INSTALL.mdfor how to load it into a specific agent.
Build a small, local, read-only tool that gives a veterinary clinic owner or manager a recurring, plain-English snapshot of how the clinic is doing — the kind of thing they'd want every Monday morning:
- How busy — total recordings this week, and the trend vs last week.
- Where — a breakdown by device (exam room), by weekday, and by time of day.
- What needs attention — a health check flagging devices that have gone silent, devices on out-of-date firmware, and failing webhooks.
Output is a readable markdown report (output/ClinicReport_YYYY-Www.md) the owner opens and
reads. Optionally also a simple self-contained HTML dashboard.
Ground rules (non-negotiable)
- Read-only. The tool only makes authenticated
GETcalls to the NxVET API (https://app.nx.vet). It never creates, edits, deletes, or sends anything. - Local-only. No telemetry, no third-party services, no email. The report is a local file the owner reads. There is no send path — if they want to share it, they do so themselves.
- Secrets hygiene. The API key lives in
.envasNXVET_API_KEY=nxvet_sk_.... Never print the full key; never commit it; never paste it anywhere that leaves the machine. Seereference/security.md. - Honest numbers. Report what the API actually returns. Don't invent trends or extrapolate; if there's no prior-period data, say so. Flag data you're unsure about rather than guessing.
Prerequisites (tell the user if they're missing any)
- A NxVET account — sign up at https://app.nx.vet/ if the clinic isn't set up yet.
- A NxVET API key — https://app.nx.vet/integrations → API Keys tab (starts
nxvet_sk_). - At least one recording device capturing consults. Owners typically have one or more NxHUB devices (https://nx.vet/products/nxhub); the report is most useful with real recording activity to summarize.
How to build it — phases
Phase 0 — Connect and verify
- Ask the owner for the API key. Write
.envwithNXVET_API_KEY=.... Confirm.envis git-ignored. - Call
GET /api/auth/me(or theget_identityMCP tool). Confirm HTTP 200 and capture theorganizationIdandorganizationName. Save them toconfig.json, along with the clinic timezone (ask; defaultAmerica/New_York).
Phase 1 — Collect the stats
Use {baseDir}/scripts/collect_stats.py (stdlib-only Python 3; no pip installs). It reads .env +
config.json and prints a single JSON object with the week's numbers:
python3 {baseDir}/scripts/collect_stats.py --days 7 # last 7 days, clinic timezone
python3 {baseDir}/scripts/collect_stats.py --days 7 --end 2026-07-20 # a specific week
It gathers: total recordings in the window and the previous window (for the trend), a
per-device / per-weekday / per-hour breakdown, the device fleet with last-seen times and
firmware, and webhook delivery health. See reference/nxvet-api.md for the endpoint quirks
it handles (the transcript/label gotchas, types= filter, epoch-ms timestamps).
Phase 2 — Write the report
Two ways, pick based on how the tool runs:
- Deterministic (headless / scheduled): pipe the JSON through
scripts/write_report.py:python3 {baseDir}/scripts/collect_stats.py --days 7 \ | python3 {baseDir}/scripts/write_report.py --out "output/ClinicReport_$(date +%Y-W%V).md" - Narrated (interactive): you (the assistant) read the JSON and write the report yourself, adding a short plain-English interpretation at the top ("Quiet week — down 18%, and the Reception device has been offline since Tuesday; worth checking."). Keep the same sections. Do not invent numbers the JSON doesn't contain.
Report sections: At a glance (total + trend + device count), Recordings by device, Busiest days, busiest times of day, and a Health check (silent devices, firmware, webhooks). Every figure traces back to the collected JSON.
Phase 3 — Health flags (get these right)
- Silent device: only flag hardware devices (NxHUB units that heartbeat — the collector
marks these
isHardware). Never flag app/web/iOS login "devices" as silent. Default threshold: no report in 3+ days. - Firmware: flag only when the installed version genuinely differs from the target. Treat
0.8.13and0.8.13.0as the same (ignore trailing-zero formatting) —write_report.pyalready does this. - Webhooks: flag a webhook only if it has recent failed deliveries. No webhooks = no flag.
Phase 4 — Run it weekly (optional)
Set it up with the OS-native scheduler (detect the OS first): launchd on macOS, Task Scheduler
on Windows, cron on Linux. A good default is Monday 7am. Each run writes a new dated report
and leaves the previous ones in place, so the owner builds a history.
Acceptance checklist (the demo)
- Run the tool → a
ClinicReport_YYYY-Www.mdappears and reads clearly. - The total and per-device counts match what the owner sees in NxVET.
- A device that's actually offline shows under Health check; active devices don't.
- Firmware that only differs by trailing
.0is not flagged. - Re-running doesn't change anything in NxVET (it's read-only).
Keeping API cost low
The collector keeps a small ETag cache in state/http_cache/ and sends If-None-Match on
repeat calls, so re-runs and the rarely-changing prior-period window mostly return cheap
304 Not Modified responses. Cache the org id in config.json so /auth/me isn't re-called,
and fetch only the window you need. Full detail in reference/caching-and-state.md.
Reference files
reference/nxvet-api.md— endpoints, auth, and the data-format gotchas the collector relies on.reference/security.md— secrets, the read-only/local guarantee, what to send if stuck.reference/caching-and-state.md— how the tool keeps NxVET API usage (and your server cost) low.reference/good-practices.md— honest numbers, timezones, avoiding false health alarms, testing.
Top skills in this category
Word / DOCX
@ivangdavilaCreate, inspect, and edit Microsoft Word documents and DOCX files with reliable styles, numbering, tracked changes, tables, sections, and compatibility check...
Nano Pdf
@steipeteEdit PDFs with natural-language instructions using the nano-pdf CLI.
Excel / XLSX
@ivangdavilaCreate, inspect, and edit Microsoft Excel workbooks and XLSX files with reliable formulas, dates, types, formatting, recalculation, and template preservation...
Markdown Converter
@steipeteConvert documents and files to Markdown using markitdown. Use when converting PDF, Word (.docx), PowerPoint (.pptx), Excel (.xlsx, .xls), HTML, CSV, JSON, XML, images (with EXIF/OCR), audio (with transcription), ZIP archives, YouTube URLs, or EPubs to Markdown format for LLM processing or text analysis.
Powerpoint / PPTX
@ivangdavilaCreate, inspect, and edit Microsoft PowerPoint presentations and PPTX decks with reliable layouts, templates, placeholders, notes, charts, and visual QA. Use...