Bappebti(印尼商品期货交易监管局)对 Phillip 线上开户系统提出核查意见,本方案是 Lintas 的落地实施说明。KYC 开户流程是嵌入 App 的 H5 页面。
| 角色 | 负责人 | 本次职责 |
|---|---|---|
| H5 前端 | bingo | KYC 流程页面:视频声明步骤、披露声明步骤、简易账户卡片;表单同意时提交表单编码和版本号;上报纯前端事件 |
| 后端 | Super | 视频存储与接口、审计日志表和写入、事件上报接口、表单版本管理、CRM 审计查询接口 |
| App 原生 | Huong | WebView 开启摄像头/麦克风权限;Open Account 入口点击事件上报;请求头补充设备信息 |
| CRM 前端 | Bingo | KYC 详情页视频播放和审批;审计轨迹查询页面和客户时间线页签 |
| 需求 | H5(bingo) | 后端(Super) | App(Huong) | CRM 前端(Bingo) | 相对工作量 |
|---|---|---|---|---|---|
| 1 视频声明 | ● | ● | ● | ● | 中–大 |
| 2 审计轨迹 | ○ 配合 | ● 主导 | ○ 配合 | ● | 大 |
| 3 披露声明 | ● | ○ 配合 | — | — | 小 |
| 4 最高权益 | ● 写死文案 | — | — | — | 小 |
● 主要开发 ○ 配合改动 — 不涉及
新增两个步骤后,其余步骤的进度百分比由 bingo 统一重新计算。
| 项目 | 规则 |
|---|---|
| 适用账户 | 标准账户(Standar)和简易账户(Sederhana / CDDS)都需要 |
| 流程位置 | 资金声明(98%)之后、资料完整性核验(100%)之前 |
| 顶部提示 | Silahkan membaca pernyataan dibawah dengan jelas dan rekam(请清楚朗读下方声明并录制) |
| 朗读声明 | Saya telah memahami risiko dan mekanisme perdagangan berjangka(我已理解期货交易的风险和机制) |
| 语言 | 只显示印尼语 |
| 时长 | 最长 20 秒,没有最短时长要求。到 20 秒自动停止;客户可提前手动停止 |
| 放行条件 | 视频上传成功后才能进入下一步 |
| CRM | 可在线播放、审批、拒绝;拒绝后客户可重新录制 |
getUserMedia + MediaRecorder 在页面内录制。不要用 <input type="file" capture>,因为它会跳到系统相机,无法显示声明,也控制不了 20 秒上限。H5 在 WebView 里调摄像头,需要 App 放开权限,否则 bingo 这边做完也跑不起来:
NSCameraUsageDescription、NSMicrophoneUsageDescription;WKWebView 设置 allowsInlineMediaPlayback = true,iOS 15+ 实现媒体捕获权限回调,对 KYC 域名自动允许。CAMERA、RECORD_AUDIO;WebChromeClient.onPermissionRequest 中先申请系统运行时权限,再对 KYC 域名 grant。VIDEO_STATEMENT,状态沿用"待审批 / 已审批 / 已拒绝"。VIDEO_SUBMIT,以及 CRM 审批/拒绝事件(见第 2 节)。| 字段 | 说明 | 来源 |
|---|---|---|
user_id / actor_type | 操作人 ID;类型为客户、CRM 员工或系统(自动任务) | 后端从 token 解析 |
event_code / action_type | 事件编码(见下表);操作类型 CREATE / READ / UPDATE / DELETE / LOGIN / LOGOUT / APPROVE / REJECT 等 | 后端 |
created_at | 服务器时间,精确到毫秒,GMT+7 | 后端,不采用客户端时间 |
ip_address | 客户端真实 IP,网关后面需读取 X-Forwarded-For | 后端 |
client_id / proposal_no | 关联的客户和开户提案 | 后端 |
result / fail_reason | 成功或失败,以及失败原因 | 后端 |
detail | 事件明细,JSON 格式(表单编码与版本、金额、订单号、修改前后值等) | 后端 |
device_id / platform / app_version | 设备信息 | App 和 H5 在请求头中带上:X-Device-Id、X-Platform、X-App-Version |
| # | 事件 | 事件编码 | 写入方 | 触发时机与记录要点 |
|---|---|---|---|---|
| 1 | 注册成功 | REGISTER_SUCCESS | 后端 | 注册接口创建账号成功时写入;记录手机号或邮箱(脱敏)、注册渠道 |
| 2 | 登录成功 | LOGIN_SUCCESS | 后端 | 登录接口签发 token 成功时写入;登录方式(密码、验证码等) |
| 登出成功 | LOGOUT_SUCCESS | 后端 App 配合 | 登出接口注销 token 时写入。App 必须调用登出接口,不能只在本地清 token,否则后端记不到 | |
| 3 | 模拟交易开仓 | DEMO_OPEN | 后端 | 模拟下单接口或交易网关返回成交时写入;品种、方向、手数、价格、订单号 |
| 模拟交易平仓 | DEMO_CLOSE | 后端 | 平仓成交时写入;订单号、平仓价、盈亏 | |
| 4 | 点击 Open Account 入口 | OPEN_ACCOUNT_CLICK | App 上报 | Open Account 入口在 App 原生页面,点击时还没有后端请求,所以由 App 调用上报接口 POST /audit/event |
| KYC 流程启动 | KYC_START | H5 上报 | H5 首页加载完成并识别用户后,bingo 调用上报接口;带上账户类型(标准或简易)。如果启动时本来就有"创建或恢复开户提案"的接口,改为由后端在该接口写入,H5 不需要上报 | |
| 5 | 资料提交成功 | KYC_STEP_SUBMIT | 后端 | 每个 KYC 步骤的保存接口成功时写入;步骤名称、进度百分比 |
| 6 | 同意每份表单 | FORM_AGREE | 后端 H5 配合 | 覆盖风险告知书、委托授权协议、交易规则、披露声明、开户声明、客户受理要件核验清单等。bingo 在客户勾选同意并提交时,请求里必须带 form_code 和 doc_version;Super 校验版本是否为当前有效版本后写入。每份表单一条记录 |
| 7 | 提交视频 | VIDEO_SUBMIT | 后端 | 视频上传并校验成功时写入;文件 ID、时长、声明文案版本 |
| 8 | KYC 流程完成 | KYC_COMPLETE | 后端 | 资料完整性核验(100%)最终提交成功、提案进入待审批状态时写入 |
| 9 | KYC 审批通过(人工 / 自动) | KYC_APPROVE | 后端 | 人工:CRM 审批接口写入,记录员工账户;自动:自动审批任务写入。detail 中注明 manual 或 auto。建议同时记录审批拒绝 KYC_REJECT |
| 10 | 修改个人资料 / 银行卡 | PROFILE_UPDATEBANK_UPDATE | 后端 | 修改接口成功时写入;记录修改前 → 修改后(敏感字段脱敏)。客户在 App 修改和员工在 CRM 编辑都要记录 |
| 11 | 入金提交成功 | DEPOSIT_SUBMIT | 后端 | 入金申请创建成功时写入;金额、币种、银行 |
| 入金审核通过 | DEPOSIT_APPROVE | 后端 | CRM 审核通过或自动入账时写入;审核人 | |
| 出金成功 | WITHDRAW_SUCCESS | 后端 | 出金审核通过并完成出账时写入;金额、收款账户(脱敏) | |
| 出金驳回成功 | WITHDRAW_REJECT | 后端 | CRM 驳回出金时写入;驳回人、原因 | |
| 12 | 开仓成功 | ORDER_OPEN_SUCCESS | 后端 | 真实账户下单,交易网关返回成交时写入;品种、方向、手数、成交价、订单号 |
| 开仓失败 | ORDER_OPEN_FAIL | 后端 | 交易网关返回拒单或错误时写入;失败原因(保证金不足、休市等)。前端本地校验拦下的请求不在范围内 | |
| 13 | 平仓成功 | ORDER_CLOSE_SUCCESS | 后端 | 平仓成交时写入;订单号、平仓价、盈亏 |
| 平仓失败 | ORDER_CLOSE_FAIL | 后端 | 平仓被拒或出错时写入;失败原因 |
POST /audit/event:需要登录态,event_code 走白名单(目前只放开 OPEN_ACCOUNT_CLICK、KYC_START),并做限流防刷。form_code 和当前 doc_version,供 H5 拉取和提交校验。KYC_START(如果后端已在启动接口里记录,则不用上报)。form_code 和 doc_version。X-Device-Id、X-Platform、X-App-Version(可以从 App 注入的参数中读取)。OPEN_ACCOUNT_CLICK。| 项目 | 规则 |
|---|---|
| 位置 | 放在「Pernyataan Pembukaan Akun」(开户声明)之前 |
| 适用账户 | 标准账户和简易账户 |
| 文档 | 使用与 20%、87%、91% 阶段相同版本的《风险披露声明》,不新增文档 |
| 交互 | 阅读文档 → 勾选同意 → 下一步,和现有表单步骤一致 |
form_code(例如 DISCLOSURE_BEFORE_APRT)和 doc_version,以便审计时区分这是哪个位置的同意。FORM_AGREE。在账户类型选择页的「Akun Sederhana」卡片中,新增一行 Ekuitas Maksimal Rp 25.000.000,位置在「Maksimal Deposit」下方、「Komisi」上方。标准账户卡片不变。
| Akun Sederhana(修改后) | |
|---|---|
| Minimal Deposit Awal | Rp 6.000.000 |
| Maksimal Deposit | Rp 10.000.000 |
| Ekuitas Maksimal(新增) | Rp 25.000.000 |
| Komisi | $7.5 / Lot |
| Spread | Mulai dari 0.02 |
| Ukuran Transaksi | Mulai 0.1 Lot |
| Leverage | 1:100 |
| 顺序 | 工作 | 负责 | 说明 |
|---|---|---|---|
| 1 | 审计表设计 + 上报接口 + 表单版本管理 | Super | 先把底座搭好,后面的新功能开发时直接写日志,不用返工 |
| 1 | WebView 摄像头和麦克风权限 | Huong | 需要 App 发版 |
| 2 | 最高权益展示、披露声明步骤 | bingo + Super | 改动小,可先上线;最高权益为前端写死文案 |
| 3 | 视频声明(H5 + 后端 + CRM) | bingo、Super、Huong | 依赖 App 新版本 |
| 4 | 13 类审计事件接入 + CRM 审计页面 | Super 主导 | — |
| 5 | 全流程回归 + 录制演示视频 | 全员 | 用于提交 Bappebti |
具体人天由各负责人根据现有代码评估后补充。
Bappebti (Indonesia's Commodity Futures Trading Regulatory Agency) issued verification notes on Phillip's online account-opening system. This document is Lintas's implementation plan. The KYC account-opening flow is an H5 page embedded in the App.
| Role | Owner | Responsibilities in this release |
|---|---|---|
| H5 front-end | bingo | KYC flow pages: video statement step, disclosure statement step, Sederhana account card; send form code and version when a form is agreed; report front-end-only events |
| Back-end | Super | Video storage and APIs, audit log table and writes, event reporting API, form version management, CRM audit query API |
| Native App | Huong | Enable camera/microphone permissions in the WebView; report Open Account entry clicks; add device info to request headers |
| CRM front-end | Bingo | Video playback and approval on the KYC detail page; audit trail search page and customer timeline tab |
| Requirement | H5 (bingo) | Back-end (Super) | App (Huong) | CRM front-end (Bingo) | Relative effort |
|---|---|---|---|---|---|
| 1 Video statement | ● | ● | ● | ● | Medium–Large |
| 2 Audit trail | ○ Support | ● Lead | ○ Support | ● | Large |
| 3 Disclosure statement | ● | ○ Support | — | — | Small |
| 4 Maximum equity | ● Hard-coded text | — | — | — | Small |
● Main development ○ Supporting changes — Not involved
After adding the two steps, bingo recalculates the progress percentage of all other steps.
| Item | Rule |
|---|---|
| Account types | Both Standard (Standar) and Simple (Sederhana / CDDS) accounts |
| Position in flow | After Funds declaration (98%), before Document completeness verification (100%) |
| Top instruction | Silahkan membaca pernyataan dibawah dengan jelas dan rekam (Please read the statement below clearly and record) |
| Statement to read | Saya telah memahami risiko dan mekanisme perdagangan berjangka (I have understood the risks and mechanisms of futures trading) |
| Language | Indonesian only |
| Duration | Maximum 20 seconds, no minimum duration. Recording stops automatically at 20 seconds; the customer may stop earlier manually |
| Gate | The customer can proceed only after the video uploads successfully |
| CRM | Play online, approve, reject; after rejection the customer can record again |
getUserMedia + MediaRecorder. Do not use <input type="file" capture> — it jumps to the system camera, cannot display the statement, and cannot enforce the 20-second limit.The H5 page calls the camera inside the WebView, so the App must grant permissions; otherwise bingo's work cannot run:
NSCameraUsageDescription and NSMicrophoneUsageDescription to Info.plist; set allowsInlineMediaPlayback = true on WKWebView; on iOS 15+ implement the media-capture permission callback and auto-allow the KYC domain.CAMERA and RECORD_AUDIO in the Manifest; in WebChromeClient.onPermissionRequest, request the runtime permissions first, then grant for the KYC domain.VIDEO_STATEMENT, reusing the statuses "Pending / Approved / Rejected".VIDEO_SUBMIT, plus the CRM approve/reject events (see Section 2).| Field | Description | Source |
|---|---|---|
user_id / actor_type | Operator ID; type is customer, CRM staff or system (automated job) | Back-end, parsed from token |
event_code / action_type | Event code (see table below); action type CREATE / READ / UPDATE / DELETE / LOGIN / LOGOUT / APPROVE / REJECT, etc. | Back-end |
created_at | Server time, millisecond precision, GMT+7 | Back-end, client time is not used |
ip_address | Real client IP; behind a gateway read X-Forwarded-For | Back-end |
client_id / proposal_no | Related customer and account-opening proposal | Back-end |
result / fail_reason | Success or failure, and the failure reason | Back-end |
detail | Event details in JSON (form code and version, amount, order number, before/after values, etc.) | Back-end |
device_id / platform / app_version | Device information | App and H5 send in request headers: X-Device-Id, X-Platform, X-App-Version |
| # | Event | Event code | Written by | Trigger and what to record |
|---|---|---|---|---|
| 1 | Registration successful | REGISTER_SUCCESS | Back-end | Written when the registration API creates the account; record phone or email (masked) and registration channel |
| 2 | Login successful | LOGIN_SUCCESS | Back-end | Written when the login API issues a token; login method (password, OTP, etc.) |
| Logout successful | LOGOUT_SUCCESS | Back-end App support | Written when the logout API revokes the token. The App must call the logout API, not just clear the token locally, otherwise the back-end cannot record it | |
| 3 | Demo trade opened | DEMO_OPEN | Back-end | Written when the demo order API or trading gateway returns a fill; symbol, direction, lots, price, order number |
| Demo trade closed | DEMO_CLOSE | Back-end | Written when the close is filled; order number, close price, P/L | |
| 4 | Open Account entry clicked | OPEN_ACCOUNT_CLICK | App reports | The Open Account entry is on a native App page and no back-end request exists at click time, so the App calls the reporting API POST /audit/event |
| KYC flow started | KYC_START | H5 reports | After the H5 first page loads and the user is identified, bingo calls the reporting API with the account type (Standard or Simple). If an API that "creates or resumes the account-opening proposal" already runs at start, the back-end writes it there instead and H5 does not report | |
| 5 | Data submitted successfully | KYC_STEP_SUBMIT | Back-end | Written when each KYC step's save API succeeds; step name, progress percentage |
| 6 | Each form agreed | FORM_AGREE | Back-end H5 support | Covers the risk notice, power-of-attorney agreement, trading rules, disclosure statement, account opening statement, customer acceptance checklist, etc. When the customer ticks agree and submits, bingo must include form_code and doc_version; Super checks the version is currently valid, then writes. One record per form |
| 7 | Video submitted | VIDEO_SUBMIT | Back-end | Written when the video uploads and passes validation; file ID, duration, statement text version |
| 8 | KYC flow completed | KYC_COMPLETE | Back-end | Written when Document completeness verification (100%) is finally submitted and the proposal becomes pending approval |
| 9 | KYC approved (manual / automatic) | KYC_APPROVE | Back-end | Manual: written by the CRM approval API, recording the staff account; automatic: written by the auto-approval job. Mark manual or auto in detail. Recommended: also record rejections as KYC_REJECT |
| 10 | Profile / bank card changed | PROFILE_UPDATEBANK_UPDATE | Back-end | Written when the update API succeeds; record before → after (sensitive fields masked). Record both customer edits in the App and staff edits in CRM |
| 11 | Deposit submitted | DEPOSIT_SUBMIT | Back-end | Written when the deposit request is created; amount, currency, bank |
| Deposit approved | DEPOSIT_APPROVE | Back-end | Written on CRM approval or automatic crediting; approver | |
| Withdrawal successful | WITHDRAW_SUCCESS | Back-end | Written when the withdrawal is approved and paid out; amount, receiving account (masked) | |
| Withdrawal rejected | WITHDRAW_REJECT | Back-end | Written when CRM rejects the withdrawal; rejected by, reason | |
| 12 | Position opened | ORDER_OPEN_SUCCESS | Back-end | Live-account order filled by the trading gateway; symbol, direction, lots, fill price, order number |
| Open failed | ORDER_OPEN_FAIL | Back-end | Written when the trading gateway rejects or errors; failure reason (insufficient margin, market closed, etc.). Requests blocked by local front-end validation are out of scope | |
| 13 | Position closed | ORDER_CLOSE_SUCCESS | Back-end | Written when the close is filled; order number, close price, P/L |
| Close failed | ORDER_CLOSE_FAIL | Back-end | Written when the close is rejected or errors; failure reason |
POST /audit/event: requires login, event_code is whitelisted (currently only OPEN_ACCOUNT_CLICK and KYC_START), with rate limiting.form_code and current doc_version for H5 to fetch and for submit-time validation.KYC_START when the KYC flow starts (not needed if the back-end already records it in the start API).form_code and doc_version in every form-agreement submit request.X-Device-Id, X-Platform, X-App-Version on all requests (can be read from parameters injected by the App).OPEN_ACCOUNT_CLICK when the Open Account entry is clicked.| Item | Rule |
|---|---|
| Position | Before "Pernyataan Pembukaan Akun" (account opening statement) |
| Account types | Standard and Simple accounts |
| Document | Use the same version of the "Risk Disclosure Statement" used at the 20%, 87% and 91% steps; no new document |
| Interaction | Read document → tick agree → next, same as existing form steps |
form_code (e.g. DISCLOSURE_BEFORE_APRT) and doc_version, so the audit can tell which position the agreement came from.FORM_AGREE.On the "Akun Sederhana" card of the account-type selection page, add the line Ekuitas Maksimal Rp 25.000.000, placed below "Maksimal Deposit" and above "Komisi". The Standard account card is unchanged.
| Akun Sederhana (after change) | |
|---|---|
| Minimal Deposit Awal | Rp 6.000.000 |
| Maksimal Deposit | Rp 10.000.000 |
| Ekuitas Maksimal (new) | Rp 25.000.000 |
| Komisi | $7.5 / Lot |
| Spread | Mulai dari 0.02 |
| Ukuran Transaksi | Mulai 0.1 Lot |
| Leverage | 1:100 |
| Order | Work | Owner | Notes |
|---|---|---|---|
| 1 | Audit table design + reporting API + form version management | Super | Build the foundation first so new features write logs from day one, without rework |
| 1 | WebView camera and microphone permissions | Huong | Requires an App release |
| 2 | Maximum equity display, disclosure statement step | bingo + Super | Small changes, can go live first; maximum equity is hard-coded front-end text |
| 3 | Video statement (H5 + back-end + CRM) | bingo, Super, Huong | Depends on the new App version |
| 4 | 13 audit event types + CRM audit pages | Super leads | — |
| 5 | End-to-end regression + record demo video | Everyone | For submission to Bappebti |
Man-days to be added by each owner after assessing the existing code.
Bappebti (Cơ quan Quản lý Giao dịch Hàng hóa Kỳ hạn Indonesia) đã đưa ra ý kiến thẩm tra đối với hệ thống mở tài khoản trực tuyến của Phillip. Tài liệu này là phương án triển khai của Lintas. Luồng mở tài khoản KYC là trang H5 được nhúng trong App.
| Vai trò | Phụ trách | Nhiệm vụ trong đợt này |
|---|---|---|
| Front-end H5 | bingo | Các trang luồng KYC: bước video cam kết, bước tuyên bố công bố thông tin, thẻ tài khoản Sederhana; gửi mã biểu mẫu và phiên bản khi đồng ý biểu mẫu; báo cáo các sự kiện chỉ xảy ra ở front-end |
| Back-end | Super | Lưu trữ video và API, bảng nhật ký kiểm toán và ghi log, API báo cáo sự kiện, quản lý phiên bản biểu mẫu, API truy vấn kiểm toán cho CRM |
| App native | Huong | Bật quyền camera/micro trong WebView; báo cáo sự kiện nhấn lối vào Open Account; bổ sung thông tin thiết bị vào header của request |
| Front-end CRM | Bingo | Phát và duyệt video trên trang chi tiết KYC; trang tra cứu nhật ký kiểm toán và tab dòng thời gian của khách hàng |
| Yêu cầu | H5 (bingo) | Back-end (Super) | App (Huong) | Front-end CRM (Bingo) | Khối lượng tương đối |
|---|---|---|---|---|---|
| 1 Video cam kết | ● | ● | ● | ● | Trung bình–Lớn |
| 2 Nhật ký kiểm toán | ○ Phối hợp | ● Chủ trì | ○ Phối hợp | ● | Lớn |
| 3 Tuyên bố công bố thông tin | ● | ○ Phối hợp | — | — | Nhỏ |
| 4 Vốn chủ sở hữu tối đa | ● Ghi cứng nội dung | — | — | — | Nhỏ |
● Phát triển chính ○ Thay đổi phối hợp — Không liên quan
Sau khi thêm hai bước mới, bingo tính lại phần trăm tiến độ của các bước còn lại.
| Hạng mục | Quy tắc |
|---|---|
| Loại tài khoản áp dụng | Cả tài khoản Tiêu chuẩn (Standar) và tài khoản Đơn giản (Sederhana / CDDS) |
| Vị trí trong luồng | Sau bước Khai báo nguồn tiền (98%), trước bước Xác minh đầy đủ hồ sơ (100%) |
| Hướng dẫn phía trên | Silahkan membaca pernyataan dibawah dengan jelas dan rekam (Vui lòng đọc rõ ràng lời cam kết bên dưới và ghi hình) |
| Lời cam kết cần đọc | Saya telah memahami risiko dan mekanisme perdagangan berjangka (Tôi đã hiểu rủi ro và cơ chế của giao dịch kỳ hạn) |
| Ngôn ngữ | Chỉ hiển thị tiếng Indonesia |
| Thời lượng | Tối đa 20 giây, không có thời lượng tối thiểu. Tự động dừng khi đủ 20 giây; khách hàng có thể dừng thủ công sớm hơn |
| Điều kiện tiếp tục | Chỉ được sang bước tiếp theo sau khi video tải lên thành công |
| CRM | Có thể phát trực tuyến, duyệt, từ chối; sau khi bị từ chối khách hàng có thể quay lại |
getUserMedia + MediaRecorder. Không dùng <input type="file" capture> vì nó chuyển sang camera hệ thống, không hiển thị được lời cam kết và không kiểm soát được giới hạn 20 giây.Trang H5 gọi camera bên trong WebView nên App phải cấp quyền, nếu không phần việc của bingo sẽ không chạy được:
NSCameraUsageDescription, NSMicrophoneUsageDescription vào Info.plist; đặt allowsInlineMediaPlayback = true cho WKWebView; trên iOS 15+ triển khai callback cấp quyền thu phương tiện và tự động cho phép tên miền KYC.CAMERA, RECORD_AUDIO trong Manifest; trong WebChromeClient.onPermissionRequest, xin quyền runtime của hệ thống trước, sau đó grant cho tên miền KYC.VIDEO_STATEMENT, dùng lại các trạng thái "Chờ duyệt / Đã duyệt / Đã từ chối".VIDEO_SUBMIT, cùng các sự kiện duyệt/từ chối trên CRM (xem Mục 2).| Trường | Mô tả | Nguồn |
|---|---|---|
user_id / actor_type | ID người thao tác; loại là khách hàng, nhân viên CRM hoặc hệ thống (tác vụ tự động) | Back-end, lấy từ token |
event_code / action_type | Mã sự kiện (xem bảng dưới); loại thao tác CREATE / READ / UPDATE / DELETE / LOGIN / LOGOUT / APPROVE / REJECT, v.v. | Back-end |
created_at | Thời gian máy chủ, chính xác đến mili giây, GMT+7 | Back-end, không dùng thời gian phía client |
ip_address | IP thực của client; khi đứng sau gateway cần đọc X-Forwarded-For | Back-end |
client_id / proposal_no | Khách hàng và hồ sơ mở tài khoản liên quan | Back-end |
result / fail_reason | Thành công hay thất bại, và lý do thất bại | Back-end |
detail | Chi tiết sự kiện dạng JSON (mã và phiên bản biểu mẫu, số tiền, mã lệnh, giá trị trước/sau khi sửa, v.v.) | Back-end |
device_id / platform / app_version | Thông tin thiết bị | App và H5 gửi trong header: X-Device-Id, X-Platform, X-App-Version |
| # | Sự kiện | Mã sự kiện | Bên ghi | Thời điểm kích hoạt và nội dung cần ghi |
|---|---|---|---|---|
| 1 | Đăng ký thành công | REGISTER_SUCCESS | Back-end | Ghi khi API đăng ký tạo tài khoản thành công; ghi số điện thoại hoặc email (đã che) và kênh đăng ký |
| 2 | Đăng nhập thành công | LOGIN_SUCCESS | Back-end | Ghi khi API đăng nhập cấp token thành công; phương thức đăng nhập (mật khẩu, OTP, v.v.) |
| Đăng xuất thành công | LOGOUT_SUCCESS | Back-end App phối hợp | Ghi khi API đăng xuất hủy token. App bắt buộc phải gọi API đăng xuất, không chỉ xóa token cục bộ, nếu không back-end sẽ không ghi được | |
| 3 | Mở lệnh giao dịch demo | DEMO_OPEN | Back-end | Ghi khi API đặt lệnh demo hoặc cổng giao dịch trả về khớp lệnh; mã sản phẩm, chiều, số lot, giá, mã lệnh |
| Đóng lệnh giao dịch demo | DEMO_CLOSE | Back-end | Ghi khi lệnh đóng được khớp; mã lệnh, giá đóng, lãi/lỗ | |
| 4 | Nhấn lối vào Open Account | OPEN_ACCOUNT_CLICK | App báo cáo | Lối vào Open Account nằm trên trang native của App, lúc nhấn chưa có request tới back-end, nên App gọi API báo cáo POST /audit/event |
| Bắt đầu luồng KYC | KYC_START | H5 báo cáo | Sau khi trang đầu H5 tải xong và nhận diện người dùng, bingo gọi API báo cáo kèm loại tài khoản (Tiêu chuẩn hoặc Đơn giản). Nếu khi bắt đầu đã có API "tạo hoặc khôi phục hồ sơ mở tài khoản", back-end ghi tại API đó và H5 không cần báo cáo | |
| 5 | Gửi hồ sơ thành công | KYC_STEP_SUBMIT | Back-end | Ghi khi API lưu của từng bước KYC thành công; tên bước, phần trăm tiến độ |
| 6 | Đồng ý từng biểu mẫu | FORM_AGREE | Back-end H5 phối hợp | Bao gồm thông báo rủi ro, thỏa thuận ủy thác, quy tắc giao dịch, tuyên bố công bố thông tin, tuyên bố mở tài khoản, danh sách kiểm tra điều kiện tiếp nhận khách hàng, v.v. Khi khách hàng tích đồng ý và gửi, bingo phải gửi kèm form_code và doc_version; Super kiểm tra phiên bản còn hiệu lực rồi mới ghi. Mỗi biểu mẫu một bản ghi |
| 7 | Gửi video | VIDEO_SUBMIT | Back-end | Ghi khi video tải lên và kiểm tra thành công; ID tệp, thời lượng, phiên bản nội dung cam kết |
| 8 | Hoàn tất luồng KYC | KYC_COMPLETE | Back-end | Ghi khi bước Xác minh đầy đủ hồ sơ (100%) được gửi thành công và hồ sơ chuyển sang trạng thái chờ duyệt |
| 9 | KYC được duyệt (thủ công / tự động) | KYC_APPROVE | Back-end | Thủ công: API duyệt trên CRM ghi, lưu tài khoản nhân viên; tự động: tác vụ duyệt tự động ghi. Ghi rõ manual hoặc auto trong detail. Khuyến nghị ghi thêm sự kiện từ chối KYC_REJECT |
| 10 | Sửa thông tin cá nhân / thẻ ngân hàng | PROFILE_UPDATEBANK_UPDATE | Back-end | Ghi khi API sửa thành công; ghi giá trị trước → sau (trường nhạy cảm được che). Ghi cả khi khách hàng sửa trong App và nhân viên sửa trên CRM |
| 11 | Gửi yêu cầu nạp tiền thành công | DEPOSIT_SUBMIT | Back-end | Ghi khi yêu cầu nạp tiền được tạo; số tiền, loại tiền, ngân hàng |
| Nạp tiền được duyệt | DEPOSIT_APPROVE | Back-end | Ghi khi CRM duyệt hoặc tự động ghi có; người duyệt | |
| Rút tiền thành công | WITHDRAW_SUCCESS | Back-end | Ghi khi lệnh rút được duyệt và chi trả xong; số tiền, tài khoản nhận (đã che) | |
| Từ chối rút tiền thành công | WITHDRAW_REJECT | Back-end | Ghi khi CRM từ chối lệnh rút; người từ chối, lý do | |
| 12 | Mở lệnh thành công | ORDER_OPEN_SUCCESS | Back-end | Lệnh của tài khoản thật được cổng giao dịch khớp; mã sản phẩm, chiều, số lot, giá khớp, mã lệnh |
| Mở lệnh thất bại | ORDER_OPEN_FAIL | Back-end | Ghi khi cổng giao dịch từ chối hoặc báo lỗi; lý do thất bại (không đủ ký quỹ, thị trường đóng cửa, v.v.). Các request bị chặn bởi kiểm tra cục bộ ở front-end không thuộc phạm vi | |
| 13 | Đóng lệnh thành công | ORDER_CLOSE_SUCCESS | Back-end | Ghi khi lệnh đóng được khớp; mã lệnh, giá đóng, lãi/lỗ |
| Đóng lệnh thất bại | ORDER_CLOSE_FAIL | Back-end | Ghi khi lệnh đóng bị từ chối hoặc lỗi; lý do thất bại |
POST /audit/event: yêu cầu đăng nhập, event_code theo danh sách trắng (hiện chỉ mở OPEN_ACCOUNT_CLICK, KYC_START), có giới hạn tần suất chống spam.form_code và doc_version hiện hành để H5 lấy về và kiểm tra khi gửi.KYC_START khi luồng KYC bắt đầu (không cần nếu back-end đã ghi trong API khởi động).form_code và doc_version.X-Device-Id, X-Platform, X-App-Version (có thể đọc từ tham số do App truyền vào).OPEN_ACCOUNT_CLICK khi nhấn lối vào Open Account.| Hạng mục | Quy tắc |
|---|---|
| Vị trí | Đặt trước "Pernyataan Pembukaan Akun" (tuyên bố mở tài khoản) |
| Loại tài khoản áp dụng | Tài khoản Tiêu chuẩn và tài khoản Đơn giản |
| Tài liệu | Dùng cùng phiên bản "Tuyên bố công bố rủi ro" đang dùng ở các bước 20%, 87%, 91%, không tạo tài liệu mới |
| Tương tác | Đọc tài liệu → tích đồng ý → bước tiếp theo, giống các bước biểu mẫu hiện có |
form_code (ví dụ DISCLOSURE_BEFORE_APRT) và doc_version, để khi kiểm toán phân biệt được sự đồng ý ở vị trí nào.FORM_AGREE.Trên thẻ "Akun Sederhana" của trang chọn loại tài khoản, thêm dòng Ekuitas Maksimal Rp 25.000.000, đặt dưới "Maksimal Deposit" và trên "Komisi". Thẻ tài khoản Tiêu chuẩn giữ nguyên.
| Akun Sederhana (sau khi sửa) | |
|---|---|
| Minimal Deposit Awal | Rp 6.000.000 |
| Maksimal Deposit | Rp 10.000.000 |
| Ekuitas Maksimal (mới) | Rp 25.000.000 |
| Komisi | $7.5 / Lot |
| Spread | Mulai dari 0.02 |
| Ukuran Transaksi | Mulai 0.1 Lot |
| Leverage | 1:100 |
| Thứ tự | Công việc | Phụ trách | Ghi chú |
|---|---|---|---|
| 1 | Thiết kế bảng kiểm toán + API báo cáo + quản lý phiên bản biểu mẫu | Super | Xây nền tảng trước để các tính năng mới ghi log ngay từ đầu, không phải làm lại |
| 1 | Quyền camera và micro trong WebView | Huong | Cần phát hành phiên bản App mới |
| 2 | Hiển thị vốn chủ sở hữu tối đa, bước tuyên bố công bố thông tin | bingo + Super | Thay đổi nhỏ, có thể đưa lên trước; vốn chủ sở hữu tối đa là nội dung ghi cứng ở front-end |
| 3 | Video cam kết (H5 + back-end + CRM) | bingo, Super, Huong | Phụ thuộc phiên bản App mới |
| 4 | Tích hợp 13 loại sự kiện kiểm toán + trang kiểm toán CRM | Super chủ trì | — |
| 5 | Kiểm thử hồi quy toàn luồng + quay video demo | Tất cả | Dùng để nộp cho Bappebti |
Số ngày công cụ thể do từng người phụ trách bổ sung sau khi đánh giá mã nguồn hiện có.