Dự báo dòng tiền
Bạn sẽ học được
- Vì sao dự báo dòng tiền phải theo tuần, không theo tháng.
- Dựng bảng dự báo 13 tuần từ các khoản đã biết.
- Mô hình hoá thời điểm thu tiền từ phải thu.
- Đặt ngưỡng tiền mặt an toàn và phát hiện thiếu hụt sớm.
- Chạy kịch bản cơ sở và kịch bản xấu.
Khái niệm cốt lõi
Báo cáo tháng cho biết đã xảy ra gì. Dự báo tuần cho biết tuần nào sắp hết tiền.
Vì sao theo tuần:
- Lương trả một ngày cố định, thường chiếm phần lớn chi phí.
- Nhà cung cấp có điều khoản 30/45/60 ngày, dồn vào vài tuần.
- Thuế và bảo hiểm có hạn cố định.
- Một tháng có lãi vẫn có thể âm tiền ở tuần thứ hai.
Mười ba tuần là một quý — đủ xa để hành động, đủ gần để số liệu còn đáng tin.
Cấu trúc bảng dự báo
Số dư đầu kỳ
+ Tiền thu từ phải thu cũ
+ Tiền thu từ doanh thu mới
− Lương và bảo hiểm
− Nhà cung cấp
− Thuê và tiện ích
− Thuế
− Trả nợ và lãi
= Số dư cuối kỳChỉ tính dòng tiền thực. Không đưa doanh thu ghi nhận, khấu hao hay các khoản chưa chắc chắn vào.
Ví dụ bốn tuần đầu
Đơn vị: triệu đồng. Số dư đầu kỳ 500. Ngưỡng an toàn 100.
| Tuần | Thu | Lương | Nhà cung cấp | Thuê | Thuế | Trả nợ | Ròng | Số dư |
|---|---|---|---|---|---|---|---|---|
| 1 | 180 | 200 | 120 | 30 | 0 | 0 | −170 | 330 |
| 2 | 150 | 0 | 140 | 0 | 60 | 0 | −50 | 280 |
| 3 | 220 | 210 | 100 | 0 | 0 | 0 | −90 | 190 |
| 4 | 160 | 0 | 130 | 0 | 0 | 100 | −70 | 120 |
| 5 | 210 | 220 | 110 | 0 | 0 | 0 | −120 | 0 |
Tuần 5 chạm 0 — công ty không trả được lương nếu không làm gì. Nhưng nếu chỉ nhìn báo cáo tháng, tháng đó có thể vẫn có lãi.
Hành động có thể làm từ tuần 1, khi số dư còn 330: đẩy nhanh thu hồi, dời lịch nhà cung cấp, hoặc chuẩn bị hạn mức tín dụng.
Ước tính thời điểm thu tiền
Không phải hóa đơn nào cũng thu đúng hạn. Dùng đường cong thu tiền từ dữ liệu lịch sử:
| Thời điểm | Tỷ lệ thu được |
|---|---|
| Đúng hạn | 60% |
| Chậm 30 ngày | 25% |
| Chậm 60 ngày | 10% |
| Không thu được | 5% |
Với 1.000 triệu phải thu trong tháng:
- 600 triệu vào tuần đến hạn.
- 250 triệu vào khoảng 30 ngày sau.
- 100 triệu vào khoảng 60 ngày sau.
- 50 triệu dự phòng mất.
Dùng tỷ lệ của chính công ty. Nếu tỷ lệ thu đúng hạn đang giảm, dự báo phải phản ánh điều đó, không dùng con số cũ.
Truy vấn dựng bảng 13 tuần
WITH tuan AS (
SELECT generate_series(
date_trunc('week', CURRENT_DATE),
date_trunc('week', CURRENT_DATE) + INTERVAL '12 weeks',
INTERVAL '1 week'
)::date AS tuan
),
vao AS (
SELECT date_trunc('week', expected_date)::date AS tuan,
SUM(amount) AS tien_vao
FROM expected_collections
GROUP BY 1
),
ra AS (
SELECT date_trunc('week', due_date)::date AS tuan,
SUM(amount) AS tien_ra
FROM expected_payments
GROUP BY 1
)
SELECT
t.tuan,
COALESCE(v.tien_vao, 0) AS tien_vao,
COALESCE(r.tien_ra, 0) AS tien_ra,
COALESCE(v.tien_vao, 0) - COALESCE(r.tien_ra, 0) AS rong,
SUM(COALESCE(v.tien_vao, 0) - COALESCE(r.tien_ra, 0))
OVER (ORDER BY t.tuan) + 500000000 AS so_du_cuoi_tuan
FROM tuan t
LEFT JOIN vao v USING (tuan)
LEFT JOIN ra r USING (tuan)
ORDER BY t.tuan;Điểm quan trọng: generate_series tạo đủ 13 tuần kể cả tuần không có giao dịch. Nếu chỉ lấy từ bảng dự báo, các tuần trống sẽ biến mất và số dư cuối kỳ bị tính sai.
SUM(...) OVER (ORDER BY tuan) là tổng luỹ kế — chính là số dư cuối tuần khi cộng số dư đầu kỳ.
Ngưỡng an toàn và cờ thiếu hụt
WITH du_bao AS ( /* truy vấn trên */ )
SELECT
tuan,
so_du_cuoi_tuan,
CASE
WHEN so_du_cuoi_tuan < 0 THEN 'thieu_tien'
WHEN so_du_cuoi_tuan < 100000000 THEN 'duoi_nguong'
ELSE 'ok'
END AS trang_thai
FROM du_bao
ORDER BY tuan;Ngưỡng an toàn không phải 0. Đó là mức tiền tối thiểu để trả lương và các khoản bắt buộc trong hai tuần, cộng biên an toàn. Với công ty nhỏ, ngưỡng thường bằng một đến hai tháng chi phí cố định.
Kịch bản
Chạy ít nhất hai kịch bản:
Cơ sở: doanh thu theo kế hoạch, thu tiền theo đường cong lịch sử.
Xấu: doanh thu giảm 20%, thu tiền chậm thêm 15 ngày, không cắt chi phí.
Kịch bản xấu thường cho thấy thiếu tiền sớm hơn 3–5 tuần so với cơ sở.Nếu kịch bản xấu cho thấy thiếu tiền trong 8 tuần tới, cần hành động ngay: cắt chi phí không bắt buộc, đàm phán giãn nợ, đẩy nhanh thu hồi, hoặc chuẩn bị vay.
Cập nhật hằng tuần
Dự báo chỉ có giá trị khi được cập nhật:
- Thay số dư đầu kỳ bằng số thực.
- Điều chỉnh các khoản thu đã trễ.
- Thêm hợp đồng mới đã ký.
- Xem lại tuần gần nhất có đúng dự báo không.
Sai số dự báo tuần gần nhất là tín hiệu tốt nhất cho biết mô hình có đáng tin hay không.
Lỗi thường gặp
- Dự báo theo tháng: bỏ qua đỉnh chi theo tuần.
- Dùng doanh thu thay tiền thu: số dư bị thổi phồng.
- Giả định thu đúng hạn 100%: kịch bản đẹp không tưởng.
- Bỏ tuần không giao dịch: số dư luỹ kế sai.
- Không có ngưỡng an toàn: chỉ phát hiện khi đã âm.
- Chỉ chạy một kịch bản: không chuẩn bị cho biến động.
- Không cập nhật: dự báo tháng trước dùng cho tháng này.
- Trộn dồn tích và tiền mặt: hai cơ sở khác nhau.
Thực hành
- Dựng bảng bốn tuần từ số liệu ví dụ và xác định tuần thiếu tiền.
- Áp đường cong thu tiền cho 1.000 triệu phải thu.
- Viết truy vấn 13 tuần với
generate_series. - Thêm cờ trạng thái theo ngưỡng 100 triệu.
- Chạy kịch bản xấu với doanh thu giảm 20%.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách sửa |
|---|---|---|
| Hết tiền bất ngờ | Dự báo theo tháng | Chuyển sang tuần |
| Số dư dự báo quá cao | Dùng doanh thu | Dùng tiền thu thực |
| Thiếu tuần trong bảng | Không sinh đủ tuần | generate_series |
| Không thấy rủi ro | Chỉ một kịch bản | Chạy kịch bản xấu |
| Dự báo lệch xa | Không cập nhật | Cập nhật hằng tuần |
| Không kịp xoay | Không có ngưỡng an toàn | Đặt ngưỡng và cờ |
Tóm tắt
- Dự báo theo tuần vì chi tiêu dồn vào các tuần cụ thể.
- 13 tuần là khung phù hợp cho một quý.
- Ước tính thu tiền bằng đường cong lịch sử, không giả định đúng hạn.
- Luôn sinh đủ tuần và tính số dư luỹ kế.
- Đặt ngưỡng an toàn và chạy ít nhất hai kịch bản.
Use ← → to move between lessons