Features

Built for how Filipino food businesses actually run.

Four modules deliver core capability. Eight platform features keep everything trustworthy, fast and compliant.

Four modules · one platform

Everything a multi-branch food business needs.

Each module ships fully wired to the others. Sell an Ube Halo-Halo at the front and CIMS deducts ube paste from the commissary — automatically.

CIMS

Commissary Inventory

Recipe-aware ingredient deduction.

  • Multi-unit conversions (kg ↔ g, L ↔ mL)
  • Stock movements: receipts, production, spoilage, transfers
  • Auto-deducts ingredients when a recipe-linked item sells
  • Reorder alerts + supplier price history

POS+

Point of Sale (BIR)

Touch-optimized POS with BIR receipts.

  • Sequential per-branch receipt numbers (zero gaps)
  • Senior / PWD / Promo / Manual discounts
  • Cash · GCash · Bank · Charge-to-account payments
  • X-Reading anytime · Z-Reading closes the day

ETAS

Employee Time & Attendance

Shifts, attendance, leaves and payroll.

  • QR / PIN / biometric clock-in
  • Late detection + overtime accrual
  • Leave requests + manager approval flow
  • SSS / PhilHealth / Pag-IBIG payroll-ready exports

FMS

Franchise Management

Applications, branches and royalties.

  • Application Kanban: lead → vetting → contract → open
  • Royalty statements auto-generated per branch per month
  • Promo + menu rollouts targeted by branch
  • HQ rollup of every branch in real time

Platform-wide capabilities.

Mobile branch app

Expo React Native on iOS + Android. Touch-optimized POS, kitchen display, offline queue.

Web HQ dashboard

Next.js dashboard for HQ admins, managers and accountants. Real-time updates via Socket.IO.

BIR compliance built-in

Receipt sequence + Grand Total monotonicity + Z-Reading immutability enforced at the database.

Tamper-evident audit log

Every transaction, void, void-reason and operator captured. Immutable. Queryable.

Reports + P&L

X / Z Readings, Profit & Loss, royalty statements, sales by item, sales by cashier — exportable.

Real-time alerts

Low-stock warnings, late clock-ins, void thresholds, royalty due — push to phone + dashboard.

Data Privacy Act ready

Tenant isolation via Postgres RLS. Encrypted secrets. Retention policies configurable.

Role-based access

HQ_ADMIN · HQ_MANAGER · BRANCH_MANAGER · CASHIER · COMMISSARY_STAFF — granular permissions.

Offline-first sync

Patchy WiFi? Brownout? You still sell.

Filipino retail reality: the internet drops. Kusina was designed offline-first from day one — your branches never stop transacting, and reconciliation is automatic when the network returns.

  1. Phase 1 · Online

    Every operation syncs in real time

    The branch tablet is online. Cashiers transact and HQ sees every receipt within milliseconds. Receipt numbers are assigned live by the server.

    Sync latency
    ~120 ms
    Receipt #
    Server-assigned
    HQ visibility
    Live
  2. Phase 2 · Network drops

    SyncFacade flips to offline mode

    Internet goes down — rural area, brownout, ISP outage. The branch app detects the drop and routes every operation to the local SQLite queue instead of the network.

    Sells
    Continues
    Queue
    expo-sqlite
    Detection
    <2 s
  3. Phase 3 · Provisional receipts

    Cashiers keep selling with PROV-### numbers

    Each transaction is queued locally with a clientId UUID for idempotency. Customers receive a provisional receipt clearly marked PROV. Stock deducts locally so kitchen runs uninterrupted.

    Local cap
    10,000+ txns
    Provisional #
    PROV-001…
    Cashier UX
    No change
  4. Phase 4 · Reconciled

    Server assigns official BIR numbers

    Network restored. The SyncFacade batches the queue and POSTs to /v1/sync. Each op carries its clientId — duplicates are de-duplicated, retries are safe. The server allocates official sequential receipts and returns the mapping. Customer-facing reprints are available.

    Idempotent
    clientId UUID
    Mapping
    PROV → BIR #
    Audit
    recordedAt + syncedAt

Three rules that keep sync safe

1

Idempotent by client ID

Every operation carries a UUID generated client-side. Re-sending the same op produces no duplicate row.

2

Server allocates receipt numbers

BIR sequence is owned by the server, not the device. Provisional numbers are local-only and replaced on sync.

3

Audit preserves both timestamps

recordedAt (when sold) and syncedAt (when posted) are stored. Reports use recordedAt — sales attribute to the right day.

BIR Accreditation

Compliance baked in at the database layer

Three BIR invariants are enforced by Postgres CHECK constraints and triggers — not by application code that could have bugs.

Sequential receipt numbers

Receipts allocated per-branch with database row-locks — no gaps even under 60 concurrent transactions.

Immutable Z-Readings

Z-Reading rows are blocked from UPDATE/DELETE by a database trigger. Once the day closes, it stays closed.

Monotonic Grand Total

Grand Total Accumulator only increases. Voids reverse stock but never decrease the accumulator — BIR requirement.

Full audit trail

Every transaction, void, void-reason and operator is logged with a tamper-evident audit log.

Ready to see Kusina in your branches?

Book a 30-minute walkthrough. We will demo the modules that match your operation and quote a setup plan.