Lập báo cáo tài chính TT 99 API
Lập Báo cáo tình hình tài chính B01-DN và Báo cáo kết quả kinh doanh B02-DN (TT 99/2025/TT-BTC) từ bảng cân đối số phát sinh, có kiểm tra và xuất XLSX.
Gửi bảng cân đối số phát sinh dạng JSON rows, CSV hoặc file XLSX file: số hiệu tài khoản, số dư đầu kỳ Nợ / Có, số phát sinh Nợ / Có và số dư cuối kỳ Nợ / Có (nhận tên cột tiếng Anh hoặc tiếng Việt như "Nợ cuối kỳ"). API ánh xạ từng số dư vào mã số chỉ tiêu Mẫu B01-DN theo Thông tư 99/2025/TT-BTC (áp dụng cho năm tài chính bắt đầu từ 01/01/2026, thay Thông tư 200/2014): số dư Nợ vào tài sản, số dư Có vào nợ phải trả, các tài khoản điều chỉnh giảm (dự phòng, hao mòn, cổ phiếu quỹ) ghi số âm trong ngoặc, các tài khoản vốn ghi theo dấu, công nợ có số dư hai bên được trình bày riêng (131 dư Có → người mua trả tiền trước 312, 331 dư Nợ → trả trước cho người bán 132). Dòng gắn term=long được đưa vào chỉ tiêu dài hạn; tài khoản chi tiết nhất được ưu tiên và tài khoản cha bị bỏ qua khi đã có tài khoản con.
B02-DN lấy số phát sinh kết chuyển sang TK 911 (doanh thu 511, giảm trừ 521, giá vốn 632, doanh thu và chi phí tài chính, chi phí bán hàng, quản lý, thu nhập và chi phí khác, chi phí thuế TNDN hiện hành và hoãn lại); các chỉ tiêu cần sổ chi tiết (21, 24, 70, 71) gửi qua overrides. Kiểm tra: bảng cân đối cân, tổng tài sản 280 = tổng nguồn vốn 440 (đầu kỳ và cuối kỳ), lợi nhuận sau thuế = biến động TK 4212. Số dư tài khoản doanh thu, chi phí chưa kết chuyển được cộng vào chỉ tiêu 420b kèm cảnh báo, tài khoản không ánh xạ được liệt kê riêng. format=xlsx trả file Excel gồm các sheet B01, B02, ánh xạ và kiểm tra.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
rows | body | array | không | Bảng cân đối số phát sinh: [{"account":"111","opening_debit":0,"debit":0,"credit":0,"closing_debit":200000000,"closing_credit":0,"term":"short"}]. Hoặc file (XLSX/CSV) / văn bản csv. | |
file | body | file | không | File XLSX hoặc CSV (sheet đầu, có dòng tiêu đề). | |
overrides | body | object | không | Chỉ tiêu B02 lấy từ sổ chi tiết, ví dụ {"24": 12000000, "21": 0}. | |
format | body|query | string | không | json | json hoặc xlsx. |
company | body | string | không | Tên doanh nghiệp. | |
period_end | body | string | không | Ngày kết thúc kỳ. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/vn-financial-report" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"company":"Công ty TNHH Demo","period_end":"2026-12-31","rows":[{"account":"111","debit":200000000,"closing_debit":200000000},{"account":"131","debit":150000000,"credit":20000000,"closing_debit":150000000,"closing_credit":20000000},{"account":"156","debit":250000000,"closing_debit":250000000},{"account":"331","credit":180000000,"closing_credit":180000000},{"account":"4111","credit":325000000,"closing_credit":325000000},{"account":"4212","credit":75000000,"closing_credit":75000000},{"account":"511","debit":700000000,"credit":700000000},{"account":"632","debit":500000000,"credit":500000000},{"account":"642","debit":101000000,"credit":101000000},{"account":"8211","debit":24000000,"credit":24000000},{"account":"911","debit":700000000,"credit":700000000}]}'const res = await fetch('https://apibox.io.vn/v1/vn-financial-report', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"company": "Công ty TNHH Demo",
"period_end": "2026-12-31",
"rows": [
{
"account": "111",
"debit": 200000000,
"closing_debit": 200000000
},
{
"account": "131",
"debit": 150000000,
"credit": 20000000,
"closing_debit": 150000000,
"closing_credit": 20000000
},
{
"account": "156",
"debit": 250000000,
"closing_debit": 250000000
},
{
"account": "331",
"credit": 180000000,
"closing_credit": 180000000
},
{
"account": "4111",
"credit": 325000000,
"closing_credit": 325000000
},
{
"account": "4212",
"credit": 75000000,
"closing_credit": 75000000
},
{
"account": "511",
"debit": 700000000,
"credit": 700000000
},
{
"account": "632",
"debit": 500000000,
"credit": 500000000
},
{
"account": "642",
"debit": 101000000,
"credit": 101000000
},
{
"account": "8211",
"debit": 24000000,
"credit": 24000000
},
{
"account": "911",
"debit": 700000000,
"credit": 700000000
}
]
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-financial-report",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"company": "Công ty TNHH Demo", "period_end": "2026-12-31", "rows": [{"account": "111", "debit": 200000000, "closing_debit": 200000000}, {"account": "131", "debit": 150000000, "credit": 20000000, "closing_debit": 150000000, "closing_credit": 20000000}, {"account": "156", "debit": 250000000, "closing_debit": 250000000}, {"account": "331", "credit": 180000000, "closing_credit": 180000000}, {"account": "4111", "credit": 325000000, "closing_credit": 325000000}, {"account": "4212", "credit": 75000000, "closing_credit": 75000000}, {"account": "511", "debit": 700000000, "credit": 700000000}, {"account": "632", "debit": 500000000, "credit": 500000000}, {"account": "642", "debit": 101000000, "credit": 101000000}, {"account": "8211", "debit": 24000000, "credit": 24000000}, {"account": "911", "debit": 700000000, "credit": 700000000}]},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-financial-report');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"company":"Công ty TNHH Demo","period_end":"2026-12-31","rows":[{"account":"111","debit":200000000,"closing_debit":200000000},{"account":"131","debit":150000000,"credit":20000000,"closing_debit":150000000,"closing_credit":20000000},{"account":"156","debit":250000000,"closing_debit":250000000},{"account":"331","credit":180000000,"closing_credit":180000000},{"account":"4111","credit":325000000,"closing_credit":325000000},{"account":"4212","credit":75000000,"closing_credit":75000000},{"account":"511","debit":700000000,"credit":700000000},{"account":"632","debit":500000000,"credit":500000000},{"account":"642","debit":101000000,"credit":101000000},{"account":"8211","debit":24000000,"credit":24000000},{"account":"911","debit":700000000,"credit":700000000}]}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"company": "Công ty TNHH Demo",
"period_end": "2026-12-31",
"currency": "VND",
"standard": "Thông tư 99/2025/TT-BTC, Phụ lục IV (Mẫu B01-DN, B02-DN; doanh nghiệp đáp ứng giả định hoạt động liên tục)",
"valid": true,
"failed_checks": 0,
"checks": [
{
"check": "closing debit = closing credit",
"ok": true,
"debit": 600000000,
"credit": 600000000
},
{
"check": "total assets (280) = total liabilities and equity (440), closing",
"ok": true,
"assets": 600000000,
"liabilities_equity": 600000000
},
{
"check": "profit after tax (B02 line 60) = change in account 4212 (if no distributions this period)",
"ok": true,
"b02_60": 75000000,
"change_4212": 75000000,
"informational": true
}
],
"warnings": [
"131 has a credit balance: shown separately (line 312, advances from customers), not netted. The balances must be the sum per customer / supplier, not the net of the account."
],
"b01": [
{
"code": "100",
"name_vi": "A - TÀI SẢN NGẮN HẠN",
"name_en": "A - Current assets",
"closing": 600000000,
"opening": 0,
"formula": "110 + 120 + 130 + 140 + 150 + 160"
},
{
"code": "111",
"name_vi": "1. Tiền",
"name_en": "Cash",
"closing": 200000000,
"opening": 0
},
{
"code": "131",
"name_vi": "1. Phải thu ngắn hạn của khách hàng",
"name_en": "Trade receivables, short term",
"closing": 150000000,
"opening": 0
},
{
"code": "141",
"name_vi": "1. Hàng tồn kho",
"name_en": "Inventories",
"closing": 250000000,
"opening": 0
},
{
"code": "280",
"name_vi": "TỔNG CỘNG TÀI SẢN (280 = 100 + 200)",
"name_en": "TOTAL ASSETS",
"closing": 600000000,
"opening": 0,
"formula": "100 + 200"
},
{
"code": "311",
"name_vi": "1. Phải trả người bán ngắn hạn",
"name_en": "Trade payables, short term",
"closing": 180000000,
"opening": 0
},
{
"code": "312",
"name_vi": "2. Người mua trả tiền trước ngắn hạn",
"name_en": "Advances from customers, short term",
"closing": 20000000,
"opening": 0
},
{
"code": "411",
"name_vi": "1. Vốn góp của chủ sở hữu",
"name_en": "Owners' contributed capital",
"closing": 325000000,
"opening": 0
},
{
"code": "420b",
"name_vi": "- LNST chưa phân phối kỳ này",
"name_en": "of this period",
"closing": 75000000,
"opening": 0
},
{
"code": "440",
"name_vi": "TỔNG CỘNG NGUỒN VỐN (440 = 300 + 400)",
"name_en": "TOTAL LIABILITIES AND EQUITY",
"closing": 600000000,
"opening": 0,
"formula": "300 + 400"
}
],
"b02": [
{
"code": "01",
"name_vi": "1. Doanh thu bán hàng và cung cấp dịch vụ",
"amount": 700000000,
"source": "Phát sinh Có TK 511"
},
{
"code": "11",
"name_vi": "4. Giá vốn hàng bán",
"amount": 500000000,
"source": "Phát sinh Có TK 632 đối ứng Nợ TK 911"
},
{
"code": "26",
"name_vi": "10. Chi phí quản lý doanh nghiệp",
"amount": 101000000,
"source": "Phát sinh Có TK 642 đối ứng Nợ TK 911"
},
{
"code": "50",
"name_vi": "15. Tổng lợi nhuận kế toán trước thuế (50 = 30 + 40)",
"amount": 99000000,
"source": "50 = 30 + 40"
},
{
"code": "51",
"name_vi": "16. Chi phí thuế TNDN hiện hành",
"amount": 24000000,
"source": "Phát sinh Có TK 8211 đối ứng Nợ TK 911"
},
{
"code": "60",
"name_vi": "18. Lợi nhuận sau thuế thu nhập doanh nghiệp (60 = 50 - 51 - 52)",
"amount": 75000000,
"source": "60 = 50 - (51 + 52)"
}
],
"unmapped": [],
"reviewed": "2026-11-11",
"disclaimer": "Draft statements from the trial balance you sent; review by an accountant is required before filing."
}
Ứng dụng
- Lập dự thảo báo cáo năm từ file xuất của phần mềm kế toán
- Chuyển phần mềm kế toán nhỏ từ mẫu TT 200 sang TT 99
- Kiểm tra bảng cân đối của khách hàng trước khi kiểm toán
- Lập bảng cân đối quản trị hằng tháng
Hỏi đáp
TT 99/2025 có thay TT 200/2014 không?
Có, cho năm tài chính bắt đầu từ 01/01/2026. B01-DN bổ sung chỉ tiêu tài sản sinh học (150, 230), tài sản ngắn hạn khác chuyển sang mã 160; mã số chỉ tiêu ở đây theo mẫu của TT 99.
Vì sao 131, 331 không bù trừ?
TT 99 yêu cầu lấy tổng số dư Nợ chi tiết theo từng khách hàng vào phải thu và tổng số dư Có vào người mua trả trước. Hãy gửi cả closing_debit và closing_credit của tài khoản (cộng theo từng đối tượng).
Có hỗ trợ mẫu DN nhỏ (TT 133) không?
Chưa: hiện chỉ B01-DN và B02-DN theo TT 99 cho doanh nghiệp hoạt động liên tục. Chưa lập báo cáo lưu chuyển tiền tệ và thuyết minh.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.