From b0ec3ab7b37ebc04356c69e87e7262f82c7f3af2 Mon Sep 17 00:00:00 2001 From: Patrick Mulligan Date: Mon, 30 Mar 2026 16:22:28 -0400 Subject: [PATCH] feat: add cash_level to availability broadcast Publish cash level (none/low/good/full) in the Kind 30078 event based on total bill count across all cassettes. Enables monitoring dashboards to show cash availability without revealing exact amounts. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/composables/useAvailabilityBroadcast.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/apps/machine/src/composables/useAvailabilityBroadcast.ts b/apps/machine/src/composables/useAvailabilityBroadcast.ts index ccbdb8c..dfcf5a5 100644 --- a/apps/machine/src/composables/useAvailabilityBroadcast.ts +++ b/apps/machine/src/composables/useAvailabilityBroadcast.ts @@ -48,10 +48,20 @@ export function useAvailabilityBroadcast(options: UseAvailabilityBroadcastOption return { cashIn, cashOut } } + /** Cash level: none / low / good / full based on total bills */ + function cashLevel(): string { + const totalBills = Object.values(inventory.value).reduce((s, c) => s + c, 0) + if (totalBills === 0) return 'none' + if (totalBills < 20) return 'low' + if (totalBills < 80) return 'good' + return 'full' + } + async function publish(avail: ATMAvailability) { const content = JSON.stringify({ cash_in: avail.cashIn, cash_out: avail.cashOut, + cash_level: cashLevel(), fiat: fiatCode, model, })