diff --git a/public/pos/cashup.html b/public/pos/cashup.html
index 25fe9a6..2148c88 100644
--- a/public/pos/cashup.html
+++ b/public/pos/cashup.html
@@ -265,7 +265,8 @@ paintNet();
const DENOMS = [
{lbl:'R200', sub:'note', v:200}, {lbl:'R100', sub:'note', v:100}, {lbl:'R50', sub:'note', v:50}, {lbl:'R20', sub:'note', v:20},
- {lbl:'R10', sub:'coin', v:10}, {lbl:'R5', sub:'coin', v:5}, {lbl:'R2', sub:'coin', v:2}, {lbl:'R1', sub:'coin', v:1}, {lbl:'50c', sub:'coin', v:0.5}
+ {lbl:'R10', sub:'coin', v:10}, {lbl:'R5', sub:'coin', v:5}, {lbl:'R2', sub:'coin', v:2}, {lbl:'R1', sub:'coin', v:1},
+ {lbl:'50c', sub:'coin', v:0.5}, {lbl:'20c', sub:'coin', v:0.2}, {lbl:'10c', sub:'coin', v:0.1}
];
let shift = 'today';
@@ -300,7 +301,10 @@ function getDenomCounts(){
}
function recalc(){
const c = getDenomCounts();
- cashCounted = Object.entries(c).reduce((s,[v,n])=>s + v*n, 0);
+ // Round to whole cents: 10c/20c aren't exact in binary floating point,
+ // so a drawer of 3x10c would otherwise total 0.30000000000000004 and
+ // print a variance that looks like a rounding bug on the slip.
+ cashCounted = Math.round(Object.entries(c).reduce((s,[v,n])=>s + v*n, 0) * 100) / 100;
document.getElementById('sCashCounted').textContent = fmt(cashCounted);
const diff = cashCounted - cashSales;
const drow = document.getElementById('diffRow');
@@ -390,8 +394,9 @@ load();
// which went to the OS print dialog instead of the thermal printer.
async function printCashup(){
const btn = document.querySelector('[data-od-id="print-cashup"]');
- const status = btn ? btn.querySelector('span') : null;
- const oldLabel = btn ? btn.textContent : '';
+ // Keep the markup, not just the text — the button holds a printer