Device Shipping — Operations Dashboard

Last refreshed: 2026-06-23 14:17 PDT · window 2025-06 … 2026-06 (~12 months of ledger history) · aggregates only, no PHI. Shipped unit = outbound packages (one shipping.package_ledger row = one physical shipment to a patient). Months marked * are partial (Jun '25* = ledger starts 2025-06-24; Jun '26* = month in progress).

This is the static fallback snapshot (baked at refresh time, no server needed). For the auto-refreshing version see the live dashboard.
Jack's flow question — are we shipping faster than we activate? Packages shipped vs unique patients newly active each month. The gap is EXPECTED, not waste: a welcome kit is ~5 packages to 1 patient (per-package vs per-patient). True same-device reships are a small single-digit % — the ~22.7% figure counted packages-per-patient (kits + accessories) and overstates it.

End-State — where every shipped device ends up (Jan–Jun 2026)

Static analysis results (not live). Resolved population: 3,837 of 4,854 shipments (~79%) that link to a patient. Each device sits in one bucket. Costs = Shipping SSOT.

BucketUnitsCost (SSOT)Notes
Delivered & activated (kept)the healthy bulkdevice shipped and stood up by the patient
Genuine device loss277~$34Kalmost all tablets — 197 tablets / $32,737; RPM small
Offboarded, not recovered159~$23Kpatient left the program; equipment never recovered
Reships (defective)~318 (placeholder)a small single-digit % of device shipments; $ and family split not computed
~$34K
Genuine device loss
~$23K
Offboarded, unrecovered
Recovery — the key finding. 565 returns created in-window. Execution works: once a return is initiated, ~82% of units are received (678 requested → 554 received, Packiyo Returned-Products export Dec 2025–Jun 2026 — an export figure; the DB's received_at is 100% null, so the system of record cannot reproduce it). End-to-end it fails: of the 4,505 patients who offboarded in-window (dated from patient-status JSON exit dates), only ~8–12% had equipment recovered.

We cannot produce a precise recovery rate from our own systems — receipt data (quantity_received) lives in Packiyo and never syncs to our ledger, and returns don't reliably link to patients. That blind spot is itself the finding.
Coverage & confidence. Resolved ~79% of shipments; 720 fulfilled tablet shipments are not yet patient-linked (flagged, not counted — could raise the tablet-loss figure). Router loss is unmeasurable (no patient activation signal). Costs = Shipping SSOT (scale unit cost is a placeholder). Recovery rate is approximate.

1 · Headline — packages shipped vs patients newly active

Packages shippedPatients newly activegap (shaded)0208417625833Jun '25*Jul '25Aug '25Sep '25Oct '25Nov '25Dec '25Jan '26Feb '26Mar '26Apr '26May '26Jun '26*count / month

Newly active = a patient's first-ever tablet activation (patient_tablet_activities) or first BP/SpO2/weight reading (cosmos_readings → devices → patient_device), counted in that month. Per-patient (counted once). Packages is per-package, so the gap is expected and is the signal of interest. Routers are a blind spot — GoodCloud has no patient key, so router activations are not in this curve.

MonthPackages shippedPatients newly activeGap
Jun '25*34118-84
Jul '25343155+188
Aug '25612193+419
Sep '25664329+335
Oct '25652341+311
Nov '25674254+420
Dec '25610304+306
Jan '26744343+401
Feb '26606405+201
Mar '26617397+220
Apr '26682442+240
May '26612376+236
Jun '26*576286+290

2 · Shipments per month — welcome vs reship vs other repeat

Welcome (1st pkg)Other repeatReship0208417625833Jun '25*Jul '25Aug '25Sep '25Oct '25Nov '25Dec '25Jan '26Feb '26Mar '26Apr '26May '26Jun '26*packages / month

Welcome = the patient's first package. Reship = a later package containing a core device type (PulseOx/BP/Tablet/Scale/Router) the patient already received. Other repeat = a later package that adds only new device types or accessories. The three sum to total shipments.

MonthWelcomeReshipOther repeatTotal
Jun '25*340034
Jul '25289450343
Aug '2542428160612
Sep '255872354664
Oct '255203399652
Nov '255534279674
Dec '254615198610
Jan '26471106167744
Feb '26369124113606
Mar '2638714090617
Apr '26421125136682
May '264319883612
Jun '26*36867141576

3 · Reships per month — count, rate & estimated cost

ReshipsReship rate (%)04080121161Jun '25*Jul '25Aug '25Sep '25Oct '25Nov '25Dec '25Jan '26Feb '26Mar '26Apr '26May '26Jun '26*count / month0%7%15%22%29%

Rate = reships ÷ total shipments. Est. reship $ is content-based: the SSOT unit cost of the core devices actually in each reship package, plus $19.87 shipping. Scale ($16.56) is a placeholder cost.

MonthReshipsReship rateEst. reship $
Jun '25*00.0%$0
Jul '2541.2%$312
Aug '25284.6%$2,824
Sep '25233.5%$2,824
Oct '25335.1%$4,590
Nov '25426.2%$6,419
Dec '25518.4%$5,421
Jan '2610614.2%$12,225
Feb '2612420.5%$14,170
Mar '2614022.7%$13,379
Apr '2612518.3%$14,652
May '269816.0%$13,383
Jun '26*6711.6%$8,152

4 · Returns received per month

Finding — received_at is unusable for this metric. Of 565 rows in shipping.packiyo_returns, 0 have a populated received_at and 0 have requested_at — i.e. Packiyo is syncing return records (status only: Closed/Pending) but no return timestamps. A true "returns received/month" curve cannot be built from received_at today. The chart below is a proxy: return-direction packages in package_ledger, bucketed by their latest carrier-status date.

Return packages (ledger proxy)03570105140Jun '25*Jul '25Aug '25Sep '25Oct '25Nov '25Dec '25Jan '26Feb '26Mar '26Apr '26May '26Jun '26*return packages / month

Return rate shown vs packages shipped that month. Proxy only — counts return shipments seen by the carrier, not warehouse receipt.

MonthReturn packages (ledger)Return rate vs shipped
Jun '25*2264.7%
Jul '25133.8%
Aug '25569.2%
Sep '25355.3%
Oct '25416.3%
Nov '25629.2%
Dec '258513.9%
Jan '26162.2%
Feb '26609.9%
Mar '26406.5%
Apr '2612217.9%
May '2610617.3%
Jun '26*7012.2%

5 · Monthly hardware + shipping spend

Total spend ($)Avg $/package042,11084,219126,329168,438Jun '25*Jul '25Aug '25Sep '25Oct '25Nov '25Dec '25Jan '26Feb '26Mar '26Apr '26May '26Jun '26*count / month$0$72$143$215$287

Total = Σ(core-device unit cost) + $19.87 shipping per outbound package, SSOT prices. Tablets dominate (the $166 device); months with more welcome kits cost more per package. Accessories (weights, booklets, shirts) and Knox licensing are not costed here.

MonthTotal spendAvg $/package
Jun '25*$6,611$194
Jul '25$60,708$177
Aug '25$106,989$175
Sep '25$146,468$221
Oct '25$134,098$206
Nov '25$145,922$217
Dec '25$120,566$198
Jan '26$133,752$180
Feb '26$111,362$184
Mar '26$112,559$182
Apr '26$120,225$176
May '26$120,450$197
Jun '26*$100,466$174

6 · Same-patient repeats per month

Patients receiving a same-device repeat03570105140Jun '25*Jul '25Aug '25Sep '25Oct '25Nov '25Dec '25Jan '26Feb '26Mar '26Apr '26May '26Jun '26*patients / month

Distinct patients whose reship event (2nd+ of a core device type) occurred that month. Tracks the reship curve closely — most reships go to distinct patients rather than repeat offenders.

MonthPatients w/ a same-device repeat
Jun '25*0
Jul '254
Aug '2527
Sep '2523
Oct '2533
Nov '2541
Dec '2549
Jan '26101
Feb '26118
Mar '26122
Apr '26112
May '2694
Jun '26*61

Data sources & caveats

TopicDetail
Source DBansiblehealth_analysis on the DAP-Local replica (192.168.10.130:5437, read-only). Derived shipping schema (continuous Packiyo/Portal sync) + activation proxies in public.
Shipped unitOutbound package_ledger rows (physical packages). Multi-device kits count as one package.
Activation coverageTablet = patient_tablet_activities (validated). BP / PulseOx / Scale = cosmos_readings first reading. Router has no patient join (blind spot) — router activations are excluded from the "newly active" curve, so it is conservative.
received_at completeness0 of 565 return rows carry received_at (and 0 carry requested_at). Returns panel uses a ledger proxy; treat as directional.
Cost modelSSOT (phase9_cost/ssot_unit_costs.md): PulseOx $6.13, BP $25.22, Tablet $166.18, Router $84.90, Scale $16.56 (placeholder), shipping $19.87/pkg. Accessories & Knox licensing excluded.
RefreshStatic page baked by shipping-ops-dashboard-refresh.py (single-shot reads; re-run to refresh). No live DB calls from the browser.

Generated 2026-06-23 14:17 PDT. Read-only. Aggregates only — no patient- or RMA-level identifiers on this page.