← Back to Skills Marketplace
joy

FinOne Accounting (VN Merchants)

by JOY · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
58
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install finone
Description
Use this skill when the user asks about invoices (hóa đơn), e-invoices per Nghị định 70, revenue or expense statistics, VAT, or other accounting tasks for a...
README (SKILL.md)

\r \r

FinOne Accounting Skill for VN Merchants\r

\r This skill turns the agent into an accounting helper for Vietnamese shop owners and micro companies that use FinOne / Vbill. It covers invoice management, e-invoice publication per Nghị định 70, revenue and expense statistics, and Xbillstore sync.\r \r

Setup (one-time)\r

\r The skill calls the FinOne MCP server at https://api-uat.vbill.vn/mcp (server name finone-mcp-server v1.0.0, protocol 2024-11-05). FinOne AIO is pre-launch as of 2026-05-14; the UAT-named host is the only environment that exists and is what Nhan production already calls.\r \r If the agent's OpenClaw config does not already register this MCP server, add the following block to the agent's openclaw.json at the top level:\r \r

"mcp": {\r
  "servers": {\r
    "finone": {\r
      "url": "https://api-uat.vbill.vn/mcp",\r
      "transport": "streamable-http"\r
    }\r
  }\r
}\r
```\r
\r
Auth is header-less. Each tool call takes a `userId` argument. The merchant's FinOne `userId` lives in the agent's memory; if missing, ask the user (they can read it from FinOne / Vbill app > Profile).\r
\r
## When to invoke this skill\r
\r
Trigger phrases (Vietnamese, the common path) and English equivalents:\r
\r
- "tạo hoá đơn", "ghi hoá đơn", "in hoá đơn" / "create invoice"\r
- "xuất e-invoice", "phát hành hoá đơn điện tử" / "issue e-invoice"\r
- "doanh thu tháng này", "báo cáo doanh thu", "thống kê hoá đơn" / "revenue report", "invoice statistics"\r
- "cập nhật giá sản phẩm", "đổi VAT" / "update product price", "change VAT"\r
- "đồng bộ hoá đơn Xbill" / "sync invoices from Xbillstore"\r
\r
## Tool catalog\r
\r
14 tools exposed by the FinOne MCP server (Vietnamese descriptions on the server side, in-line summary here):\r
\r
### Invoice CRUD\r
- `verifyInvoiceBeforeCreate({userId, invoiceData})` - dry-run that OCR-reads and validates invoice data without creating. Always call this first when the user uploads an invoice image, then confirm extracted data with the user.\r
- `createInvoice({userId, invoiceData})` - create an internal invoice (hoá đơn gốc). Accepts a text payload or an image (OCR built-in).\r
- `viewInvoice({userId, invoiceId})` - return a PDF link for the internal invoice. Wrap with a hyperlink in the reply.\r
- `deleteInvoice({userId, invoiceId})` - delete an internal invoice. Only works on the internal copy, not on a published e-invoice.\r
\r
### E-Invoice flow (Nghị định 70)\r
- `previewEInvoice({userId, invoiceId})` - preview the e-invoice PDF before publishing. Always offer this to the user for review.\r
- `createEInvoice({userId, invoiceId})` - publish the e-invoice officially. **Not reversible.** Always confirm with the user before calling.\r
- `viewEInvoice({userId, invoiceId})` - view a published e-invoice.\r
\r
### Statistics\r
- `incomeInvoiceStatistic({userId, invoiceDateFrom?, invoiceDateTo?})` - revenue invoices (đầu ra). Returns total count, paid / unpaid breakdown, total amount in VND. Date format `YYYY-MM-DD`, both fields optional.\r
- `expenseInvoiceStatistic({userId, invoiceDateFrom?, invoiceDateTo?})` - expense invoices (đầu vào). Same shape.\r
\r
### Sync\r
- `syncIncomeInvoice({userId, dateFrom, dateTo})` - pull income invoices from Xbillstore. `checkXbillConnect` first.\r
- `syncExpenseInvoice({userId, dateFrom, dateTo})` - pull expense invoices from Xbillstore. `checkXbillConnect` first.\r
\r
### Setup helpers\r
- `getUserInfo({userId})` - verify the userId resolves to a real user. Use to validate pairing before running other tools.\r
- `updateProduct({userId, productName, updateData})` - update price / VAT of an existing product. Case-sensitive product name. Valid VAT values: `0, 5, 8, 10, -1` (không kê khai), `-2` (miễn thuế / KCT).\r
- `checkXbillConnect({userId})` - check Xbillstore connection is live. Required before sync.\r
\r
## Hard rules\r
\r
- When the user sends an invoice image, always run `verifyInvoiceBeforeCreate` first. Summarize the OCR result (date, customer, line items with name + quantity + price + VAT + unit) and wait for user confirmation before calling `createInvoice`.\r
- If the OCR result has missing or zero values for required fields (customer, line item price, total), list the missing fields and ask the user to fill them in manually before calling `createInvoice`. Do not silently default to zero or copy a price from a similar-looking line.\r
- After `createInvoice` succeeds, ask the user whether to publish the e-invoice. Never auto-call `createEInvoice` without explicit confirmation; the action is not reversible.\r
- VAT input must be one of `0, 5, 8, 10, -1, -2`. If the user gives a different number or leaves it blank, ask before defaulting.\r
- Currency is always VND. Format numbers with `.` as the thousand separator (Vietnamese convention: `1.250.000đ`, not `1,250,000 VND`).\r
- Never invent a `userId`. If memory has none and the user has not provided one, ask the user to grab it from FinOne / Vbill app > Profile.\r
- If the agent is shared across multiple users (group chat, shared web widget), confirm the active `userId` at session start. Treat `finone.userId` in memory as the user's last-confirmed binding, not a fixed identity for the agent.\r
- Never offer tax-law interpretation. Reference Nghị định 70 / relevant Circulars for compliance flow; redirect deeper questions to an accountant.\r
\r
## Memory schema\r
\r
The skill expects the following structured memory entries for the merchant:\r
\r
- `finone.userId` - integer, the FinOne user ID for this merchant. Required for every tool call.\r
- `finone.shopName` - string, the user-facing shop / business name. Used in invoice `customer` field defaults.\r
- `finone.defaultVAT` - one of `0, 5, 8, 10, -1, -2`. If set, use as the default VAT when the user does not specify; otherwise ask.\r
- `finone.lastInvoiceId` - integer, the most recently created invoice ID. Useful for `createEInvoice` follow-ups.\r
\r
If `finone.userId` is not set, do not call any FinOne tool. Ask the user for it first.\r
\r
## Examples\r
\r
### Example 1: image upload, invoice creation, e-invoice publish\r
\r
User: [uploads invoice image]\r
\r
Agent:\r
1. Call `verifyInvoiceBeforeCreate({userId: 12345, invoiceData: ...})` with the OCR result.\r
2. Reply with a markdown table summarising the extracted data and the line items.\r
3. Ask: "Anh / chị xác nhận tạo hoá đơn này không?"\r
4. If user confirms, call `createInvoice({userId: 12345, invoiceData: ...})`. Save returned `invoiceId` to `finone.lastInvoiceId`.\r
5. Reply: "Đã tạo hoá đơn #{invoiceId}. Anh / chị có muốn phát hành e-invoice luôn không?"\r
6. If user confirms again, call `previewEInvoice({userId, invoiceId})` first, send the preview PDF link. After user reviews and re-confirms, call `createEInvoice({userId, invoiceId})`.\r
\r
### Example 2: revenue report for the current month\r
\r
User: "Doanh thu tháng này được bao nhiêu rồi?"\r
\r
Agent:\r
1. Compute the first day of the current month in `YYYY-MM-DD` format.\r
2. Call `incomeInvoiceStatistic({userId: 12345, invoiceDateFrom: "2026-05-01", invoiceDateTo: "2026-05-14"})`.\r
3. Format the response as a bullet list: tổng hoá đơn, đã xuất e-invoice, chưa xuất, tổng giá trị (VND), đã thanh toán, chưa thanh toán.\r
\r
### Example 3: VAT update\r
\r
User: "Đổi VAT của sản phẩm Cà phê sữa thành 8%"\r
\r
Agent:\r
1. Confirm product name exactly as it appears in FinOne (case-sensitive): "Tên sản phẩm trong hệ thống là 'Cà phê sữa' phải không?"\r
2. After confirmation, call `updateProduct({userId: 12345, productName: "Cà phê sữa", updateData: {vat: 8}})`.\r
3. Reply with the actual return value of `updateProduct`. Do not invent the previous VAT - say "Đã cập nhật VAT của 'Cà phê sữa' thành 8%." If `updateProduct` returns the previous VAT, include it; if it does not, omit.\r
\r
## References\r
\r
- FinOne MCP server endpoint: configured via `mcp.servers.finone.url` in `openclaw.json` (see Setup section above).\r
- Nghị định 70/2025 (e-invoice mandate): Vietnamese government decree on electronic invoices.\r
- Companion DOSClaw `finance-assistant` template (separate from this skill) registers the FinOne MCP server in `openclaw.json` for users who provision an agent from that template, so they do not need to run the Setup step manually.\r
Usage Guidance
Treat this as a Review item, not as proven malware. The skill appears purpose-built for FinOne/Vbill accounting, but before installing you should confirm the MCP endpoint with FinOne/Vbill, verify that real server-side authorization exists beyond the userId, and require explicit confirmation for every financial mutation or e-invoice publication.
Capability Analysis
Type: OpenClaw Skill Name: finone Version: 1.0.0 The 'finone' skill is an accounting assistant designed for Vietnamese merchants to manage invoices and e-invoices via the FinOne/Vbill platform. It interacts with a dedicated MCP server (api-uat.vbill.vn) to perform CRUD operations, generate statistics, and sync data. The instructions in SKILL.md emphasize safety by requiring explicit user confirmation for irreversible actions (like e-invoice publication) and manual verification of OCR results, with no evidence of malicious intent or unauthorized data access.
Capability Assessment
Purpose & Capability
The capabilities are coherent with the stated accounting purpose, but they include high-impact actions such as invoice creation/deletion, official e-invoice publication, product price/VAT updates, statistics, and Xbill sync.
Instruction Scope
The skill includes useful safeguards for OCR-created invoices and irreversible e-invoice publishing, but users should still require explicit confirmation for all delete, update, and sync actions.
Install Mechanism
There is no local code or install script, but the skill requires configuring a remote MCP endpoint at a UAT-named host; users should verify that endpoint belongs to the intended provider.
Credentials
The artifacts describe header-less remote MCP calls using only a userId for financial/accounting operations, which is not clearly bounded by a documented authentication or authorization model.
Persistence & Privilege
The skill expects the merchant userId to live in agent memory and then uses it for account-level calls; the shared-agent warning helps, but stale or incorrect memory could still affect the wrong account.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install finone
  3. After installation, invoke the skill by name or use /finone
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial release: FinOne/Vbill accounting skill for VN merchants
Metadata
Slug finone
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is FinOne Accounting (VN Merchants)?

Use this skill when the user asks about invoices (hóa đơn), e-invoices per Nghị định 70, revenue or expense statistics, VAT, or other accounting tasks for a... It is an AI Agent Skill for Claude Code / OpenClaw, with 58 downloads so far.

How do I install FinOne Accounting (VN Merchants)?

Run "/install finone" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is FinOne Accounting (VN Merchants) free?

Yes, FinOne Accounting (VN Merchants) is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does FinOne Accounting (VN Merchants) support?

FinOne Accounting (VN Merchants) is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created FinOne Accounting (VN Merchants)?

It is built and maintained by JOY (@joy); the current version is v1.0.0.

💬 Comments