Lead Stage Distribution
Task Types
| Customer Name | Phone | Business Name | City | Industry | Lead Status | Source | Channel | Human Agent | Created | Last Activity | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading... | ||||||||||||
| Type | Status | Lead | Scheduled At | Created | Reason | |
|---|---|---|---|---|---|---|
| Loading... | ||||||
| Direction | Channel | Lead | Outcome | Duration | Provider | Started | Recording | |
|---|---|---|---|---|---|---|---|---|
| Loading... | ||||||||
Leads Over Time
Call Outcomes
Pipeline — what moved
Who is standing where, right now
Task Success Rate by Type
Human Agent Performance
Stage changes & comments tracked from Activity log| Agent | Assigned | Active | Won | Lost | Win Rate | Stage Changes | Comments |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
| Date | Customer | Issue Category | Description | Ticket # | Ticket Status | Outcome | |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
| Date | Customer | Outcome | Duration | Issue Category | Ticket # | Recording | |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
Changes take effect on the next call — the runtime re-reads its config when a call starts, so there is nothing to restart and no cache to wait out. A call already in progress keeps the settings it began with. Feature flags are final authority — they override everything including incident rules.
Feature Flags
Final authorityBehavior & Tone
All five are accepted by the API and all read numbers correctly (3/3 on a 10-digit number and
an amount). Whether si-LK really sounds less Indian than en-IN is not settled — an
LLM listening blind could not tell them apart. Sample clips of the same sentence in each are
in assets/voice-accent-samples/; judge by ear.
Appended to the agent's instructions, so it takes effect on the next call. Use it for delivery only — pace, warmth, how numbers are read. It cannot change what the agent is allowed to say.
Transaction Channels
Resend Policy
Requires enableResend=trueTicket Config
Incident Rules
| Name | Matches | Overrides | Customer Instruction | Expires | Actions |
|---|---|---|---|---|---|
| Loading… | |||||
Case 1 — Decision Breakdown
Kiosk Failed PaymentsCase 2 — Decision Breakdown
Vendor FailedRecent Scan Runs
last 10 runs| Time | Status | C1 Scanned | C1 Resent | C1 Dry-Run | C2 Scanned | C2 New | C2 Resent | C2 Retried | C3 Processed | C3 Resent |
|---|---|---|---|---|---|---|---|---|---|---|
| No scan runs yet | ||||||||||
TM Action Events
| Time | Terminal | Action Code | Group Type | Owner / Terminal Name | Txn Count | Transaction IDs | Status | Response / Note |
|---|---|---|---|---|---|---|---|---|
| No TM action events yet | ||||||||
| Transaction ID | Invoice | Terminal | Owner | Vendor | Amount | Failed At | Decision | Retries | Next Retry | Result | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||||
| Parent Tx ID | Invoice | Family | Channel | Terminal | Owner | Vendor | Amount | Failed At | Decision | Trusted Checks | Attempts | Next Retry | Result | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||||
| Job ID | Created Tx ID | Channel | Invoice | Amount | Vendor | Reason | Status | Decision | Submitted | Processed | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||||
Submit Reconciliation Job
| Transaction ID | Retries | Max | Last Balance | Limit | Last Retry | Next Retry | Status |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
Vendors Without Provider Send Action Rules
These vendor IDs appear in failed transactions but have no providerSendActions rule in resendChecker.js. Transactions for these vendors are recorded but not resent. To enable auto-resend for a vendor, add it to VENDOR_RULE_MAP after confirming the correct provider send action name from real action logs.
| Vendor ID | Vendor Name | Failed Transactions | Total Amount (LKR) | Last Seen |
|---|---|---|---|---|
| Loading… | ||||
Agent Control
How often both Case 1 and Case 2 scans run.
Per-run cap applied to each case independently.
Payment failed because dealer deposit could not be deducted before the vendor request was sent. Safe to resend once balance is restored.
Scan Settings
How many days back to scan for Failed (terminalStatus=4) transactions.
Case 1 scans terminal/kiosk channel only.
Skip Rules (Case 1)
Transactions matching any rule are skipped with BLOCKED_BY_CONFIG. Enter comma-separated values.
Case-insensitive substring match on TerminalOwner field.
Saved but not yet active — field name to be confirmed.
Owner / Dealer Balance
Resend only when owner balance > this value. Typically negative (e.g. -50000).
After this many retries job expires as EXPIRED_OWNER_BALANCE_NOT_RECOVERED.
TM Action Code Automation
— triggers kiosk/updater when clustered failures detectedDefault: 6034
Min failures in window to trigger. Default: 2.
Default: 30 min.
Performance cap per cycle. Default: 200.
Parent Completion via Children
— status-fix failed kiosk parents when completed children sum == parent amount (CompleteParentTransaction; no resend, respects Dry-Run)Requires the agent admin account to have sub-transaction amount visibility. While off, these parents skip as before.
Vendor Rules
— provider send action detection per vendorOnly vendors with an enabled rule will be resent. Any unmapped vendor is marked NEEDS_VENDOR_RULE_MAPPING. Only add rules after confirming action names from real logs.
| Vendor ID | Vendor Name | Provider Send Actions | Status | Notes | Updated | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Action names from GetActionLogs that confirm a provider send was attempted.
Payment reached the vendor but the vendor returned a failure response. Per-service rules define which responses are safe to resend vs. permanent failures to skip.
Case 2 Settings
How many days back to scan for Vendor Failed transactions (independent of the global lookback).
Total resend attempts before marking expired.
Exact errorMessage from the status check API that confirms vendor did not process the payment. Any other response is treated as untrusted.
MegaPay terminalStatus code for FailedRetry. Confirm via admin filter. When set, the agent also scans for FailedRetry transactions across all 4 channels. Leave blank to disable FailedRetry scanning (existing candidates still retry normally).
Enable all channels where you see FailedOnVendor transactions. Each channel uses its own API endpoint.
Skip Rules (Case 2)
Transactions matching any rule are skipped with BLOCKED_BY_CONFIG and not resent.
Comma-separated vendor IDs — skip all their transactions.
Vendor Override Rules
Per-vendor rules that override the normal resend decision. Status checks always run regardless.
| Vendor | Action | Match Condition | Schedule / Amount | Status | Notes | |
|---|---|---|---|---|---|---|
| No override rules | ||||||
Case-insensitive substring match against vendor API response from TransactionLogs.
24-hour HH:MM in Sri Lanka time. Resend will be attempted the next calendar day at this time.
Leave blank to match all amounts for this vendor.
Override ContractTypeId when the original is empty or wrong for the target vendor. Leave blank to use original.
Comma-separated. Rule matches only when the account number (ContractNumber) starts with one of these. Leave blank to match any account number. Example: SLT (vendor 34) + prefixes 070,071 + amount below 5000 → resend to Mobitel (vendor 20), same account number.
1-based. The override first fires on this resend attempt; earlier attempts use the normal (original vendor) resend. Blank/1 = fire from the first attempt.
How many times this override resends before reverting to the original vendor's normal retries. Blank = unlimited. Ensure Case 2 "Max retries" has enough headroom for the normal + override + revert tries.
Per-Service Vendor Response Rules
For each vendor/service, define which vendor response strings mean resendable (transient error, safe to retry) and which mean permanent failure (skip — do not resend). Applies across all selected channels for that service.
| Vendor / Service | Applicable Channels | Resendable Response Patterns | Skip (Permanent Fail) Patterns | Status | Notes | |
|---|---|---|---|---|---|---|
| No rules yet — add a service rule to get started | ||||||
Vendor response strings that mean the request did NOT reach the provider — safe to resend. Case-insensitive substring match.
Vendor response strings that mean the request was received and rejected permanently — do not resend.
Processes reconciliation resend jobs submitted by the Accounting Agent (any channel). Skips already-completed transactions; resends Created or FailedOnVendor transactions.
Reconciliation Resend Settings
Controls which jobs are picked up and processed each resend cycle. Applies to all channels (Cargills, Provider Check, etc.).
How many pending reconciliation jobs to process per cycle.
Comma-separated channel names. Only process jobs matching these channels. Leave empty to allow all.
Comma-separated reason values. Leave empty to allow all reasons.
Auto-retry failed resends
When the core resend API rejects a job (e.g. transient result:false — 2026-07-03: 16 resends across 9 vendors rejected in one minute), re-queue it automatically after a cool-down. Each retry goes through the normal safety checks (live status re-check, prior-success block), so an already-delivered top-up is never resent.
Wait after a failed attempt before re-queueing.
Comma-separated: CARGILLS_RECONCILIATION, CYBERSOURCE_RECONCILIATION, PROVIDER_CHECK.
Config Change History
| When | By | Section | Comment |
|---|---|---|---|
| Loading… | |||
Routing & Prompts — Customer Care
Assign inbound DID numbers to the customer care agent, add operator instructions appended to its prompt, and optionally route Zoiper test calls here. Changes take effect on the next call.
Routing & Prompts — Sales
Assign inbound DID numbers to the sales agent, add operator instructions appended to its prompt, and optionally route Zoiper test calls here. Changes take effect on the next call.
Take a job so the rest of the team can see it is yours, then mark it done and say what you did. If a job should not be here at all, drop it and say why — that is how we stop it appearing again.
Waiting for someone
—
Already taken
—
Longest wait
—
Check for new work now
Test feedback
Call the agent, then tell us what happened. Write in English, Sinhala or Tamil — whatever is quickest. Every report is read and grouped; repeats of the same problem are counted together.
Who is testing
Put every tester's mobile number here before they call. Tickets from these numbers are marked TEST CALL so nobody on the support team chases a complaint that was invented for a test. A number missing from this list means real tickets.
New feedback
Score the call — 1 is bad, 5 is good
Tick anything that went wrong
All feedback
Loading…
Sales team
The people leads can be assigned to, and who the AI hands a prospect to. Language decides who gets a handoff first, then region, then whoever has waited longest. The AI only says a person's name to a caller when that person speaks the caller's language — otherwise it says "our sales team", so anyone left with no language ticked will never be offered by name.
| Name | Role | Region | Languages | Phone | Status | ||
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
Add person
Leave all three unticked and the AI will never offer this person by name — an unknown language counts as "cannot", not as "any".
Leave both at zero and this person is never reported as behind — there is nothing to be behind.
Tick none and the Region field above decides — "All" there means every province.
Industries & MCC
The business types merchants and leads pick from, and the Merchant Category Code each one declares on the signed MCC letter. Defaults follow ISO 18245 — confirm with HNB before changing a live category. A merchant keeps the code they signed even if you change it here.
Edit
| Business type | MCC | Description | Cabinet | Risk category | Licence | Product risk | Status | |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
Agent Config — Sales
Two different jobs on one page, so they are two tabs. The agent is what the AI says and how calls are dispatched. Leads & pipeline is what a lead IS — where they come from and what we insist on knowing.
Voice
Applies from the next call — no restart. Blank means use the global default.
A caller who wanted to buy asked to come and see the machine and was told we have no physical location — twice — because nothing told the agent otherwise. Fill this in and it gives the address instead. Leave it blank and it says a colleague will confirm; either way it will not claim we have nowhere.
Appended to the agent's instructions, so it takes effect on the next call. Delivery only — it cannot change what the agent may say.
Accounting Agent
All reconciliation jobs and accounting workflows managed by this agent.
JustPay · Cargills Bank Reconciliation
MegaPay completed transactions vs Cargills Bank credits — per reconciliation day
| Message ID | Type | Subject | From | Received | Files | Status |
|---|---|---|---|---|---|---|
| Loading… | ||||||
| App Transaction ID | Section | Amount (LKR) | External ID | Txn Date | Decision | Processed |
|---|---|---|---|---|---|---|
| Loading… | ||||||
| Severity | Type | Description | Reference | Status | Actions |
|---|---|---|---|---|---|
| Loading… | |||||
| Loading… |
| Bill Reference | App Transaction ID | Amount (LKR) | TR Status | Recon Status | Date |
|---|---|---|---|---|---|
| Loading… | |||||
| Date | Reference | Gateway Ref | Amount (LKR) | Type | Recon Status |
|---|---|---|---|---|---|
| Loading… | |||||
| Time | What Happened | Transaction ID | Result |
|---|---|---|---|
| Loading… | |||
Mobitel — Transaction Status Check
Check PRE / POST transaction status against Mobitel merchant cabinet (AIMS portal)
Manual Lookup
| Reference | MegaPay Txn | Channel | Check Date | Our Status | Mobitel Status | Action Taken | Checked At | |
|---|---|---|---|---|---|---|---|---|
| No checks run yet | ||||||||
3rd-Party Encashment Reconciliation
Kiosk cash encashments approved in core once the matching bank deposit lands · per third party (Commercial Bank, DFCC, …)
HNB 805 — Whole-Account Reconciliation
Account 009010483805 · every dealer deposits here against their six-digit reference and almost every company expense leaves from here. Did each dealer who banked money get credited, and is every other line attributed?
Cybersource — Card Batch Overview
Daily batch CSV reports per merchant · matched to MegaPay External Transactions by MerchantReferenceNumber
Cybersource Transaction Detail
Cybersource — Transactions
All rows from downloaded Cybersource batch CSVs and their reconciliation status
| Org | Report Date | MRN | Amount (LKR) | CSV Status | Request Date | Recon Status |
|---|---|---|---|---|---|---|
| Loading… | ||||||
JustPay · HNB — Reconciliation
Each JustPay payment credited to HNB 009010483948, net of HNB's commission · credit = amount + user fee − provider fee
Cybersource — Settlement
Each EDC credit on HNB 009010483948 against the card transactions it should be paying for
Cybersource — Activity Log
Agent run events: OTP logins, downloads, reconciliation results, errors
Cybersource — Configuration
Settings for Cybersource daily batch CSV reconciliation
Core Settings
Cybersource generates the previous day's report in the early morning SLT. Default: 06:00.
Merchants
Agent Status
Action Gates
Independent gates for each live action. All default to OFF for safety. Dry Run above overrides all.
Reconciliation Scope
GatewayRef checkpoint bootstrap. Only change before a data reset.
Schedule & Polling
Reconciliation — Case 1: Cargills JustPay
Failed Transaction Report (FTR) emails from Cargills Bank. Agent completes the listed transactions in MegaPay and replies with a confirmation.
Reconciliation — Bank Statement Match
Cross-checks Transaction Reports (TR) against Bank Statements (BS). Flags mismatches as exceptions.
Email Notifications
Bank completion reply is sent from SMTP_FROM (currently info@megapaysl.com) to the original FTR email sender (Cargills Bank) as a reply-all in the same thread.
FTR reminders are sent from the same address to the recipients listed below.
Templates support {count}, {amount} (reply) and {name}, {date} (reminder).
People to remind when FTR email hasn't arrived by the deadline hour. Leave empty to disable reminders.
Sri Lanka Holiday Calendar
No FTR reminders are sent on public holidays. Add dates to suppress reminders.
Provider Cabinet Check
Automated status verification against provider payment portals (e.g. Mobitel AIMS). Triggered by the Case 2 Resend Agent when a PROVIDER_CABINET_CHECK override rule matches a transaction.
Mobitel AIMS Credentials
Vendor Routing Rules
Maps MegaPay vendor IDs to provider cabinets and defines how to construct the cabinet reference (e.g. MGPPRE or MPOPOS prefix) when vendor transaction logs don't contain one.
| Vendor ID | Vendor Name | Provider | Default Prefix | Reference Rules | Enabled | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
Vendor Rule
subscriptionType true = Prepaid → MGPPRE. subscriptionType false = Postpaid → MPOPOS. always = unconditional catch-all.
Transaction Detail
Vendor Failed Candidate Detail
Provider Check — Diagnostic Report
Reconciliation Job Detail
KYC Agent
Missed reviews auto-rejected on timeout (by day)
Recent Runs
| Started | Scanned | Approved | Rejected | Manual | Errors | Mode |
|---|---|---|---|---|---|---|
| Loading… | ||||||
| KYC ID | NIC / Passport | Name | Phone | Region | Platform | Decision | Conf | Submitted | Registered | Last Modifier | Last Viewer | Reason | Re-applied | Actions |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||||
User Journey
Mobile-app funnel: registered → KYC applied → KYC approved → payment method added → first payment. KYC is the gate, so this is where we see exactly where users are lost. Built from App Users + mobile-app payments + local KYC (read-only).
User Journey — Config
Sync cadence, lifecycle thresholds, and retention-action safeguards. Separate from KYC config. Profit per payment = user fee + vendor fee − provider fee.
Run History
| Run ID | Started | Duration | Scanned | Approved | Rejected | Manual | Errors | Mode |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
Analytics
Decision breakdown
Selected reviewer — shift activity (first / last action per day)
KYC recovery — rejected customers who re-applied & passed
By reason / category
By district
By platform
By app version
Human reviewers
| Reviewer | Actions | Viewed | Missed KYC | Approved | Rejected | Modified | Comments | Attachments | Activity | Avg handling time | First active | Last active |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||||||
AI agent performance
Missed → timeout auto-rejected (by day)
Loading…
KYC Application Detail
User KYC History
Clicks
User Management
Create dashboard users and grant access to specific agents and pages.
New User
Required. Groups the list; grants nothing.
Ten digits starting 0. The password is sent here.
Tick the pages this user can access. The KYC Agent card also holds its cabinet-action permissions.
Dealer / Partner Management
Register and manage dealers, POS/VPOS terminals and login users — synced to the MegaPay core.
| Partner ⇅ | Entity ⇅ | Type | Core ID ⇅ | Status ⇅ | Products | Contact | Applied ⇅ | Idle ⇅ | |
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
Dealer Management — Settings
Controls for core synchronisation.
Accounts
Every PayGo Account (consumer identity) — status, KYC/KYB, and moderation actions.
| Name | Phone | NIC | Bank ID | JustPay | Status / follow-up | Registered | Status | KYC | KYB | Actions | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||||
Bill Catalogue
The bill-payment services shown on paygo.lk /pay. Seeded from the MegaPay core but authoritative here — edits override core.
Edit service
✨ Build a service with AI
Mobile Data Packs
Fixed-amount mobile packs shown on paygo.lk after a customer picks a mobile provider. Each pack is paid to its OWN core vendor (Dialog Package #96, Mobitel Package #103 …) — NOT as a reload of the provider it is listed under. Paying one down the reload rail made core pay the provider twice (11 Sep 2026).
Edit pack
Web SEO & Pixels
Tracking tags inject site-wide on paygo.lk (changes apply within ~1 min). Per-page SEO overrides the page title/description.
Blog
Stories, tips, offers and news shown at paygo.lk/blog. Write in English; the Translate button fills Sinhala and Tamil. Drafts are invisible to the public. Live within ~1 min of publishing.
Vacancies
Open roles shown on the website Careers page (/careers, all languages). Untick “active” to hide one without deleting it. Live within ~1 min.
Organisation
Departments and the company's list of jobs. A position is a job that exists here; a vacancy is one opening for it — so hiring three Customer Care Executives is three vacancies against one position. Upload the staff sheet to seed both.
Job Applications
Every CV that comes through the website lands here — filter by date, status, source and division; download CVs; track which ad channel delivers. No email needed.
Kiosk / POS status
Controls how kiosk status is shown on the paygo.lk kiosk locator.
Translations — paygo.lk body content
Edit the Sinhala/Tamil wording of the home & marketing pages. Leave a field blank to keep the built-in translation. Saved changes appear on the site within ~1 min.
Web Analytics — paygo.lk
First-party traffic & the bill-pay funnel.
Vendor Links — paygo.lk
How many card-payment links each vendor (OnCredit, CashX, …) drove — opens vs paid — for the selected period.
Short links for SMS
paygo.lk/s/<name> → any page. For vendor SMS templates: shorter, and with no
? or &, which many SMS gateways and phone link-detectors mangle.
These are the same links as oneLink — the list below is read-only now, so there is one
place to create, repoint, print and measure them.
Merchant journey
Every merchant who signed themselves up: who never opened the wizard, who stopped and where, who finished — and who has actually used what they signed up for. Click a tile to filter. "What's left" is computed with the same requirement engine the merchant's own wizard uses, so this page and their screen can never disagree.
oneLink — links & QR codes
paygo.lk/s/<name> → wherever you point it, and it can point different devices somewhere different: an iPhone to the App Store, a Huawei to AppGallery, an Android to Play, everyone else to a page. Each one has a QR code to print and its own click analytics. Live the moment you save — no deploy — and you can repoint one later without reprinting anything.
oneLink — analytics
Every filter scopes everything below it. Humans only unless you ask for bots — carriers, link previews and scanners fetch every URL they see, and counting those as clicks makes a campaign look twice as good as it was. Times are Sri Lanka time.
POS — Reports & metrics
Bill-collection performance from the POS terminals. Filter by a single POS or all, and by date range. Source: synced core transactions (pos_txns) + POS tickets.
POS — App analytics
Google-Analytics-style event feed from the POS app itself: every screen view, action and pay click. Filter by POS or all, and by date range. Source: pos_events (sent by the app).
Public app — Overview
Consumer app health at a glance (Android + iOS): users, events, pay success rate, and the vendors most at risk of "not received". docs/39.
Public app — Analytics
Consumer funnel (Android + iOS): screen views, actions and pay steps keyed to accountId + platform. Source: app_events (sent by the apps) + Google Analytics. docs/39.
Public app — Payment health
Pay outcomes across Android + iOS: success rate, pending & failed, and a worst-first vendor leaderboard — the root of "payment not received" (the top complaint). Source: pay_execute in app_events. docs/39.
Public app — Engagement
Broadcast popups to the consumer apps (Android + iOS): draft → push, target all or a platform, with an optional paygo:// deep-link (e.g. nudge registered-but-never-KYC users). docs/39.
Public app — Content
Home merchandising cards (the "Stories" strip) for the consumer apps: trilingual title + badge, a card style, an optional paygo:// deep-link, ordered and targeted by platform. Content is live whenever enabled — no push. docs/39.
Public app — User 360
Support lens: look up one consumer by accountId to see their app journey — funnel stage, payment attempts & outcomes ("did my payment go through?"), device(s), and a recent event timeline. Read-only, app-side only; KYC verdict + core wallet live in their own workspaces. docs/39.
Public app — Reliability
Crash & error groups from the consumer apps: crash-free users, worst-first by frequency, affected users/versions. Hit "Diagnose with AI" on a group to get an LLM root-cause + likely fix (cached). docs/39.
Public app — Remote config
Feature flags & values for the consumer apps: toggle a feature, ramp a rollout %, target a platform — read at app startup, live without a release. The app buckets the rollout per-user by hash. docs/39.
Public app — Home hero
The carousel at the top of the app's Home screen. Each slide carries its own copy per language, a link, and who it is for. A link the app cannot route is refused when you save — the app opens Home for anything it does not recognise, so a wrong link would look like it worked. public-app docs/55 G4.
Public app — Merchant loyalty
Every merchant stamp card and points scheme, and whether the app can actually show it. A programme with no reward named still collects stamps — the buyer sees a card counting toward nothing, so the app hides it. Read-only: a reward is a promise the merchant makes, and it is edited in their own cabinet. public-app docs/55 G6.
Public app — Promo codes
Pay&Go's OWN discount codes, for bill payments — scoped to a service (CEB) or to a payment method (any card). Not the same thing as a shop's storefront code, which merchants issue from their own cabinet and which comes off a basket. public-app docs/55 G3.
Public app — Push
Send a system-tray push notification to the consumer apps (distinct from in-app Engagement popups). Compose a title/body + optional paygo:// deep-link, target all or one platform, and send now. Dormant until the consumer FCM service account is armed on the platform (env PUBLIC_APP_FCM_SERVICE_ACCOUNT). docs/44.
POS — Announcement popups
Modal messages shown in the POS app (trilingual EN/SI/TA, shown in the device's language). Target all POS or specific dealers; schedule + priority. Live within ~minutes.
POS — Notifications
Broadcast notifications shown in the POS app's notifications inbox (trilingual). Target all POS or specific dealers.
POS — Broadcast history
Popups & notifications you removed are kept here with their content, push/archive times, and — for popups — how many operators saw & clicked each one. Restore to bring one back, or delete permanently.
POS — Tickets
Disputes raised from the POS app (created in the admin portal under pos_agent). Status syncs from core.
POS — Deposit complaints
“I banked money and my credit limit never updated”, from the POS app, the cabinet and support calls. The email still goes out; this is the list it links to. Ask core before anything else — most of these turn out to have been credited already.
POS — Translations (app texts)
Every POS app text, editable here. English is the base; blank Sinhala/Tamil auto-fill on save, or click “Auto-translate all”. The app fetches these and overlays them over its bundled strings.
POS — Commissions (dealer rates)
The dealer commission per service — a fixed Rs amount or a % of the bill total. The core template is the fallback (shown under “Core”); set an override to change it. “Sync with core” copies every core rate so you can tweak from there. The POS report & app use the override when set, else core.
POS — Bill Catalogue
The POS app’s own catalogue, separate from the web. Toggle each service’s In POS, Maintenance (temporarily blocked — the app shows a “please try later” page), and Popular. Pick a dealer to add/remove services just for that dealer’s POS users.
POS — Settings
Small config for the POS app. Currently: where “deposit not updated” complaints (slip photo + correct reference) are emailed.
Banners — paygo.lk
Promo / ad banners shown on chosen pages (and, on Pay, for chosen billers). Text, logo/photo, link (own site / 3rd-party / app download), colours, gradient, desktop/mobile. Live within ~60s.
PayLink — money-in rail
Configure the shared rail (core vendor, fee, channels, settlement) and watch it: who's collecting, how much, the channel mix, and the raw action log. Overall or per-merchant.
Money overview — the whole picture
Real money across the platform: GMV and refunds over time, the rail mix, what we earned (convenience + MDR + taxes), what settled vs what's pending, active holds/blocks, and the top merchants. TEST-mode money is shown separately, never mixed in.
Payment methods — global registry
The single authority for every payment method across the platform — its display, core id, and which apps may offer it. Per method: Live (customers can see it), Maintenance (visible but blocked), and an independent on/off for each product (Web /pay, Mobile app, Storefront, PayLink, Invoicing, Vendor Links, API Platform, POS). Each product then offers only what it's granted here.
SMS gateway — Hutch
Every Pay&Go SMS and which gateway carried it. Hutch is the sending gateway; core stays armed as the fallback, so a Hutch refusal still reaches the customer. Broken down by category (what the message was for) and pusher (which system asked us to send it, including core itself). LankaLenders is not here — it sends over Mobitel and is routed before this gateway.
Settlement — payout schedule engine
When each merchant's collected money is batched and paid out (daily / chosen weekdays / T+N working days / manual), respecting SL bank working days and holidays. Ships dormant + dry-run; arm it here. CEFT transfers stay stubbed until the bank API lands.
Vendor Gateway — core pays us
WE are a vendor inside MegaPay core: every PayLink / invoice / order carries our 12-digit contract number, and core pays it from ANY channel (kiosk cash, card, JustPay, LankaQR) by calling our Check / Pay / Status APIs. Ships disarmed + dry-run; arm it here once core has created our vendor. Handover spec for the core team: docs/payments/VENDOR_GATEWAY_FOR_CORE.md.
API Platform — PayGo-as-SaaS
Public PayLink + bill-collection APIs for 3rd-party partners: sandbox by default, grant live access per partner, watch usage and webhook health. Ships disarmed — arm the master switch in Config once you're ready for real partner traffic.
Invoicing — due-date SMS reminders
Customer SMS for invoice due dates and payment-plan instalments (1 day before · due day · 1 day after by default) over the live MegaPay SMS rail. Ships OFF — arming here starts real sends to customers. Auto-mode plan reminders carry the instalment's payment link.
Moderation — storefront content agent
An LLM sweeps published products against the prohibited-goods policy (adult / narcotics / weapons / counterfeit / scam), auto-holds confident violations (reversible unpublish + merchant notice) and queues everything here for review. Ships dormant + dry-run; arm it below. Suspending a merchant stays a human decision.
Risk — transaction monitoring agent
Deterministic rules watch each merchant's money stream (txn-count spike, GMV spike, refund abuse, same-amount structuring). Flags queue here; when ARMED, a score at/above the hold threshold pauses that merchant's settlement until you clear it. The LLM only writes the one-line triage — it never decides. Ships dormant + dry-run.
Card Acquiring
Physical-POS card transactions (ISO 8583) across the estate.
| TID | MID | Merchant | Txns | Approved | Appr % | Last seen |
|---|---|---|---|---|---|---|
| Loading… | ||||||
| Time | TID | Scheme | Card | Amount | Status | RRN | |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
Admin — mapping registry & config
Transaction detail
Commerce — merchant activity
Everything merchants sell through their cabinet — POS, storefront orders, PayLink, invoices, bookings, tickets & more — across every merchant. GMV, the rail mix, top merchants, best-sellers, and a live feed. Overall or per-merchant.
Suppliers — curated B2B catalogue
Distributors PayGo onboards so merchants can restock from a shared catalogue (products, prices, delivery terms). Separate from a merchant's own private reorder contacts. Merchant ordering goes live after the founder confirms pricing & settlement — staff curation is safe to use now.
Onboarding — review queue
Merchants self-onboard (KYC + mobile OTP + e-signed agreement) and the floor (individual bill collector) goes live automatically. Here staff review the KYB documents heavier businesses upload — each carries an AI pre-extraction + advisory flags — then verify/reject, enable a product once its requirements are complete, and drive the POS card-acceptance bank gate.
Merchant feedback
What merchants ask for — LLM-triaged into clusters + priority. Mark items planned / shipped / declined with a note; the merchant sees it in their cabinet. Two tabs: recurring clusters (roadmap signal) and the raw list.
Marketing
Campaigns across every merchant — status, reach (impressions/clicks/orders/revenue) and channel mix. SMS/email blasts run in dry-run until live sends are armed.
Assistant knowledge
Edit what the in-cabinet AI assistant tells merchants — the exact fee/commission text per product, plus extra guidance it must follow. Saved instantly, no deploy. Leave a fee blank to keep the safe default ("your exact rate is shown when you set it up").
What customers ask
Questions typed into the public-site assistant. Start with “Didn’t answer” — a question asked often and answered well needs no work; one we fumbled is a gap you can close in the knowledge above. Kept 90 days.
Assistant flow
Build the questions & answers the in-cabinet assistant uses. Add sections, sub-questions and automatic actions (open a ticket, notify, request a call back). Choose a fixed answer or let the AI answer. Write English — it's auto-translated to spoken Sinhala & Tamil. Saved instantly, no deploy.
Assistant channels
Where the assistant talks to merchants, and its credentials. The dashboard is the source of truth (not server config). Start in shadow mode (computes replies but sends nothing) to prove it, then turn shadow off to go live.
Push credentials
Firebase (FCM) credentials that let the PayGo merchant app + PWA receive push notifications. The dashboard is the source of truth (not server config). Push stays dormant until you paste the Firebase service account, tick Enabled, and firebase-admin is installed on the backend — nothing sends before that.
Merchant contacts
Map each merchant's WhatsApp number to their business, product type, and exact POS/kiosk devices in core. This is the WhatsApp allowlist (the assistant only answers numbers listed here) and the personal-context source (so it already knows who it's talking to). Add the pilot merchants here first.
Merchant assistant analytics
How merchants use the assistant — what they ask most, whether answers help, and a live feed of what the assistant did. Use it to spot gaps and tune the tree.
Merchant call requests
Merchants who asked to be called back from the assistant. Claim one, call the number, then mark what happened. Newest first.
Platform settings
Operator knobs across the platform — kill switches, safety caps, thresholds and defaults. Changes are saved to the database and take effect within ~1 minute, no deploy. Leave a number blank to revert to its built-in default.