Tính giá xuất kho FIFO, bình quân API
Tính giá xuất kho và tồn cuối kỳ theo FIFO, bình quân gia quyền cuối kỳ, bình quân di động hoặc đích danh, số chính xác, có sổ chi tiết từng phiếu.
Gửi các phiếu nhập, xuất trong kỳ dạng transactions (JSON, CSV hoặc XLSX): ngày date, loại type (receipt / issue, hoặc nhap / xuat), mã hàng item, số lượng quantity, đơn giá unit_cost hoặc thành tiền amount cho phiếu nhập, kèm tồn đầu kỳ opening theo mã hàng. Chọn phương pháp method: fifo (nhập trước xuất trước), weighted_average (bình quân gia quyền cuối kỳ: một đơn giá cho cả kỳ từ tồn đầu + toàn bộ nhập), moving_average (bình quân sau mỗi lần nhập) hoặc specific (thực tế đích danh theo lô lot).
Mọi phép tính dùng số nguyên (số lượng đến 6 chữ số thập phân, tiền theo đơn vị nhỏ nhất với decimals 0 cho VND hoặc 2 cho USD) nên không có sai số dấu phẩy động: giá trị mỗi lần xuất được làm tròn một lần, phần dư nằm lại trong kho, lần xuất cuối lấy toàn bộ giá trị còn lại. Kết quả có sổ chi tiết từng mã hàng theo kiểu thẻ kho S10-DN (số lượng, đơn giá, thành tiền, số dư lũy kế, các lớp FIFO đã dùng), tổng nhập, xuất, tồn cuối, các lớp FIFO còn lại và chênh lệch làm tròn với bình quân cuối kỳ. Xuất vượt tồn bị từ chối trừ khi gửi allow_negative=true.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
transactions | body | array | có | [{"date":"2026-01-05","type":"receipt","item":"A","quantity":200,"unit_cost":12000,"ref":"PN01"}, {"type":"issue","item":"A","quantity":150}]. Hoặc file / csv. | |
method | body|query | string | không | fifo | fifo, weighted_average, moving_average, specific. |
opening | body | array | không | Tồn đầu kỳ: [{"item":"A","quantity":100,"amount":1000000}]. | |
decimals | body|query | number | không | 0 | Số chữ số thập phân của tiền (0 với VND, 2 với USD). |
allow_negative | body|query | boolean | không | false | Cho phép xuất âm kho, tính theo giá nhập gần nhất. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/inventory-costing" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"method":"fifo","opening":[{"item":"A","quantity":100,"amount":1000000}],"transactions":[{"date":"2026-01-05","type":"receipt","item":"A","quantity":200,"unit_cost":12000,"ref":"PN01"},{"date":"2026-01-10","type":"issue","item":"A","quantity":150,"ref":"PX01"}]}'const res = await fetch('https://apibox.io.vn/v1/inventory-costing', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"method": "fifo",
"opening": [
{
"item": "A",
"quantity": 100,
"amount": 1000000
}
],
"transactions": [
{
"date": "2026-01-05",
"type": "receipt",
"item": "A",
"quantity": 200,
"unit_cost": 12000,
"ref": "PN01"
},
{
"date": "2026-01-10",
"type": "issue",
"item": "A",
"quantity": 150,
"ref": "PX01"
}
]
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/inventory-costing",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"method": "fifo", "opening": [{"item": "A", "quantity": 100, "amount": 1000000}], "transactions": [{"date": "2026-01-05", "type": "receipt", "item": "A", "quantity": 200, "unit_cost": 12000, "ref": "PN01"}, {"date": "2026-01-10", "type": "issue", "item": "A", "quantity": 150, "ref": "PX01"}]},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/inventory-costing');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"method":"fifo","opening":[{"item":"A","quantity":100,"amount":1000000}],"transactions":[{"date":"2026-01-05","type":"receipt","item":"A","quantity":200,"unit_cost":12000,"ref":"PN01"},{"date":"2026-01-10","type":"issue","item":"A","quantity":150,"ref":"PX01"}]}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"method": "fifo",
"decimals": 0,
"items": 1,
"transactions": 2,
"totals": {
"opening": 1000000,
"receipts": 2400000,
"issues_cost": 1600000,
"closing": 1800000
},
"results": [
{
"item": "A",
"opening": {
"quantity": 100,
"amount": 1000000
},
"receipts": {
"quantity": 200,
"amount": 2400000
},
"issues": {
"quantity": 150,
"amount": 1600000
},
"closing": {
"quantity": 150,
"amount": 1800000,
"unit_cost": 12000
},
"closing_layers": [
{
"from": "2026-01-05",
"quantity": 150,
"amount": 1800000,
"unit_cost": 12000
}
],
"ledger": [
{
"date": "2026-01-05",
"ref": "PN01",
"type": "receipt",
"quantity": 200,
"unit_cost": 12000,
"amount": 2400000,
"balance_quantity": 300,
"balance_amount": 3400000
},
{
"date": "2026-01-10",
"ref": "PX01",
"type": "issue",
"quantity": 150,
"unit_cost": 10666.6667,
"amount": 1600000,
"balance_quantity": 150,
"balance_amount": 1800000,
"layers": [
{
"from": "opening",
"quantity": 100,
"amount": 1000000
},
{
"from": "2026-01-05",
"quantity": 50,
"amount": 600000
}
]
}
]
}
],
"warnings": [],
"reviewed": "2026-11-11"
}
Ứng dụng
- Tính giá vốn hàng bán cho cửa hàng, shop thương mại điện tử
- Định giá hàng tồn kho cho báo cáo tháng
- So sánh FIFO và bình quân trước khi chọn chính sách
- Kiểm tra thẻ kho xuất từ phần mềm quản lý kho
Hỏi đáp
Vì sao không dùng số thực?
Tính bình quân lặp lại bằng số thực bị lệch từng phần nhỏ của đồng. API giữ số lượng và tiền dạng số nguyên, mỗi lần xuất chỉ làm tròn một lần, nên nhập − xuất luôn bằng giá trị tồn cuối.
Có hỗ trợ LIFO không?
Không. Chuẩn mực kế toán Việt Nam (VAS 02, TT 99/2025) không cho phép LIFO; API hỗ trợ FIFO, bình quân gia quyền và thực tế đích danh.
Các phiếu cùng ngày được xử lý theo thứ tự nào?
Theo thứ tự bạn gửi. Với bình quân cuối kỳ thứ tự không ảnh hưởng vì mọi phiếu xuất trong kỳ dùng cùng một đơn giá.
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.