There's one pattern running through every workflow — scan, classify, post, audit. Learn it once, and the whole app becomes obvious. Below: the pattern, the principles, and live examples you can try right now.
Every Mizan workflow — scan, payment match, bank reconciliation, journal posting, ZATCA submission — follows the same five-step shape. Input goes in, a smart default comes out, you confirm or override, we audit it.
// Real classifier output, Apple MacBook SAR 7,500 receipt: { "type": "asset", "glAccountCode": "1620", "glAccountName": "Office Equipment", "assetCategory": "it", "assetUsefulLife": 36, "assetDepreciationMethod": "straight_line", "isRecurring": false, "isTaxDeductible": true, "confidence": 1.0, "vendorMatch": "existing", "suggestedPaymentTermsDays": 30, "Matched keywords: macbook | Existing vendor: Apple Inc. (SUP-116046)" } // 2 lines posted — NOT 1. Asset cost + recoverable VAT: Line 1: 1620 Office Equipment amount=6,375 SAR (isAsset=true) Line 2: 1500 VAT Input (Recoverable) amount=1,125 SAR (tax line)
// Real matching output: { "matchType": "ai_suggested", "confidence": 0.94, "matchedInvoice": "INV-2026-0012", "matchedCustomer": "Acme Trading LLC", "reasoning": "Amount 12,500 = invoice 12,500; date 2 days after due; ref contains INV-0012", "alternatives": [{ "invoice": "INV-2026-0011", "confidence": 0.41 }] } // 3-way color-coded UI: green ≥ 0.85 → "Looks right, click to confirm" amber 0.50-0.85 → "Possible match — verify" red < 0.50 → "No good match — create new"
// Real ZATCA flow, INV-2026-0002 (POB-chained to INV-2026-0001): { "xmlHash": "a3f2...c4d9" // SHA-256 of canonicalized UBL 2.1, "previousInvoiceHash": "7b1e...8a2f" // POB chain — INV-001's hash, "ecdsaSignature": "3045022100...02202b...", "qrTLV": [ "Seller: 300123456700003", "VAT: 300123456700003", "Timestamp: 2026-07-18T15:30:00Z", "Total+ VAT: 8625.00", "VAT amount: 1125.00", "Hash: a3f2...c4d9", "ECDSA: 3045022100...02202b...", "Public key: 04a1b2c3...", "Cryptographic stamp: 01" ], "zatcaStatus": "CLEARED", "icv": 2 }
// Approval rule — auto-selected by amount tier: { "template": "journal_standard", "steps": [ { "step": 1, "role": "accountant", "sla": "4h" }, { "step": 2, "role": "manager", "ifAmountGt": 10000 }, { "step": 3, "role": "cfo", "ifAmountGt": 50000 } ] } // Why this matters — a SAR 3,000 phone bill posts in 4h. A SAR 75,000 asset purchase needs 3 sign-offs and goes to CFO. No config, no script — the engine reads the rule and routes.
Every smart feature in Mizan follows these rules. If we break one, the feature goes back to the drawing board.
Twenty smart workflows across the system, each following the same pattern.
| Workflow | Input | Smart action | Override? |
|---|---|---|---|
| 📸 Smart scan | Receipt photo | Classify as expense / asset / inventory | ✓ 1 click |
| 🏦 Bank recon | Statement line | Match to open invoice w/ confidence | ✓ alternatives |
| 📨 AR Payment match | Bank receipt | Auto-apply to oldest open invoice | ✓ pick another |
| 🏛️ ZATCA submission | Approved invoice | Build UBL 2.1 XML, sign, submit | ✗ hard fail |
| ✅ Approval routing | Journal / bill / payment | Tier-based BPMN route | ✗ rule-driven |
| 🔁 Recurring bills | Date trigger | Auto-draft from template | ✓ pre-approve |
| ⚠ Duplicate detection | New invoice | Flag if amount+date+vendor match | ✓ confirm dup |
| 💸 WHT calc | Foreign payment | 5% WHT on management fees | ✓ override rate |
| 📊 VAT return | Period close | Output - input + reverse charge | ✗ rule-driven |
| 🏢 Intercompany | Bill between entities | Auto-eliminate on consolidation | ✓ pick rule |
| 📦 Inventory reorder | Stock level | Suggest PO when below min | ✓ confirm |
| 🔍 Period close | Month-end trigger | Reconcile, accrue, generate TB | ✓ step by step |
| 📅 EOSB accrual | Payroll run | Saudi tiered formula on basic+housing | ✗ Labour Law |
| 🛡️ GOSI calc | Salary | 25.5% employer / 10% employee (Saudi) | ✓ override |
| 🏗️ Nitaqat band | Headcount mix | Calculate Saudisation % and band | ✓ read-only |
| 💱 FX translation | Foreign invoice | SAMA rate at transaction date | ✓ manual rate |
| 📈 Budget alerts | Posted expense | Email if category > 90% of budget | ✓ adjust budget |
| 🔐 RBAC | User action | 6 roles × 31 permissions check | ✓ request grant |
| 📨 Vendor 360 | New vendor bill | Pre-fill payment terms, WHT, GL | ✓ edit all |
| 📊 Smart suggestions | User on dashboard | "3 bills pending approval, 1 bank match > 0.85" | ✓ 1-click action |
Hit the live API. Type a vendor, an amount, a description — see the classification in real time.
POST /api/v1/dms/demo/scan-and-classify — real backend, no auth required for demo.
Open the app, install the mobile PWA, and try the workflow that fits your day.
Open Mizan →