Quản lý dòng tiền cá nhân hay sổ sách kinh doanh hộ gia đình là yếu tố cần thiết, khi chính phủ ban hành bộ luật mới, nhưng công đoạn nhập liệu thủ công mỗi ngày lại là một khó khăn đối với nhiều người. Bạn thực hiện hàng chục giao dịch chuyển khoản trên ứng dụng ngân hàng, ví MoMo, sau đó chụp màn hình lại và cuối tháng phải ngồi dò từng con số để gõ vào các phần mềm kế toán như MISA, hay ứng dụng Thuế Etax. Quy trình này vừa tốn hàng giờ đồng hồ, vừa dễ xảy ra sai sót số liệu.
Nhiều kỹ sư tự động hóa, Business Analyst hay người làm công nghệ thường nghĩ ngay đến việc viết kịch bản gọi API. Tuy nhiên, rào cản xuất hiện: Hầu hết các ứng dụng quản lý tài chính cá nhân như MISA không cung cấp Open/Public API cho người dùng cá nhân, trong khi việc kết nối trực tiếp vào tài khoản ngân hàng lại tiềm ẩn rủi ro lộ lọt thông tin bảo mật nghiêm trọng.
Bài viết này là một case study thực chiến có trong Khóa học AI for Work tại Cole, hướng dẫn cách xây dựng một hệ thống tự động hóa hoàn chỉnh kết hợp giữa Claude Code, chuẩn giao thức Model Context Protocol (MCP) và thư viện điều khiển trình duyệt Playwright. Giải pháp giúp bóc tách dữ liệu từ ảnh chụp giao dịch, phân loại danh mục thông minh và tự động điền vào giao diện web của MISA mà không cần đụng đến API chính thức.
1. Vấn đề cốt lõi ở đây là?
Trong các bài toán tự động hóa văn phòng hoặc quản lý vận hành nhỏ, chúng ta thường gặp phải tình trạng dữ liệu nằm phân tán ở nhiều nơi khác nhau:
Dữ liệu nguồn: Nằm rải rác trên màn hình giao dịch của App Mobile Banking, ví điện tử MoMo, sao kê PDF hoặc email thông báo biến động số dư.
Dữ liệu đích: Phần mềm quản lý tài chính (ở đây là MISA Web/App). Hệ thống này đóng kín cổng kết nối với bên ngoài đối với tệp người dùng cá nhân/tiểu thương.
Nỗi đau vận hành: Người dùng phải đối chiếu thủ công bằng mắt (Eye-balling reconciliation). Một giao dịch nhập sót hoặc nhập trùng hai lần sẽ khiến số dư cuối kỳ bị lệch, kéo theo hàng giờ rà soát lại nhật ký giao dịch.
Giải pháp đặt ra là xây dựng một Trợ lý AI (AI Agent) có khả năng:
Đọc hiểu hình ảnh giao dịch nhờ tính năng trích xuất OCR (Vision OCR).
Tự động suy luận danh mục chi tiêu (tiền chợ, tiền nhà, xăng xe, hóa đơn điện nước).
Đưa dữ liệu qua một vùng đệm (Staging) để người dùng kiểm soát.
Tự động hóa trình duyệt web để điền biểu mẫu thay cho thao tác gõ phím của con người.

2. Kiến trúc giải pháp và Tech Stack tổng quan
Để giải quyết bài toán trên một cách an toàn và có khả năng mở rộng, hệ thống được thiết kế theo mô hình 4 tầng gồm các công cụ hiện đại:
Claude Code (CLI Agent Engine): Bộ não điều phối trung tâm. Thay vì chỉ là một chatbot thông thường, Claude Code hoạt động dưới dạng dòng lệnh trên terminal máy tính, có khả năng đọc tệp tin cục bộ, gọi các bộ kỹ năng tùy biến và xử lý logic ngôn ngữ tự nhiên.
Model Context Protocol (MCP) Server: Giao thức kết nối chuẩn mở do Anthropic phát triển. Trong dự án này, MCP Server đóng vai trò cầu nối bảo mật giữa Claude Code và Google Sheets API, cho phép Agent đọc/ghi dữ liệu bảng tính mà không cần cấu hình thủ công phức tạp qua từng đoạn code rời rạc.
Google Sheets (Data Staging Area): Vùng đệm dữ liệu trung gian. Đây là nơi triển khai cơ chế Human-in-the-loop (HITL), đảm bảo dữ liệu tài chính nhạy cảm luôn được con người kiểm tra, đối soát và cấp quyền trước khi ghi vào sổ cái chính thức.
Playwright Engine: Thư viện tự động hóa trình duyệt không đầu (Headless/Headed Browser Automation). Playwright sẽ mô phỏng hành vi đăng nhập, bấm chuột, nhập văn bản và chọn dropdown trên giao diện MISA Web tương tự như một người dùng thật.
Sơ đồ luồng dữ liệu (Data Pipeline Architecture)

3. Trích xuất hình ảnh, chuẩn hóa và đối soát lên Google Sheets
Skill 1 đóng vai trò như một bộ xử lý tiền kỳ (Pre-processing Engine). Kỹ sư sẽ đóng gói logic này thành một kỹ năng (Skill) có thể tái sử dụng trên Claude Code.
Bước 1: Quản lý thư mục cục bộ theo cấu trúc phân tầng
Để Agent xử lý chính xác theo từng chu kỳ kế toán, dữ liệu đầu vào cần được tổ chức ngăn nắp:
Cấu trúc mẫu: ./transactions/[Năm-Tháng]/[Tên_Ví_Hoặc_Ngân_Hàng]/
Ví dụ: ./transactions/2026-09/vietcombank/ hoặc ./transactions/2026-09/momo/.
Việc phân chia thư mục giúp Claude Code tự động gán nguồn ví (Wallet Source) cho giao dịch mà không cần người dùng nhập liệu thêm.
Bước 2: Bóc tách thông tin bằng Vision OCR
Claude Code quét toàn bộ file ảnh trong thư mục chỉ định và trích xuất các trường thông tin bắt buộc:
Ngày & Giờ giao dịch: Định dạng chuẩn YYYY-MM-DD HH:mm:ss.
Số tiền: Định dạng số nguyên (bỏ qua ký tự tiền tệ đ/VND).
Đối tác giao dịch: Tên người nhận hoặc số tài khoản đích.
Nội dung chuyển khoản (Memo): Đoạn text mô tả giao dịch.
Bước 3: Ánh xạ danh mục tự động (Pattern Matching Logic)
Điểm vượt trội của việc dùng LLM so với các công cụ bóc tách truyền thống nằm ở khả năng hiểu ngữ cảnh:
Hệ thống duy trì một danh mục ID chi phí từ MISA (ví dụ: ID_101: Tiền nhà, ID_102: Đi chợ/Thực phẩm, ID_103: Di chuyển/Xăng xe).
Dựa vào nội dung giao dịch (ví dụ: "Do xang Petrolimex", "Mua rau cho Ba Chieu", "Thanh toan tien nha thang 9"), Claude Code tự động phân tích và gán Danh_muc_ID tương ứng.
Xử lý ngoại lệ (Exception Handling): Nếu nội dung chuyển khoản mơ hồ (ví dụ: "Chuyen khoan", "Trả nợ"), Agent sẽ tự động đánh dấu cờ trạng thái là Need Review để yêu cầu người dùng chỉ định danh mục bằng tay trên bảng tính.
Bước 4: Kiểm tra trùng lặp và đẩy dữ liệu qua MCP Server
Trước khi ghi dòng mới vào Google Sheets, Skill 1 sẽ đọc các bản ghi đã có trong tháng để thực hiện bước đối soát (Deduplication Check):
Nếu giao dịch đó đã từng được người dùng tự tay nhập trước đó (khớp về Ngày + Số tiền + Nội dung tương đồng), Agent sẽ gắn nhãn cảnh báo: Da ghi chep - Can xac nhan ghi de?.
Các giao dịch hợp lệ còn lại sẽ được ghi vào Google Sheets thông qua các lệnh gọi hàm chuẩn hóa của MCP Google Sheets Server.

4. Cơ chế Human-in-the-loop - Vì sao không nên tự động hóa 100% ngay từ đầu?
Một sai lầm kinh điển của các kỹ sư khi mới triển khai AI vào tài chính là cố gắng loại bỏ con người hoàn toàn ngay trong phiên bản đầu tiên (Zero-touch Automation).
Thực tế kiểm chứng từ case study cho thấy:
Chi phí sửa sai trong kế toán rất cao: Nếu AI gán nhầm một khoản tiền kinh doanh 50 triệu đồng vào mục "Ăn uống cá nhân", báo cáo tài chính tháng đó sẽ hoàn toàn vô nghĩa và mất rất nhiều thời gian bóc tách lại.
Quy luật học tập qua các vòng chạy (Rounds): Ở 1 đến 2 tháng đầu tiên, người dùng sẽ phải dành thời gian xem xét bảng tính và "dạy" lại cho Agent các trường hợp ngoại lệ. Sau vài vòng chạy, khi tệp quy tắc khớp mẫu đã bao quát được hơn 95% thói quen chi tiêu, thời gian phê duyệt của con người trên Google Sheets sẽ giảm xuống chỉ còn vài chục giây cho toàn bộ dữ liệu của cả tháng.
Quy trình phê duyệt rất đơn giản:
Người dùng mở Google Sheets, lọc các dòng có trạng thái Need Review.
Chọn danh mục đúng từ menu thả xuống (Dropdown).
Đổi cột Status của toàn bộ các dòng cần nhập sang Approved.
5. Tự động hóa ghi nhận vào MISA bằng Playwright
Khi dữ liệu đã được làm sạch và phê duyệt trên vùng đệm, Skill 2 được kích hoạt để đảm nhận nhiệm vụ tương tác với hệ thống đóng.
Vì sao lựa chọn Playwright thay vì các công cụ RPA truyền thống?
Tốc độ và độ tin cậy: Playwright sở hữu cơ chế Auto-waiting thông minh, tự động đợi các thành phần DOM, Dropdown và Pop-up của MISA tải xong mới thao tác, loại bỏ lỗi gián đoạn do mạng chập chờn.
Quản lý Session/Cookie tối ưu: Cho phép lưu trữ trạng thái đăng nhập (Authentication State/Storage State), giúp kịch bản không phải giải mã lại mật khẩu hay mã OTP mỗi lần chạy.
Dễ tích hợp với AI Agent: Claude Code có thể trực tiếp sinh mã kiểm thử, điều khiển hoặc gọi các file script Playwright bằng Node.js/Python thông qua dòng lệnh.
Kịch bản thực thi tuần tự của Playwright Engine
JavaScript
// Minh họa cấu trúc kịch bản Playwright xử lý từng dòng dữ liệu từ Staging
const { chromium } = require('playwright');
async function syncTransactionToMISA(record) {
// 1. Khởi động trình duyệt và nạp phiên đăng nhập đã lưu
const context = await chromium.launchPersistentContext('./user-data-dir', { headless: false });
const page = await context.newPage();
await page.goto('https://sothuchi.misa.vn/app/');
// 2. Mở modal 'Thêm mới thu/chi'
await page.click('#btn-add-transaction');
await page.waitForSelector('.modal-transaction-content');
// 3. Điền các trường thông tin bóc tách từ Google Sheets
await page.fill('#input-amount', record.amount.toString());
await page.fill('#input-date', record.date);
// 4. Chọn danh mục tương ứng theo ID
await page.click('#select-category');
await page.click(\`\[data-category-id="${record.categoryId}"\]\`);
// 5. Điền ghi chú nội dung chuyển khoản
await page.fill('#input-note', record.note);
// 6. Lưu giao dịch và xác nhận thành công
await page.click('#btn-save');
await page.waitForSelector('.toast-success-message');
await context.close();
}
Xử lý lỗi và cập nhật Audit Trail
Sau khi Playwright hoàn tất việc điền biểu mẫu cho từng bản ghi:
Hệ thống tự động ghi nhận mã giao dịch hoặc đánh dấu trạng thái Sync_Completed ngược lại bảng Google Sheets.
Nếu xảy ra lỗi mạng hoặc phần tử giao diện thay đổi, dòng đó sẽ được gắn cờ Sync_Failed kèm ảnh chụp màn hình lúc gặp sự cố (Error Screenshot) để người dùng kiểm tra lại.

6. Đánh giá hiệu năng giữa Nhập liệu thủ công và Tự động hóa bằng AI
Dưới đây là bảng so sánh thực tế giữa quy trình truyền thống và khi áp dụng hệ sinh thái Claude Code + MCP + Playwright sau 3 tháng triển khai ổn định:
| Tiêu chí đánh giá | Quy trình truyền thống (Thủ công) | Giải pháp AI Agent + Playwright |
|---|---|---|
| Thời gian nhập 100 giao dịch | ~90 - 120 phút (gõ tay + đối soát) | ~5 - 10 phút (chạy kịch bản + quét duyệt) |
| Tỷ lệ sai sót số tiền / nhầm lẫn | ~3% - 5% (do gõ nhầm chữ số 0, sót số lẻ) | Dưới 0.5% (trích xuất chuẩn xác từ ảnh gốc) |
| Độ trễ cập nhật sổ sách | Thường dồn vào cuối tuần hoặc cuối tháng | Thực hiện linh hoạt hàng ngày hoặc hàng tuần |
| Chi phí thời gian thiết lập ban đầu | 0 giờ (bắt tay vào làm ngay) | ~4 - 6 giờ (cài đặt MCP, viết Skill, nạp quy tắc) |
| Mức độ an toàn bảo mật tài khoản | An toàn (nhập tay trực tiếp) | Tuyệt đối an toàn (không dùng mật khẩu bank) |
7. Những câu hỏi thường gặp
Câu hỏi 1: Phương pháp này có vi phạm chính sách bảo mật của ngân hàng không?
Không. Giải pháp này hoàn toàn không can thiệp vào tầng mã nguồn, không tự động đăng nhập vào tài khoản Internet Banking của bạn và không yêu cầu lưu trữ mật khẩu hay mã OTP. Nguồn dữ liệu đầu vào đơn thuần là các ảnh chụp màn hình giao dịch do chính bạn chủ động lưu lại trên máy tính cá nhân.
Câu hỏi 2: Nếu giao diện web của MISA thay đổi cấu trúc giao diện, kịch bản Playwright có bị hỏng không?
Có. Đây là đặc tính cố hữu của kỹ thuật Browser Automation khi ứng dụng không cung cấp API chính thức. Tuy nhiên, nếu bạn sử dụng các bộ định vị phần tử (Selectors) bền vững như id, data-testid, role hoặc văn bản hiển thị thay vì dùng đường dẫn XPath tuyệt đối, kịch bản sẽ ít bị ảnh hưởng bởi các thay đổi nhỏ về CSS/giao diện. Khi MISA cập nhật giao diện lớn, bạn chỉ cần cập nhật lại bộ selector trong file script của Playwright.
Câu hỏi 3: Tôi có thể thay thế MISA bằng các phần mềm khác như Money Lover, Notion hay Excel không?
Hoàn toàn được. Điểm cốt lõi của bài viết là kiến trúc 2 tầng (Skill 1 xử lý dữ liệu lên Staging, Skill 2 ghi vào ứng dụng đích). Với Notion hoặc Excel, việc tích hợp thậm chí còn dễ dàng hơn vì các nền tảng này đã có sẵn MCP Server hoặc API chính thức, bạn có thể không cần dùng đến Playwright mà ghi trực tiếp thông qua MCP.
8. Lộ trình nâng cấp mở rộng cho hệ thống (Future Roadmap)
Để đưa hệ thống tự động hóa này lên mức tối ưu cao nhất, dự án có thể mở rộng thêm các tính năng:
Tích hợp Bot Telegram làm kênh thu thập ảnh: Thay vì phải cắm cáp chép ảnh từ điện thoại vào máy tính, bạn chỉ cần tạo một Bot Telegram riêng. Mỗi khi chuyển khoản xong, gửi ảnh chụp màn hình vào nhóm chat; bot sẽ tự động tải về máy tính và đưa vào đúng thư mục YYYY-MM/wallet.
Lập lịch tự động (Cronjob/Task Scheduler): Cài đặt lịch cố định vào 23:00 mỗi Chủ Nhật để Claude Code tự động quét thư mục và thông báo cho bạn danh sách giao dịch cần duyệt trên Google Sheets.
Cải tiến thuật toán Fuzzy Matching: Huấn luyện bộ quy tắc thông minh hơn để xử lý tốt các tên người nhận viết tắt, số tài khoản không ghi rõ nội dung nhằm giảm thiểu tỷ lệ gắn nhãn Need Review xuống mức thấp nhất.
Sự kết hợp giữa Claude Code, MCP Server và Playwright mở ra một hướng đi mới cho các bài toán tự động hóa: Biến mọi phần mềm đóng kín thành một hệ thống có thể kết nối và tương tác thông minh, giúp người làm công nghệ giải phóng hoàn toàn thời gian khỏi các tác vụ lặp đi lặp lại.
Để học thêm về tự động hóa bằng AI, bạn hãy tham khảo: Khóa học AI Ứng dụng Automation tăng X10 hiệu suất tại Cole