Glob Payment

Scope Proposal

Proposal — Scope Definition

Customer Portal &
Backoffice Scope

Glob Payment today is a marketing site with a Request Access button and no product behind it. This document defines the product that button should lead to: a corporate portal for moving money in and out across borders, and the operations console that makes it safe to run.

Ref: payment.weglob.net UI ref: Epay 易派 Status: For review

Scope

Transfers + Collections

Money moves both directions

Rails

Partner API

Pooled account, our own ledger

Controls

Maker–checker

Threshold-driven, from v1

Onboarding

KYB, invite-only

No public self-signup

Detection

Build rules, buy data

Any flag auto-holds the payment

§01 — Summary

What we're building

From marketing claim to product surface

The four pillars on payment.weglob.net each imply real screens. Notably, the fourth pillar — Operational Risk & Reconciliation — is sold to clients but is almost entirely a backoffice function. That asymmetry is the main reason the backoffice is not a smaller project than the portal.

Pillar 01

Business Payment Accounts

→ Multi-currency balances, team & roles, access controls, statements

Pillar 02

Domestic & Cross-Border Transfers

→ Payouts, beneficiaries, FX conversion, approvals, tracking

Pillar 03

Merchant & Platform Support

→ Virtual accounts, payment links, settlement, payer reconciliation

Pillar 04 — mostly backoffice

Operational Risk & Reconciliation

→ Risk scoring & detection rules, screening queues, case management, partner recon, break resolution

Customer portal

28

screens across 9 modules

Backoffice

33

screens across 7 modules

See both menu trees

Indicative timeline

3 phases

first client onboarded at end of P1

§02 — Architecture

One ledger, two portals

The load-bearing decision

The ledger is double-entry and append-only. Balances are never stored as a mutable number — they are derived from entries. Nothing writes a balance; everything writes entries.

Every event — a payin landing, a payout leaving, an FX conversion, a fee, a reversal — is a balanced set of entries. A correction is a new reversing entry, never an edit. This gives provable history, and it makes the reconciliation question "do our books match the partner's?" answerable at any timestamp rather than approximately. Because Glob holds client funds in a pooled account, our ledger — not the bank statement — is what the customer sees. If it can drift, it will.

Identity

Identity & Access

Clients, users, roles, KYB state, approval thresholds

Core

Ledger

Accounts, entries, balances, holds. Knows nothing about banks or customers.

Flow

Money Movement

Payment & collection state machines, beneficiaries, FX quotes

Rails

Rails Adapter

One interface per partner. All partner ugliness lives here and nowhere else.

Risk

Compliance

Risk scoring, detection rules, screening, cases. Subscribes to the ledger stream — no second data path

Why the rails boundary matters most. One or two partners today — but partners get replaced, and new corridors arrive by adding partners. If partner-specific handling leaks into money movement, every new corridor becomes surgery on the payment engine. This boundary is cheap to hold now and expensive to retrofit later.

Payout flow — two distinct review gates

01

Create

Maker drafts payment

02 — gate

Client approval

Checker, if over threshold

03 — gate

Glob screening

Sanctions + rules

04

Hold funds

Ledger reserves balance

05

Submit to rails

Idempotency-keyed

06

Settle

Webhook → entries, hold released

Payin flow

Partner webhook → match to virtual account → screen the sender → credit entries → notify. Incoming money becomes spendable on a timetable matched to how reversible that payment type is — instantly for irreversible rails, slower for recallable ones, faster as a client earns history.

Unmatched payins go to an ops queue rather than being guessed at. Guessing at attribution is how money ends up in the wrong client's balance.

Failure handling

Every rails call is idempotency-keyed, because the failure mode that matters isn't "payment failed" — it's "we don't know if it succeeded."

Timeouts reconcile rather than retry blindly. Webhooks are signature-verified and replay-safe. Anything unresolvable becomes an ops task — never a silent failure.

A note on status vocabulary. The Epay reference shows a single 审核中 (under review) counter. Our architecture has two distinct review stages — the client's own approver, and Glob's compliance screening. The portal should surface these as different states, because "waiting on my colleague" and "waiting on Glob" are entirely different problems for the customer, and collapsing them generates support tickets.

§03 — Customer Portal

app.weglob.net

Proposed navigation

Overview
Accounts
Send money
Receive money
Convert
Beneficiaries
Statements
Compliance
Settings

Acme Trading Ltd

GLB-2847-001

Send / Receive split as top-level items rather than Epay's product-name grouping — clients think in directions of money, not product SKUs.

01

Overview

P1

Dashboard

Total balance in reporting currency, per-currency tiles, recent activity, items awaiting your approval

Action centre

Payments needing approval, expiring documents, compliance requests for information

Banking calendar

Holiday impact on value dates per corridor — borrowed from Epay's 节假日 panel; it exists because cut-offs are real

02

Accounts

P1

Balances

Per-currency: available, pending, on hold — three numbers, never one

Account detail

Ledger view with running balance, filters, entry drill-down to source event

Transactions

Unified in/out list, saved views, CSV + PDF export

03

Send money

core
P1

New payment

Guided flow: beneficiary → amount & currency → purpose code → quote → review. Shows fees, FX rate, and expected arrival before commit

Bulk upload

CSV batch with per-row validation and a dry-run before submit

Approvals inbox

Checker queue: approve / reject with reason. Maker cannot approve own payment — enforced server-side, not hidden in UI

Payment tracking

Status timeline with the two review gates shown distinctly; proof of payment on settle

Scheduled & recurring

Deferred to P3

04

Receive money

core
P2

Virtual accounts

Named account details per currency the client can hand to their own payers

Payment links

Hosted one-off request-for-payment page

Incoming payments

Payer, reference, matched invoice, settlement status

Settlement

Batch view: gross → fees → net credited, with the ledger entries behind each

05

Convert (FX)

P1

Quote & convert

Time-boxed quote with visible countdown, locked rate, explicit margin disclosure

Conversion history

Rate achieved and margin applied, per conversion

06

Beneficiaries

P1

Directory

Per-corridor field requirements (IBAN / SWIFT / ACH / local) driven by config, not hardcoded forms

Add / edit + approval

New beneficiary is itself an approval event — the most common fraud vector is a quietly edited bank account

07

Statements & Compliance

P1

Statements

Period statements, PDF + CSV, per currency

Documents

KYB document vault with expiry tracking and re-upload prompts

Requests for information

Compliance asks a question about a payment; client answers in-portal with an audit trail. Replaces the email thread this would otherwise become.

08

Settings

P1

Team & roles

Invite users; roles: Admin / Maker / Checker / Viewer

Approval policy

Thresholds per currency; always-approve rules (e.g. new beneficiary). Default: unlimited threshold = effectively off

Security

MFA (mandatory), session policy, IP allowlist, audit log

API keys & webhooks

Deferred to P3 — see Risks

§04 — Backoffice

ops.weglob.net

The most commonly under-planned part of a payments build. With partner-API rails, ops staff aren't in the payment path for happy flows — but they own every unhappy one: the payin nobody can attribute, the payout the partner accepted and then bounced, the balance that doesn't tie out. Under-building here doesn't slow the launch; it shows up three months later as staff working from spreadsheets and a ledger nobody trusts.

B1

Client management

P1

Client directory

All corporate clients, status, risk rating, balances

KYB onboarding queue

Request Access → entity, UBOs, directors, docs → approve / decline / request more. This is what the marketing CTA feeds.

Client profile

Entity tree, documents, users, limits, corridor permissions, notes

Periodic review

Scheduled re-KYB by risk tier, document expiry chasing

Impersonate / view-as

Read-only, consent-gated, fully audited — for support without screen-sharing

B2

Compliance & risk detection

core
P1

Client risk scoring

Dynamic score seeded at KYB (industry, jurisdiction, ownership complexity, PEP presence, volume plausibility), updated by every detection stream. Sets re-KYB cadence, rule thresholds, EDD triggers — a band change is an event, not decoration

Screening queue

Sanctions / PEP / adverse-media hits with match scores; clear or escalate. List updates delta-screen the whole book — clients, UBOs, directors, and beneficiaries

Detection alerts

Rule-triggered: structuring, velocity, pass-through, baseline drift vs declaration, funnel accounts, dormancy→burst. Every alert explainable — rule + evidence + score impact. Any flag holds the payment

Watch feeds

Registry watch (strike-off, insolvency, director churn), PEP status changes, adverse media — vendor events in, score updates out. Lands in P2

Case management

Investigation notes, evidence, RFI to client, outcome with SAR filing clocks. Four-eyes on sign-off — and on dismissals above a risk band

Rules & backtesting

Thresholds per risk tier, versioned, editable by compliance, not by deploy. Every rule backtests against history before enabling — know the hold volume before the queue does

Regulatory reporting

SAR/STR drafting and export

B3

Payment operations

core
P1

Payment explorer

Every payment across all clients; search by any identifier a client might quote on the phone

Exception queue

Failed, returned, bounced, stuck-in-flight. Every item has an owner and an action

Unmatched payins

Money arrived, attribution unclear → manual match or return to sender

Repair & resubmit

Fix beneficiary details and retry without re-entering the whole payment

Manual adjustment

Reversing entries only. Reason mandatory, four-eyes mandatory, immutable. The single most dangerous screen in the system.

B4

Treasury & reconciliation

core
P1

Pooled account position

Per currency, per partner: what the bank says we hold

Safeguarding check

The client pot must provably hold exactly client money — the check accounts for money in motion, and Glob's own earnings are swept out to our operating account daily. Must tie, continuously. A break here is a regulatory event, not a bug

Partner reconciliation

Auto-match partner statement against our ledger; surface only the breaks

Break resolution

Ageing, assignment, root-cause tagging so the same break stops recurring

Liquidity monitor

Balance alerts per currency before payouts start failing for lack of funds

FX position

Net exposure by currency, margin earned, hedging hand-off

B5

Pricing & billing

P2

Fee schedules

Per client, per corridor, per method; effective-dated so history stays reproducible

FX margin config

Spread by client tier and currency pair

Revenue reporting

Fee + FX margin by client and corridor

B6

Platform administration

P1

Staff & roles

Ops / Compliance / Treasury / Support / Admin, least-privilege by default

Audit log

Every staff action, immutable, searchable, exportable for auditors

Corridor & partner config

Enable corridors, routing rules, cut-off times, banking calendars

Partner health

API status, webhook lag, failure rates — know before the client calls

The detection layer — decided

Build the rules, buy the data. Detection subscribes to the ledger stream — and any rule that fires holds the payment until compliance clears it.

Four streams, one score

Transaction rules (structuring, velocity, pass-through, baseline drift, funnel accounts) · screening deltas (list updates re-screen the whole book) · registry watch (strike-off, insolvency, director churn) · business-profile coherence. All feed one dynamic client risk score; the engine is ours, the data feeds are vendors'.

Self-declaration is the baseline, not the control

Declared corridors, volumes and counterparty types at KYB become the contract reality is measured against. Drift is a signal because they declared — lying on day one is what makes day ninety detectable.

Hold-on-any-flag — and its price

Every fired rule blocks live money until a human clears it. That makes rule precision and triage SLA customer-experience metrics: no rule ships without backtesting its hold volume, and hold→clear time is monitored like uptime. New clients are measured against what they declared at signup until real history exists — being new is never itself a flag.

Tipping-off, and what waits for P3

The client sees "under review by Glob" — never which rule fired, never that a case exists; disclosure is an offence in most AML regimes. ML scoring and cross-client network detection wait for P3, trained on the alert dispositions recorded from day one.

Detection logic — how a signal becomes an outcome

This expands gate 03 of the payout flow in §02 — and payins pass through the same engine.

Signals in

Ledger entry stream

Every payment, payin, conversion — same stream as the books, no second data path

KYB profile & declared baseline

Industry, ownership, expected corridors & volumes — the contract reality is measured against

Vendor feeds

Sanctions / PEP list updates, registry events, adverse media — bought, not built

Detection engine — built by us

Transaction rules Screening deltas Registry watch Profile coherence

Rules are versioned, per-risk-tier parameterized, and backtested against history before enabling

Client risk score

Streams update the score ↑
Score sets rule thresholds ↓
Band change = event → EDD / re-KYB

no flag

any rule fires

Payment proceeds

Score still updates silently

AUTO-HOLD + alert

Explainable: rule · evidence · score impact. Client sees only "under review"

Triage queue — compliance officer

Risk-weighted priority, not FIFO. SLA clocks running. Hold→clear time monitored like uptime

clear

escalate

Release payment

Reason mandatory. Four-eyes above risk band. Disposition recorded

Open case

RFI to client · evidence · four-eyes → release, SAR/STR filing, or exit relationship

Feedback loop 01

Every disposition → monthly false-positive rate per rule → thresholds retuned, rules re-backtested. Today's alerts are P3's ML training data

Feedback loop 02

Score band change → EDD trigger, re-KYB cadence tightens, rule thresholds scale down — high-risk clients alert at lower deviation

Every path lands somewhere auditable: proceed, release with reason, or case with outcome — nothing clears silently

§05 — Phasing

Build order

PHASE 1

Money out, safely

First client live

Ledger, KYB onboarding, multi-currency balances, payouts with maker–checker, FX conversion, beneficiaries, statements. Backoffice: client management, screening, risk scoring, detection rules with auto-hold, payment ops, treasury & recon, admin. Ends with a real client funding an account and sending a real payment.

Ships as two releases. P1a — one payment corridor, essential features only: first real client live around month 4–5 with a build team of 4–6 people. P1b — the rest of Phase 1 by month 7–9, shaped by what real usage teaches us. Honest estimates, not promises: they firm up when the partner and licence questions close.

Ledger KYB Payouts Maker–checker FX Screening Detection rules Risk score Recon
PHASE 2

Money in

All four pillars true

Virtual accounts, payment links, incoming payment attribution, settlement batches, payer screening. Backoffice: unmatched payin queue, settlement ops, pricing & billing, watch feeds (registry, PEP status, adverse media), disposition analytics for rule tuning. Reuses the entire P1 backbone — this is why collections is cheap after P1 and expensive alongside it. Roughly 3–4 additional months.

Virtual accounts Payment links Settlement Billing Watch feeds
PHASE 3

Scale & self-serve

Public API + webhooks + sandbox, scheduled and recurring payments, advanced reporting, additional partners and corridors, SSO. Detection matures: ML anomaly scoring and cross-client network detection (shared beneficiaries, devices, IPs), trained on the alert dispositions accumulated since P1. Sequenced by demand rather than a fixed clock.

Public API Webhooks Recurring SSO ML scoring Graph detection

Runs beside the build, and starts now: the banking partner's due diligence on Glob (they vet our security, finances and compliance setup before granting access — routinely the longest single item in projects like this), the named compliance officer hire, the licence work, and the data-vendor contracts. None of these are software, and none can be sped up by adding engineers.

§06 — Risks & open questions

What could bite

Blocking — licensing

What licence does Glob hold, and where?

Holding client funds in a pooled account is a regulated activity in every jurisdiction the site names (APAC, Europe, UK, Middle East, Americas). This determines safeguarding rules, reporting duties, and whether Glob is principal or agent of the partner. It changes the ledger's obligations, not just the paperwork. Answer needed before P1 build starts.

Blocking — partner

Which partner(s), and is the contract signed?

The rails adapter is designed against a real API, and partners differ wildly in what they expose — webhook reliability, virtual-account support, statement format, settlement timing. Building against a hypothetical partner produces an abstraction that fits none.

Scope risk

Corridors and currencies at launch

"Cross-border" is not a scope. Each corridor brings its own beneficiary fields, purpose codes, local-rail quirks, and cut-offs. Three named corridors is a project; "global" is a programme. I'd propose naming the launch corridors explicitly in the plan.

Scope risk

Screening vendor — buy, don't build

Sanctions/PEP list management is a subscription (ComplyAdvantage, Dow Jones, Refinitiv), not a feature. We build the queue and the case workflow; the vendor supplies lists and match scoring. Budget and contract lead-time belong in P1 planning.

Deferred deliberately

Public API pushed to P3

Epay exposes a 开发者 section; Glob's marketing does not mention an API. A public API is a product with its own versioning, sandbox, docs, key management, and support burden — and once external code depends on it, the schema stops being ours to change. Deferring until the internal model has settled is the cheaper order.

Deferred deliberately

No crypto / virtual assets

Epay's 虚拟资产 module is out of scope. It would add custody, on-chain monitoring, travel-rule compliance, and hot-wallet operations — roughly doubling the compliance surface for a capability Glob's marketing doesn't currently sell.

Blocking — staffing

A named MLRO / compliance officer

Building our own rules engine means Glob authors its rule book and defends it to the regulator — thresholds, dismissal sign-offs, SAR filings. In most regimes a named officer is a licensing requirement, not a nice-to-have. The hire gates P1 go-live, and they should co-design the rule parameters, not inherit them afterward.

Policy consequence

Hold-on-any-flag has a cost we accept knowingly

Decided: every fired rule holds the payment until compliance clears it. The cost is that false positives block legitimate client money — so triage SLA becomes a customer-experience metric, staffing the queue is a launch requirement, no rule ships without backtesting its hold volume, and hold→clear time is monitored like uptime.

Decisions needed to proceed

01

Licence position & jurisdictions at launch

02

Named banking / PSP partner(s)

03

Launch corridors and currencies (explicit list)

04

Screening vendor selection

05

Brand direction — inherit marketing site, or new system

06

Languages at launch (EN only, or EN + 中文)

07

Named MLRO / compliance officer (gates P1 go-live)

08

Registry-watch data coverage for launch corridors

§07 — In plain English

Five hard lessons, no jargon

Lesson 01

Money that arrives can be taken back

When your client's customer pays them, that incoming payment isn't always final. Depending on the payment type, the sending bank can reverse it — sometimes weeks later. If we've already let our client send that money onwards and the original payment is pulled back, the shortfall is ours.

What we do: incoming money becomes spendable on a timetable, not instantly — fast for payment types that can't be reversed, slower for ones that can, and quicker over time for clients with a good track record. Fraudsters rely on moving reversible money out fast; the timetable takes that trick away.

Lesson 02

Client money and our money must never blur

All client funds sit together in one big account at our banking partner. The regulator's first question is: can you prove, at any moment, that every dollar of client money is actually there? A naive check — add up the client balances, compare to the bank — never matches, because money is always mid-journey and our fees pile up inside the same pot.

What we do: our books track money-in-motion separately, and Glob's own earnings are swept out of the client pot into our own account every day. The client pot then provably contains client money and nothing else — and if the numbers ever disagree, it's treated as a serious incident, not a rounding error.

Lesson 03

New clients must not be punished for being new

Our fraud system works by spotting unusual behaviour. But a brand-new client has no "usual" yet — a naive system would freeze their very first payments. That's the worst possible first impression, for exactly the clients we just worked hard to win.

What we do: what a client tells us at signup — where they'll send money, roughly how much — becomes their starting yardstick. Behave as declared, and everything flows from day one. Stray far from it, and we look closer. Being new is never suspicious; breaking your word is.

Lesson 04

Launch smaller, sooner

Phase 1 as scoped is a big build. Doing all of it before the first client means many months of cost with nothing in the market and nothing learned.

What we do: Phase 1 ships as two releases. The first — one payment route, the essential features — puts a real paying client on the platform around month 4–5, with a build team of 4–6 people. The rest follows by month 7–9, shaped by what real usage teaches us. Honest estimates, not promises: they firm up when the partner and licence questions close.

Lesson 05

The slowest things aren't software

Two items on this plan take longer than any code, and hiring more engineers speeds up neither. First: before our banking partner switches us on, they investigate us — our security, our finances, our compliance setup. That review is routinely the single longest item in projects like this. Second: regulators require a named, qualified compliance officer; that hire gates the launch.

What we do: both start now, as a tracked workstream running beside the build — each with an owner and a date, visible on the same plan as the engineering, because a delay there delays everything.