Merchant Registration Current Flow
This document summarizes the merchant registration flow currently active in apps/mobile_user and merchant_core_api.
Flow Overview
The current merchant registration flow is split into:
Data UsahaVerifikasi IdentitasFoto Tempat UsahaDetail IdentitasAlamat & LokasiRekening BankPemilihan PerangkatRingkasan(non-step, final review before submit)Aktivasi Selesai(info page, not an input step)
UI notes:
- the progress indicator only covers the 7 input steps
- the
Ringkasanpage is no longer counted as a step - the
Aktivasi Selesaipage only informs the user that data has been submitted
Draft and Persistence in the App
The merchant registration draft is stored in the application's secure storage via:
merchant_registration_draft_service.dart
Principles currently in effect:
- the user can navigate between steps without losing their input
- summary data can be edited back into the related step
- the draft is cleared after the registration submit completes
- exiting to the home screen before submit can reset the flow to default in line with the UX rule applied in the app
Step 1 Data Usaha Detail
The Data Usaha step currently contains:
Nama UsahaBentuk UsahaJenis UsahaOmzet Rata-rata / BulanJumlah Karyawan- the
Skoring Usaharesult used to read theSkala Usaha
Applicable rules:
Bentuk Usahamust be selected:PerseoranganorBadan UsahaJenis Usahais sourced from the masterdb_reference.public.ref_business_typeOmzet Rata-rata / Bulanis stored as a numeric valueJumlah Karyawanis stored as a numeric valueSkala Usahais derived from the combination ofrevenue + employee count- the final scale follows the higher indicator between the revenue band and the employee-count band
Reference masters used:
GET /references/business-typesGET /references/business-scales
Recorded Business Master Data
This list is the reference of business terms currently used in the merchant registration flow and the business profile.
Business Form
PeroranganPerseoranganBadan Usaha
Business Scale
MikroKecilMenengah
Business Category
PerdaganganIndustri PengolahanJasadan lainnya
Sample Business Types
Toko Pakaian & AksesorisApotek / Toko ObatToko Kelontong / SembakoMinuman Kekinian / Juice / TeaStudio Foto / PrintingCuci Motor / Mobil
Steps That Touch the User Database
Some data is not only stored in the registration draft but is also persisted to the user profile:
Detail Identitasfull_namenikgender
Edit Profile/Verifikasi Gmailemailemail_verified
These fields are stored in:
identity.usersidentity.user_emails
NIK is currently persisted to the database and is no longer kept locally only.
Submitting the Merchant Registration
When the user taps Aktifkan Toko on the Ringkasan page:
- the app calls
POST /merchant/registration - the backend creates a new row in
merchant.merchant_registration_requests - the initial request status is
pending - the active merchant is not created immediately
Tables involved:
merchant.merchant_registration_requests
Important fields currently sent:
- core merchant data
business_entity_typebusiness_type_idbusiness_type_nameaverage_monthly_revenueemployee_countbusiness_scale_codebusiness_scale_namereferral_code- referral partner snapshot:
referral_partner_idreferral_partner_codereferral_partner_name
- structured address
- merchant contact
- device & service fee consent
- terms-of-service consent
- privacy-policy consent
Currently Stored Legal Consent
Merchant registration consent is currently stored in both the registration request and the active merchant:
device_fee_service_acceptedterms_of_service_acceptedprivacy_policy_accepted
Legal document source:
legal.documents
Currently available documents:
terms_of_serviceprivacy_policy
In mobile, the Ketentuan Layanan and Kebijakan Privasi links on the Ringkasan page can be opened without leaving the registration flow.
Step 7 Pemilihan Perangkat Detail
The Pemilihan Perangkat step currently contains:
QRIS Plusdevice option- shipping address summary
- partner
Referral Code(optional)
Applicable rules:
Referral Codeis stored in the merchant registration draft- if filled, the backend validates the code against the
partner.partnersmaster - only an active partner referral code is linked to the partner
- if the code is empty, the registration is still processed as a Kesles Merchant direct merchant
- if the code does not match, the registration is still processed as a Kesles Merchant direct merchant
- the referral partner snapshot is only stored when an active partner is found
Request and Merchant Status
Statuses currently used in the registration flow:
Registration request
pendingpending_review
Active merchant
draftinactiveactivesuspendeddeleted
Operational meaning:
pending: the application has been submittedpending_review: the application is under internal reviewactive: the merchant is active and can use active-merchant features
Status Criteria Reference
This section summarizes the business and operational statuses currently used or used as the implementation reference in the merchant application.
User Status
User status is stored in identity.users.
active- the user is active and can use the app normally
inactive- the user exists in the system but is not yet actively used
suspended- the user is temporarily suspended
locked- the user is locked and requires further action to be usable again
deleted- the user is treated as no longer active in the system
Merchant Status
Active merchant status is stored in merchant.merchants.
draft- the merchant is incomplete or has not entered the operational active stage
active- the merchant is active and can accept payments and use merchant features
inactive- the merchant is recorded but not yet operationally active
suspended- the merchant is temporarily suspended
deleted- the merchant is no longer active in the system
Merchant Registration Request Status
Registration request status is stored in merchant.merchant_registration_requests.
pending- the application has been submitted by the user
pending_review- the application is under internal review
approved- the application is approved as the result of review
rejected- the application is rejected
cancelled- the application is cancelled
Notes:
- in the operational mobile flow, the most-used statuses are
pendingandpending_review - after approval, the active merchant data is moved into
merchant.merchants
Terminal Device Status
Terminal device status is split into two layers: an operational status for UI and a technical status for the device lifecycle.
Operational terminal device status
inactive- the merchant has not ordered a terminal device from Kesles Merchant, or the device is not yet ready to use
active- the merchant is active and the device has been activated for use
online- the device is currently connected and actively monitoring transactions
offline- the device is not currently connected
Technical terminal device status
assigned- the device is allocated to the merchant but not yet operationally active
maintenance- the device is in repair or inspection
returned- the device has been returned
Rules derived from merchant status:
- if the merchant account is
suspendedordeleted, the device status in the UI is treated asinactive
Terminal Device Order Status
This is the overall order status for the terminal device.
draft- the order has just been created and is not yet processed
menunggu_pembayaran- the order has been created and is awaiting payment
menunggu_verifikasi- the payment proof has been uploaded and is awaiting verification
diproses- the order is being processed internally
selesai- the order is complete
dibatalkan- the order is cancelled
Notes:
- this
pemesananstatus is the order-level status pembayaranandpengirimanare derived statuses attached to the same order
Payment Status
This describes the payment condition of the terminal device order.
belum_bayar- no payment has been received yet
menunggu_verifikasi- the payment has been sent by the user but is not yet internally verified
berhasil- the payment has been verified
gagal- the payment failed or is invalid
dibatalkan- the payment is cancelled
Shipping Status
This describes the fulfillment and shipping condition of the terminal device.
belum_diproses- the order has not entered the fulfillment stage
diproses- the order is being prepared internally
siap_dikirim- the device is ready to be handed over to logistics
dikirim- the device is in transit
diterima- the device has been received by the merchant
retur- the device is in the return process
Internal Review Process
For internal testing, the following endpoints are currently available:
POST /internal/merchant/registration/reviewPOST /internal/merchant/registration/approvePOST /internal/merchant/status
Applicable transitions:
pending -> pending_reviewpending_review -> activeactive -> suspendedactive -> deletedsuspended -> activesuspended -> deleted
On approve:
- data is moved from
merchant_registration_requeststomerchant.merchants - a new row is created in
merchant.merchant_users - the processed registration request is deleted
- the merchant
reviewed_atis set - the business profile (
business form,business type,revenue,employee count,business scale) is also moved into the active merchant - all consents are also moved into the active merchant
Merchant Fields Exposed in Profile
The GET /auth/profile endpoint currently returns a merchant snapshot used by the mobile UI:
merchant_idmerchant_namemerchant_statusmerchant_contact_phonemerchant_contact_emailmerchant_address_linemerchant_province_namemerchant_city_namemerchant_district_namemerchant_subdistrict_namemerchant_postal_codemerchant_reviewed_atmerchant_device_fee_service_acceptedmerchant_terms_of_service_acceptedmerchant_privacy_policy_accepted
These fields are used by:
- page header
Profil MerchantKontrak & Kewajiban- merchant state on
Home,Laporan,Transaksi, andPerangkat
Documents and Contract on Profile
The Kontrak & Kewajiban menu currently reads merchant status from the profile snapshot and shows:
- merchant contract status
- device & service fee consent status
- terms-of-service consent status
- privacy-policy consent status
Tanggal Reviewbased onmerchant_reviewed_at
Behavior when merchant is inactive:
- contract and device fields show
- Persetujuanshows-Tanggal Reviewshows-
Behavior when the merchant has registered:
Persetujuanmay showSudah Dicentang
Behavior when the merchant has been reviewed/active:
Tanggal Reviewis taken from the merchant's review date field
Important Files
merchant_activation_summary_page.dartmerchant_device_selection_page.dartmerchant_registration_draft_service.dartmerchant_api_service.dartmerchant_handlers.gointernal_merchant_handlers.gomerchant/merchant.goprofile/store.go
Related Migrations
011_add_structured_address_to_merchants.sql012_create_merchant_registration_requests.sql013_extend_merchant_registration_request_statuses.sql018_add_registration_consents.sql019_add_reviewed_at_to_merchants.sql020_add_business_profile_to_merchants.sql022_add_partner_referral_to_merchants.sql