== speculative metrics tables dropped: metrics=gone metric_refresh_log=gone metric_exports=gone 

===== finance.reconciliation (as admin@lagosfamilyclinic.bitmed.test) =====
rows_returned: 10  generated: 2026-10-19 18:07:08
tie_out: variance 0 ties=yes
  KPI: Charges invoiced = 1456400.0 NGN
  KPI: Net collected = 1261200.0 NGN
  KPI: Outstanding = 190200.0 NGN
  KPI: Deposits held = 25000.0 NGN
  -- Reconciliation — charges, collections, corrections [figures] rows=7
     Charges invoiced (non-voided) = 1,456,400.00
     Collected on invoices (gross) = 1,270,200.00
     Refunds and reversals on invoices = 9,000.00  // 1 negative register row(s) — append-only, never edits
     Net collected on invoices = 1,261,200.00
     Credit notes issued and active = 5,000.00  // Reduces what is owed without touching money collected (DEC24)
     Outstanding on non-voided invoices = 190,200.00
     Variance — invoiced less net, credits and outstanding = 0.00  // Zero means the books tie out
  -- Held, excluded and outside the reconciliation [figures] rows=3
     Collections outside invoices (net of refunds) = 25,000.00  // 1 register row(s) with no invoice behind them — deposit takings
     Deposits held for patients = 25,000.00  // 1 deposit(s) still holding money — money kept, never revenue
     Voided invoices (excluded from every figure above) = 0.00  // 0 voided invoice(s)

===== shifts.reconciliation (as admin@lagosfamilyclinic.bitmed.test) =====
rows_returned: 0  generated: 2026-10-19 18:07:08
range: All dates
  KPI: Shifts in range = 0 
  KPI: Closed shifts = 0 
  KPI: Still open = 0 
  KPI: Over / short, closed shifts = 0.0 NGN
  -- Expected versus counted, per shift [grid] rows=0
     (empty state) No shift has been opened in this range yet. Expected and counted figures appear once a cashier opens and closes a drawer.

===== appointments.outcomes (as admin@lagosfamilyclinic.bitmed.test) =====
rows_returned: 20  generated: 2026-10-19 18:07:08
range: All dates
  KPI: Appointments in range = 19 
  KPI: Kept = 5 
  KPI: No-shows = 2 
  KPI: Still to come = 10 
  -- Appointments and outcomes in range [figures] rows=9
     Appointments scheduled in range = 19.00
     Booked = 9.00
     Confirmed = 0.00
     Checked in = 0.00
     In progress = 0.00
     Completed = 5.00
     Cancelled = 3.00
     No-show = 2.00
     Rescheduled = 0.00
  -- Rates, with the denominator each one divides by [figures] rows=5
     Slot-passed appointments (denominator for the rates below) = 9.00
     Still to come = 10.00
     Kept (completed ÷ slot-passed) = 55.60  // 5 of 9 slot-passed appointments
     No-show rate (no-shows ÷ slot-passed) = 22.20  // 2 of 9 slot-passed appointments
     Cancellation rate (cancelled ÷ slot-passed) = 33.30  // 3 of 9 slot-passed appointments
  -- Age band by outcome [grid] rows=6 SUPPRESSED
     | 0-17 | 0 | <5 | 0 | 0 | 0 | 0 | 1
     | 18-29 | <5 | 0 | <5 | 0 | 0 | 0 | 3
     | 30-44 | <5 | <5 | 0 | 0 | 0 | 0 | 2
     | 45-59 | <5 | 0 | <5 | 0 | 0 | 0 | 2
     | 60+ | <5 | 0 | 0 | 0 | 0 | 0 | 1
     | Unknown | 0 | 0 | <5 | 0 | 9 | 0 | 10
     T: Total | 5 | 2 | 3 | 0 | 9 | 0 | 19

===== workforce.hours (as admin@lagosfamilyclinic.bitmed.test) =====
rows_returned: 15  generated: 2026-10-19 18:07:08
range: All dates
  KPI: Hours worked = 660.88 hours
  KPI: Attendance rows = 80 
  KPI: Active duties = 25 
  KPI: People with rows = 8 
  -- Attendance in range [figures] rows=8
     Attendance rows in range = 80.00
     Hours worked (derived at read time) = 660.88
     Rows missing a check-in or check-out (excluded from hours) = 2.00
     Present = 76.00
     Absent = 1.00
     Late = 1.00
     Half day = 1.00
     Excused = 1.00
  -- Hours by department [grid] rows=2 SUPPRESSED
     | Front office | 5 | 410.38
     | General outpatient | <5 | <5
     T: Total | 8 | 660.88
  -- Roster coverage in range [figures] rows=5
     Active duties = 25.00
     Cancelled duties (history, no hours) = 1.00
     Hours on active duties (derived at read time) = 148.00
     Days with at least one active duty = 7.00
     Days with active cover ÷ calendar days in range = —  // Set both range dates to read coverage as a rate against calendar days.

===== visible catalogue doors =====
admin@lagosfamilyclinic.bitmed.test: finance.reconciliation, shifts.reconciliation, appointments.outcomes, workforce.hours
hr@lagosfamilyclinic.bitmed.test: workforce.hours
frontdesk@lagosfamilyclinic.bitmed.test: appointments.outcomes
finance.manager@lagosfamilyclinic.bitmed.test: finance.reconciliation, shifts.reconciliation

permission count: 112
